1. 概述
本教程将探讨如何在 REST-assured 中结合使用 Groovy 语言。由于 REST-assured 底层依赖 Groovy,我们有机会直接使用 Groovy 语法构建更强大的测试用例——这正是该框架真正的魅力所在。
关于 REST-assured 的基础配置,请参考我们的前一篇文章。
2. Groovy 集合 API
快速了解几个核心 Groovy 概念,通过简单示例掌握所需技能。
2.1. findAll 方法
重点关注方法、闭包和隐式变量 it
。首先创建一个单词集合:
def words = ['ant', 'buffalo', 'cat', 'dinosaur']
现在筛选长度超过 4 个字母的单词:
def wordsWithSizeGreaterThanFour = words.findAll { it.length() > 4 }
✅ findAll()
是集合方法,接收闭包作为参数
✅ 方法定义集合操作逻辑
✅ 闭包提供自定义谓词
Groovy 会遍历集合,将满足长度 > 4 的单词存入新集合。
2.2. it 隐式变量
it
代表循环中的当前元素。新集合 wordsWithSizeGreaterThanFour
将包含:
['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 操作符
直观查找集合中的最大/最小值:
def maximum = sizes.max()
结果显然是 8。
2.5. find 迭代器
find
仅返回首个满足条件的元素:
def greaterThanSeven=sizes.find{it>7}
结果为 8(首个大于 7 的元素)。
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"
}]
}
验证 status > 1 的赔率 price 为 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));
}
⚠️ 执行流程:
- 通过
odds
键获取 JSON 数组(Groovy 集合) - 调用
findAll
筛选 status > 0 的对象 - 提取这些对象的
price
值组成新列表 - 使用 Hamcrest 的
hasItems
验证列表内容
4. 使用 Groovy 验证 XML
服务 http://localhost:8080/teachers
返回教师数据:
<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>
验证科学系教师教授数学和物理:
@Test
public void givenUrl_whenVerifiesScienceTeacherFromXml_thenCorrect() {
get("/teachers").then().body(
"teachers.teacher.find { it.@department == 'science' }.subject",
hasItems("math", "physics"));
}
⚠️ 执行流程:
- 通过 XML 路径
teachers.teacher
获取教师列表 - 使用
find
筛选 department="science" 的教师 - 提取该教师的
subject
标签值(返回列表) - 用
hasItems
验证列表包含 "math" 和 "physics"
5. 总结
本文展示了如何结合 REST-assured 与 Groovy 语言进行高效测试验证。通过 Groovy 的集合操作和闭包特性,我们可以:
- ✅ 简化复杂 JSON/XML 的断言逻辑
- ✅ 用链式调用提升代码可读性
- ✅ 利用 Groovy 语法糖减少样板代码
掌握这些技巧后,编写 API 测试将变得更加简单粗暴且高效。