JMeter断言模块性(我可以重用断言吗?)

时间:2014-12-10 17:32:10

标签: jmeter assertions

我正在为我们的REST Web应用程序制定测试计划,我们有几种常见的测试类型,它们具有我们想要测试的通用标准。例如,当通过API创建实体时,我们对JSON响应有一组共同的期望;应该设置id,设置创建日期等等。

现在,我想像这样建模我的计划:

  • 线程组
    • 用户(简单控制器)
      • 用户创建测试(简单控制器)
        • 创建测试1(采样器)
        • 创建测试2(采样器)
        • 创建测试3(采样器)
        • 常见创建断言(模块控制器)
      • 用户删除测试(简单控制器)
        • 取样...
        • 常见删除断言(模块控制器)
    • 事件(简单控制器)
      • 事件创建测试(简单控制器)
        • 取样...
        • 常见创建断言(模块控制器)
      • 事件删除测试(简单控制器)
        • 取样...
        • 常见删除断言(模块控制器)
  • 常见断言的线程组(已禁用)
    • 常见创建断言(简单控制器)
      • BSF断言1
      • BSF断言2
      • BSF断言3
    • 常见删除断言(简单控制器)
      • 断言...

现在,我理解了作用域如何工作,如果我将断言置于 BOLD ed模块控制器的位置,那么它们将被调用每个采样器。但是,我不必在每个位置复制粘贴 - 维护相同断言的大量副本。因此,为什么我想要一种方法来定义一次断言,并在适当的时候调用。

但是,使用这种方法,永远不会调用放置在公共简单控制器中的 ACCENT ed断言(通过使用带有记录消息的BSF断言来确认)。如果我在公共断言简单控制器中放置一个额外的采样器,则调用它。但只有一次。

我使用的是JMeter 2.12,但已确认JMeter 2.8的行为方式相同。

那么,我如何使用JMeter定义一次断言,并在任何地方重复使用它们?

谢谢!

1 个答案:

答案 0 :(得分:0)

我最终变得富有创意。 在Javascript中使用JSR223断言我已经完成了我想要的。这很自然,因为我想测试的所有响应数据都是JSON,YMMV。

在用户定义的变量中我使用Javascript定义了我想要执行的测试。

测试如下:

TEST_JSON:

try
{
    eval('var obj = ' + prev.getResponseDataAsString());
} catch(e)
{
    setFailed();
}

TEST_RESULT_SUCCESS

if(obj.status != "success")
{
    setFailed();
}`

然后在断言中,我可以做类似的事情:

eval(vars.get("TEST_JSON"));
eval(vars.get("TEST_RESULT_SUCCESS"));

而且我不必一遍又一遍地重写测试。

我甚至有一些实用功能,我可以通过

添加到我的断言中
eval(vars.get("TEST_UTIL"));

允许我根据需要从我的断言中打印其他日志记录。