Методы @beforeclass оправдываются в том же потоке, если мы помещаем параллельный = "tests" в пакет xml - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть набор тестов, где я использую параллелизм с помощью аннотации, например: test name = "All Regular Tests" parallel = "tests" thread-count = "30"

Теперь, скажем, у нас естьмножественная аннотация @test в одном классе. и у него есть метод аннотации @beforeclass. Поэтому, когда отдельный поток выберет тесты из одного и того же класса, он выполнит методы @beforeclass в обоих потоках или будет использовать одни и те же данные.

Или я должен использовать параллельные = "методы", каков правильный путь?

Не в состоянии понять концепцию параллелизма.

1 Ответ

0 голосов
/ 07 ноября 2019

Я понимаю, почему вы запутались.

Нет смысла использовать parallel="tests" в тестовом теге. Параллельный = «тесты» диктует, что все определенные в XML выполняются в разных потоках. Но вы назначаете его уровню теста, поэтому он будет применять только этот параметр для этого теста.

У вас есть два варианта здесь.

Чтобы установить параметр многопоточности на уровне набора, с помощьюраспараллеливание «тестов»: <suite name = "ParallelTesting" parallel="tests" thread-count="2">

Или, чтобы поставить его на уровень тестирования, с опцией «method»: <test name = "Test Parallelism" parallel="method" thread-count="2">

Итак:

  • «тесты»: для каждого в файле XML.
  • «метод»: для каждого метода @Test в том месте, где вы поместили свойство (все @Tests внабор, все @Tests в классе и т. д.)

Что касается второго вопроса, нет, он будет запускать @BeforeClass только один раз. Вы можете легко проверить его:

XML-файл:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "ParallelTesting" parallel="tests" thread-count="2">

    <test name = "Test Parallelism 1" >
        <classes>
            <class name = "com.openjaw.testregression.tretailapi.test.car.TestClass"/>
        </classes>
    </test>

    <test name = "Test Parallelism 2" >
        <classes>
            <class name = "com.openjaw.testregression.tretailapi.test.car.TestClass2"/>
        </classes>
    </test>

</suite>

Тестовый класс 1:

public class TestClass {

    @BeforeClass
    public void beforeClass() {
        System.out.println("Class 1 - Before Class with Thread Id:- "+ Thread.currentThread().getId());
    }

    @Test
    public void testA() {
        System.out.println("Class 1 - Test Case A with Thread Id:- " + Thread.currentThread().getId());
    }

    @Test
    public void testB() {
        System.out.println("Class 1 - Test Case B with Thread Id:- " + Thread.currentThread().getId());
    }

}

Класс испытаний 2:

public class TestClass2 {

    @BeforeClass
    public void beforeClass() {
        System.out.println("Class 2 - Before Class with Thread Id:- "+ Thread.currentThread().getId());
    }

    @Test
    public void testA() {
        System.out.println("Class 2 - Test Case A with Thread Id:- " + Thread.currentThread().getId());
    }

    @Test
    public void testB() {
        System.out.println("Class 2 - Test Case B with Thread Id:- " + Thread.currentThread().getId());
    }

}

Выход:

Class 1 - Before Class with Thread Id:- 12
Class 2 - Before Class with Thread Id:- 13
Class 2 - Test Case A with Thread Id:- 13
Class 1 - Test Case A with Thread Id:- 12
Class 2 - Test Case B with Thread Id:- 13
Class 1 - Test Case B with Thread Id:- 12

===============================================
ParallelTesting
Total tests run: 4, Failures: 0, Skips: 0
===============================================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...