Как запускать тесты TestNG из командной строки?

Ответ

TestNG предоставляет возможность запуска тестов через командную строку, что критически важно для интеграции в CI/CD-пайплайны (Jenkins, GitLab CI) и автоматизированных скриптов.

Базовый синтаксис команды:

java -cp "path/to/testng.jar:path/to/your/classes:path/to/dependencies" org.testng.TestNG testng.xml

Разбор команды:

  • -cp или -classpath — определяет classpath, куда должны входить:
    1. JAR-файл TestNG (testng.jar).
    2. Скомпилированные тестовые классы вашего проекта.
    3. Все необходимые зависимости (например, библиотеки Selenium, Spring).
  • org.testng.TestNG — главный класс-запускатель фреймворка.
  • testng.xml — XML-файл конфигурации, описывающий тестовые сьюиты, классы, группы и параметры.

Полезные параметры командной строки:

  • -testclass — запуск конкретного тестового класса: -testclass com.example.MyTest
  • -groups / -excludegroups — фильтрация по группам: -groups "smoke,regression"
  • -reporter — настройка репортера (например, для расширенного логирования).

Пример минимального testng.xml:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Command Line Suite">
    <test name="Smoke Tests">
        <classes>
            <class name="com.example.LoginTest"/>
            <class name="com.example.SearchTest"/>
        </classes>
    </test>
</suite>

Практический совет: Используйте инструменты сборки (Maven/Gradle) для управления classpath. Запуск через Maven: mvn test, через Gradle: gradle test. Это избавляет от ручного указания путей к JAR-файлам.

Ответ 18+ 🔞

А, слушай, смотри, вот эта ваша TestNG, она же не только в IDE торчать должна, как приклеенная! Её, мать её, из командной строки запускать можно — это ж основа основ, чтобы в эти ваши CI/CD-пайплайны впихнуть, будь то Jenkins или там GitLab CI. Без этого — нихуя не автоматизация, а ручное дергание за верёвочки.

Вот смотри, как это выглядит, базово:

java -cp "path/to/testng.jar:path/to/your/classes:path/to/dependencies" org.testng.TestNG testng.xml

А теперь разжёвываю, что тут к чему, а то глаза стекленеют:

  • -cp он же -classpath — это, блядь, такой мешок, куда ты должен запихнуть всё, что нужно для запуска:
    1. Сам TestNG, то есть его testng.jar (ну, ёпта, логично же).
    2. Свои скомпилированные тестовые классы, которые ты написал.
    3. И, внимание, все зависимости, которые эти твои классы жрут — Selenium там, Spring, Apache Commons — всё, что угодно, блядь.
  • org.testng.TestNG — это и есть та самая кнопка «Пуск», главный класс, который всё это безобразие запускает.
  • testng.xml — а это, сука, сценарий. Файлик, где написано, что и как запускать: какие сьюиты, классы, группы.

Ещё можно покрутить гайки параметрами:

  • -testclass — если хочешь запустить один конкретный класс и забить хуй на остальные: -testclass com.example.MyTest.
  • -groups / -excludegroups — чтобы отфильтровать тесты по группам, типа только smoke-тесты: -groups "smoke,regression".
  • -reporter — для любителей подробных отчётов, можно настроить, как именно тебе выливать логи.

Вот тебе пример самого простого testng.xml, чтоб понятно было:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Command Line Suite">
    <test name="Smoke Tests">
        <classes>
            <class name="com.example.LoginTest"/>
            <class name="com.example.SearchTest"/>
        </classes>
    </test>
</suite>

А теперь жизненный совет, чтобы не ебаться с classpath вручную, как последний динозавр: Используй нормальные инструменты сборки — Maven или Gradle! Они за тебя всю эту хуйню с путями и зависимостями сами решат. Запустил через Maven — mvn test, через Gradle — gradle test, и похуй. Не надо вручную JAR-ники собирать в кучу, ебать мои старые костыли.