點點在網上查找了下接口測試相關的資料,大都重點是以數據驅動的形式,將用例維護在文本或表格中,而沒有說明怎麼樣去生成想要的用例,python
問題:程序員
測試接口時,好比參數a,b,c,我要先測a參數,有(不傳,爲空,整形,浮點,字符串,object,太短,超長,sql注入)這些狀況,其中一種狀況就是一條用例,同時要保證b,c的正確,確保a的測試不受b,c參數的錯誤影響sql
解決思路:api
符合接口規範的參數能夠手動去填寫,或者準備在代碼庫中。那些不符合規範的參數(不傳,爲空,整形,浮點,字符串,object,太短,超長,sql注入)也能夠準備在庫中做爲常量反覆使用app
主要實現的功能點:框架
1.api參數整理到dict中,方便組合參數生成用例工具
2.對生成的用例進行循環執行源碼分析
3.封裝些許代碼便於使用和維護post
源碼分析:測試
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 爲 list 13 zhcs = dict(csTrue) 14 listall.append(csTrue) 15 aaa = list(csFalse.keys()) 16 for i in aaa: 17 bbb = csFalse[i] # 獲得具體參數list 18 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] = k 26 listall.append(str(zhcs)) 27 # 循環完後復原正確參數 28 zhcs[i] = a 29 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 requests 10 # 腳本類,組合工具參數進行請求 11 gj = gj() 12 def jball(): 13 apikeys = API_ALL.keys() 14 print(apikeys) 15 for key in apikeys: 16 apiname = key 17 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 jball 10 class testclassone(unittest.TestCase): 11 def setUp(self): 12 print(111) 13 pass 14 def test_1(self): 15 jball() # 執行腳本 16 pass 17 def tearDown(self): 18 print(333) 19 pass 20 21 22 if __name__ == '__main__': 23 unittest.main()
最後附上用例執行後的效果圖:
結語:
期間感謝@我去熱飯 飯哥的細心指導,給予點點莫大的幫助,謝謝!
爲何選擇?
有的人喜歡創造世界,他們作了程序員
有的人喜歡拯救世界,他們作了測試員