1. 概述
在本教程中,我們將探討如何使用 REST-assured 庫與 Groovy 結合使用。
由於 REST-assured 在底層使用 Groovy,我們實際上有機會使用原始 Groovy 語法創建更強大的測試用例。 這就是框架真正發揮作用的地方。
有關使用 REST-assured 所需的設置,請參閲我們之前的文章。
2. Groovy’s Collection API
讓我們從快速瀏覽一些基本的 Groovy 概念開始,並提供一些簡單的示例,幫助我們掌握所需的內容。
2.1. The findAll Method
在這個例子中,我們將關注 方法、閉包和 it 隱式變量。 讓我們首先創建一個 Groovy 單詞集合:
def words = ['ant', 'buffalo', 'cat', 'dinosaur']
現在,讓我們從上面的集合中創建一個包含長度超過四位的單詞的集合:
def wordsWithSizeGreaterThanFour = words.findAll { it.length() > 4 }
這裏,findAll() 是一個應用於集合的方法,其中一個 閉包應用於該方法。 方法定義了應用於集合的邏輯,而 閉包為方法提供了一個謂詞,用於自定義邏輯。
我們告訴 Groovy 遍歷集合並查找長度大於四位且返回結果到新集合。
2.2. The it Variable
隱式變量 it 包含循環中的當前單詞。 新集合 wordsWithSizeGreaterThanFour 將包含單詞 buffalo 和 dinosaur。
[‘buffalo’, ‘dinosaur’]
除了 findAll(),還有其他 Groovy 方法。
2.3. The collect Iterator
最後,有 collect,它調用閉包對集合中的每個項目,並返回一個包含每個結果的新集合。 讓我們創建一個新集合,其中包含 words 集合中每個項目的尺寸:
def sizes = words.collect{it.length()}
結果:
[3,7,3,8]
我們使用 sum,正如名稱所暗示的,將集合中的所有元素相加。 我們可以像這樣對 sizes 集合中的項目求和:
def charCount = sizes.sum()
並且結果將是 21,所有 words 集合中的字符計數。
2.4. The max/min Operators
max/min 運算符直觀地命名,用於查找集合中的最大或最小值:
def maximum = sizes.max()
結果應該顯而易見,8。
2.5. The find Iterator
我們使用 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 創建另一個包含狀態大於零的 JSON 對象,該集合。
我們以 price 結尾,這告訴 groovy 創建僅包含之前 JSON 對象列表中賠率的列表。然後我們應用 hasItems Hamcrest 匹配器到該列表。
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 語言結合使用。