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

JMeter断言模块化(我可以重用断言吗?),jmeter,assertions,Jmeter,Assertions,我正在为我们的RESTWeb应用程序制定一个测试计划,我们有几种常见的测试类型,它们都有我们想要测试的通用标准。例如,当通过API创建实体时,我们对JSON响应有一组共同的期望;应设置id、创建日期等 现在,我想对我的计划进行如下建模: 螺纹组 用户(简单控制器) 用户创建测试(简单控制器) 创建测试1(采样器) 创建测试2(采样器) 创建测试3(采样器) 通用创建断言(模块控制器) 用户删除测试(简单控制器) 采样器 通用删除断言(模块控制器) 事件(简单控制器) 事件创建测

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

现在,我想对我的计划进行如下建模:

  • 螺纹组
    • 用户(简单控制器)
      • 用户创建测试(简单控制器)
        • 创建测试1(采样器)
        • 创建测试2(采样器)
        • 创建测试3(采样器)
        • 通用创建断言(模块控制器)
      • 用户删除测试(简单控制器)
        • 采样器
        • 通用删除断言(模块控制器)
    • 事件(简单控制器)
      • 事件创建测试(简单控制器)
        • 采样器
        • 通用创建断言(模块控制器)
      • 事件删除测试(简单控制器)
        • 采样器
        • 通用删除断言(模块控制器)
  • 常用断言的线程组(已禁用)
    • 通用创建断言(简单控制器)
      • BSF断言1
      • BSF断言2
      • BSF断言3
    • 常见删除断言(简单控制器)
      • 断言
现在,我了解了作用域是如何工作的,如果我将断言放置在BOLDed模块控制器所在的位置,那么它们将为每个采样器调用。但是,我不希望复制粘贴,而是在每个位置维护相同断言的多个副本。因此,为什么我需要一种方法来定义断言一次,并在适当的地方调用

但是,使用这种方法,不会调用放置在公共简单控制器中的强调断言(通过使用带有日志消息的BSF断言确认)。如果我在CommonAssertionsSimpleController中放置一个额外的采样器,就会调用它。但只有一次

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

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


谢谢

没有办法做到这一点


您可以尝试在断言中使用变量进行因子分解,因此,如果是响应断言,您将对其进行因子分解。

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

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

测试包括:

TEST_JSON:

try
{
    eval('var obj = ' + prev.getResponseDataAsString());
} catch(e)
{
    setFailed();
}
测试结果成功

if(obj.status != "success")
{
    setFailed();
}`
然后在断言中,我可以执行以下操作:

eval(vars.get("TEST_JSON"));
eval(vars.get("TEST_RESULT_SUCCESS"));
我不必一遍又一遍地重写测试

我甚至有一些实用函数,我可以通过

eval(vars.get("TEST_UTIL"));
如果我愿意,它允许我打印断言中的其他日志