Невозможно запустить скрипт testng с помощью maven

Я не могу запустить скрипт testng с помощью maven. Он говорит, что сборка прошла успешно каждый раз, когда я пытаюсь запустить mvn test -Dtest com.example.tests.ScriptTest();

pom.xml

           <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>3.2.1</version>
        </dependency>
           <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.6.1</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

Тестовый файл

package com.example.tests;

import org.testng.annotations.Test;

public class ScriptTest{

    @Test
    public void testScript() {
        System.out.println(“This is a test script”);        
    }
    
}

В .gitlab-ci я пытаюсь запустить тест maven.

image: maven:latest
  
stages:
   - test

test:
  stage: test
  script:
    - mvn test -Dtest=com.example.tests.ScriptTest
  artifacts:
    paths: 
      - target/sunfire-reports

Вот обновление, показывающее весь pom-файл.



<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0-SNAPSHOT</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>scanner</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>scanner</name>
    <description>Scan System</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc11</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.tess4j</groupId>
            <artifactId>tess4j</artifactId>
            <version>4.5.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.6.1</version>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.31</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <releases>
                <enabled>false</enabled>
            </releases>
        </pluginRepository>
    </pluginRepositories>
</project>

Ожидаемый желаемый результат: тест должен выполняться в gitlab ci.

Какую именно командную строку вы используете, какой вывод получаете и чего ожидаете?

tgdavies 04.04.2024 06:03

Зависимость от Surefire-Report-plugin не имеет смысла. Почему бы не запустить одиночный тест через IDE? (исключение junit не обязательно, поскольку в TestNG это необязательно)...

khmarbaise 04.04.2024 08:55

Я пытаюсь запустить тест в рамках автоматизации Gitlab, используя .gitlab-ci. Каждый раз, когда я пытаюсь запустить тест, он говорит, что сборка прошла успешно, вообще не запуская тест.

AppleEater 05.04.2024 03:35

Вы пробовали предложенный ответ?

tgdavies 05.04.2024 04:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

mvn -Dtest=ScriptTest#testScript test

Шаблон:

mvn -Dtest=ClassName#MethodName test

Я попробовал и получил ошибку сбоя сборки. [ОШИБКА] Не удалось выполнить цель org.apache.maven.plugins:maven-surefire-plugin:3.1.2:test (default-test) в проекте scanpro: не было выполнено ни одного теста, соответствующего шаблону «com.example.tests.ScriptTest». ! (Задайте -Dsurefire.failIfNoSpecifiedTests=false, чтобы игнорировать эту ошибку.) -> [Справка 1]

AppleEater 05.04.2024 05:29

Пожалуйста, опубликуйте весь pom xml как обновленный вопрос.

Sanady_ 05.04.2024 07:30

Итак, вы обновили свой .gitlab-ci, чтобы он содержал script: - mvn -Dtest=ScriptTest#testScript test, но в сообщении об ошибке упоминается шаблон com.example.tests.ScriptTest?

tgdavies 05.04.2024 08:15

Вам не хватает плагина Maven Surefire в вашем пом...

Sanady_ 05.04.2024 10:07

Я добавил плагин ниже, но все еще сталкиваюсь с ошибкой. <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> </plugin>

AppleEater 05.04.2024 15:40

@AppleEater - Пожалуйста, проверьте мой ответ. Это должно решить вашу проблему.

Krishnan Mahadevan 07.04.2024 06:04
Ответ принят как подходящий

Основная причина проблемы заключается в том, что надёжный плагин, который разрешается из файла super pom, сначала находит привязки JUnit5.

Последний родительский файл pom, предоставленный Spring, всегда содержит зависимости JUnit5.

Плагин Surefire работает следующим образом: сканирует путь к классам, чтобы определить, какой из средств запуска тестов присутствует. AFAIK, как только он находит средство запуска тестов (JUnit или TestNG), он прекращает сканирование пути к классам. Поскольку плагин Surefire всегда находит зависимости JUnit5 (через родительский pom-файл Spring), он всегда пытается запустить тестовые примеры JUnit5.

Если вы запустите команду mvn dependency:tree | grep junit, вы увидите вывод, подобный приведенному ниже, который подтверждает то, что я говорю о зависимостях JUnit5, доступных в пути к классам.

➜  mvn dependency:tree | grep junit
[INFO] |  +- org.junit.jupiter:junit-jupiter:jar:5.10.1:test
[INFO] |  |  +- org.junit.jupiter:junit-jupiter-api:jar:5.10.1:test
[INFO] |  |  |  +- org.junit.platform:junit-platform-commons:jar:1.10.1:test
[INFO] |  |  +- org.junit.jupiter:junit-jupiter-params:jar:5.10.1:test
[INFO] |  |  \- org.junit.jupiter:junit-jupiter-engine:jar:5.10.1:test
[INFO] |  |     \- org.junit.platform:junit-platform-engine:jar:1.10.1:test
[INFO] |  +- org.mockito:mockito-junit-jupiter:jar:5.7.0:test

Когда вы запустите команду mvn test -Dtest=com.example.tests.ScriptTest для запуска теста, вы заметите в своем терминале что-то вроде этого:

[INFO] --- surefire:3.1.2:test (default-test) @ qn_78271590 ---
[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.514 s
[INFO] Finished at: 2024-04-07T09:19:34+05:30
[INFO] ------------------------------------------------------------------------

Приведенный выше вывод подтверждает, что плагин Surefire по умолчанию использует поставщика (представьте, что это средство для запуска теста JUnit) org.apache.maven.surefire.junitplatform.JUnitPlatformProvider. Этот провайдер знает ТОЛЬКО, как искать тесты JUnit, и, поскольку он их не находит, в конечном итоге вы ничего не выполняете.

Теперь, чтобы это исправить, вам нужно заставить плагин Surefire всегда использовать поставщика TestNG.

Вы можете сделать это, добавив явную ссылку на плагин Surefire, как показано ниже, в раздел <plugins> вашего pom-файла.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-testng</artifactId>
            <!-- ensure that this version always matches 
             with the surefire plugin version 
            to ensure you never face any discrepancies.
            Use 'mvn help:effective-pom' to list plugins with
            their versions being used in your project.
            -->
            <version>3.1.2</version>
        </dependency>
    </dependencies>
</plugin>

Теперь, когда вы снова запустите тест с помощью команды mvn test -Dtest=com.example.tests.ScriptTest, вы увидите вывод, который выглядит следующим образом:

[INFO] --- surefire:3.1.2:test (default-test) @ scanner ---
[INFO] Using configured provider org.apache.maven.surefire.testng.TestNGProvider
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.example.tests.ScriptTest
This is a test script
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.340 s -- in com.example.tests.ScriptTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.838 s
[INFO] Finished at: 2024-04-07T09:24:55+05:30
[INFO] ------------------------------------------------------------------------

Обратите внимание, как плагин Surefire теперь использует провайдер TestNG для запуска тестов из строки Using configured provider org.apache.maven.surefire.testng.TestNGProvider в приведенном выше выводе.

Другие вопросы по теме