# 接口自动化测试框架 pytest+ymal+allure+requests+redis
---
# 联系方式
QQ 529548204
邮箱 [email protected]
如果有问题请联系我 大家共同学习共同进步~
# 更新日志
2022年6月7日 更新 取消config中http类型 改为yaml数据内
2022年5月30日 更新 YAML读取时间格式datetime数据后 json处理方式
2022年5月20日 更新增加jenkins持续集成说明配置方法等
2022年5月17日 更新增加xml参数处理,增加自定义加密方式(加密规则需要自己写 需要一定编码能力)
# 前言
## 环境要求
python 3.9
redis (存放用例数据)
mysql (测试环境数据库)
jdk
allure
持续集成:
docker
jenkins
框架采用python的pytest模块,
搭配requests以及allure测试报告,可以发送钉钉通知邮件通知,
支持自定义接口加密,util.tools.encryption文件内自己编辑加密规则,
可以根据yaml测试数据自动生成用例,
支持接口关联,
支持类似jmeter的函数助手,
可以通过脚本进行接口录制,辅助编写yaml测试数据文件,
支持数据库断言,
支持分布式,jenkins持续集成。
# 注意
单用例调试时需要执行一次**util\tools\readYamlFile.py**将测试数据存入redis
---
# 一、目录结构
|--接口自动化测试框架 # 主目录
├─ common # 封装断言以及requests的方法
├─ caches # 本地缓存保存路径
├─ config # 配置文件读取
└─ config.ini
├─ testsuite # 测试相关文件
├─ datas #测试数据
└─ 项目文件夹 名称同config中 testname一致 # 可以通过newproject脚本生成
└─ login.yml # 用例数据 格式参考下面YAML PARAM格式说明
├─ testcase
└─ 项目文件夹 名称同config中 testname一致 # 测试用例 可以通过writepage脚本生成
└─ test_login.py
└─recording # 录制脚本文件夹放录制的接口文档
├─ util # 常用工具 用例生成 接口录制
├─ tools # 内部调用工具方法包含yaml读取 函数助手 数据库链接等
└─ scripts # 包含生成新项目,自动生成用例,接口录制
├─ log # 日志
├─ report # allure测试报告
├─ pytest.ini # pytest配置
├─ requirements.txt
├─ README.md
└─ setupMain.py # 整体执行程序。
# 二、关键文件介绍
## 1.yaml测试数据格式
### 1.1 本地缓存介绍
##### 保存本地缓存方法为3种
1. body 请求体内的参数中保存:
body如果是 "id=2&path=haha" 会转换成字典 然后根据path使用jsonpath取值
2. response : 从json格式的响应结果中获取
3. cookies: 保存响应结果的cooies到本地
##### 读取本地缓存方法
将需要替换为缓存数据的内容改成:`$caches(cookies)$`
示例:
```yaml
cache: # 本地缓存
- cachefrom: 'body'
path: '$.code'
name: 'code'
# 使用方法 需要的地方替换为$caches(code)$
- cachefrom: 'response'
path: '$.data'
name: 'data'
# 使用方法 需要的地方替换为$caches(data)$
- cachefrom: 'cookies'
path: # cookies 时path为空
name: 'cookies'
# 使用方法 需要的地方替换为$caches(cookies)$
```
### 1.2 接口关联介绍
通过***relevance***字段来判断是否需要关联
如果不需要***relevance***字段为空即可
示例:
下面示例为 关联接口为tradeAdd 与 tradeAdd2两条yaml数据中case的第一条和第二条
分别去这两个接口返回结果的 id 并命名为tradeId 、tradeId2
内存中会保存成字典格式
`{"tradeId":"10","tradeId2":"11"}`
读取方法:`$relevance(tradeId2)$`

