• 2
  • 3
分享

  应用场景

  在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

1.png

  2.创建用例

  用例一:读取外部文件并进行文件内容的精确对比

  如下图中测试场景:用例中发送了一个get的请求以后,期待回应的代码是200,并列出相应的结果。代码And match response == compareResponse 检验返回的结果与期待的结果是否一致 。在Background中代码:* def compareResponse = read('classpath:src/test/resource/comparedContent.json')  定义了变量compareResponse 是读取的文件comparedContent.json的内容。(注:* 符号实际上可以换作 Given, 读取文件的路径: classpath)

2.png

  如下图所示:comparedContent.json 内容是与 get请求返回的结果一致的。(注: json文件内容格式一定要正确,否则会出现读取文件错误的信息,参看常见错误)

3.png

  用例二:读取外部文件并进行文件内容的模糊对比

  代码And match response == compareResponseIgnoreValue检验返回的结果与期待的结果是否一致 。在Background中定义变量compareResponseIgnoreValue是读取的文件comparedContentIgnoreValue.json。与上例中所不同的是期待文件内容并不完全与返回的相一致。

4.png

  在comparedContentIgnoreValue.json 中,与上一个用例对比,这里可以看到 “text”: 的值换成了“#ignore”,当进行对比时,这个字段的内容会忽略。

5.png

  用例三:使用变量验证某个特定的value是否出现

  在用例一、用例二中,同时出现了代码:And match response.ad.url == adUrl , 这里的adUrl 实际就是Background 中自定义变量 * def adUrl = 'http://statuscode.org/' 。

6.png

  用例四:使用变量验证某个特定的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

7.png

  常见错误

  1.文件读取

  用例一,用例二中,当json文件内容格式不正确时,就会现如下运行错误:

8.png

  2.不使用变量验证不存在的字段

  在用例四中,如果直接用And match response.ad.keyNull == null, 会出现如下错误信息,这是因为在验证的时候,会先寻找对应的路径 ad.keyNull, 在返回的结果中是不存在ad.keyNull字段的。)

9.png

  3.在Background中提前引用response

10.png

  字段的匹配与写法

  如下图所示的正确Json文件格式,整个返回的内容在karate中称做 response。如果要想验证data下的id字段,就可以引用 response.data.id。这里做些补充以免有些初学不清楚如何引用字段(其实这也是我开始学习时感到困惑的哦。)

11.png

  结语

  是不是变量特别好用啊,节省了很多写代码的时间哦,可以看到定义在Background 中的变量看作是全局变量,可以用在任意一个场景中。在某个场景中定义的变量可以说是局部变量。希望小伙伴们灵活灵用,为您的API 测试助力、加油。


作者:胡军英

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 8月16日消息,谷歌面向 Pixel 手机推出 Android 13 正式版。此次 Android 更新进一步增强 Android 12 中引入的 Material You 主题,改进了现有的隐私控制,并引入了在支持的 Android 设备复制和粘贴的功能。通过个性化,谷歌引入了自定义非 Google 应用程序以匹配已设置的主题和颜色的功能,使用户设计的 Material 在智能手机中更具凝聚力。它还包含基于每个应用程序语言设置的更新,并提供更新的媒体播放器和就寝模式。出于隐私考虑,谷歌添加了更精细的权限设置,允许用户仅共享特定的照片和视频,而不是授予对媒体库的完全访问权限。Android 1...
            0 0 998
            分享
          • 信息时代,随着用户数量不断增加,业务量不断增长,企业原有数据库不足以有效支撑业务的发展,在此情况下,企业更多的是寻求一款更加稳定的数据库进行替代。本文以Sybase数据库和Oracle数据库为例。Oracle数据库是目前世界上流行的关系数据库,采用多进程多线索体系结构,而Sybase数据库采用单进程多线索体系结构。两者均采用多线索的模式,该模式能用较少的线索管理大量的用户进程,降低了对系统资源的占用,提高了系统资源的利用率。多进程较单进程的优势在于,能实现数据库事务的并行处理,提高并发事务处理的响应速度,避免了单服务器结构中很容易造成服务器进程瓶颈,进而避免了因此而引起的单服务器进程死锁。因此...
            0 1 3915
            分享
          •   点击链接参加测试行业调查问卷,提交成功之后免费获得独家测试资料,链接:http://vote.51testing.com/  机器学习、人工智能各类KNN算法层出不穷,DBSCAN具有强代表性,它是一个基于密度的聚类算法,最大的优点是能够把高密度区域划分为簇,能够在高噪声的条件下实现对目标的精准识别,但该算法当前已远不能满足人们对于高效率、高精准度的算法要求,由此FDBSCAN算法应运而生。  01  FDBSCAN聚类算法在KD-树的加持下,时间复杂度达到了O(nlogn),目标识别效率已指数级别上升。  02  Kd-树:它是一种树形结构,主要应用于多维空间关键数据的搜索。由于他的增加...
            0 0 1009
            分享
          •   前几天在我创建的技术交流群,几位同学聊起了兼容性测试相关的话题。有测试的方法技巧,有如何选择测试时的切入点,也有在质量和投入成本之间如何做平衡的思考。  翻了翻写过的技术文章,大多集中在后端、中间件以及稳定性测试方面,兼容性测试也有做过专项。这篇文章,我想结合自己对兼容性测试的理解,以及做技术专项的一些经验,谈谈我的一些看法。  如何理解兼容性测试  兼容性测试,最初是为了检查软件在不同的硬件、操作系统以及软件平台上是否可以正常运行,即软件的可移植性和正确性检查。操作系统如 Windows 和 Mac,各种浏览器兼容如Chrome、Firefox、IE。  近几年随着移...
            0 0 673
            分享
          • 1 参数化释义什么是参数化?从字面上去理解的话,就是事先准备好数据(广义上来说,可以是具体的数据值,也可以是数据生成规则),而非在脚本中写死,脚本执行时从准备好的数据中取值。参数化:是自动化测试脚本的一种常用技巧,可将脚本中的某些输入使用参数来代替,如登录时利用GET/POST请求方式传递参数的场景,在脚本运行时指定参数的取值范围和规则。脚本在运行时,根据需要选取不同的参数值作为输入,该方式称为数据驱动测试(Data Driven Test),而参数的取值范围被称为数据池(Data Pool)。JMeter提供了多种参数化方式,下面就其中常用的4种展开阐述。方式适用场景CSV Data Set...
            0 0 2373
            分享
      • 51testing软件测试圈微信