1. 概述
在本教程中,我們將學習如何使用 REST-assured 庫與 Groovy 結合使用。
由於 REST-assured 在底層使用 Groovy,我們實際上有機會使用原始 Groovy 語法創建更強大的測試用例。 這就是框架真正發揮作用的地方。
有關使用 REST-assured 所需的設置,請參閲我們之前的文章。
2. Groovy 的集合 API
讓我們先快速瞭解一些基本的 Groovy 概念,並通過幾個簡單的示例來幫助我們掌握所需的內容。
2.1. findAll 方法
在本示例中,我們將重點關注 <em >方法</em >、閉包以及 <em >it</em > 隱式變量。 讓我們首先創建一個 Groovy 單詞集合:it 隱式變量。 讓我們首先創建一個 Groovy 單詞集合:
def words = ['ant', 'buffalo', 'cat', 'dinosaur']現在,我們再從上面創建一組長度超過四個字母的單詞:
def wordsWithSizeGreaterThanFour = words.findAll { it.length() > 4 }這裏,findAll() 是一個應用於集合的方法,並使用閉包應用於該方法。 方法定義了應用於集合的邏輯,而閉包為方法提供了一個謂詞,用於自定義邏輯。
我們告訴 Groovy 遍歷集合,查找所有長度大於四的單詞,並將結果返回到一個新的集合中。
2.2. it 變量
<p>隱式變量it持有循環中的當前單詞。新的集合wordsWithSizeGreaterThanFour將包含單詞buffalo和dinosaur。</p>
['buffalo', 'dinosaur']除了 findAll(),還有其他的 Groovy 方法。
2.3. collect 迭代器
最後,有 collect,它會遍歷集合中的每個項目,並返回一個包含每個結果的新集合。 讓我們從 <em>words</em> 集合中每個項目的尺寸創建一個新集合:
def sizes = words.collect{it.length()}
結果:
[3,7,3,8]我們使用 sum,正如其名稱所示,用於對集合中的所有元素求和。 我們可以像這樣對 sizes 集合中的項目求和:
def charCount = sizes.sum()並且結果將是 21,即所有 words 集合中項目的字符數量。
2.4. 最大/最小值運算符
最大/最小值運算符直觀地命名,用於在集合中查找最大或最小值。
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 和 50.25,則執行以下操作:
@Test
public void givenUrl_whenVerifiesOddPricesAccuratelyByStatus_thenCorrect() {
get("/odds").then().body("odds.findAll { it.status > 0 }.price",
hasItems(5.25f, 1.20f));
}這裏發生的事情是這樣的:我們使用 Groovy 語法加載 JSON 數組,其鍵為 odds。由於它包含多個項目,因此我們獲得一個 Groovy 集合。然後我們調用該集合上的 findAll 方法。
閉包謂詞告訴 Groovy 創建一個包含狀態大於零的 JSON 對象的新集合。
我們以 price 結尾,這告訴 Groovy 創建一個僅包含先前 JSON 對象列表中 odds 的價格的新列表。然後我們應用 Hamcrest 匹配器 hasItems 到該列表。
4. 使用 Groovy 驗證 XML
假設我們有一個服務位於 http://localhost:8080/teachers,它返回教師列表,這些教師的 ID、部門和所教授的科目如下所示:
<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 通過 XML 屬性 department 獲取教師列表。然後我們調用該列表上的 find 方法。
我們的閉包謂詞用於 find 確保我們最終只得到來自 science 部門的教師。我們的 XML 路徑終止於 subject 標籤。
由於存在多個科目,我們將獲得一個列表,並使用 hasItems Hamcrest 匹配器對其進行驗證。
5. 結論
在本文中,我們瞭解到如何使用 REST-assured 庫與 Groovy 語言結合使用。