Выполнять тесты TestNG в случайном порядке - PullRequest
5 голосов
/ 04 октября 2011

Аналогично Как я могу заставить мои тесты JUnit запускаться в случайном порядке? , я бы хотел, чтобы TestNG запускал мои тесты в случайном порядке, чтобы непредвиденные зависимости не могли закрасться.

В руководстве TestNG указано :

По умолчанию TestNG будет запускать тесты, найденные в файле testng.xml в случайный порядок.

Однако я создал небольшой тестовый проект с простым testng.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="My suite">
    <test name="Simple test">
        <packages>
            <package name="testngtests"></package>
        </packages>
    </test>
</suite>

Пакет testngtests содержит два тестовых класса (MyTest1, MyTest2), и они содержат несколько пустых методов, таких как:

@Test
public void testOne(){

}

Все тестовые методы пусты и отличаются только по имени.

Когда я запускаю их (используя Eclipse TestNG runner или в командной строке), тесты последовательно выполняются в одном и том же порядке (а именно, сортируются в алфавитном порядке, сначала по классу, а затем по имени метода).

Так что документация не так?

Или «в случайном порядке» означает «нет гарантированного порядка»? Тогда как я могу заставить TestNG активно рандомизировать порядок тестирования?

Ответы [ 2 ]

5 голосов
/ 04 октября 2011

Да, «случайный» действительно должен быть «непредсказуемым».

Если вы хотите истинную рандомизацию, найдите IMethodInterceptor, где TestNG даст вам возможность изменить порядок на что угодно.

4 голосов
/ 19 февраля 2015

Чтобы расширить ответ Cedric Beust , вот мой код для этого, с некоторой помощью из этого примера из GitHub :

import org.testng.IMethodInstance;
import org.testng.IMethodInterceptor;
import org.testng.ITestContext;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class TestOrderRandomizer implements IMethodInterceptor {
    @Override
    public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
        long seed = System.nanoTime();
        System.out.println(String.format("Randomizing order of tests with seed: %s", seed));
        Collections.shuffle(methods, new Random(seed));
        return methods;
    }
}

И использоватьдобавьте это перед тестовым классом:

import org.testng.annotations.Listeners;

@Listeners(TestOrderRandomizer.class)
public class TesterClass {
...

Печать семян позволяет воспроизвести порядок выполнения, посеяв тот же самый семена снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...