```yaml
relevance:
response:
- relCaseName: shangchuan # 其他testcase的ID
relCaseNum: 1 # 关联的case数组里 第几条数据
reldata:
- value: $.data.fileName # 当前返回结果的jsonpath
name: fileName # 关联值名称
- value: $.data.policy # 当前返回结果的jsonpath
name: policy # 关联值名称
- value: $.data.signature # 当前返回结果的jsonpath
name: signature # 关联值名称
- relCaseName: tradeAdd2 # 其他testcase的ID
relCaseNum: 2 # 关联的case数组里 第几条数据
reldata:
- value: $.data.fileName # 当前返回结果的jsonpath
name: fileName # 关联值名称
- value: $.data.policy # 当前返回结果的jsonpath
name: policy # 关联值名称
- value: $.data.signature # 当前返回结果的jsonpath
name: signature # 关联值名称
```
### 1.3 参数介绍
`file` : 通过case外关键字file判断是否需要上传文件 如果需要则格式为:`{上传文件的参数名:文件路径}`
`param`:包含两种请求格式
(1)json格式 :
`{
"username": "finsiot","password": "$caches(pwd)$" # 读取缓存值
}`(同样适用于xml格式 会根据请求头***application/xml或者text/xml*** 将字典转换成xml类型)
(2)param格式
`username=admin&password=123`
`urlparam`为路径参数:`{
id: 123
}`
会根据字典转换成
路径参数 **address**中 `v1/api/$url(id)$/`中会根据id替换为123
```yaml
data:
file: {
files: D:\test\test.csv # 上传文件的参数名:文件路径
}
param: {
"username": "finsiot","password": "$caches(pwd)$" # 读取缓存值
}
urlparam: {
id: 123
}# 路径参数 v1/api/$url(id)$/
```
### 1.4 断言介绍
`jsonpath` json格式数据断言:
根据json路径格式来获取实际结果同**value**中的预期结果进行判断
`sqlassert` 数据库结果断言
可同时判断多个结果值
根据**sql**中的查询语句查询出来的 **第一条**结果进行判断
`time`响应时间断言 默认为2秒
`code` http响应码断言
```yaml
assert:
jsonpath:
- {
"path": "$.data.expense_trend[0].peak_hour.peak_hour",
"value": "123", # 预期结果
"asserttype": "==" # 判断相等
}
- {
"path": "$.code",
"value": 0,
"asserttype": "=="
}
- {
"path": "$.data.id",
"value": 196,
"asserttype": "=="
}
sqlassert:
# 如果不需要 此字段置空即可
- {
"datas": [
{
"path": "$.data.id",
"name": "id"
},
{
"path": "$.data.username",
"name": "username"
},
],
"sql": "select * from saas.user where username = '****'",
# 取数据库查询出的第一条数据进行验证 如果存在 列名 username 值为$.data.username则通过
"db_name": "database" # 判断链接那个数据库
}
time: 2 # 响应时间断言
code: 200
```
### 1.5 生成随机数据介绍
部分数据采用faker库生成
```python
int_num = "$RandomPosInt(1,333)$" # 267
str_num = '$RandomString($RandomPosInt(2,23)$)$$RandomPosInt(1,333)$' # AbE3c14580f29aDFe5
float_num = '$RandomFloat($RandomPosInt(2,13)$,$RandomPosInt(2,13)$,$RandomPosInt(2,13)$)$' # 11.84864
time_num = '$GetTime(time_type=else,layout=%Y-%m-%d %H:%M:%S,unit=0,0,0,0,0)$' # 当前时间 2022-04-14 13:27:01
time_num2 = '$GetTime(time_type=future,layout=%Y-%m-%d %H:%M:%S,unit=0,0,0,3,0)$' # 未来时间3天后 2022-04-17 13:32:42
time_num3 = '$GetTime(time_type=past,layout=%Y-%m-%d %H:%M:%S,unit=0,0,0,3,0)$' # 过去�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
根据yaml自动生成测试用例脚本 支持sql断言 支持参数化 路径参数 支持数据关联 支持多种类随机数据生成 多种正则匹配 跨文。 框架采用python的pytest模块, 搭配requests以及allure测试报告,可以发送钉钉通知邮件通知, 支持自定义接口加密,util.tools.encryption文件内自己编辑加密规则, 可以根据yaml测试数据自动生成用例, 支持接口关联, 支持类似jmeter的函数助手, 可以通过脚本进行接口录制,辅助编写yaml测试数据文件, 支持数据库断言, 支持分布式,jenkins持续集成 涉及框架和技术栈:requests+pytest+allure+yaml+redis 支持测试报告生成,接口加密。
资源推荐
资源详情
资源评论




















收起资源包目录










































































共 61 条
- 1
资源评论


桃酥zz
- 粉丝: 2433
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 电子商务网站的分析与实现.doc
- 提高计算机信息管理能力的策略分析.docx
- 嵌入式系统开发平台化浅析.docx
- 混合学习法在高职高专计算机教学中的应用研究.docx
- 《计算机的硬件组成》学习工具制作综述.docx
- 《计算机多媒体技术》专业教学计划.doc
- (源码)基于C++编程语言的Orion II CanSat项目.zip
- 8PSK通信系统的蒙特卡罗仿真研究--最终.doc
- 基于TC35模块的GSM远程智能家居控制系统的方案设计书大学本科方案设计书好.doc
- 大数据时代背景下财务会计工作面临的机遇、挑战和对策.docx
- 月软件设计师模拟试题上午试卷.doc
- 拓贸隆综合布线大楼方案.doc
- 基于B-S结构变电运维大数据系统及移动终端开发应用.docx
- 国外卫星在轨操作系统发展分析.docx
- S7-300400PLC的编程技术-.ppt
- 基于组件的电子商务招投标平台的设计与实现.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
