python+requests+unittest API接口測(cè)試實(shí)例(詳解)
我在網(wǎng)上查找了下接口測(cè)試相關(guān)的資料,大都重點(diǎn)是以數(shù)據(jù)驅(qū)動(dòng)的形式,將用例維護(hù)在文本或表格中,而沒(méi)有說(shuō)明怎么樣去生成想要的用例,
問(wèn)題:
測(cè)試接口時(shí),比如參數(shù)a,b,c,我要先測(cè)a參數(shù),有(不傳,為空,整形,浮點(diǎn),字符串,object,過(guò)短,超長(zhǎng),sql注入)這些情況,其中一種情況就是一條用例,同時(shí)要保證b,c的正確,確保a的測(cè)試不受b,c參數(shù)的錯(cuò)誤影響
解決思路:
符合接口規(guī)范的參數(shù)可以手動(dòng)去填寫(xiě),或者準(zhǔn)備在代碼庫(kù)中。那些不符合規(guī)范的參數(shù)(不傳,為空,整形,浮點(diǎn),字符串,object,過(guò)短,超長(zhǎng),sql注入)也可以準(zhǔn)備在庫(kù)中作為常量反復(fù)使用
主要實(shí)現(xiàn)的功能點(diǎn):
1.api參數(shù)整理到dict中,方便組合參數(shù)生成用例
2.對(duì)生成的用例進(jìn)行循環(huán)執(zhí)行
3.封裝些許代碼便于使用和維護(hù)
源碼分析:
canshuxinxi.py文件用來(lái)存放api接口信息。以dict形式存放,這樣就可以API_ALL['登錄接口'][url]這種方式去取,看起來(lái)較直觀,知道取得是哪個(gè)接口的那部分信息。
#!/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文件用來(lái)存非常規(guī)(可能會(huì)讓接口響應(yīng)異常)參數(shù),同理也是存放在dict中,方便維護(hù),比如以后要加新的sql注入代碼段,可以直接在后面添加
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017-06-09 14:09 # changliang.py # 常用參數(shù)不傳,為空,整形,浮點(diǎn),字符串,object,過(guò)短,超長(zhǎng),sql注入 objects1 = 'xxxx' objects2 = 'ssss' ZHCS = { '為空': [''], '整形': [10, 23, 44, 88, 99], '浮點(diǎn)': [1.11, 2.342, -1.03], '字符串': ['aaaa', 'bbbb', 'cccc','dddd'], 'object': [objects1, objects2], '過(guò)短': ['1', '0'], '超長(zhǎng)': ['11111111111111111111111111111111111111111111111'], 'sql注入': [';and 1=1 ;and 1=2', ";and (select count(*) from sysobjects)>0 mssql", ";and 1=(select IS_SRVROLEMEMBER('sysadmin'));--"], }
# gongju.py作為工具類(lèi),下面方法進(jìn)行了封裝,方便調(diào)用。實(shí)現(xiàn)了對(duì)參數(shù)進(jìn)行組合,生產(chǎn)不同組合的dict類(lèi)型的參數(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ù)放在一個(gè)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) # 便利每一個(gè)參數(shù)加入fzgcs列表 zhcskey = list(zhcs.keys()) # 拿到將要進(jìn)行組合的參數(shù) for i in zhcskey: a = zhcs[i] # 保留原有的參數(shù)值,下面替換完后復(fù)原正確參數(shù) for k in fzgcs: zhcs[i] = k listall.append(str(zhcs)) # 循環(huán)完后復(fù)原正確參數(shù) zhcs[i] = a return listall
jiaoben.py文件作為腳本類(lèi),用來(lái)對(duì)組合好的參數(shù)進(jìn)行循環(huán)執(zhí)行,依次帶入組合參數(shù)請(qǐng)求。(只做了請(qǐng)求和打印響應(yīng)信息,可再加入對(duì)響應(yīng)結(jié)果斷言)
#!/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 # 腳本類(lèi),組合工具參數(shù)進(jìn)行請(qǐng)求 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名稱(chēng):"+apiname+"=======") for cs in canshus: mp = requests.post(url=url, data=cs) fhcode = str(mp.status_code) xysj = str(mp.elapsed.microseconds) print("=響應(yīng)=api編號(hào):"+number+" 響應(yīng)code:"+fhcode+" 響應(yīng)時(shí)間:"+xysj) if leixin == 'get': print("======="+" api名稱(chēng):"+apiname+"=======") for cs in canshus: mp = requests.get(url=url, data=cs) fhcode = str(mp.status_code) xysj = str(mp.elapsed.microseconds) print("=響應(yīng)=api編號(hào):"+number+" 響應(yīng)code:"+fhcode+" 響應(yīng)時(shí)間:"+xysj) jball()
tesone.py文件作為用例執(zhí)行文件,熟悉unittest框架的都清楚其中的原理,就不做多介紹,黑熊主要用來(lái)控制腳本的執(zhí)行,結(jié)合了unittest框架后,方便后續(xù)的擴(kuò)展。
#!/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接口測(cè)試實(shí)例(詳解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談tensorflow使用張量時(shí)的一些注意點(diǎn)tf.concat,tf.reshape,tf.stack
這篇文章主要介紹了淺談tensorflow使用張量時(shí)的一些注意點(diǎn)tf.concat,tf.reshape,tf.stack,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06python實(shí)現(xiàn)模擬鍵盤(pán)鼠標(biāo)重復(fù)性操作Pyautogui
這篇文章主要為大家詳細(xì)介紹了python如何利用Pyautogui模擬鍵盤(pán)鼠標(biāo)重復(fù)性操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11JetBrains PyCharm(Community版本)的下載、安裝和初步使用圖文教程詳解
這篇文章主要介紹了JetBrains PyCharm(Community版本)的下載、安裝和初步使用教程,本文圖文并茂給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)和工作具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2020-03-03python 刪除系統(tǒng)中的文件(按時(shí)間,大小,擴(kuò)展名)
這篇文章主要介紹了python 如何刪除系統(tǒng)中的文件,分別按時(shí)間,大小,擴(kuò)展名刪除,滿足不同需求,感興趣的朋友可以了解下2020-11-11Python實(shí)現(xiàn)的從右到左字符串替換方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的從右到左字符串替換方法,涉及Python字符串遍歷、運(yùn)算、判斷、替換等相關(guān)操作技巧,需要的朋友可以參考下2018-07-07Django cookie和session的應(yīng)用場(chǎng)景及如何使用
今天我們來(lái)重點(diǎn)看下Django中session和cookie的用法吧。我們會(huì)介紹cookie和session的工作原理,還會(huì)分享實(shí)際應(yīng)用的案例。2021-04-04探究Python的Tornado框架對(duì)子域名和泛域名的支持
這篇文章主要介紹了探究Python的Tornado框架對(duì)子域名和泛域名的支持,Tornado作為一個(gè)典型的異步框架、在Python開(kāi)發(fā)者中的人氣相當(dāng)高,需要的朋友可以參考下2015-05-05