JMeter

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

在本文中,我想向您展示一种用于REST API测试的数据驱动方法。如果你是新来的JMeter / REST API测试,我想读这篇文章首先得到一些想法。

目标:

我们的目标是提出一个框架,用不同的HTTP方法测试REST API。此测试将通过电子表格进行,电子表格将包含所有输入参数,API URL,HTTP方法,请求JSON,文本响应应用于断言等。

通过使用一个HTTP Sampler,我们希望发送不同类型的请求GET / POST / PUT / PATCH / DELETE。 甚至HTTP请求正文数据也将在运行时动态添加。

JSON服务器:

我将使用此JSON-Server进行此测试。您可以在一分钟内快速设置并运行。如果有,您也可以使用您的应用程序API。

安装完成后,使用以下命令启动服务器。
json-server --watch db.json

我的db.json看起来像这样。

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请求......等等。我们发送不同类型的请求。因此,我们最终可能会创建我们的测试计划,如此处所示

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

原文地址:https://www.cnblogs.com/a00ium/p/10381238.html