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中列表的一些基本操作知识汇总
May 20 Python
python实现稀疏矩阵示例代码
Jun 09 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
May 07 Python
python实现俄罗斯方块游戏
Mar 25 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
python tkinter之顶层菜单、弹出菜单实例
Mar 04 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
支持oicq头像的留言簿(二)
2006/10/09 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
js实现轮播图特效
2020/05/28 Javascript
一篇不错的Python入门教程
2007/02/08 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
python Tensor和Array对比分析
2020/01/08 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
护理专业个人求职简历的自我评价
2013/10/13 职场文书
体育教育专业毕业生自荐信
2013/11/15 职场文书
安全生产投入制度
2014/01/29 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
高中团支书竞选稿
2015/11/21 职场文书