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请求。

相关文章
相关标签/搜索