侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python+requests+unittest API接口测试实例(详解)

Python  /  管理员 发布于 7年前   237

我在网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,将用例维护在文本或表格中,而没有说明怎么样去生成想要的用例,

问题:

测试接口时,比如参数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.pyfrom changliang import ZHCSfrom canshuxinxi import API_ALLfrom gongju import gjimport 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.pyimport requestsimport unittestimport timefrom jiaoben import jballclass testclassone(unittest.TestCase):  def setUp(self):    print(111)    pass  def test_1(self):    jball()  # 执行脚本    pass  def tearDown(self):    print(333)    passif __name__ == '__main__':  unittest.main()

最后附上用例执行后的效果图:

以上这篇python+requests+unittest API接口测试实例(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


  • 上一条:
    新手如何快速入门Python(菜鸟必看篇)
    下一条:
    基于python爬虫数据处理(详解)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客