jsonpath是使用一种简单的方法提取给定的json文档的部分内容,我们做接口测试时,目前主要流行的数据结构是json,遇到复杂的json格式,使用jsonpath提取数据
1、jsonpath操作符
操作 | 说明 |
---|---|
$ | 查询根元素, |
@ | 当前接口由过滤词处理 |
* | 通配符, |
. . | 深度扫描 |
. | 表示子节点 |
[“(,”)] | 括号表示子项 |
[(,)] | 数组索引或者索引 |
[start:end] | 数组切片 |
[?()] | 过滤表达式,表达式要求值为一个布尔值 |
2、过滤器运算符
过滤器是筛选数组的逻辑表达式,一个典型的过滤器是[?@.age>18)],其中@正在处理的当前节点,可以使用逻辑运算符&&和||创建更复杂的过滤器,字符串文字必须用单引号或者双引号括起来,(?@.color==‘blue’)]或者[?@.color==‘blue’)])
在线调试jsonpath:http://www.e123456.com/aaaphp/online/jsonpath/?
jsonpath示例:
提取token:
token = jsonpath.jsonpath(res.json(),'$.data')[0]
#1、第一个参数表示要解析的对象
#2、第二个参数你要提取的数据对应的jsonpath表达式
#3、如果表达式能够取到值,不管是1个还是多个,返回的都是列表,所以我们在后面加了[0]
#4、如果表达式匹配不到数据,那么它返回的值是False
接口数据驱动测试框架实战
1、数据驱动框架设计
1、框架结构
- common:这是一个package,主要用来存储所有底层的代码封装
- logs:这是一个目录,主要用来存储日志文件
- report:这是一个目录,data表示测试结果数据,htnl测试报告
- testcases:这是一个目录,用来存储excel文件,excel 文件时接口测试相关的数据
- conftest.py:重写pytest自带的内置函数,统一管理自定义的fixture
- pytest.ini:pytest相关的配置参数
- run.py:整个框架执行的入口
2、excel数据规则设计
按照一定的维度进行分类,每个分类可以当作一个sheet工作表
- 全局变量:主要用来管理我们的公共数据
变量名称 | 变量值 |
---|---|
host | http://82.156.74.26:9099 |
username | 18866668888 |
password | 123456 |
- 接口默认参数
通常在一个项目中,json参数如果有很多个的时候,我们针对测试用例去传递参数会很麻烦,所以我们针对每个接口的默认参数数据进行单独处理,在测试时只需要针对当前测试用例传递你要测试的某个字段值即可,其他字段统统采用默认值
填写参数的规则:对于接口参数可能会有好几种类型的,data类型、params类型、json类型、文件等
data类型:
{
"data":{
"xxx":"xxxxxxx"
}
}
params类型
{
"params":{
"xxx":"xxxxxxx"
}
}
json类型:
{
"json":{
"xxx":"xxxxxxx"
}
}
混合参数(既有data,也有params,有json
{
"data":{
"xxx":"xxxxxxx"
}
"json":{
"xxx":"xxxxxxx"
}
"params":{
"xxx":"xxxxxxx"
}
}
接口名称 | 默认参数 |
---|---|
登录 | { “data”: { “username”: “ u s e r n a m e " , " p a s s w o r d " : " {username}", "password": " username","password":"{password}” }} |
新增客户 | { “json”: { “entity”: { “customer_name”: “沙陌001”, “mobile”: “18729399607”, “telephone”: “01028375678”, “website”: “http://mtongxue.com/”, “next_time”: “2022-05-12 00:00:00”, “remark”: “这是备注”, “address”: “北京市,北京城区,昌平区”, “detailAddress”: “霍营地铁口”, “location”: “”, “lng”: “”, “lat”: “” } }} |