国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python+requests+unittest API接口測試實例(詳解)

2020-01-04 17:18:45
字體:
供稿:網(wǎng)友

我在網(wǎng)上查找了下接口測試相關(guān)的資料,大都重點是以數(shù)據(jù)驅(qū)動的形式,將用例維護(hù)在文本或表格中,而沒有說明怎么樣去生成想要的用例,

問題:

測試接口時,比如參數(shù)a,b,c,我要先測a參數(shù),有(不傳,為空,整形,浮點,字符串,object,過短,超長,sql注入)這些情況,其中一種情況就是一條用例,同時要保證b,c的正確,確保a的測試不受b,c參數(shù)的錯誤影響

解決思路:

符合接口規(guī)范的參數(shù)可以手動去填寫,或者準(zhǔn)備在代碼庫中。那些不符合規(guī)范的參數(shù)(不傳,為空,整形,浮點,字符串,object,過短,超長,sql注入)也可以準(zhǔn)備在庫中作為常量反復(fù)使用

主要實現(xiàn)的功能點:

1.api參數(shù)整理到dict中,方便組合參數(shù)生成用例

2.對生成的用例進(jìn)行循環(huán)執(zhí)行

3.封裝些許代碼便于使用和維護(hù)

源碼分析:

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ī)(可能會讓接口響應(yīng)異常)參數(shù),同理也是存放在dict中,方便維護(hù),比如以后要加新的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作為工具類,下面方法進(jìn)行了封裝,方便調(diào)用。實現(xiàn)了對參數(shù)進(jìn)行組合,生產(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()) # 拿到將要進(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文件作為腳本類,用來對組合好的參數(shù)進(jìn)行循環(huán)執(zhí)行,依次帶入組合參數(shù)請求。(只做了請求和打印響應(yīng)信息,可再加入對響應(yīng)結(jié)果斷言)

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time  : 2017-06-09 14:22# jiaoben.pyfrom changliang import ZHCSfrom canshuxinxi import API_ALLfrom gongju import gjimport requests# 腳本類,組合工具參數(shù)進(jìn)行請求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("=響應(yīng)=api編號:"+number+" 響應(yīng)code:"+fhcode+" 響應(yīng)時間:"+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("=響應(yīng)=api編號:"+number+" 響應(yīng)code:"+fhcode+" 響應(yīng)時間:"+xysj)jball()

tesone.py文件作為用例執(zhí)行文件,熟悉unittest框架的都清楚其中的原理,就不做多介紹,黑熊主要用來控制腳本的執(zhí)行,結(jié)合了unittest框架后,方便后續(xù)的擴展。

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time  : 2017-06-09 8:53# tesone.pyimport requestsimport unittestimport timefrom jiaoben import jballclass testclassone(unittest.TestCase):  def setUp(self):    print(111)    pass  def test_1(self):    jball()  # 執(zhí)行腳本    pass  def tearDown(self):    print(333)    passif __name__ == '__main__':  unittest.main()

最后附上用例執(zhí)行后的效果圖:

python,requests,接口

以上這篇python+requests+unittest API接口測試實例(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 灵宝市| 沁水县| 涪陵区| 民丰县| 台前县| 双辽市| 洞头县| 仁布县| 万盛区| 尉犁县| 阿勒泰市| 特克斯县| 札达县| 宁阳县| 齐河县| 漳浦县| 锡林浩特市| 酉阳| 曲松县| 壤塘县| 德化县| 博湖县| 徐州市| 梓潼县| 盐山县| 光山县| 敦化市| 嵩明县| 岚皋县| 赤城县| 望都县| 怀安县| 西乡县| 布尔津县| 沙湾县| 辉县市| 玛沁县| 固安县| 盖州市| 法库县| 青田县|