当前位置: 首页 > 科技观察

测试高手进阶之路:接口测试用好“变量”,重复验证也不怕

时间:2023-03-21 11:14:23 科技观察

进阶测试高手之路:接口测试用好“变量”,反复验证不怕在这种情况下,我们最喜欢使用的是变量。可以访问外部数据或定义内部变量,使代码简洁易读,测试用例的结果也可以一致运行。学习要点如何读取外部文件并进行文件内容的精确比较如何读取外部文件并进行文件内容的模糊比较使用变量验证是否出现特定值使用变量验证是否出现特定键示例中获取url:https://reqres.in/api/users/2准备工作如果你想按照下面的例子,你需要做如下配置:·测试框架:Java+Karate+Junit5·语言:Java,CucumberIDE:IntellijIDEA项目类型:Maven创建测试场景1.创建特性文件:testvar-use.feature2.创建用例用例1:读取一个外部文件,准确比对文件内容下图中的测试场景:send在用例中发出get请求后,预期的响应码为200,并列出对应的结果。代码Andmatchresponse==compareResponse检查返回结果是否与预期结果一致。后台代码:*defcompareResponse=read('classpath:src/test/resource/comparedContent.json')将变量compareResponse定义为读取文件compareContent.json的内容。(注:*符号其实可以换成Given,读取文件的路径:classpath)如下图:compareContent.json的内容与get请求返回的结果一致。(注意:json文件的内容格式一定要正确,否则读取文件会报错,见常见错误)用例2:读取外部文件,对文件内容进行模糊比较Code和matchresponse==compareResponseIgnoreValue来检查返回的结果是否和预期的结果一致。在后台定义变量compareResponseIgnoreValue来读取文件compareContentIgnoreValue.json。与前面示例的不同之处在于预期的文件内容与返回的内容不完全匹配。在compareContentIgnoreValue.json中,与之前的用例相比,可以看到“text”:的值被替换成了“#ignore”。比较时,该字段的内容将被忽略。用例3:使用变量验证用例1和用例2中是否出现特定值,代码同时出现:并匹配response.ad.url==adUrl,其中adUrl其实是一个自定义变量*背景中的defadUrl='http://statuscode.org/'。用例4:使用变量来验证特定键是否出现在以下场景中。代码Andmatchresponse.ad.text!=null验证ad下的文本字段必须存在于返回的结果中。下面两行代码先定义一个变量notPresentedKey,赋值给对应ad下的keyNull字段,然后验证notPresentedKey不存在。这里的变量是必须的,否则会出现找不到路径的错误。(参见常见错误)本例中不能将此变量放在Background中,因为response是发送get请求后返回的结果。如果放在后台一直没有返回response,引用就会出错。(见常见错误)*defnotPresentedKey=response.ad.keyNullAndmatchnotPresentedKey==null常见错误1.文件读取用例1,用例2,当json文件的内容格式不正确时,会出现如下运行错误:2.不要使用变量来验证不存在的字段。用例4,如果直接使用Andmatchresponse.ad.keyNull==null,会出现如下错误信息。这是因为验证时会先搜索对应的路径广告。keyNull,返回结果中不存在ad.keyNull字段。)3.后台参照下图正确的Json文件格式提前匹配写入response字段。整个返回的内容在空手道中称为响应。如果要校验data下的id字段,可以参考response.data.id。这里补充一下,让一些初学者不知道怎么引用字段(其实我刚开始学的时候也是迷茫的就是这个)conclusion变量是不是很好用?它节省了大量编写代码的时间。可以看到Background中的定义中的变量被视为全局变量,可以在任何场景中使用。场景中定义的变量可以说是局部变量。希望各位小伙伴灵活变通,为你们的API测试提供帮助和加油。