接口测试:用好“变量”,重复验证也不怕

发表于:2020-9-16 10:14

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:胡军英    来源:51Testing软件测试网原创

  应用场景
  在API的测试中,有时候需求是对整个文件进行检验而不是某个特定的值,或者说要对某个特定的值在不同的用例中重复地进行验证。这种状况下,我们最喜欢用的就是变量。可以存取外部数据或定义内部变量,使代码变得简洁、又有可阅读性,同时测试用例结果运行也能保持一致性。
  学习要点
  ·如何读取外部文件并进行文件内容的精确对比
  ·如何读取外部文件并进行文件内容的模糊对比
  ·使用变量验证某个特定的value是否出现
  ·使用变量验证某个特定的key是否出现
  示例中get url: https://reqres.in/api/users/2
  准备工作
  如果您想跟着以下示例操作,需要做好以下配置:
  ·测试框架: Java + Karate + Junit 5
  ·语言: Java, Cucumber
  ·IDE: Intellij IDEA
  ·项目类型: Maven
  创建测试场景
  1.创建feature文件: testvar-use.feature
  2.创建用例
  用例一:读取外部文件并进行文件内容的精确对比
  如下图中测试场景:用例中发送了一个get的请求以后,期待回应的代码是200,并列出相应的结果。代码And match response == compareResponse 检验返回的结果与期待的结果是否一致 。在Background中代码:* def compareResponse = read('classpath:src/test/resource/comparedContent.json')  定义了变量compareResponse 是读取的文件comparedContent.json的内容。(注:* 符号实际上可以换作 Given, 读取文件的路径: classpath)
  如下图所示:comparedContent.json 内容是与 get请求返回的结果一致的。(注: json文件内容格式一定要正确,否则会出现读取文件错误的信息,参看常见错误)
  用例二:读取外部文件并进行文件内容的模糊对比
  代码And match response == compareResponseIgnoreValue检验返回的结果与期待的结果是否一致 。在Background中定义变量compareResponseIgnoreValue是读取的文件comparedContentIgnoreValue.json。与上例中所不同的是期待文件内容并不完全与返回的相一致。
  在comparedContentIgnoreValue.json 中,与上一个用例对比,这里可以看到 “text”: 的值换成了“#ignore”,当进行对比时,这个字段的内容会忽略。
  用例三:使用变量验证某个特定的value是否出现
  在用例一、用例二中,同时出现了代码:And match response.ad.url == adUrl , 这里的adUrl 实际就是Background 中自定义变量 * def adUrl = 'http://statuscode.org/' 。
  用例四:使用变量验证某个特定的key是否出现
  在下面的场景中,代码And match response.ad.text != null 验证了返回结果中ad下text 字段必须存在。
  下面两行代码先定义了一个变量notPresentedKey 并且赋予对应的ad下keyNull的字段,然后再验证notPresentedKey 不存在。这里的变量是必需的,否则会出现找不到路径错误。(参看常见错误)
  这个变量不能放在Background 在本示例中,因为response是发送get请求以后返回的结果,如果放在Background中,response 还没有返回,引用就会有错。(参看常见错误)
  * def notPresentedKey = response.ad.keyNull
  And match notPresentedKey == null
  常见错误
  1.文件读取
  用例一,用例二中,当json文件内容格式不正确时,就会现如下运行错误:
  2.不使用变量验证不存在的字段
  在用例四中,如果直接用And match response.ad.keyNull == null, 会出现如下错误信息,这是因为在验证的时候,会先寻找对应的路径 ad.keyNull, 在返回的结果中是不存在ad.keyNull字段的。)
  3.在Background中提前引用response
  字段的匹配与写法
  如下图所示的正确Json文件格式,整个返回的内容在karate中称做 response。如果要想验证data下的id字段,就可以引用 response.data.id。这里做些补充以免有些初学不清楚如何引用字段(其实这也是我开始学习时感到困惑的哦。)
  结语
  是不是变量特别好用啊,节省了很多写代码的时间哦,可以看到定义在Background 中的变量看作是全局变量,可以用在任意一个场景中。在某个场景中定义的变量可以说是局部变量。希望小伙伴们灵活灵用,为您的API 测试助力、加油。

  本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号