Перейти к основному содержимому

Запуск проекта TestNG из командной строки

· 4 мин. чтения

1. Обзор

В этом коротком руководстве мы увидим, как запускать тесты TestNG из командной строки. Это полезно для сборок или если мы хотим запустить отдельный тест непосредственно во время разработки.

Мы можем использовать инструмент сборки, такой как Maven , для выполнения наших тестов, или мы можем запустить их напрямую с помощью команды java .

Рассмотрим оба подхода.

2. Пример обзора проекта

В нашем примере давайте воспользуемся кодом, содержащим одну службу, которая форматирует дату в строку:

public class DateSerializerService {
public String serializeDate(Date date, String format) {
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
return dateFormat.format(date);
}
}

Для теста давайте проведем один тест, чтобы проверить, что NullPointerExeception вызывается, когда в службу передается нулевая дата:

@Test(testName = "Date Serializer")
public class DateSerializerServiceUnitTest {
private DateSerializerService toTest;

@BeforeClass
public void beforeClass() {
toTest = new DateSerializerService();
}

@Test(expectedExceptions = { NullPointerException.class })
void givenNullDate_whenSerializeDate_thenThrowsException() {
Date dateToTest = null;

toTest.serializeDate(dateToTest, "yyyy/MM/dd HH:mm:ss.SSS");
}
}

Мы также создадим файл pom.xml , определяющий необходимые зависимости для выполнения TestNG из командной строки . Первая зависимость, которая нам нужна, это TestNG :

<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.4.0</version>
<scope>test</scope>
</dependency>

Далее нам понадобится JCommander . TestNG использует его для разбора командной строки:

<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
<version>1.81</version>
<scope>test</scope>
</dependency>

Наконец, если мы хотим, чтобы TestNG писал отчеты о тестировании в формате HTML, нам нужно добавить зависимость WebJar для JQuery :

<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.5.1</version>
<scope>test</scope>
</dependency>

3. Настройка для запуска команд TestNG

3.1. Использование Maven для загрузки зависимостей

Поскольку у нас есть проект Maven, давайте соберем его:

c:\> mvn test

Эта команда должна вывести:

[INFO] Scanning for projects...
[INFO]
[INFO] ----------< com.foreach.testing_modules:testng_command_line >----------
[INFO] Building testng_command_line 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.639 s
[INFO] Finished at: 2021-12-19T15:16:52+01:00
[INFO] ------------------------------------------------------------------------

Теперь у нас есть все необходимое для запуска тестов TestNG из командной строки.

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

3.2. Получение нашего пути к классам

Чтобы выполнять команды через команду java , нам нужно добавить параметр -classpath :

$ java -cp "~/.m2/repository/org/testng/testng/7.4.0/testng-7.4.0.jar;~/.m2/repository/com/beust/jcommander/1.81/jcommander-1.81.jar;~/.m2/repository/org/webjars/jquery/3.5.1/jquery-3.5.1.jar;target/classes;target/test-classes" org.testng.TestNG ...

Мы будем сокращать это до -cp <CLASSPATH> в наших примерах командной строки позже.

4. Проверьте командную строку TestNG

Давайте проверим, что мы можем получить доступ к TestNG через java :

$ java -cp <CLASSPATH> org.testng.TestNG

Если все работает нормально, консоль покажет сообщение:

You need to specify at least one testng.xml, one class or one method
Usage: <main class> [options] The XML suite files to run
Options:
...

5. Запустите одиночный тест TestNG

5.1. Запуск одного теста с помощью команды java

Теперь мы можем быстро запустить один тест без необходимости настраивать один файл набора тестов, просто используя следующую командную строку:

$ java -cp <CLASSPATH> org.testng.TestNG -testclass "com.foreach.testng.DateSerializerServiceUnitTest"

5.2. Запуск одного теста с помощью Maven

Если мы хотим, чтобы Maven выполнял только этот тест, мы могли бы настроить плагин maven-surefire-plugin в файле pom.xml :

<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/DateSerializerServiceUnitTest.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

В примере у нас есть профиль с именем ExecuteSingleTest , настроенный на выполнение DateSerializerServiceUnitTest.java. Мы можем запустить этот профиль:

$ mvn -P ExecuteSingleTest test

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

6. Запустите тестовый набор TestNG

6.1. Запуск набора тестов с помощью команды java

Файлы Test Suite определяют, как должны выполняться тесты. Мы можем иметь столько, сколько нам нужно. И мы можем запустить набор тестов, указав на файл XML , который определяет набор тестов :

$ java -cp <CLASSPATH> org.testng.TestNG testng.xml

6.2. Запуск набора тестов с использованием Maven

Если мы хотим выполнять наборы тестов с помощью Maven, мы должны настроить плагин maven-surefire-plugin :

<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

Здесь у нас есть профиль Maven с именем ExecuteTestSuite , который настроит `подключаемый модуль maven-surefire для запуска набора тестов testng.xml .` Мы можем запустить этот профиль с помощью команды:

$ mvn -P ExecuteTestSuite test

7. Заключение

В этой статье мы увидели, как командная строка TestNG помогает запускать отдельные тестовые файлы, а Maven следует использовать для настройки и запуска полного набора тестов .

Как всегда, пример кода для этой статьи доступен на GitHub .