JMeter - REST API測試 - 完整的數據驅動方法(翻譯)

https://github.com/vinsguru/jmeter-rest-data-drivern/tree/mastergit

在本文中,我想向您展現一種用於REST API測試的數據驅動方法。若是你是新來的JMeter / REST API測試,我想讀這篇文章首先獲得一些想法。github

目標:

咱們的目標是提出一個框架,用不一樣的HTTP方法測試REST API。此測試將經過電子表格進行,電子表格將包含全部輸入參數,API URL,HTTP方法,請求JSON,文本響應應用於斷言等。數據庫

經過使用一個HTTP Sampler,咱們但願發送不一樣類型的請求GET / POST / PUT / PATCH / DELETE。 甚至HTTP請求正文數據也將在運行時動態添加。json

JSON服務器:

我將使用此JSON-Server進行此測試。您能夠在一分鐘內快速設置並運行。若是有,您也可使用您的應用程序API。api

安裝完成後,使用如下命令啓動服務器。
json-server --watch db.json服務器

個人db.json看起來像這樣。app

1
2
3
4
6
7
8
9
10
11
{
    "books" :[
 
    ],
    "comments" :[
 
    ],
    "profile" :{
       "name" : "typicode"
    }
}

測試場景:

讓咱們假設,咱們但願將這些場景做爲REST API功能測試的一部分來執行。測試描述提供了關於測試用例的高級想法。框架

rest005

若是全部請求實際上都相同且只有數據不一樣,以下所示,咱們可使用1個HTTP Sampler和一個CSV DataSet Config輕鬆地在JMeter中進行數據驅動測試測試

csv1

但在咱們的例子中,咱們有1個GET請求,而後是5個POST請求,而後是1個GET請求......等等。咱們發送不一樣類型的請求。所以,咱們最終可能會建立咱們的測試計劃,如此處所示spa

rest006

若是咱們須要測試成千上萬的場景,會發生什麼!! 咱們怎樣才能保持如此龐大的JMeter測試?

數據驅動測試:

爲了經過電子表格徹底推進測試,在仔細分析這些請求以後,讓咱們將這些HTTP請求中可能不一樣的任何數據移動到電子表格中,如此處所示。

rest004

  • #1 - 一個簡單的GET請求,用於從圖書類別中獲取全部項目。對於第一個測試用例,咱們沒有任何數據。因此,它應該以空列表響應。
  • #2-#6 - 咱們使用POST請求添加具備不一樣標題和做者的新書這些測試用例input.json以下所示。咱們將在運行時使用電子表格中的相應數據替換標題做者。
1
2
3
4
{
   "title" "${title}" ,
   "author" : "${author}"
}
  • #7&#9 - 針對特定書籍詳細信息的簡單GET請求,以檢查POST / PUT請求是否正常工做。
  • #8 - PUT請求簡單地用給定數據替換DB中的當前項。
1
2
3
4
{
   "title" "${title}" ,
   "author" : "${author}" ,
   "price" : "$10.00"
}
  • #10 - 專門更新DB中當前項的數據的PATCH請求。
1
2
3
{
   "title" : "${title}"
}
  • #11#12 - DELETE請求從數據庫中刪除項目。

因爲咱們已將全部變量移動到電子表格,如今經過在JMeter測試中只有一個HTTP Sampler並經過在運行時設置HTTP Sampler屬性/屬性,咱們能夠運行整個測試。

JMeter測試計劃:

  • 我添加了一個  CSV數據集配置  - 讀取測試場景和輸入參數。

rest007

 

  • 添加HTTP Sampler並更新詳細信息。讓方法具備一些默認選擇。還添加一個帶有Content-Type的Header Manager  做爲application / json

rest008

  • 添加JSR223 - PreProcessor。這應該負責根據電子表格中的值更改HTTP方法。它還爲POST / PUT / PATCH請求設置HTTP請求正文數據。

DD-rest009

 

如下語句更改當前的採樣器HTTP方法。

def httpMethod = vars.get("http.method");
sampler.setMethod(httpMethod);

咱們使用如下語句來更改HTTP Body。咱們讀取input.json文件,而後用相應的數據替換any變量

def dataToBePosted = new CompoundVariable(new File(vars.get("jmeter.test.home") + vars.get("input.json")).text).execute();
def arg= new HTTPArgument("", dataToBePosted, null, true);
arg.setAlwaysEncoded(false);
sampler.getArguments().addArgument(arg);

  • 最後一步是添加斷言。

休息

  • 運行測試計劃。

DD-rest011

下載:

您能夠檢查JMeter測試計劃,這裏在GitHub上。

摘要:

經過將全部變量移動到電子表格並使用1個HTTP採樣器,咱們能夠測試不一樣類型的請求。在此測試計劃中添加任何新測試都很是簡單。如您所知,咱們必須在電子表格中再插入一行,併爲新測試提供足夠的信息。經過查看電子表格,您能夠輕鬆瞭解咱們的報道。使用此方法對測試數據的任何更新也很容易,而不是更新JMeter中的每一個單獨的HTTP請求。

相關文章
相關標籤/搜索