我在网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,将用例维护在文本或表格中,而没有说明怎么样去生成想要的用例,
问题:
测试接口时,比如参数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]这种方式去取,看起来较直观,知道取得是哪个接口的那部分信息。
#!/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注入代码段,可以直接在后面添加
#!/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中,方便取用。
#!/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文件作为脚本类,用来对组合好的参数进行循环执行,依次带入组合参数请求。(只做了请求和打印响应信息,可再加入对响应结果断言)
#!/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框架后,方便后续的扩展。
#!/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接口测试实例(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】