前言
在使用python搭建接口测试框架时,不能不面对的一个场景就是接口的串联,分享两个常见的串联方式:jsonpath和re
jsonpath的安装
使用pip install jsonpath 完成jsonpath库的安装,博主已经安装好了,所以没有贴安装完成的图
jsonpath的功能介绍
JsonPath提供了类似正则表达式的语法,基本上可以满足所有对于json格式内容的正则取值
操作符号 | 含义 |
---|---|
$ | 标识符,通过这个符号确定正则模板 |
.[name] | 表示json数据的第一层,name为第一层需要正则的字段名 |
…[name] | 表示json数据的第二层,name为第二层需要正则的字段名 |
.[name1]…[name2] | 表示name1下的name2 的值 |
完整写法
例如: $.access_token
$.data…access_token
代码执行
json内容
{
“xhr”: [{
“id”: 5,
“req”: “POST https://event.csdn.net/logstores/csdn-pc-tracking-page-exposure/track”,
“start”: 1596447502491,
“du”: 657,
“cb”: 3,
“status”: 200,
“err”: 0,
“rec”: 0,
“send”: 7441,
“type”: “XHR”
}]
}
代码
import jsonpath
str1 = {
"xhr": [{
"id": 5,
"req": "POST https://event.csdn.net/logstores/csdn-pc-tracking-page-exposure/track",
"start": 1596447502491,
"du": 657,
"cb": 3,
"status": 200,
"err": 0,
"rec": 0,
"send": 7441,
"type": "XHR"
}]
}
value = jsonpath.jsonpath(str1,"$.xhr..id" )[0]# 得到的结果是数组,所以需要用索引取值
print(value)
re的使用
re的介绍
re模块是python自有的库,不需要安装,直接import导入即可
常用方法 | 注释 | 备注 |
---|---|---|
re.findall() | 在字符串中匹配,如果成功返回match对象,如果失败返回None | 返回的对象是列表 |
re.search() | 在整个字符串中查找,返回第一个匹配内容,如果找到返回match对象,没找到返回None | 返回的是字符串 |
re.split() | 在整个字符串中查找,以匹配模板为切割线进行切割 | 返回的是列表 |
代码的执行
拿re.findall() 举例,实际操作中也是该方法使用的最方便
import re
str1 = '{"pid": "280", "storeId": "1640280"}'
value = re.findall('"pid": "(.+?)"', str1)[0]
print( value)
结果
280
Process finished with exit code 0
值得注意的
如上例子所示,str1 必须为字符串类型,博主亲测str()装换数据类型也不行,最好是单双引号括起来
结尾
然后将正则出来的结果赋值给变量,然后在下一个接口中引用该变量,即可完成接口的串联