我在網上查找了下接口測試相關的資料,大都重點是以數據驅動的形式,將用例維護在文本或表格中,而沒有說明怎么樣去生成想要的用例,
問題:
測試接口時,比如參數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
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
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017-06-09 14:09 # canshuxinxi.py # 接口信息 API_ALL = { '登錄接口': { 'number': '1', 'url': 'http://www.baidu.com', 'leixing': 'post', 'head': { 'aa': 'bb', 'cc': 'dd', }, 'canshu': { 'username': 'Wbfxs001', 'password': '111111Qq', 'grant_type': 'password', }, 'qiwang': { 'code': 200, 'name': 'Wbfxs001', }, }, '退出接口': { 'number': '1', 'url': 'http://www.baidu.com', 'leixing': 'get', 'canshu': { 'username': 'Wbfxs001', 'password': '111111Qq', 'grant_type': 'password', } } } |
changliang.py文件用來存非常規(可能會讓接口響應異常)參數,同理也是存放在dict中,方便維護,比如以后要加新的sql注入代碼段,可以直接在后面添加
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017-06-09 14:09 # changliang.py # 常用參數不傳,為空,整形,浮點,字符串,object,過短,超長,sql注入 objects1 = 'xxxx' objects2 = 'ssss' ZHCS = { '為空': [''], '整形': [10, 23, 44, 88, 99], '浮點': [1.11, 2.342, -1.03], '字符串': ['aaaa', 'bbbb', 'cccc','dddd'], 'object': [objects1, objects2], '過短': ['1', '0'], '超長': ['11111111111111111111111111111111111111111111111'], 'sql注入': [';and 1=1 ;and 1=2', ";and (select count(*) from sysobjects)>0 mssql", ";and 1=(select IS_SRVROLEMEMBER('sysadmin'));--"], } |
# gongju.py作為工具類,下面方法進行了封裝,方便調用。實現了對參數進行組合,生產不同組合的dict類型的參數,并將dict參數保存到list中,方便取用。
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
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017-06-09 14:11 # gongju.py # 生成不同組合的參數 class gj(): def listalls(self, csTrue, csFalse): fzgcs = [] # 得到cycanshu的key,將所有非正規參數放在一個list中 listall = [] # 保存參數dict 為 list zhcs = dict(csTrue) listall.append(csTrue) aaa = list(csFalse.keys()) for i in aaa: bbb = csFalse[i] # 得到具體參數list for k in bbb: fzgcs.append(k) # 便利每一個參數加入fzgcs列表 zhcskey = list(zhcs.keys()) # 拿到將要進行組合的參數 for i in zhcskey: a = zhcs[i] # 保留原有的參數值,下面替換完后復原正確參數 for k in fzgcs: zhcs[i] = k listall.append(str(zhcs)) # 循環完后復原正確參數 zhcs[i] = a return listall |
jiaoben.py文件作為腳本類,用來對組合好的參數進行循環執行,依次帶入組合參數請求。(只做了請求和打印響應信息,可再加入對響應結果斷言)
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
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017-06-09 14:22 # jiaoben.py from changliang import ZHCS from canshuxinxi import API_ALL from gongju import gj import requests # 腳本類,組合工具參數進行請求 gj = gj() def jball(): apikeys = API_ALL.keys() print(apikeys) for key in apikeys: apiname = key url = API_ALL[key]['url'] number = API_ALL[key]['number'] leixin = API_ALL[key]['leixing'] canshus = gj.listalls(API_ALL[key]['canshu'], ZHCS) if leixin == 'post': print("======="+" api名稱:"+apiname+"=======") for cs in canshus: mp = requests.post(url=url, data=cs) fhcode = str(mp.status_code) xysj = str(mp.elapsed.microseconds) print("=響應=api編號:"+number+" 響應code:"+fhcode+" 響應時間:"+xysj) if leixin == 'get': print("======="+" api名稱:"+apiname+"=======") for cs in canshus: mp = requests.get(url=url, data=cs) fhcode = str(mp.status_code) xysj = str(mp.elapsed.microseconds) print("=響應=api編號:"+number+" 響應code:"+fhcode+" 響應時間:"+xysj) jball() |
tesone.py文件作為用例執行文件,熟悉unittest框架的都清楚其中的原理,就不做多介紹,黑熊主要用來控制腳本的執行,結合了unittest框架后,方便后續的擴展。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017-06-09 8:53 # tesone.py import requests import unittest import time from jiaoben import jball class testclassone(unittest.TestCase): def setUp(self): print(111) pass def test_1(self): jball() # 執行腳本 pass def tearDown(self): print(333) pass if __name__ == '__main__': unittest.main() |
最后附上用例執行后的效果圖:
以上這篇python+requests+unittest API接口測試實例(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。