电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python自動化測試三部曲之request+django實現接口測試

瀏覽:61日期:2022-07-28 15:02:38

國慶期間準備寫三篇博客,介紹和總結下接口測試,由于國慶期間帶娃,沒有按照計劃完成,今天才完成第二篇,慚愧慚愧。

這里我第一篇博客的地址:https://www.jb51.net/article/197004.htm,主要是介紹unittest框架,有興趣的同學們可以移步去查閱

這里廢話少說,進入正題

我的思路是這樣的

1、先用django實現登陸、增加、刪除、查看4個接口

2、在excel定義好測試案例、然后讀取excel中的案例,然后把案例用unittest框架組裝和封裝

3、啟動django,執行測試案例

一、先跑通unittest到django的流程

1、先創建一個Django的項目

python自動化測試三部曲之request+django實現接口測試

2、創建路由,這里我們使用二級路由

a、先復制工程目錄下的urls.py文件到app目錄下

python自動化測試三部曲之request+django實現接口測試

b、修改工程目錄下的urls.py文件,定義一級路由

python自動化測試三部曲之request+django實現接口測試

c、修改app目錄下的urls.py文件,設置二級路由,這里切記務必要刪除默認的admin這條路由

python自動化測試三部曲之request+django實現接口測試

d、定義這條路由指向的視圖的函數

python自動化測試三部曲之request+django實現接口測試

e、啟動django,這里我們使用9090端口啟動,因為我們的Jenkins端口用的是8080

E:pythonunittestForDjango>python manage.py runserver 9090

f、這里的是啟動成功的樣式,我圈住的告警可以忽略,因為這里Django的admin需要的,我們這里不會用到django的admin

python自動化測試三部曲之request+django實現接口測試

g、打開瀏覽器訪問django,我們的一個簡單的Django項目已經跑通

python自動化測試三部曲之request+django實現接口測試

3、在視圖函數中定義一個方法,這個方法分別處理GET請求和POST請求

a、定義視圖函數

這里通過這個參數告訴瀏覽器,我們返回的是JSON數據

return HttpResponse(result, content_type='application/json;charset=utf-8')

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請求

#Auther Bob#--*--conding:utf-8 --*--import requestsimport jsonclass 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框架,測試案例可以這么寫

import unittestfrom test3 import test_requestclass 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來解決,因為實例化一個測試類可以放在前置條件中

import unittestfrom test3 import test_requestclass 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中加入斷言

import unittestfrom test3 import test_requestclass 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

import unittestfrom unittest import TestLoaderfrom test3 import test_unittestif __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

下面是一級路由

url(r’^web/’, include(’unittesstApp1.urls’))

下面是二級路由

url(r’^login/’, views.test_login),

b、登錄接口的視圖函數

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

一級路由同登陸接口,下面是二級路由

url(r’^add/’, views.test_add),

b、增加用戶接口對應的視圖函數,這里我們做了各種異常處理,且判斷了用戶是否登陸,也就是通過是否攜帶cookies來判斷

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'] = 201result = 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

一級路由同登陸接口,這里只看二級路由

url(r’^del/’, views.del_user),

b、刪除接口對應的視圖函數,這里我做了各種異常處理,也做了用戶是否登陸的檢測,也是通過檢測cookies來實現

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,下面是二級路由

url(r’^scan/’, views.get_user),

b、查看接口對應的url,這里我們不檢測用戶是否登陸,直接把查到的數據返回給客戶,如果查詢報錯,才返回錯誤的信息

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、設計刪除數據庫中所有的接口,用來做后置條件

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中寫好接口測試案例

python自動化測試三部曲之request+django實現接口測試

2、定義常量,也就是每列對應的值

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中讀取案例

import xlrdimport osclass 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、定義我們的接口函數

import requestsimport jsonclass 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 resclass 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 resclass 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 resclass 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、定義測試案例

import unittestfrom test3 import test_requestimport jsonfrom util import test_jsonfrom util import test_excelfrom case import testconfigimport requestsclass 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.textprint(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,組織案例

import unittestfrom unittest import TestLoaderfrom test3 import test_unittestif __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:pythonunittestForDjango>python manage.py runserver 9090Performing system checks...

System check identified no issues (0 silenced).October 19, 2019 - 22:46:42Django 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、執行測試套件

test_del_noexistuser (test3.test_unittest.TestDjango) ... {'username':'test1'}{’username’: ’test1’}oktest_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’: []}oktest_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.466sOK (skipped=12)

到此這篇關于python自動化測試三部曲之request+django實現接口測試的文章就介紹到這了,更多相關request django 接口測試內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 玻璃钢格栅盖板|玻璃钢盖板|玻璃钢格栅板|树篦子-长沙川皖玻璃钢制品有限公司 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 深圳货架厂家_金丽声精品货架_广东金丽声展示设备有限公司官网 | 大学食堂装修设计_公司餐厅效果图_工厂食堂改造_迈普装饰 | 螺杆泵_中成泵业| 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 热处理炉-退火炉-回火炉设备厂家-丹阳市电炉厂有限公司 | 偏心半球阀-电动偏心半球阀-调流调压阀-旋球阀-上欧阀门有限公司 | 铆钉机|旋铆机|东莞旋铆机厂家|鸿佰专业生产气压/油压/自动铆钉机 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 六维力传感器_六分量力传感器_模腔压力传感器-南京数智微传感科技有限公司 | 移动厕所租赁|移动卫生间|上海移动厕所租赁-家瑞租赁 | 尾轮组_头轮组_矿用刮板_厢式刮板机_铸石刮板机厂家-双驰机械 | 小型铜米机-干式铜米机-杂线全自动铜米机-河南鑫世昌机械制造有限公司 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 | 锂离子电池厂家-山东中信迪生电源 | 紫外可见光分光度计-紫外分光度计-分光光度仪-屹谱仪器制造(上海)有限公司 | 冷油器,取样冷却器,热力除氧器-连云港振辉机械设备有限公司 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 罗氏牛血清白蛋白,罗氏己糖激酶-上海嵘崴达实业有限公司 | 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 快速门厂家批发_PVC快速卷帘门_高速门_高速卷帘门-广州万盛门业 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 天津散热器_天津暖气片_天津安尼威尔散热器制造有限公司 | 棕刚玉_白刚玉_铝酸钙-锐石新材料 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 南京和瑞包装有限公司| 汕头市盛大文化传播有限公司,www.11400.cc | 铝箔-铝板-花纹铝板-铝型材-铝棒管-上海百亚金属材料有限公司 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 消电检公司,消电检价格,北京消电检报告-北京设施检测公司-亿杰(北京)消防工程有限公司 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | SMC-SMC电磁阀-日本SMC气缸-SMC气动元件展示网 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 济南轻型钢结构/济南铁艺护栏/济南铁艺大门-济南燕翔铁艺制品有限公司 | 超声波清洗机_细胞破碎仪_实验室超声仪器_恒温水浴-广东洁盟深那仪器 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 |