JMeter setProperty取决于ResponseCode或String值

时间:2015-04-24 10:51:07

标签: 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})}
}

OR

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

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

${__setProperty(teamAccountId${userId},${teamAccountId})}行 本身就是这样的,因为我在尝试使用teamTestDelete中的id之前已经自己使用了这个,因为那些用户无法邀请其他用户。

这里的任何人都知道为什么它总是为所有用户使用teamTestDelete id,即使对于那些应该从teamAccountId获取一个用户的人?它就像BeanShell PostProcessor或断言永远不会进入"否则如果"对于第一个例子或者在" 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,然后可以用来为每个不同的用户保存变量或属性。

1 个答案:

答案 0 :(得分:5)

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

String teamResponse = "${teamAccountId}";

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

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

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

我会把它写成

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

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