時間:2020-10-07來源:www.outletmksalestore.com作者:電腦系統城
主要是介紹unittest框架,有興趣的同學們可以移步去查閱
這里廢話少說,進入正題
我的思路是這樣的
1、先用django實現登陸、增加、刪除、查看4個接口
2、在excel定義好測試案例、然后讀取excel中的案例,然后把案例用unittest框架組裝和封裝
3、啟動django,執行測試案例
一、先跑通unittest到django的流程
1、先創建一個Django的項目
2、創建路由,這里我們使用二級路由
a、先復制工程目錄下的urls.py文件到app目錄下
b、修改工程目錄下的urls.py文件,定義一級路由
c、修改app目錄下的urls.py文件,設置二級路由,這里切記務必要刪除默認的admin這條路由
d、定義這條路由指向的視圖的函數
e、啟動django,這里我們使用9090端口啟動,因為我們的Jenkins端口用的是8080
E:\python\unittestForDjango>python manage.py runserver 9090
f、這里的是啟動成功的樣式,我圈住的告警可以忽略,因為這里Django的admin需要的,我們這里不會用到django的admin
g、打開瀏覽器訪問django,我們的一個簡單的Django項目已經跑通
3、在視圖函數中定義一個方法,這個方法分別處理GET請求和POST請求
a、定義視圖函數
這里通過這個參數告訴瀏覽器,我們返回的是JSON數據
?1 | return HttpResponse(result, content_type = "application/json;charset=utf-8" ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
def test_login(request): method = request.method.upper() if method = = "GET" : result = {} name = request.GET.get( "username" , None ) pwd = request.GET.get( "pwd" , None ) result[ "name" ] = name result[ "pwd" ] = pwd result = json.dumps(result) # return HttpResponse(result) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) else : result = {} name = request.POST.get( "username" , None ) pwd = request.POST.get( "pwd" , None ) result[ "name" ] = name result[ "pwd" ] = pwd result = json.dumps(result) return HttpResponse(result,content_type = "application/json;charset=utf-8" ) |
b、使用request模塊發起POST和GET請求
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#Auther Bob #--*--conding:utf-8 --*-- import requests import json class TestCase( object ): def __init__( self ,username,pwd,url): self .username = username self .pwd = pwd self .url = url def get( self ): # 發送get請求 url = self .url + "?username=" + str ( self .username) + "&" + "pwd=" + str ( self .pwd) res = requests.get(url = url) print (res.text, type (res.text)) def post( self ): # 發送post請求 data = { "username" : self .username, "pwd" : self .pwd } res = requests.post(url = self .url,data = data) print (res.text) if __name__ = = '__main__' : url = "http://127.0.0.1:9090/web/login/" username = "zhangsan" pwd = "123" t = TestCase(username,pwd,url) t.get() t.post() |
c、這里我們引入unittest框架,測試案例可以這么寫
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import unittest from test3 import test_request class TestDjango(unittest.TestCase): def setUp( self ): print ( "unittest框架的前置條件" ) def tearDown( self ): print ( "unittest框架的后置條件" ) def test_01( self ): url = "http://127.0.0.1:9090/web/login/" username = "zhangsan" pwd = "123" t = test_request.TestCase(url = url,username = username,pwd = pwd) def test_02( self ): url = "http://127.0.0.1:9090/web/login/" username = "zhangsan" pwd = "123" t = test_request.TestCase(url = url,username = username,pwd = pwd) t.post() if __name__ = = '__main__' : unittest.main(verbosity = 2 ) |
d、這里有重復代碼,我們可以利用unittest框架中的classmethod來解決,因為實例化一個測試類可以放在前置條件中
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import unittest from test3 import test_request class TestDjango(unittest.TestCase): @classmethod def setUpClass( cls ): url = "http://127.0.0.1:9090/web/login/" username = "zhangsan" pwd = "123" # 這里的t雖然是類變量,但是python的中的實例是可以用引用類變量的 cls .t = test_request.TestCase(url = url,username = username,pwd = pwd) def setUp( self ): print ( "unittest框架的前置條件" ) def tearDown( self ): print ( "unittest框架的后置條件" ) def test_01( self ): self .t.get() def test_02( self ): self .t.post() if __name__ = = '__main__' : unittest.main(verbosity = 2 ) |
e、在testcase中加入斷言
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import unittest from test3 import test_request class TestDjango(unittest.TestCase): @classmethod def setUpClass( cls ): url = "http://127.0.0.1:9090/web/login/" username = "zhangsan" pwd = "123" # 這里的t雖然是類變量,但是python的中的實例是可以用引用類變量的 cls .t = test_request.TestCase(url = url,username = username,pwd = pwd) def setUp( self ): print ( "unittest框架的前置條件" ) def tearDown( self ): print ( "unittest框架的后置條件" ) def test_01( self ): res = self .t.get() self .assertEqual( 200 ,res.status_code) def test_02( self ): res = self .t.post() self .assertEqual( 200 , res.status_code) if __name__ = = '__main__' : unittest.main(verbosity = 2 ) |
f、引入testsuite
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import unittest from unittest import TestLoader from test3 import test_unittest if __name__ = = '__main__' : suite = unittest.TestSuite() loader = TestLoader() test_cases1 = unittest.TestLoader().loadTestsFromModule(test_unittest) # 參數是一個模塊,會把這個模塊里的所有case加載進來 suite.addTests(test_cases1) runner = unittest.TextTestRunner(verbosity = 2 ) runner.run(suite) |
二、在django中設計接口
這里我們寫一個簡單的例子,設計一個用戶表,設計4個接口
接口1:登陸
接口2:增加用戶,需要用戶登陸
接口3:刪除用戶,需要用戶登陸
接口4:查詢用戶,不需要用戶登陸
1、先看登陸接口
a、登錄接口對應的url
下面是一級路由
?1 | url(r '^web/' , include( 'unittesstApp1.urls' )) |
下面是二級路由
?1 | url(r '^login/' , views.test_login), |
b、登錄接口的視圖函數
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
def test_login(request): method = request.method.upper() if method = = "GET" : returndict = { "code" : 200 , "error" : None } username = request.GET.get( "username" , None ) password = request.GET.get( "password" , None ) if username = = "admin" and password = = "admin123." : request.session[ "username" ] = username request.session[ "password" ] = password result = json.dumps(returndict) else : returndict[ "code" ] = 201 returndict[ "error" ] = "用戶名或者密碼錯誤" result = json.dumps(returndict) return HttpResponse(result,content_type = "application/json;charset=utf-8" ) |
這里我們用到了session來代替cookies
2、增加用戶接口
a、增加用戶對應的url
一級路由同登陸接口,下面是二級路由
?1 | url(r '^add/' , views.test_add), |
b、增加用戶接口對應的視圖函數,這里我們做了各種異常處理,且判斷了用戶是否登陸,也就是通過是否攜帶cookies來判斷
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
def test_add(request): method = request.method.upper() if method = = "POST" : returndict = { "code" : 200 , "error" : None } username = request.session.get( "username" , None ) password = request.session.get( "password" , None ) if username = = "admin" and password = = "admin123." : newusername = request.POST.get( "username" , None ) age = request.POST.get( "age" , None ) sex = request.POST.get( "sex" , None ) pwd = request.POST.get( "pwd" , None ) userinfo = [newusername,age,sex,pwd] print (userinfo) if not "None" in userinfo and all (userinfo): if models.userInfo.objects. filter (username = userinfo[ 0 ]).exists(): returndict[ "error" ] = "{username} is exists,please add a new username" . format (username = username) returndict[ "code" ] = 201 result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) else : models.userInfo.objects.create( username = newusername, age = age, sex = sex, pwd = pwd ) if models.userInfo.objects. filter (username = userinfo[ 0 ]).exists(): result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) else : returndict[ "error" ] = "{username} is error,please retry add" . format (username = username) returndict[ "code" ] = 201 result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) else : returndict[ "error" ] = "must input username,age,sex,pwd" returndict[ "code" ] = 201 result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) else : returndict = { "code" : 201 , "error" : "用戶名或者密碼錯誤" } result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) |
3、刪除接口
a、刪除用戶對應的url
一級路由同登陸接口,這里只看二級路由
?1 | url(r '^del/' , views.del_user), |
b、刪除接口對應的視圖函數,這里我做了各種異常處理,也做了用戶是否登陸的檢測,也是通過檢測cookies來實現
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
def del_user(request): method = request.method.upper() if method = = "POST" : returndict = { "code" : 200 , "error" : None } username = request.session.get( "username" , None ) password = request.session.get( "password" , None ) if username = = "admin" and password = = "admin123." : delusername = request.POST.get( "username" , None ) print (delusername) if delusername ! = None : if models.userInfo.objects. filter (username = delusername).exists(): delid = models.userInfo.objects.get(username = delusername). id print (delid) try : models.userInfo.objects.get( id = delid).delete() except Exception as e: returndict = { "code" : 201 , "error" : e} result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) else : result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) else : returndict = { "code" : 201 , "error" : "{username} is not exists" . format (username = delusername)} result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) else : returndict = { "code" : 201 , "error" : "you must input a username" } result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) else : returndict = { "code" : 201 , "error" : "username or password is error" } result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) |
4、查看接口
a、查看接口對應的url
一級路由同登陸接口url,下面是二級路由
?1 | url(r '^scan/' , views.get_user), |
b、查看接口對應的url,這里我們不檢測用戶是否登陸,直接把查到的數據返回給客戶,如果查詢報錯,才返回錯誤的信息
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
def get_user(request): method = request.method.upper() returndict = { "code" : 200 , "userinfo" : None } if method = = "GET" : try : alluser = models.userInfo.objects. all ().values_list( "username" ) alluserlist = [] for i in alluser: alluserlist.append(i) returndict[ "userinfo" ] = alluserlist except Exception as e: returndict[ "code" ] = "201" returndict[ "error" ] = e finally : result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) |
5、設計刪除數據庫中所有的接口,用來做后置條件
?1 2 3 4 5 6 7 8 9 10 11 |
def del_alluser(request): method = request.method.upper() if method = = "POST" : returndict = { "code" : 200 , "error" : None } username = request.session.get( "username" , None ) password = request.session.get( "password" , None ) if username = = "admin" and password = = "admin123." : if models.userInfo.objects. all ().count() > 0 : models.userInfo.objects. all ().delete() result = json.dumps(returndict) return HttpResponse(result, content_type = "application/json;charset=utf-8" ) |
三、案例準備
1、在excel中寫好接口測試案例
2、定義常量,也就是每列對應的值
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
class TestConfig( object ): def __init__( self ): self .name = 0 self .url = 1 self .method = 2 self .cookies = 3 self .data = 4 self .res = 5 self . exec = 6 def getname( self ): return self .name def geturl( self ): return self .url def getmethod( self ): return self .method def getcookies( self ): return self .cookies def getdata( self ): return self .data def getres( self ): return self .res def getexec( self ): return self . exec |
3、定義讀取excel的類,因為我要從excel中讀取案例
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import xlrd import os class testexcel( object ): casepath = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "case" , "testcase.xlsx" ) def __init__( self ): self .casepath = testexcel.casepath self .execlobj = xlrd.open_workbook( self .casepath) self .sheetobj = self .execlobj.sheet_by_index( 0 ) def get_excel_data( self ,row,col): max_row = self .get_excel_max_row() max_col = self .get_excel_max_col() if row > max_row - 1 or col > max_col - 1 : return False else : data = self .sheetobj.cell_value(row,col) return data def get_excel_max_row( self ): r_num = self .sheetobj.nrows return r_num def get_excel_max_col( self ): c_num = self .sheetobj.ncols return c_num |
4、定義我們的接口函數
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
import requests import json class TestLogin( object ): def __init__( self ,username,pwd,url): self .username = username self .pwd = pwd self .url = url def get( self ): # 發送get請求 url = self .url + "?username=" + str ( self .username) + "&" + "password=" + str ( self .pwd) res = requests.get(url = url, headers = { "user-agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }) # print(json.loads(res.text)) return res def post( self ): # 發送post請求 data = { "username" : self .username, "pwd" : self .pwd } res = requests.post(url = self .url, data = data, headers = { "user-agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, ) # print(res.text) return res class TestAdd( object ): def __init__( self ,username,age,sex,pwd,cookies,url): self .username = username self .age = age self .sex = sex self .pwd = pwd self .url = url self .cookies = cookies def post( self ): # 發送post請求 data = { "username" : self .username, "pwd" : self .pwd, "age" : self .age, "sex" : self .sex } res = requests.post(url = self .url, data = data, headers = { "user-agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, cookies = self .cookies, ) # print(res.text) return res class Testdel( object ): def __init__( self , username,cookies,url): self .username = username self .cookies = cookies self .url = url def post( self ): # 發送post請求 data = { "username" : self .username, } res = requests.post(url = self .url, data = data, headers = { "user-agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, cookies = self .cookies, ) # print(res.text) return res class Testscan( object ): def __init__( self ,url): self .url = url def get( self ): res = requests.get(url = self .url, headers = { "user-agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, cookies = None , ) return res |
5、定義測試案例
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 |
import unittest from test3 import test_request import json from util import test_json from util import test_excel from case import testconfig import requests class TestDjango(unittest.TestCase): @classmethod def setUpClass( cls ): cls .alldata = test_json.testjson() @classmethod def tearDownClass( cls ): url = "http://127.0.0.1:9090/web/login/" + "?username=" + "admin" + "&" + "password=" + "admin123." res = requests.get(url = url, headers = { "user-agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }) url = "http://127.0.0.1:9090/web/delall/" requests.post(url = url, headers = { "user-agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }, cookies = res.cookies ) def get_cookies( self ): url = "http://127.0.0.1:9090/web/login/" + "?username=" + "admin" + "&" + "password=" + "admin123." res = requests.get(url = url, headers = { "user-agent" : "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" }) # print(json.loads(res.text)) return res.cookies @unittest .skip( 'noexec' ) def test_login_ok( self ): row = 1 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row,configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) data = json.loads(data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "GET" : testobj = test_request.TestLogin(data[ "username" ],data[ "pwd" ],url) resobj = testobj.get() self .assertEqual( int (res),json.loads(resobj.text)[ "code" ]) @unittest .skip( 'noexec' ) def test_login_pwd_error( self ): row = 2 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row,configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) data = json.loads(data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "GET" : testobj = test_request.TestLogin(data[ "username" ],data[ "pwd" ],url) resobj = testobj.get() self .assertEqual( int (res),json.loads(resobj.text)[ "code" ]) @unittest .skip( 'noexec' ) def test_login_user_error( self ): row = 3 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row,configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) data = json.loads(data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "GET" : testobj = test_request.TestLogin(data[ "username" ],data[ "pwd" ],url) resobj = testobj.get() self .assertEqual( int (res),json.loads(resobj.text)[ "code" ]) @unittest .skip( 'noexec' ) def test_user_pwd_error( self ): row = 4 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row,configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) data = json.loads(data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "GET" : testobj = test_request.TestLogin(data[ "username" ],data[ "pwd" ],url) resobj = testobj.get() self .assertEqual( int (res),json.loads(resobj.text)[ "code" ]) @unittest .skip( 'noexec' ) def test_insert_ok( self ): row = 5 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row, configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) data = json.loads(data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "POST" : testobj = test_request.TestAdd(data[ "username" ], data[ "age" ],data[ "sex" ], data[ "pwd" ],cookies,url) resobj = testobj.post() print (json.loads(resobj.text)) self .assertEqual( int (res), json.loads(resobj.text)[ "code" ]) @unittest .skip( 'noexec' ) def test_insert_nologin( self ): row = 6 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row, configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) data = json.loads(data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "POST" : testobj = test_request.TestAdd(data[ "username" ], data[ "age" ],data[ "sex" ], data[ "pwd" ],cookies,url) resobj = testobj.post() print (json.loads(resobj.text)) self .assertEqual( int (res), json.loads(resobj.text)[ "code" ]) @unittest .skip( "noexec" ) def test_insert_user_error( self ): row = 7 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row, configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) data = json.loads(data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "POST" : testobj = test_request.TestAdd(data.get( "username" , None ), data.get( "age" , None ), data.get( "sex" , None ), data.get( "pwd" , None ), cookies, url) resobj = testobj.post() print (json.loads(resobj.text)) self .assertEqual( int (res), json.loads(resobj.text)[ "code" ]) @unittest .skip( 'no exec' ) def test_insert_pwd_error( self ): row = 8 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row, configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) data = json.loads(data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "POST" : testobj = test_request.TestAdd(data.get( "username" , None ), data.get( "age" , None ), data.get( "sex" , None ), data.get( "pwd" , None ), cookies, url) resobj = testobj.post() print (json.loads(resobj.text)) self .assertEqual( int (res), json.loads(resobj.text)[ "code" ]) @unittest .skip( "no exec" ) def test_insert_sex_error( self ): row = 9 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row, configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) print (data) data = json.loads(data) print (data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "POST" : testobj = test_request.TestAdd(data.get( "username" , None ), data.get( "age" , None ), data.get( "sex" , None ), data.get( "pwd" , None ), cookies, url) resobj = testobj.post() print (json.loads(resobj.text)) self .assertEqual( int (res), json.loads(resobj.text)[ "code" ]) @unittest .skip( 'no exec' ) def test_insert_age_error( self ): row = 10 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row, configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) print (data) data = json.loads(data) print (data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "POST" : testobj = test_request.TestAdd(data.get( "username" , None ), data.get( "age" , None ), data.get( "sex" , None ), data.get( "pwd" , None ), cookies, url) resobj = testobj.post() print (resobj.text) print (json.loads(resobj.text)) self .assertEqual( int (res), json.loads(resobj.text)[ "code" ]) @unittest .skip( 'no exec' ) def test_insert_user_exist( self ): row = 11 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row, configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) print (data) data = json.loads(data) print (data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "POST" : testobj = test_request.TestAdd(data.get( "username" , None ), data.get( "age" , None ), data.get( "sex" , None ), data.get( "pwd" , None ), cookies, url) resobj = testobj.post() print (resobj.text) print (json.loads(resobj.text)) self .assertEqual( int (res), json.loads(resobj.text)[ "code" ]) def test_get_user( self ): row = 12 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row, configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "POST" : testobj = test_request.Testscan(url) resobj = testobj.get() # print(resobj.text print (json.loads(resobj.text)) self .assertEqual( int (res), json.loads(resobj.text)[ "code" ]) @unittest .skip( 'no exec' ) def test_del_user( self ): row = 13 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row, configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) print (data) data = json.loads(data) print (data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "POST" : testobj = test_request.Testdel(data.get( "username" , None ),cookies, url) resobj = testobj.post() print (resobj.text) print (json.loads(resobj.text)) self .assertEqual( int (res), json.loads(resobj.text)[ "code" ]) def test_del_noexistuser( self ): row = 14 configobj = testconfig.TestConfig() excelobj = test_excel.testexcel() execstatus = excelobj.get_excel_data(row, configobj.getexec()) if execstatus = = "YES" : cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies()) if cookiesstatus = = "YES" : cookies = self .get_cookies() else : cookies = None data = excelobj.get_excel_data(row, configobj.getdata()) print (data) data = json.loads(data) print (data) url = excelobj.get_excel_data(row, configobj.geturl()) res = excelobj.get_excel_data(row, configobj.getres()) method = excelobj.get_excel_data(row, configobj.getmethod()) if method = = "POST" : testobj = test_request.Testdel(data.get( "username" , None ),cookies, url) resobj = testobj.post() print (resobj.text) print (json.loads(resobj.text)) self .assertEqual( int (res), json.loads(resobj.text)[ "code" ]) |
6、引入unittest的suit,組織案例
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import unittest from unittest import TestLoader from test3 import test_unittest if __name__ = = '__main__' : suite = unittest.TestSuite() loader = TestLoader() test_cases1 = unittest.TestLoader().loadTestsFromModule(test_unittest) # 參數是一個模塊,會把這個模塊里的所有case加載進來 suite.addTests(test_cases1) runner = unittest.TextTestRunner(verbosity = 2 ) runner.run(suite) |
四、執行案例
1、啟動django
E:\python\unittestForDjango>python manage.py runserver 9090
Performing system checks...System check identified no issues (0 silenced).
October 19, 2019 - 22:46:42
Django version 1.11.7, using settings 'unittestForDjango.settings'
Starting development server at http://127.0.0.1:9090/
Quit the server with CTRL-BREAK
2、執行測試套件
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
test_del_noexistuser (test3.test_unittest.TestDjango) ... { "username" : "test1" } { 'username' : 'test1' } ok test_del_user (test3.test_unittest.TestDjango) ... skipped 'no exec' test_get_user (test3.test_unittest.TestDjango) ... { "code" : 201 , "error" : "test1 is not exists" } { 'code' : 201 , 'error' : 'test1 is not exists' } { 'code' : 200 , 'userinfo' : []} ok test_insert_age_error (test3.test_unittest.TestDjango) ... skipped 'no exec' test_insert_nologin (test3.test_unittest.TestDjango) ... skipped 'noexec' test_insert_ok (test3.test_unittest.TestDjango) ... skipped 'noexec' test_insert_pwd_error (test3.test_unittest.TestDjango) ... skipped 'no exec' test_insert_sex_error (test3.test_unittest.TestDjango) ... skipped 'no exec' test_insert_user_error (test3.test_unittest.TestDjango) ... skipped 'noexec' test_insert_user_exist (test3.test_unittest.TestDjango) ... skipped 'no exec' test_login_ok (test3.test_unittest.TestDjango) ... skipped 'noexec' test_login_pwd_error (test3.test_unittest.TestDjango) ... skipped 'noexec' test_login_user_error (test3.test_unittest.TestDjango) ... skipped 'noexec' test_user_pwd_error (test3.test_unittest.TestDjango) ... skipped 'noexec' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ran 14 tests in 1.466s OK (skipped = 12 ) |
到此這篇關于python自動化測試三部曲之request+django實現接口測試的文章就介紹到這了,更多相關request django 接口測試內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
2022-03-01
PHP如何從txt文件中讀取數據詳解2022-03-01
分享5個方便好用的Python自動化腳本2021-03-29
Python中pycharm編輯器界面風格修改方法