!13 test01 Merge pull request !13 from cc1986746916/dev
QQ 529548204邮箱 529548204@qq.com如果有问题请联系我 大家共同学习共同进步~
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持续集成。
|--接口自动化测试框架 # 主目录 ├─ 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. body 请求体内的参数中保存: body如果是 "id=2&path=haha" 会转换成字典 然后根据path使用jsonpath取值 2. response : 从json格式的响应结果中获取 3. cookies: 保存响应结果的cooies到本地
将需要替换为缓存数据的内容改成:$caches(cookies)$
$caches(cookies)$
示例:
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)$
通过relevance字段来判断是否需要关联 如果不需要relevance字段为空即可
下面示例为 关联接口为tradeAdd 与 tradeAdd2两条yaml数据中case的第一条和第二条 分别去这两个接口返回结果的 id 并命名为tradeId 、tradeId2 内存中会保存成字典格式 {"tradeId":"10","tradeId2":"11"}读取方法:$relevance(tradeId2)$
{"tradeId":"10","tradeId2":"11"}
$relevance(tradeId2)$
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 # 关联值名称
file : 通过case外关键字file判断是否需要上传文件 如果需要则格式为:{上传文件的参数名:文件路径}
file
{上传文件的参数名:文件路径}
param:包含两种请求格式(1)json格式 :{ "username": "finsiot","password": "$caches(pwd)$" # 读取缓存值 }(同样适用于xml格式 会根据请求头application/xml或者text/xml 将字典转换成xml类型)(2)param格式username=admin&password=123
param
{ "username": "finsiot","password": "$caches(pwd)$" # 读取缓存值 }
username=admin&password=123
urlparam为路径参数:{ id: 123 }
urlparam
{ id: 123 }
会根据字典转换成 路径参数 address中 v1/api/$url(id)$/中会根据id替换为123
v1/api/$url(id)$/
data: file: { files: D:\test\test.csv # 上传文件的参数名:文件路径 } param: { "username": "finsiot","password": "$caches(pwd)$" # 读取缓存值 } urlparam: { id: 123 }# 路径参数 v1/api/$url(id)$/
jsonpath json格式数据断言: 根据json路径格式来获取实际结果同value中的预期结果进行判断 sqlassert 数据库结果断言 可同时判断多个结果值 根据sql中的查询语句查询出来的 第一条结果进行判断 time响应时间断言 默认为2秒 code http响应码断言
jsonpath
sqlassert
time
code
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
部分数据采用faker库生成
int_num = "$RandomPosInt(1,333)$" # 267 str_num = '$RandomString($RandomPosInt(2,23)$)$RandomPosInt(1,333)
接口自动化测试框架 pytest+ymal+allure+requests+redis
联系方式
QQ 529548204
邮箱 529548204@qq.com
如果有问题请联系我 大家共同学习共同进步~
更新日志
2022年6月7日 更新 取消config中http类型 改为yaml数据内
2022年5月30日 更新 YAML读取时间格式datetime数据后 json处理方式
2022年5月20日 更新增加jenkins持续集成说明配置方法等
2022年5月17日 更新增加xml参数处理,增加自定义加密方式(加密规则需要自己写 需要一定编码能力)
前言
环境要求
框架采用python的pytest模块, 搭配requests以及allure测试报告,可以发送钉钉通知邮件通知, 支持自定义接口加密,util.tools.encryption文件内自己编辑加密规则, 可以根据yaml测试数据自动生成用例, 支持接口关联, 支持类似jmeter的函数助手, 可以通过脚本进行接口录制,辅助编写yaml测试数据文件, 支持数据库断言, 支持分布式,jenkins持续集成。
注意
单用例调试时需要执行一次util\tools\readYamlFile.py将测试数据存入redis
一、目录结构
二、关键文件介绍
1.yaml测试数据格式
1.1 本地缓存介绍
保存本地缓存方法为3种
读取本地缓存方法
将需要替换为缓存数据的内容改成:
$caches(cookies)$示例:
1.2 接口关联介绍
通过relevance字段来判断是否需要关联 如果不需要relevance字段为空即可
示例:
下面示例为 关联接口为tradeAdd 与 tradeAdd2两条yaml数据中case的第一条和第二条 分别去这两个接口返回结果的 id 并命名为tradeId 、tradeId2 内存中会保存成字典格式
{"tradeId":"10","tradeId2":"11"}读取方法:
$relevance(tradeId2)$1.3 参数介绍
file: 通过case外关键字file判断是否需要上传文件 如果需要则格式为:{上传文件的参数名:文件路径}param:包含两种请求格式(1)json格式 :
{ "username": "finsiot","password": "$caches(pwd)$" # 读取缓存值 }(同样适用于xml格式 会根据请求头application/xml或者text/xml 将字典转换成xml类型)(2)param格式
username=admin&password=123urlparam为路径参数:{ id: 123 }会根据字典转换成 路径参数 address中
v1/api/$url(id)$/中会根据id替换为1231.4 断言介绍
jsonpathjson格式数据断言: 根据json路径格式来获取实际结果同value中的预期结果进行判断sqlassert数据库结果断言 可同时判断多个结果值 根据sql中的查询语句查询出来的 第一条结果进行判断time响应时间断言 默认为2秒codehttp响应码断言1.5 生成随机数据介绍
部分数据采用faker库生成