zoukankan      html  css  js  c++  java
  • 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请求。

  • 相关阅读:
    bzoj1015星球大战(并查集+离线)
    bzoj1085骑士精神(搜索)
    bzoj1051受欢迎的牛(Tarjan)
    左偏树学习
    hdu1512 Monkey King(并查集,左偏堆)
    左偏树(模板)
    PAT (Basic Level) Practice (中文) 1079 延迟的回文数 (20分) (大数加法)
    PAT (Basic Level) Practice (中文) 1078 字符串压缩与解压 (20分) (字符转数字——栈存放)
    PAT (Basic Level) Practice (中文) 1077 互评成绩计算 (20分) (四舍五入保留整数)
    PAT (Basic Level) Practice (中文) 1076 Wifi密码 (15分)
  • 原文地址:https://www.cnblogs.com/a00ium/p/10381238.html
Copyright © 2011-2022 走看看