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中高效的显示图片之一 ——加载大图

    在网上看了不少文章,发现还是官方文档介绍最详细,把重要的东西简单摘要出来.详细可看官方文档地址 ( http://www.bangchui.org/read.php?tid=9 ) . 在应用中显示图 ...

  2. informix 把数据从一个表倒到另外一个表中

    drop table zrjReinUnClaimTmpT; create table zrjReinUnClaimTmpT ( mainid SERIAL not null, RepayNo var ...

  3. Ffmpeg转码研究一

    Ffmpeg是一款功能强大的视频处理工具,那么转码肯定不是问题的,因为项目的需求,对转码进行了研究.刚开始首先去看了ffmpeg源代码中的一个例子transcode.c,但是发现该例子更应该称之为re ...

  4. phpunit手动配置

    phpunit: #!D:\xampp\php\.\php.exe<?php/* PHPUnit * * Copyright (c) 2001-2013, Sebastian Bergmann ...

  5. 2017.10.5北京清北综合强化班DAY5

    拼不出的数lost.in/.out/.cpp[问题描述]3 个元素的集合{5, 1,2} 的所有子集的和分别是0,1, 2, 3, 5, 6, 7, 8.发现最小的不能由该集合子集拼出的数字是4.现在 ...

  6. 【LeetCode】080. Remove Duplicates from Sorted Array II

    题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For ex ...

  7. 【LeetCode】137. Single Number II

    题目: Given an array of integers, every element appears three times except for one. Find that single o ...

  8. 使用Visual Studio进行单元测试-Part5

    本文主要介绍Visual Studio(2012+)单元测试框架的一些技巧: 如何模拟类的静态构造函数 如何测试某方法被调用过 如何测试某方法执行的次数 并行编程测试注意事项 一.如何模拟类的静态构造 ...

  9. Hadoop问题集锦

    1.Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup 使用Spark进行处理的时候 ...

  10. 编译Python出现Tab,空格的问题

    我们编译python代码时, 经常出现各种因为tab和空格的问题, 例如: IndentationError: unindent does not match any outer indentatio ...