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


Posted in Python onJune 10, 2017

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

问题:

测试接口时,比如参数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接口测试实例(详解)

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

Python 相关文章推荐
使用Python的判断语句模拟三目运算
Apr 24 Python
详解Python中的Descriptor描述符类
Jun 14 Python
Python 基于Twisted框架的文件夹网络传输源码
Aug 28 Python
python如何修改装饰器中参数
Mar 20 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
解决pyecharts在jupyter notebook中使用报错问题
Apr 23 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
keras小技巧——获取某一个网络层的输出方式
May 23 Python
教你使用Pandas直接核算Excel中快递费用
May 12 Python
基于python爬虫数据处理(详解)
Jun 10 #Python
python实现稀疏矩阵示例代码
Jun 09 #Python
Python实现数据库并行读取和写入实例
Jun 09 #Python
详解python之多进程和进程池(Processing库)
Jun 09 #Python
Python使用django搭建web开发环境
Jun 09 #Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 #Python
Python实现两个list对应元素相减操作示例
Jun 09 #Python
You might like
程序员编程十条戒律
2009/07/09 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
php除数取整示例
2014/04/24 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
php实现分页显示
2015/11/03 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
PHP创建XML接口示例
2019/07/04 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
详解Python的Django框架中的模版相关知识
2015/07/15 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
Python max内置函数详细介绍
2016/11/17 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
对python 自定义协议的方法详解
2019/02/13 Python
python实战串口助手_解决8串口多个发送的问题
2019/06/12 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
美国在线珠宝商店:SZUL
2017/02/11 全球购物
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
公司租房协议书范本
2014/10/08 职场文书
自我推荐信格式模板
2015/03/24 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技