python+requests+unittest API接口测试实例(详解)
发布时间 - 2026-01-11 01:49:18 点击率:次我在网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,将用例维护在文本或表格中,而没有说明怎么样去生成想要的用例,

问题:
测试接口时,比如参数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
# 接口
# Python+unittest+requests+excel实现接口自动化测试框架
# Python+unittest+requests 接口自动化测试框架搭建教程
# Python + Requests + Unittest接口自动化测试实例分析
# python+unittest+requests实现接口自动化的方法
# Python+requests+unittest执行接口自动化测试详情
# 浮点
# 为空
# 过短
# 放在
# 不传
# 给大家
# 完后
# 响应时间
# 库中
# 我在
# 就不
# 希望能
# 不受
# 并将
# 会让
# 可以直接
# 找了
# 不符合
# 要先
# 在后面
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
如何在万网自助建站平台快速创建网站?
如何快速使用云服务器搭建个人网站?
详解CentOS6.5 安装 MySQL5.1.71的方法
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
实例解析Array和String方法
Laravel如何创建自定义中间件?(Middleware代码示例)
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
微信小程序 五星评分(包括半颗星评分)实例代码
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
佛山企业网站制作公司有哪些,沟通100网上服务官网?
nginx修改上传文件大小限制的方法
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
如何在宝塔面板中创建新站点?
Python数据仓库与ETL构建实战_Airflow调度流程详解
微信h5制作网站有哪些,免费微信H5页面制作工具?
免费视频制作网站,更新又快又好的免费电影网站?
如何快速生成橙子建站落地页链接?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何用景安虚拟主机手机版绑定域名建站?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
Laravel如何使用Blade组件和插槽?(Component代码示例)
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
如何在服务器上配置二级域名建站?
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
音响网站制作视频教程,隆霸音响官方网站?
Laravel中的Facade(门面)到底是什么原理
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
jQuery 常见小例汇总
Laravel如何实现用户注册和登录?(Auth脚手架指南)
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
Android滚轮选择时间控件使用详解
如何批量查询域名的建站时间记录?
Laravel如何实现一对一模型关联?(Eloquent示例)
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
JS弹性运动实现方法分析
Laravel怎么在Controller之外的地方验证数据
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
如何在宝塔面板中修改默认建站目录?
Android Socket接口实现即时通讯实例代码
HTML 中如何正确使用模板变量为元素的 name 属性赋值
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】

