Исключение групп TestNG из Maven - PullRequest
3 голосов
/ 22 августа 2011

У меня есть несколько медленных тестов, основанных на базе данных, которые я не хочу запускать каждый раз, когда строю свой проект с Maven.Я добавил элемент exceptionGroups в свой файл pom, как объяснено http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#excludedGroups, но не могу заставить его работать.

Я создал минимальный проект.Вот pom.xml:

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>exclude</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.4.2</version>
                <configuration>
                    <excludedGroups>db</excludedGroups>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>5.14</version>
        </dependency>
    </dependencies>

</project>

И это два класса тестов:

public class NormalTest {

    @Test
    public void fastTest() {
        Assert.assertTrue(true);
    }
}

и

public class DatabaseTest {

    @Test(groups={"db"})
    public void slowTest() {
        Assert.assertTrue(false);
    }
}

Однако оба теста все еще выполняются.Я не могу понять, что я делаю неправильно.

Ответы [ 2 ]

5 голосов
/ 26 февраля 2013

Я закончил создавать внешние тестовые костюмы:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="tests">
        <test name="standard">
        <groups>
            <run>
                <exclude name="slow" />
                <exclude name="external" />
                <exclude name="db" />
            </run>
        </groups>
        <packages>
            <package name="com.test.*" />
        </packages>
    </test>
</suite>

и

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="tests">
    <test name="full">
        <packages>
            <package name="com.test.*" />
        </packages>
    </test>
</suite>

и указывается, что запускать в профиле:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.11</version>
    <configuration>
        <suiteXmlFiles>
            <suiteXmlFile>src/test/resources/suites/standard.xml</suiteXmlFile>
        </suiteXmlFiles>
     </configuration>
</plugin>

...

<profile>
    <id>fulltest</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>src/test/resources/suites/full.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>
        </plugins>
    </build>
</profile>
3 голосов
/ 22 августа 2011

По моему опыту, функция исключенных групп работает только тогда, когда у вас есть набор включенных групп.Поэтому, чтобы делать то, что вы хотите, вам нужно добавить все тесты хотя бы в одну группу (вы можете сделать это «легко», аннотируя класс, а не методы).

Например (просто изменивNormalTest)

@Test( groups = "fast")
public class NormalTest {

    @Test
    public void slowTest() {
        Assert.assertTrue(true);
    }
}

и в вашей конфигурации

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.4.2</version>
            <configuration>
                <groups>fast</groups>
                <excludedGroups>db</excludedGroups>
            </configuration>
        </plugin>

Я знаю, что это не очевидно , но так работает testng: S.В качестве примечания, я всегда использовал внешний файл конфигурации для тестирования, а не встроенную конфигурацию в pom, поэтому параметр groups может быть неверным.

...