我在網(wǎng)上查找了下接口測試相關的資料,大都重點是以數(shù)據(jù)驅動的形式,將用例維護在文本或表格中,而沒有說明怎么樣去生成想要的用例,
問題:
測試接口時,比如參數(shù)a,b,c,我要先測a參數(shù),有(不傳,為空,整形,浮點,字符串,object,過短,超長,sql注入)這些情況,其中一種情況就是一條用例,同時要保證b,c的正確,確保a的測試不受b,c參數(shù)的錯誤影響
解決思路:
符合接口規(guī)范的參數(shù)可以手動去填寫,或者準備在代碼庫中。那些不符合規(guī)范的參數(shù)(不傳,為空,整形,浮點,字符串,object,過短,超長,sql注入)也可以準備在庫中作為常量反復使用
主要實現(xiàn)的功能點:
1.api參數(shù)整理到dict中,方便組合參數(shù)生成用例
2.對生成的用例進行循環(huán)執(zhí)行
3.封裝些許代碼便于使用和維護
源碼分析:
canshuxinxi.py文件用來存放api接口信息。以dict形式存放,這樣就可以API_ALL['登錄接口'][url]這種方式去取,看起來較直觀,知道取得是哪個接口的那部分信息。
#!/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文件用來存非常規(guī)(可能會讓接口響應異常)參數(shù),同理也是存放在dict中,方便維護,比如以后要加新的sql注入代碼段,可以直接在后面添加
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017-06-09 14:09
# changliang.py
# 常用參數(shù)不傳,為空,整形,浮點,字符串,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作為工具類,下面方法進行了封裝,方便調(diào)用。實現(xiàn)了對參數(shù)進行組合,生產(chǎn)不同組合的dict類型的參數(shù),并將dict參數(shù)保存到list中,方便取用。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017-06-09 14:11
# gongju.py
# 生成不同組合的參數(shù)
class gj():
def listalls(self, csTrue, csFalse):
fzgcs = [] # 得到cycanshu的key,將所有非正規(guī)參數(shù)放在一個list中
listall = [] # 保存參數(shù)dict 為 list
zhcs = dict(csTrue)
listall.append(csTrue)
aaa = list(csFalse.keys())
for i in aaa:
bbb = csFalse[i] # 得到具體參數(shù)list
for k in bbb:
fzgcs.append(k) # 便利每一個參數(shù)加入fzgcs列表
zhcskey = list(zhcs.keys()) # 拿到將要進行組合的參數(shù)
for i in zhcskey:
a = zhcs[i] # 保留原有的參數(shù)值,下面替換完后復原正確參數(shù)
for k in fzgcs:
zhcs[i] = k
listall.append(str(zhcs))
# 循環(huán)完后復原正確參數(shù)
zhcs[i] = a
return listall
jiaoben.py文件作為腳本類,用來對組合好的參數(shù)進行循環(huán)執(zhí)行,依次帶入組合參數(shù)請求。(只做了請求和打印響應信息,可再加入對響應結果斷言)
#!/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
# 腳本類,組合工具參數(shù)進行請求
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文件作為用例執(zhí)行文件,熟悉unittest框架的都清楚其中的原理,就不做多介紹,黑熊主要用來控制腳本的執(zhí)行,結合了unittest框架后,方便后續(xù)的擴展。
#!/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() # 執(zhí)行腳本
pass
def tearDown(self):
print(333)
pass
if __name__ == '__main__':
unittest.main()
最后附上用例執(zhí)行后的效果圖:
以上這篇python+requests+unittest API接口測試實例(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

