西安制作公司网站的公司江门网站制作 华企立方
2026/5/21 20:16:33 网站建设 项目流程
西安制作公司网站的公司,江门网站制作 华企立方,python做网站难么,网站和服务器的关系背景#xff1a; 接口自动化测试实现简单、成本较低、收益较高#xff0c;越来越受到企业重视restful风格的api设计大行其道json成为主流的轻量级数据交换格式 痛点 接口关联 接口关联也称为关联参数。在应用业务接口中#xff0c;完成一个业务功能时#xff0c;有时候…背景接口自动化测试实现简单、成本较低、收益较高越来越受到企业重视restful风格的api设计大行其道json成为主流的轻量级数据交换格式痛点接口关联接口关联也称为关联参数。在应用业务接口中完成一个业务功能时有时候一个接口可能不满足业务的整个流程逻辑需要多个接口配合使用简单的案例如B接口的成功调用依赖于A接口需要在A接口的响应数据response)中拿到需要的字段在调用B接口的时候传递给B接口作为B接口请求参数拿到后续响应的响应数据。接口关联通常可以使用正则表达式去提取需要的数据但对于json这种简洁、清晰层次结构、轻量级的数据交互格式使用正则未免有点杀鸡用牛刀的感觉(是的因为我不擅长写正则表达式)我们需要更加简单、直接的提取json数据的方式。数据验证这里的数据验证指的是对响应结果进行数据的校验接口自动化测试中对于简单的响应结果json可以直接和期望结果进行比对判断是否完全相等即可。如{status:1,msg:登录成功}对于格式较复杂尤其部分数据存在不确定性、会根据实际情况变化的响应结果简单的判断是否完全相等断言通常会失败。如{status:1,code:10001,data:[{id:1,investId:1,createTime:2018-04-27 12:24:01,terms:1,unfinishedInterest:1.0,unfinishedPrincipal:0,repaymentDate:2018-05-27 12:24:01,actualRepaymentDate:null,status:0},{id:2,investId:1,createTime:2018-04-27 12:24:01,terms:2,unfinishedInterest:1.0,unfinishedPrincipal:0,repaymentDate:2018-06-27 12:24:01,actualRepaymentDate:null,status:0},{id:3,investId:1,createTime:2018-04-27 12:24:01,terms:3,unfinishedInterest:1.0,unfinishedPrincipal:100.00,repaymentDate:2018-07-27 12:24:01,actualRepaymentDate:null,status:0}],msg:获取信息成功}上面的json结构嵌套了很多信息完整的匹配几乎不可能成功。比如其中的createTime信息根据执行接口测试用例的时间每次都不一样。同时这个时间是响应结果中较为次要的信息在进行接口自动化测试时是可以选择被忽略的。我们需要某种简单的方法能够从json中提取出我们真正关注的信息通常也被称为关键信息。如提取出status的值为1data数组中每个对象的investId都为1data中第三个对象的unfinishedPrincipal值为100.00只要这三个关键信息校验通过我们就认为响应结果没有问题。解决方案JsonPath可以完美解决上面的痛点。通过JsonPath可以从多层嵌套的Json中解析出所需要的值。JsonPathJsonPath参照XPath解析xml的方式来解析JsonJsonPath用符号$表示最外层对象类似于Xpath中的根元素JsonPath可以通过点语法来检索数据如$.store.book[0].title也可以使用中括号[]的形式如$[store][book][0][title]运算符Operators运算符说明$根元素当前元素*通配符可以表示任何元素..递归搜索.子节点元素[ (, )]一个或者多个子节点[ (, )]一个或者多个数组下标[start:end]数组片段区间为[start,end)[?()]过滤器表达式其中表达式结果必须是boolean类型如可以是比较表达式或者逻辑表达式JsonPath案例json{ lemon: { teachers: [ { id: 101, name: 华华, addr: 湖南长沙, age: 25 }, { id: 102, name: 韬哥, age: 28 }, { id: 103, name: Happy, addr: 广东深圳, age: 16 }, { id: 104, name: 歪歪, addr: 广东广州, age: 29 } ], salesmans: [ { id: 105, name: 毛毛, age: 17 }, { id: 106, name: 大树, age: 27 } ] }, avg: 25 }JsonPath例子及说明JsonPath路径说明$.lemon.teachers[*].name获取所有老师的的名称$..name获取所有人的名称$.lemon.*所有的老师和销售$.lemon..age所有人的年龄$..age所有人的年龄$.lemon.teachers[*].age所有老师的年龄$.lemon.teachers[3]索引为3第4个老师的信息$..teachers[3]索引为3第4个老师的信息$.lemon.teachers[-2]倒数第2个老师的信息$..teachers[-2]倒数第2个老师的信息$..teachers[1,2]第2到第3个老师的信息$..teachers[:2]索引0包含到索引2不包含的老师信息$..teachers[1:3]索引1包含到索引3不包含的老师信息$..teachers[-2:]最后的两个老师的信息$..teachers[2:]索引2开始的所有老师信息$..teachers[?(.addr)]所有包含地址的老师信息(jsonpath_rw不支持)$.lemon.teachers[?(.age 20)]所有年龄小于20的年龄信息(jsonpath_rw不支持)使用jsonpath模块安装jsonpath模块pip install jsonpath0.75解析# 1导入相关模块 import json import jsonpath # 2: 准备json字符串 jsonStr { lemon: { teachers: [ { id: 101, name: 华华, addr: 湖南长沙, age: 25 }, { id: 102, name: 韬哥, age: 28 }, { id: 103, name: Happy, addr: 广东深圳, age: 16 }, { id: 104, name: 歪歪, addr: 广东广州, age: 29 } ], salesmans: [ { id: 105, name: 毛毛, age: 17 }, { id: 106, name: 大树, age: 27 } ] }, avg: 25 } # 3加载json字符串为json对象 json_obj json.loads(jsonStr) # 4使用jsonpath模块的jsonpath方法提取信息 # eg1 提取所有包含addr属性的老师信息结果为list类型 results jsonpath.jsonpath(json_obj,$..teachers[?(.addr)]) print(results) # 输出结果[{id: 101, name: 华华, addr: 湖南长沙, age: 25}, {id: 103, name: Happy, addr: 广东深圳, age: 16}, {id: 104, name: 歪歪, addr: 广东广州, age: 29}] # eg2提取所有年龄小于20岁的老师的name结果为list类型 results2 jsonpath.jsonpath(json_obj,$.lemon.teachers[?(.age 20)].name) print(results2) # 输出结果为[Happy]使用jsonpath_rw安装jsonpath_rw模块pip install jsonpath-rw解析# 1导入相关模块 import json from jsonpath_rw import jsonpath, parse # 2: 准备json字符串 jsonStr # 同上(略) # 3:加载为json对象 json_obj json.loads(jsonStr) # 4采用parse创建jsonpath对象该案例是得到所有的老师name jsonpath_expr parse($.lemon.teachers[*].name) # 5通过jsonPath检索json后返回匹配的数据类型是DatumInContext的list datumInContexts jsonpath_expr.find(json_obj) # 采用列表推导式检索出所有匹配的值 values [datum.value for datum in datumInContexts] print(values) # 输出结果为[华华, 韬哥, Happy, 歪歪] # 案例2提取索引为4的老师的name jsonpath_expr parse($.lemon.teachers[3].name) datumInContexts jsonpath_expr.find(json_obj) print(datumInContexts) values [datum.value for datum in datumInContexts] print(values) # 结果为[歪歪]最后作为一位过来人也是希望大家少走一些弯路在这里我给大家分享一些软件测试的学习资料这些资料希望能给你前进的路上带来帮助。​视频文档获取方式这份文档和视频资料对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你以上均可以分享点下方小卡片即可自行领取。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询