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获取系统默认字符编码的方法
Jun 04 Python
Sanic框架请求与响应实例分析
Jul 16 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
2019 Python最新面试题及答案16道题
Apr 11 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
pandas 对group进行聚合的例子
Dec 27 Python
Python使用正则实现计算字符串算式
Dec 29 Python
python全局变量引用与修改过程解析
Jan 07 Python
python函数中将变量名转换成字符串实例
May 11 Python
python学习笔记之多进程
Aug 06 Python
python判断元素是否存在的实例方法
Sep 24 Python
python调试工具Birdseye的使用教程
May 25 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
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
php 使用html5实现多文件上传实例
2016/10/24 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
如何高效使用Python字典的方法详解
2017/08/31 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
python实现贪吃蛇双人大战
2020/04/18 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
祖国在我心中演讲稿
2014/01/15 职场文书
读书活动总结
2014/04/28 职场文书
我的画教学反思
2014/04/28 职场文书
社区先进事迹材料
2014/05/19 职场文书
应急管理培训方案
2014/06/12 职场文书
学校社会实践活动总结
2014/07/03 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
老乡聚会通知
2015/04/23 职场文书
名人传读书笔记
2015/06/26 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python