• 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软件测试网原创

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 并发测试和持续性压测都是评估系统性能的常用方法,它们可以帮助开发人员发现并解决系统中的性能问题。本文来详细介绍下。概念并发测试: 旨在评估系统在同时处理多个用户请求时的性能。在这种 测试 中,系统会暴露于一定数量的用户负载下,并且会记录系统的响应时间、吞吐量和资源利用率等指标。这些指标可以用来确定系统的性能瓶颈,以及在不同负载下系统的表现。持续性压测: 旨在评估系统在长时间运行或高负载下的性能。在这种测试中,系统会暴露于一定数量的用户负载下,并且会持续一段时间运行,通常在几个小时或几天。这种测试可以用来确定系统在长时间运行下的表现,以及在高负载下系统是否具有可扩展性。并发测试在并发测试中,需要...
            0 0 1716
            分享
          •   内存泄漏是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放。短期一般没有明显异常现象,但持续泄漏一定时间后,应用层面会出现交易TPS下降、响应耗时增长、交易成功率下降、CPU升高等异常现象,甚至出现内存溢出,系统宕机等现象,其危害相当严重。  本文对WAS内存泄漏测试过程中的经验进行小结,通过对GC输出分析内存泄漏的最常用操作和场景分析思路的汇总,为测试人员高效高质量的完成性能测试工作提供技术指导。  一、WebSphere 应用服务器的 GC 日志获取  (1)首次获取日志文件,需登陆 WebSphere 公共管理控制台,开启“详细垃圾回收”,设置初始堆大小和最大堆大小。后期测...
            14 14 2107
            分享
          •   引言  一款完整的游戏,不仅有精美的画面,还有符合游戏的音乐、音效与配音。音乐提升玩家氛围,配音引导玩家,音效是游戏内涵的补充,它可以更好展现游戏开发者架构整个游戏的价值取向。  优秀的游戏音效可以让玩家在赏玩游戏之后,产生“余音绕梁三日而不绝” 的共鸣,这样游戏内涵也得到了提升,并更有效地延长了游戏的生命力。  1.游戏音效的分类  (1)环境音效:环境音效主要用于营造场景或者关卡的氛围和情绪,包括了下雨天、刮风、晴天、等天气相关的音效以及风吹的声音等其他与环境有关的音效。  (2)场景音效:场景音效的作用与环境音效一致。是场景内的各类物件的音效,主要是角色同物件交互时的音效。如打碎瓦罐...
            0 0 651
            分享
          • 作为测试Leader接手一个新业务,怎么干?当你作为测试负责人接手了一个新业务,你可能会面临这么两个核心的问题:产品质量如何保障?QA 团队如何建设?这两个问题看似一个是职能方向,一个是业务方向,实质两者是相辅相成的。在本文中我将分享一些实践过程中的思路。整体的思路按照如下展开:01 融入环境核心原则:将自己全身心投入到一线项目,做一个好的沟通者、观察者和记录者。切忌 “新官” 上任 “三把火”,融入环境是第一要务。环境中的因素有很多,抓住“人” 与 “事”这两个核心要素。人:团队的全体成员,建立相互了解和认知的桥梁,覆盖团队中的每一位角色——开发、产品、测试、运维、设计、交互等等。怎么做?工...
            0 0 1829
            分享
          •   据报道,当地时间周一,Twitter首席执行官埃隆·马斯克将公司网站上的蓝鸟图标换成了数字货币标志柴犬的图片,此举推动加密货币狗狗币的价格飙升超过30%。  上周五,Twitter和马斯克的律师要求联邦法官驳回一项价值2580亿美元的诉讼,该诉讼于2022年指控这位亿万富翁操纵狗狗币价格,使其上涨超过36000%。  Twitter的标志被改成柴犬后,马斯克在Twitter上向他的1.335亿粉丝分享了一个这一变化的表情包。这个柴犬图片只会出现在一些Twitter用户面前,其中包括网站上的用户。  目前,Twitter没有回应置评请求。  几年前马斯克就开始兜售狗狗币。他定期在推文上谈论这...
            0 0 897
            分享
      • 51testing软件测试圈微信