lsekfe 发表于 2020-11-24 10:03:02

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

 应用场景
  在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 测试助力、加油。



页: [1]
查看完整版本: 接口测试:用好“变量”,重复验证也不怕