2015-04-24 1 views
3

Я пишу тест, где разные пользователи имеют разные права на добавление и удаление других пользователей в команду. Тест проверяет, может ли пользователь добавить нового пользователя в команду или удалить существующего пользователя из команды.JMeter setProperty в зависимости от значения ResponseCode или String

Однако пользователи, которые не могут добавить нового пользователя, не получат идентификатор вновь добавленного пользователя, поэтому у них нет идентификатора для проверки удаления. Для этого я добавил одного пользователя, для которого удаление может быть протестировано теми, кому не разрешено удалять этого пользователя.

Когда я запускаю тесты, удаление всегда проверяется на одного пользователя, также для тех, кому разрешено приглашать новых пользователей.

Я попытался с помощью BeanShell PostProcessor и BeanShell Assertion добавить правильный идентификатор в зависимости от того, мог ли пользователь пригласить нового пользователя или нет.

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 это свойство от другого потока, в котором я создал пользователя, чтобы проверить удалить на для тех пользователей, которые не могли приглашать новых пользователей. Если этот пользователь возвращает, например, идентификатор 100, то все мои тесты удаления пытаются удалить идентификатор 100, даже если они должны были попытаться удалить идентификатор из teamAccountId.

Линия ${__setProperty(teamAccountId${userId},${teamAccountId})} сама по себе работает, поскольку я использовал ее самостоятельно, прежде чем пытаться использовать идентификатор в команде TeamTestDelete для пользователей, которые не могли пригласить другого пользователя.

Любой, кто знает, почему он всегда использует идентификатор teamTestDelete для всех пользователей, даже для тех, кто должен получить команду teamAccountId? Это похоже на то, что PostProcessor BeanShell или Assertion никогда не может попасть в «else if» для первого примера или в «if» для второго примера. Вся помощь будет принята с благодарностью.

Пример сценария:

  • UserA имеет право приглашать и удалять пользователей из команды.
  • Пользователь имеет право приглашать и удалять пользователей из команды.
  • Пользователь UserC не имеет права приглашать и удалять пользователей из команды.
  • Пользователь UserD не имеет права приглашать и удалять пользователей из команды.

Сначала я создать пользователь с ID 100. Затем UserA пытается пригласить новый пользователь и преуспевает, он имеет идентификатор 201. UserB пытается пригласить новый пользователь и преуспевает, он имеет идентификатор 202. UserC и UserD как попробуйте пригласить новых пользователей, но не получится, поскольку у них нет прав.

Для удаления Я хочу UserA, чтобы попытаться удалить пользователя с ID 201, я хочу UserB, чтобы попытаться удалить пользователя с ID 202 и я хочу UserC и UserD, чтобы попытаться удалить пользователя с ID 100.

приглашение пользователей - это один поток, который несколько раз повторяется для каждого пользователя, 4 раза в этом примере, и имеет счетчик, который увеличивается с каждым циклом, чтобы указать userId. Удаление пользователей - это еще один поток, который тоже петли. В моем примере кода у меня иногда есть $ {userId}, который ссылается на userId из счетчика. Например, UserA будет иметь userId = 1.

Зацикливая потоки и увеличивая счетчик каждый раз, каждый пользователь получает свой собственный userId, который затем может использоваться для сохранения переменных или свойств для каждого другого пользователя.

+1

* Я добавил одного пользователя с другим пользователем, чтобы пользователи могли протестировать удаление на этом. * Твой сценарий трудно понять! – RaGe

+0

@RaGe Спасибо за ваши отзывы, я немного обновил сценарий, чтобы, надеюсь, сделать его более понятным, и я также добавил примерный сценарий. –

+0

@RaGe Нет, поток цикла выполняется несколько раз и использует счетчик для указания userId, так что, например, когда счетчик равен 1 (так userId = 1), то поток выполняется для UserA. Я добавил еще два параграфа на мой вопрос об этом, который, я надеюсь, поможет лучше понять. –

ответ

4

Первая проблема, которую я вижу с этим фрагментом:

String teamResponse = "${teamAccountId}"; 

Похоже, вы пытаетесь использовать значение ссылки teamAccountId но используют имя-ссылочный вместо этого. Пожалуйста, замените

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

Аналогичная проблема в

${__setProperty(teamAccountId${userId},${__property(teamTestDelete)})} 

Я хотел бы написать это как

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

Очевидно, это также легче читать/разбирать и понимать :)

+0

Блестящий! Большое спасибо за помощь! Да, так легче читать и понимать! –

 Смежные вопросы

  • Нет связанных вопросов^_^