JMeter setProperty 取决于 ResponseCode 或 String 值

JMeter setProperty depending on ResponseCode or String value

我正在编写一个测试,其中不同的用户有不同的权限来添加和删除团队中的其他用户。该测试检查用户是否可以向团队添加新用户或从团队中删除现有用户。

然而,无法添加新用户的用户将无法返回新添加用户的 ID,因此他们没有用于测试删除的 ID。为此,我添加了一个用户,不允许删除该用户的人可以在该用户上测试删除。

当我 运行 测试删除时,总是对同一用户尝试删除,对于那些被允许邀请新用户的用户也是如此。

我尝试使用 BeanShell PostProcessor 和 BeanShell 断言来添加正确的 ID,具体取决于用户是否应该能够邀请新用户。

String teamResponse = "${teamAccountId}";
if (teamResponse == null)
{
    ${__setProperty(teamAccountId${userId},${__property(teamTestDelete)})}
}
else if (teamResponse.length() > 0)
{
    ${__setProperty(teamAccountId${userId},${teamAccountId})}
}

if (ResponseCode.equals("201") == true)
{
    ${__setProperty(teamAccountId${userId},${teamAccountId})}
}
else
{
    ${__setProperty(teamAccountId${userId},${__property(teamTestDelete)})}
}

teamTestDelete 是来自另一个线程的 属性,我在该线程中创建了用户以测试那些无法邀请新用户的用户的删除。如果这个用户 returns 例如 id 100,那么我所有的删除测试都会尝试删除 id 100,即使他们应该尝试从 teamAccountId 中删除 id。

${__setProperty(teamAccountId${userId},${teamAccountId})} 顺便说一下,它本身是有效的,因为在尝试为无法邀请其他用户的用户使用 teamTestDelete 中的 id 之前,我已经单独使用了这个。

这里有人知道为什么它总是对所有用户使用 teamTestDelete id,即使是那些应该从 teamAccountId 获取 id 的用户也是如此吗?这就像 BeanShell PostProcessor 或 Assertion 永远无法进入第一个示例的 "else if" 或第二个示例的 "if" 。 非常感谢所有帮助。

示例场景:

首先我创建了一个 ID 为 100 的用户。然后 UserA 尝试邀请一个新用户并成功,它的 ID 为 201。UserB 尝试邀请一个新用户并成功,它的 ID 为 202。UserC 和 UserD 都尝试邀请新用户,但因为他们没有权限而失败。

对于删除,我希望UserA尝试删除ID为201的用户,我希望UserB尝试删除ID为202的用户,我希望UserC和UserD尝试删除ID为100的用户。

邀请用户是一个线程,它为每个用户循环多次,在这个例子中是 4 次,并且有一个计数器,每次循环都会增加以指定 userId。删除用户是另一个线程,它也是循环的。在我的示例代码中,有时我有 ${userId},它指的是来自计数器的 userId。例如 UserA 将有 userId = 1.

通过循环线程并每次增加计数器,每个用户都会获得自己的 userId,然后可用于为每个不同的用户保存变量或属性。

我看到的第一个问题是这个片段:

String teamResponse = "${teamAccountId}";

您似乎在尝试使用引用 teamAccountId 的值,但实际上使用的是引用名称。请替换为

String teamResponse = vars.get(“teamAccountId”);

中的类似问题
${__setProperty(teamAccountId${userId},${__property(teamTestDelete)})}

我会这样写

props.put("teamAccountId" + vars.get("userId"), props.get("teamTestDelete"))

显然,这也更容易read/parse和理解:)