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-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功能測試的一部分來執行。測試描述提供了關於測試用例的高級想法。框架
若是全部請求實際上都相同且只有數據不一樣,以下所示,咱們可使用1個HTTP Sampler和一個CSV DataSet Config輕鬆地在JMeter中進行數據驅動測試。測試
但在咱們的例子中,咱們有1個GET請求,而後是5個POST請求,而後是1個GET請求......等等。咱們發送不一樣類型的請求。所以,咱們最終可能會建立咱們的測試計劃,如此處所示spa
若是咱們須要測試成千上萬的場景,會發生什麼!! 咱們怎樣才能保持如此龐大的JMeter測試?
爲了經過電子表格徹底推進測試,在仔細分析這些請求以後,讓咱們將這些HTTP請求中可能不一樣的任何數據移動到電子表格中,如此處所示。
1
2
3
4
|
{
"title"
:
"${title}"
,
"author"
:
"${author}"
}
|
1
2
3
4
五
|
{
"title"
:
"${title}"
,
"author"
:
"${author}"
,
"price"
:
"$10.00"
}
|
1
2
3
|
{
"title"
:
"${title}"
}
|
因爲咱們已將全部變量移動到電子表格,如今經過在JMeter測試中只有一個HTTP Sampler並經過在運行時設置HTTP Sampler屬性/屬性,咱們能夠運行整個測試。
如下語句更改當前的採樣器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);
您能夠檢查JMeter測試計劃,這裏在GitHub上。
經過將全部變量移動到電子表格並使用1個HTTP採樣器,咱們能夠測試不一樣類型的請求。在此測試計劃中添加任何新測試都很是簡單。如您所知,咱們必須在電子表格中再插入一行,併爲新測試提供足夠的信息。經過查看電子表格,您能夠輕鬆瞭解咱們的報道。使用此方法對測試數據的任何更新也很容易,而不是更新JMeter中的每一個單獨的HTTP請求。