REST-assured 与 Groovy

简介: REST-assured 与 Groovy

1. 概览

在本文中我们将了解如何在 Groovy 中使用 REST-assured。

由于 REST-assured 底层使用 Groovy,我们实际上可以使用原始 Groovy 语法来创建更强大的测试用例。这才是框架真正发挥作用的地方。

有关 REST-assured 所需的设置,可以查看 REST-assured Framework 指北

2. Groovy 集合 API

接下来通过几个简单的例子来快速了解 Groovy 的一些基本概念。

2.1 findAll 方法

在接下来的这个例子中,我们将重点关注方法、闭包和 it 隐式变量。让我们首先创建一个 Groovy 的单词集合:

def words = ['ant', 'buffalo', 'cat', 'dinosaur']
复制代码

现在,让我们使用上面的集合获取长度超过四个字母的单词来创建另一个集合:

def wordsWithSizeGreaterThanFour = words.findAll { it.length() > 4 }
复制代码

findAll() 是一个作用在集合上的方法,并将闭包应用于该方法。该方法定义了作用于集合的逻辑,闭包为该方法提供了一个谓词来定制逻辑。

上述代码告诉 Groovy 循环遍历集合,找到所有长度大于 4 的单词,并将结果返回到一个新的集合中。

2.2 it 变量

隐式变量 it 当前循环中的一个单词。新的集合 wordsWithSizeGreaterThanFour 包含了 buffalodinosaur.

['buffalo', 'dinosaur']
复制代码

除了 findAll() 方法,还有一些其他的 Groovy 方法。

2.3 collect 迭代器

collect 方法它对集合中的每个元素调用闭包函数,并返回一个新集合,其中包含每个元素调用闭包函数的结果。让我们根据单词集合中每个元素的长度创建一个新集合:

def sizes = words.collect{it.length()}
复制代码

结果如下:

[3,7,3,8]
复制代码

我们使用 sum 函数,即将集合中的所有元素相加。我们可以这样获取元素长度集合的总长度:

def charCount = sizes.sum()
复制代码

单词长度集合中所有项目的总和为 21。

2.4 max/min 操作符

max/min 操作符可以查找集合中的最大或最小数:

def maximum = sizes.max()
复制代码

结果为 8。

2.5 find 迭代器

我们使用 find 只搜索一个匹配的集合值。

def greaterThanSeven=sizes.find{it>7}
复制代码

结果 8 是第一个满足条件的集合项。

3. 使用 Groovy 断言 JSON

假设我们在本地有一个服务 http://localhost:8080/odds 该服务会返回最喜欢的足球比赛的赔率列表,如下所示:

{
    "odds": [{
        "price": 1.30,
        "status": 0,
        "ck": 12.2,
        "name": "1"
    },
    {
        "price": 5.25,
        "status": 1,
        "ck": 13.1,
        "name": "X"
    },
    {
        "price": 2.70,
        "status": 0,
        "ck": 12.2,
        "name": "0"
    },
    {
        "price": 1.20,
        "status": 2,
        "ck": 13.1,
        "name": "2"
    }]
}
复制代码

如果我们想验证大于 1 的赔率分别为 1.20 和 5.25,那么我们可以这样做:

@Test
public void givenUrl_whenVerifiesOddPricesAccuratelyByStatus_thenCorrect() {
    get("/odds").then().body("odds.findAll { it.status > 0 }.price",
      hasItems(5.25f, 1.20f));
}
复制代码

上述代码表示使用 Groovy 语法在获取 odds 服务响应的 JSON 数组。因为它有多个项目,所以我们获得了一个 Groovy 集合。然后我们在此集合上调用 findAll 方法。

闭包谓词({} 中的内容)告诉 Groovy 使用 status 大于零的 JSON 对象创建一个新的集合。

price 结束,price 告诉 Groovy 在之前的 JSON 对象列表中创建另一个只有赔率的价格列表。然后将 hasItems Hamcrest 匹配器应用于此列表。

4. 使用 Groovy 断言 XML

