python+requests+unittest API介面測試,requestsunittest
黑熊再網上尋找了下介面測試相關的資料,大都重點是以資料驅動的形式,將用例維護在文本或表格中,而沒有說明怎麼樣去產生想要的用例,
問題:
測試介面時,比如參數a,b,c,我要先測a參數,有(不傳,為空白,整形,浮點,字串,object,過短,超長,sql注入)這些情況,其中一種情況就是一條用例,同時要保證b,c的正確,確保a的測試不受b,c參數的錯誤影響
解決思路:
符合介面規範的參數可以手動去填寫,或者準備在程式碼程式庫中。那些不符合規範的參數(不傳,為空白,整形,浮點,字串,object,過短,超長,sql注入)也可以準備在庫中作為常量反覆使用
主要實現的功能點:
1.api參數整理到dict中,方便組合參數產生用例
2.對產生的用例進行迴圈執行
3.封裝些許代碼便於使用和維護
源碼分析:
canshuxinxi.py檔案用來存放api介面資訊。以dict形式存放,這樣就可以API_ALL['登入介面'][url]這種方式去取,看起來較直觀,知道取得是哪個介面的那部分資訊。
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2017-06-09 14:09 4 # canshuxinxi.py 5 6 # 介面資訊 7 API_ALL = { 8 '登入介面': { 9 'number': '1',10 'url': 'http://www.baidu.com',11 'leixing': 'post',12 'head': {13 'aa': 'bb',14 'cc': 'dd',15 },16 'canshu': {17 'username': 'Wbfxs001',18 'password': '111111Qq',19 'grant_type': 'password',20 },21 'qiwang': {22 'code': 200,23 'name': 'Wbfxs001',24 },25 },26 27 '退出介面': {28 'number': '1',29 'url': 'http://www.baidu.com',30 'leixing': 'get',31 'canshu': {32 'username': 'Wbfxs001',33 'password': '111111Qq',34 'grant_type': 'password',35 }36 }37 }
changliang.py檔案用來存非常規(可能會讓介面響應異常)參數,同理也是存放在dict中,方便維護,比如以後要加新的sql注入程式碼片段,可以直接在後面添加
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2017-06-09 14:09 4 # changliang.py 5 6 # 常用參數不傳,為空白,整形,浮點,字串,object,過短,超長,sql注入 7 objects1 = 'xxxx' 8 objects2 = 'ssss' 9 10 ZHCS = {11 '為空白': [''],12 '整形': [10, 23, 44, 88, 99],13 '浮點': [1.11, 2.342, -1.03],14 '字串': ['aaaa', 'bbbb', 'cccc','dddd'],15 'object': [objects1, objects2],16 '過短': ['1', '0'],17 '超長': ['11111111111111111111111111111111111111111111111'],18 'sql注入': [';and 1=1 ;and 1=2', ";and (select count(*) from sysobjects)>0 mssql", ";and 1=(select IS_SRVROLEMEMBER('sysadmin'));--"],19 }
# gongju.py作為工具類,下面方法進行了封裝,方便調用。實現了對參數進行組合,生產不同組合的dict類型的參數,並將dict參數儲存到list中,方便取用。
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2017-06-09 14:11 4 # gongju.py 5 6 # 產生不同組合的參數 7 8 class gj(): 9 10 def listalls(self, csTrue, csFalse):11 fzgcs = [] # 得到cycanshu的key,將所有非正規參數放在一個list中12 listall = [] # 儲存參數dict 為 list13 zhcs = dict(csTrue)14 listall.append(csTrue)15 aaa = list(csFalse.keys())16 for i in aaa:17 bbb = csFalse[i] # 得到具體參數list18 for k in bbb:19 fzgcs.append(k) # 便利每一個參數加入fzgcs列表20 21 zhcskey = list(zhcs.keys()) # 拿到將要進行組合的參數22 for i in zhcskey:23 a = zhcs[i] # 保留原有的參數值,下面替換完後複原正確參數24 for k in fzgcs:25 zhcs[i] = k26 listall.append(str(zhcs))27 # 迴圈完後複原正確參數28 zhcs[i] = a29 return listall
jiaoben.py檔案作為指令碼類,用來對組合好的參數進行迴圈執行,依次帶入組合參數請求。(只做了請求和列印響應資訊,可再加入對響應結果斷言)
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2017-06-09 14:22 4 # jiaoben.py 5 6 from changliang import ZHCS 7 from canshuxinxi import API_ALL 8 from gongju import gj 9 import requests10 # 指令碼類,組合工具參數進行請求11 gj = gj()12 def jball():13 apikeys = API_ALL.keys()14 print(apikeys)15 for key in apikeys:16 apiname = key17 url = API_ALL[key]['url']18 number = API_ALL[key]['number']19 leixin = API_ALL[key]['leixing']20 canshus = gj.listalls(API_ALL[key]['canshu'], ZHCS)21 if leixin == 'post':22 print("======="+" api名稱:"+apiname+"=======")23 for cs in canshus:24 mp = requests.post(url=url, data=cs)25 fhcode = str(mp.status_code)26 xysj = str(mp.elapsed.microseconds)27 print("=響應=api編號:"+number+" 響應code:"+fhcode+" 回應時間:"+xysj)28 if leixin == 'get':29 print("======="+" api名稱:"+apiname+"=======")30 for cs in canshus:31 mp = requests.get(url=url, data=cs)32 fhcode = str(mp.status_code)33 xysj = str(mp.elapsed.microseconds)34 print("=響應=api編號:"+number+" 響應code:"+fhcode+" 回應時間:"+xysj)35 jball()
tesone.py檔案作為用例執行檔案,熟悉unittest架構的都清楚其中的原理,就不做多介紹,黑熊主要用來控制指令碼的執行,結合了unittest架構後,方便後續的擴充。
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2017-06-09 8:53 4 # tesone.py 5 6 import requests 7 import unittest 8 import time 9 from jiaoben import jball10 class testclassone(unittest.TestCase):11 def setUp(self):12 print(111)13 pass14 def test_1(self):15 jball() # 執行指令碼16 pass17 def tearDown(self):18 print(333)19 pass20 21 22 if __name__ == '__main__':23 unittest.main()
最後附上用例執行後的:
結語:
介面測試涉及的東西還真不少,也只能一步一個腳印去探索和學習,期間感謝@我去熱飯 飯哥的細心指導,給予黑熊莫大的協助,謝謝!同時也歡迎道友們一起來交流,黑熊QQ:915069792
為什麼選擇?
有的人喜歡創造世界,他們做了程式員
有的人喜歡拯救世界,他們做了測試員