JMeter setProperty取决于ResponseCode或String值

Yve*_*ens 4 jmeter beanshell

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

但是,无法添加新用户的用户将无法获得返回的新添加用户的ID,因此他们没有用于测试删除的ID.为此,我添加了一个用户,在该用户上,不允许删除该用户的用户可以对其进行测试.

当我运行测试时,总是在同一个用户上尝试删除,也允许那些被允许邀请新用户的用户.

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

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

要么

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

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

该行${__setProperty(teamAccountId${userId},${teamAccountId})} 本身就是这样工作的,因为我在尝试使用teamTestDelete中的id为无法邀请其他用户的用户之前自己使用了这一行.

这里的任何人都知道为什么它总是为所有用户使用teamTestDelete id,即使是那些应该从teamAccountId获得一个用户的人?就像BeanShell PostProcessor或Assertion永远不会进入第一个例子的"else if"或第二个例子的"if".非常感谢所有的帮助.

示例场景:

  • UserA有权邀请和删除团队中的用户.
  • UserB有权邀请和删除团队中的用户.
  • UserC无权邀请和删除团队中的用户.
  • UserD无权邀请和删除团队中的用户.

首先,我创建一个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,然后可以使用它来为每个不同的用户保存变量或属性.

RaG*_*aGe 5

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

String teamResponse = "${teamAccountId}";
Run Code Online (Sandbox Code Playgroud)

看起来您正在尝试使用引用的值,teamAccountId而是使用引用名称.请替换

String teamResponse = vars.get(“teamAccountId”);
Run Code Online (Sandbox Code Playgroud)

类似的问题

${__setProperty(teamAccountId${userId},${__property(teamTestDelete)})}
Run Code Online (Sandbox Code Playgroud)

我会写这个

props.put("teamAccountId" + vars.get("userId"), props.get("teamTestDelete"))
Run Code Online (Sandbox Code Playgroud)

显然,这也更容易阅读/解析和理解:)