假设一个本地服务 http://localhost:8080/teachers 返回了一个包含 teachers 和 id、department 以及 subject 属性的 XML 格式的数据:

<teachers>
    <teacher department="science" id=309>
        <subject>math</subject>
        <subject>physics</subject>
    </teacher>
    <teacher department="arts" id=310>
        <subject>political education</subject>
        <subject>english</subject>
    </teacher>
</teachers>
复制代码

现在,我们可以验证在 department 属性为 scienceteacher 教授的课程为 mathphysics

@Test
public void givenUrl_whenVerifiesScienceTeacherFromXml_thenCorrect() {
    get("/teachers").then().body(
      "teachers.teacher.find { it.@department == 'science' }.subject",
        hasItems("math", "physics"));
}
复制代码

上述代码中使用了 XML 路径 teachers.teacher 来获取 departmentscienceteacher 列表。然后在此列表上调用 find 方法。

我们要查找的闭包谓词确保我们最终只能找到 departmentscienceteacher。我们的 XML 路径终止于 subject

由于有不止一个 subject,我们将得到一个 subject 列表,并使用 hasItems Hamcrest 匹配器进行验证。

5. 总结

在本文中,我们了解了如何将 REST-assured 与 Groovy 语言一起使用。

有关文章中的完整源代码,请查看 GitHub.


相关文章
|
jenkins 持续交付 开发工具
jenkins学习笔记之一:流水线基础语法
jenkins学习笔记之一:流水线基础语法
|
存储 JavaScript
ThreeJS创建关键帧动画
这篇文章讲解了如何在Three.js中利用关键帧轨道 (`KeyframeTrack`) 创建动画效果,并提供了详细的步骤和代码示例。
304 0
|
算法 安全 Java
Java多线程基础-12:详解CAS算法
CAS(Compare and Swap)算法是一种无锁同步原语,用于在多线程环境中更新内存位置的值。
385 0
|
存储 人工智能 网络安全
科技云报到:云服务的中场战事,从AI应用开始
从去年的大模型之战,到今年的AI应用之争,云服务正在迈入全新的发展阶段。AI这个杠杆将各家厂商的竞争策略更向前推进了一步。
271 0
|
iOS开发
Xcode9之后打开Object Library组件库
Xcode9之后打开Object Library组件库
424 1
|
Kubernetes 安全 数据安全/隐私保护
k8s-权限管理
k8s-权限管理
312 1
|
存储 Java Apache
利用 Java 的 ArrayUtils 优化数组操作:简洁高效的数组处理
在 Java 编程中,数组是一种基础且常见的数据结构,用于存储同类型的元素。然而,Java 原生的数组操作有时显得不够便捷和灵活。Apache Commons Lang 库中的 `ArrayUtils` 类提供了一系列方便且高效的数组处理方法,可以大大提升数组操作的效率。本文将带您深入了解 `ArrayUtils` 类,探讨其特点、用法、实现方式以及在实际应用中的优势。
|
机器学习/深度学习 人工智能 算法
Java图像处理与计算机视觉应用
Java图像处理与计算机视觉应用
|
存储 Kubernetes 中间件
【中间件-keycloak】第一次改开源中间件keycloak总个结
【中间件-keycloak】第一次改开源中间件keycloak总个结
868 96
【中间件-keycloak】第一次改开源中间件keycloak总个结
|
存储 Java 程序员
Java 日志框架解析:汇总及最佳实践
在java的世界里有许多实现日志功能的工具,最早得到广泛使用的是 log4j,现在比较流行的是slf4j+logback。作为开发人员,我们有时候需要封装一些组件(二方包)提供给其他人员使用,但是那么多的日志工具,根本没法保证每个组件里都能使用约定好的日志工具,况且还有很多第三方的包,鬼知道他会用什么日志工具。假如一个应用程序用到了两个组件,恰好两个组件使用不同的日志工具,那么应用程序就会有两份日志输出了,蛋疼吧。。 下面简单介绍下常见的日志工具:
12089 2
Java 日志框架解析:汇总及最佳实践