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功能测试的一部分来执行。测试描述提供了关于测试用例的高级想法。

如果所有请求实际上都相同且只有数据不同,如下所示,我们可以使用1个HTTP Sampler和一个CSV DataSet Config轻松地在JMeter中进行数据驱动测试。

但在我们的例子中,我们有1个GET请求,然后是5个POST请求,然后是1个GET请求......等等。我们发送不同类型的请求。因此,我们最终可能会创建我们的测试计划,如此处所示

如果我们需要测试成千上万的场景,会发生什么!! 我们怎样才能保持如此庞大的JMeter测试?

数据驱动测试:

为了通过电子表格完全推动测试,在仔细分析这些请求之后,让我们将这些HTTP请求中可能不同的任何数据移动到电子表格中,如此处所示。

  • #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数据集配置  - 读取测试场景和输入参数。

  • 添加HTTP Sampler并更新详细信息。让方法具有一些默认选择。还添加一个带有Content-Type的Header Manager  作为application / json

  • 添加JSR223 - PreProcessor。这应该负责根据电子表格中的值更改HTTP方法。它还为POST / PUT / PATCH请求设置HTTP请求正文数据。

以下语句更改当前的采样器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请求。

JMeter - REST API测试 - 完整的数据驱动方法(翻译)的更多相关文章

  1. 使用JMeter进行RESTful API测试

    使用JMeter进行RESTful API测试 在哪里设置实现最优脚本重用的属性 由于支持云的应用程序通常可以轻松.快速地进行复制和部署,所以可以在多种环境中对其进行测试.如果您需要在多个环境中测试和 ...

  2. JMETER进行REST API测试(分步指南)

    我确定你在这里是因为你需要加载测试Json Rest API.这并不奇怪,因为Rest API现在越来越受欢迎. 这本指南的目的:帮助您进行负载测试一个Json的 REST API 通过一个具体的例子 ...

  3. 使用JMETER进行REST API测试

    我确定你在这里是因为你需要加载测试Json Rest API.这并不奇怪,因为Rest API现在越来越受欢迎. 这本指南的目的:帮助您进行负载测试一个Json的 REST API 通过一个具体的例子 ...

  4. 使用JMETER进行REST API测试(分步指南)

    我确定你在这里是因为你需要加载测试Json Rest API.这并不奇怪,因为Rest API现在越来越受欢迎. 这本指南的目的:帮助您进行负载测试一个Json的 REST API 通过一个具体的例子 ...

  5. ES5新增数组方法测试和字符串常见API测试

    首先是ES5新增数组方法测试: <!DOCTYPE html><html lang="en"><head> <meta charset=& ...

  6. 使用JMeter进行负载测试——终极指南

    这篇教程讨论的是JMeter,它是一款基于Java的.集合了几个应用程序.具有特定用途的负载和性能测试工具. 本篇主要涉及的内容: 解释一下JMeter的用途 JMeter的实现方式以及采用的技术 安 ...

  7. 【转】使用JMeter进行负载测试——终极指南

    使用JMeter进行负载测试——终极指南 这篇教程讨论的是JMeter,它是一款基于Java的.集合了几个应用程序.具有特定用途的负载和性能测试工具. 本篇主要涉及的内容: 解释一下JMeter的用途 ...

  8. [翻译] API测试最佳实践 - 组织你的测试

    组织你的测试 适用级别:初学者 在最底层,一个测试步骤(Test Step)用来验证一个单独的操作.组合若干测试步骤到测试用例,允许你验证那些被分隔出来的一个一个的功能,这些功能是应用程序所需要的.接 ...

  9. JMeter Webservice API测试计划

    Web Services Web服务被定义为旨在通过网络支持两台机器之间交互的软件系统.它被设计为具有以通常在Web服务描述语言(WSDL)中指定的机器可处理格式描述的接口. 通常,“HTTP”是最常 ...

随机推荐

  1. Android之单元测试学习

    1.单元测试概念 单元测试(又称为模块测试),检验程序模块(软件设计的最小单位)正确性的测试工作,常常是程序员写的一段代码.对于面向对象编程,最小单元就是方法,包括基类(超类).抽象类.或者派生类(子 ...

  2. OpenCV——径向模糊

    参考来源: 学习OpenCV:滤镜系列(5)--径向模糊:缩放&旋转 // define head function #ifndef PS_ALGORITHM_H_INCLUDED #defi ...

  3. ASP里面令人震撼地自定义Debug类(VBScript)

    不知道用ASP写代码的朋友是不是和我有一样的感受,ASP中最头疼的就是调试程序的时候不方便 我想可能很多朋友都会用这样的方法“response.write ”,然后输出相关的语句来看看是否正确.前几天 ...

  4. PLSQL Developer安装、配置、连接oracle数据库

    0.资源准备 1) PLSQL Developer安装包(由于安装包超过10M,无法上传,请自行下载) 2) instantclient_11_2安装包(由于安装包超过10M,无法上传,请自行下载) ...

  5. sessionStorage,localStorage,cookies

    1 HTML5的Storage主要分为两种:localStorage与sessionStorage,这两者主要在生命周期上有较明显的差别,localStorage的生命周期较长,原则上要等到透过Jav ...

  6. smbpasswd和pdbedit

    samba用户管理: smbpasswd :smbpasswd命令属于samba套件,能够实现添加或删除samba用户和为用户修改密码. smbpasswd [options] USERNAME -a ...

  7. VisualGDB系列6:远程导入Linux项目到VS中

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 本文介绍如何将Linux机器上的Linu ...

  8. Python模块-requests(一)

    requests不是python自带的,使用前需要安装 发送请求 HTTP请求类型有GET,POST,PUT,DELETE,HEAD和OPTIONS 使用requests发送请求的方法如下: > ...

  9. python并发编程之多线程2死锁与递归锁,信号量等

    一.死锁现象与递归锁 进程也是有死锁的 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用, 这些永远在互相等待的进程称为死锁进程 如下就是死锁 ...

  10. LAMP 1.5 测试PHP解析 问题解决

    安装完php从新加载了一个模块 php5_module 重新启动模块 /usr/local/apache2/bin/apachectl restart ifconfig 查看本机ip,在浏览器里面输入 ...