出品 | 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 测试助力、加油。

END

如果你有任何关于测试的问题或者想要了解的知识,欢迎评论区留言给我们,小编会在第一时间给你解答的~

推荐阅读

点击阅读☞领导让我做API测试,幸好有这篇实战经验让我把学到的技术融会贯通!

点击阅读☞API接口渗透测试究竟有多少测试方法?在这里可以找到答案!

点击阅读☞五分钟就能入门?我就看看API测试能有多简单易懂!

点击阅读☞API测试全接触:策略、类型、步骤和自动化测试工具

点击阅读☞JMeter接口测试—获取所有任务API

carbon 验证时间格式_接口测试:用好“变量”,重复验证也不怕相关推荐

  1. Java验证时间格式是否正确

    Java验证时间格式是否正确 /*** @author * @Description 时间格式校验* @Version 1.0* @since */ public class IsLegalDate ...

  2. python to_excel 时间格式_分别用Excel和python进行日期格式转换成时间戳格式

    最近在处理一份驾驶行为方面的数据,其中要用到时间戳,因此就在此与大家一同分享学习一下. 1.什么是时间戳? 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01 ...

  3. Java 中验证时间格式的 4 种方法

    大家好,今天咱们来讲一下,Java 中如何检查一个字符串是否是合法的日期格式? 为什么要检查时间格式? 后端接口在接收数据的时候,都需要进行检查.检查全部通过后,才能够执行业务逻辑.对于时间格式,我们 ...

  4. JavaScript验证时间格式

    1. 短时间,形如 (13:04:06) function isTime(str) { var a = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/) ...

  5. 交叉学习验证 西瓜书_机器学习:数据划分与交叉验证

    函数1:train_test_split from sklearn.model_selection import train_test_split # 数据划分所需的函数X_train, X_test ...

  6. java 验证时间格式 效率_有关Java中日期格式化的效率实录

    java中格式化日期为固定格式的字符串,无外乎有两种方法:DateFormat 和String.format(JDK1.5+) 但是哪个方法效率更高呢?本人做了一个实验,发现了一个很有趣的现象. 当系 ...

  7. python 日期格式校验_python – 如何验证时间格式?

    这就是我到目前为止,它可能完全是垃圾.我想要做的是验证caminput1,以便格式为HH:MM:SS. 哈希是从我测试时开始的. def cameraspeedcheck(): timeformat ...

  8. 计算机右下角时间格式,电脑右下角时间格式_电脑右下角时间不准

    2016-12-10 14:32:21 你好,据我所知,WIN7系统设置电脑时间无法显示秒数.即使在时间设置格式中加入了秒SS,电脑右下角托盘中还是只显示到分.且没有必要显示到秒,若要暂时显示到秒,可 ...

  9. mysql返回指定时间格式_【MySQL】查询日期返回指定格式

    查询日期返回固定格式 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS nowDate FROM table_name // 2020-09-25 2 ...

最新文章

  1. PAT乙级-1063. 计算谱半径(20)
  2. [体感游戏]关于体感游戏的一些思考(三) --- 射击
  3. java 生成 tar.gz_一文教您如何通过 Java 压缩文件,打包一个 tar.gz Filebeat 采集器包...
  4. 7年老Android一次操蛋的面试经历,讲的太透彻了
  5. Edge浏览器怎么打开开发者模式
  6. JavaEE实战班第16天
  7. 基于分位数回归的动态CoVaR计算 案例与代码
  8. HTTP GET 和 POST 的区别
  9. php表格批量修改数据,php批量修改数据库表名前缀
  10. 编写一个关于浏览器盒子模型的方法
  11. =====BJmeter性能测试小接=====
  12. tornado异步请求的理解
  13. Java_泛型练习题
  14. 计算机的病毒防治教案,小学信息技术《防治计算机病毒-计算机病毒》教案
  15. 网站建设的一般原则及网站推广技巧
  16. 首发速看:智微JMS901双接口U盘成功量产,附量产工具软件+固件+教程分享
  17. python获取鼠标选取的内容_Python三维可视化:鼠标选取交互操作
  18. Unity Shader GrabPass 使用注意的问题
  19. centos编译Aegisub
  20. 艾默生质量流量计用于流量测量的作用意义

热门文章

  1. 目标检测特殊层:ROI Align层详解
  2. Redis 错误1067:进程意外终止,Redis不能启动,Redis启动不了
  3. Spring Boot集成Jasypt安全框架
  4. vSphere ESX 4 安装图解
  5. Mui --- app与服务器之间的交互原理、mui ajax使用
  6. easyui中combobox 验证输入的值必须为选项框中的数据
  7. FuncT,TResult泛型委托
  8. C# MD5加密解密帮助类
  9. ASP.NET中TextBox控件设置ReadOnly=true后台取不到值
  10. 将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法(亲测)