Я могу установить InvocationCount
для моего метода теста, используя IAnnotaionTransformer
. Теперь мне нужно запустить мой тестовый метод несколько раз (InvocationCount
), но с разными данными для каждого прогона.
Я пытался с IInvokedMethodListener
class и переопределить метод beforeInvocation
и использовал getTestMethod().getCurrentInvocationCount()
, чтобы получить currentInvocationcount
число.
Я делю это число, используя класс счетчика (некоторая переменная int в нем) с методом test. Используя это число, мне нужно прочитать соответствующую строку в листе Excel в методе теста. Например, если currentInvocationcount
равно 0, я прочту 1-ю строку в листе Excel, а если 1, я прочту 2-ю строку в листе Excel и так далее. С одним потоком я могу успешно реализовать это последовательно, и у меня нет никаких проблем. Но с несколькими потоками и несколькими тестами последовательность отличается, и я не получаю правильную последовательность выполнения.
У меня есть синхронизированный счетчик, как показано ниже.
public class SynchronizedCounter {
private static int ctr;
public synchronized void setSynchroed(int ctr) {
this.ctr=ctr;
}
public static synchronized int getSynchroed() {
return ctr;
}
}
И я делюсь currentinvocationcount
из класса InvokedMethodLister
, как показано ниже. Я думал, что синхронизированный способ обмена ctr будет полезным. Но бесполезно.
@Override
synchronized public void beforeInvocation(IInvokedMethod arg0, ITestResult arg1) {
SynchronizedCounter sctr=new SynchronizedCounter();
sctr.setSynchroed(arg0.getTestMethod().getCurrentInvocationCount());
}
И я получаю доступ к значению synnchronizedcounter
в тесте, как показано ниже.
@Test
public void Test1() {
System.out.println("The calling count of Make Payment Test 1 is"+SynchronizedCounter.getSynchroed());
int counter=SynchronizedCounter.getSynchroed();
//logic below to access excel sheet with "counter"th row.
}
@Test
public void Test2() {
System.out.println("The calling count of Make Payment Test 2 is"+SynchronizedCounter.getSynchroed());
int counter=SynchronizedCounter.getSynchroed();
//logic below to access excel sheet with "counter"th row.
}
Пожалуйста, смотрите вывод ниже. Просто для простоты понимания я сохранил только соответствующий вывод. Тест 2 и Тест 3 настроены на выполнение 12 и 15 раз. Вы можете заметить, что Test2 и Test3 получают значения, перезаписанные другими тестами (на самом деле я запускал Test1, Test4 также). Пример: после 8-го прогона Test2 Test4 установите счетчик на 6, чтобы Test2 снова использовал 6. Не уверен почему.
Счетчик вызовов теста удаления платежа 3 равен 0
Количество вызовов теста платежа 2 составляет 0
Количество вызовов теста платежа 2 равно 1
Количество вызовов в тесте на выполнение платежа 2 равно 2
Количество вызовов в тесте на выполнение платежа 1 равно 2
Количество вызовов в тесте на удаление платежей 3 равно 1
количество вызовов для теста Make Payment 2 равно 1
количество вызовов для теста Test Payment 2 равно 4
количество вызовов теста удаления платежа 3 равно 3
количество вызовов для оплаты платежа Тест 2 is5
Количество вызовов теста удаления платежа 3 равно 4
Количество вызовов теста платежа 2 составляет 6
Количество вызовов теста платежа 2 равно 8
Количество вызовов в тесте на удаление платежей 3 равно 8
Количество вызовов в тесте на оплату 2 равно 8
Количество вызовов в тесте на оплату 4 равно 6
Счетчик вызовов для проверки платежа 2 is6
T Счетчик вызовов для проверки платежа 3: 6
Счетчик вызовов для проверки платежа 2 - 7
Счетчик вызовов для проверки платежа 3 - 7
Количество вызовов для удаления Тест оплаты 3 is8
Счетчик вызовов теста Make Payment 2 равен 8
Количество вызовов теста удаления платежей 3 составляет 9
Количество вызовов теста удаления платежей 3 равно 10
Количество вызовов в тесте удаления платежей 3 составляет 11
Число вызовов в тесте удаления платежей 3 составляет 12
Как передать счетчик currentinvocation
из обработчика вызовов? на тест без каких-либо проблем многопоточности безопасно?