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.


相关文章
|
1月前
|
XML JSON 网络架构
什么是 REST?
REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。
52 5
|
API 网络架构
REST 和非REST 究竟什么区别?
REST 和非REST 究竟什么区别?
128 0
|
JSON 前端开发 Java
到底什么样的 REST 才是最佳 REST?
到底什么样的 REST 才是最佳 REST?
|
XML JSON Java
Grpc, a framework different from REST !
REST是大家耳熟能详的框架,那么你知道GRPC吗?GRPC是相对于REST具有较多优势的新兴的框架,你不知道的话,快来看看吧!
228 1
Grpc, a framework different from REST !
|
XML JSON Java
REST-assured Framework 指北
REST-assured Framework 指北
|
XML 存储 JSON
REST 十诫
本文最初发表于 Treblle 网站,经原作者 Vedran Cindrić 授权,InfoQ 中文站翻译并分享。
150 0
REST 十诫
|
应用服务中间件 API nginx
|
Web App开发 网络架构
|
Web App开发 缓存 前端开发
|
Web App开发 XML 网络架构