Можно ли исключить классы в testng.xml?
Я пробовал с помощью
<packages>
<package exclude="com.tt.ee"/>
</packages>
но он дает ошибку.
Можно ли исключить классы в testng.xml?
Я пробовал с помощью
<packages>
<package exclude="com.tt.ee"/>
</packages>
но он дает ошибку.
В соответствии с TestNG dtd элемент exclude
применим только к следующим элементам:
Элементы classes
и class
не могут быть напрямую исключены; однако вы можете исключить классы через группы:
@Test(groups = { "ClassTest1" })
public class Test1 {
public void testMethod1() {
}
public void testMethod2() {
}
}
Затем вы определите testng.xml:
<suite>
<test>
<groups>
<run>
<exclude name="ClassTest1"/>
</run>
</groups>
<classes>
<class name="Test1">
</classes>
</test>
</suite>
В большинстве случаев вы определяете, какие классы включать для запуска, а не исключать, поэтому просто включайте классы, которые вы хотите запустить.
Это работает так:
<packages>
<package name="some.package">
<exclude name="some.package.to.exclude"></exclude>
</package>
</packages>
В атрибутах name
укажите имена пакетов.
Примечание. В TestNG 6.14.3 нельзя исключать классы из <classes>
XML.
Добавьте (groups = { "anyName"})
сразу после тестов, которые вы не хотите запускать, поэтому он будет выглядеть так:
@Test(groups = { "group1"})
public void methodTestName(){..
}
И чем в xml файле добавить только после test name="..."
<groups>
<run>
<exclude name="group1" />
</run>
</groups>
Методы с (groups = { "group1"})
не будут запущены.
Этот способ работает для меня. Помните, что не может исключать класс, только пакет, методы и запускает. Удачи.
Нет прямого способа пропустить тестовый класс, хотя testng.xml. Однако есть обходное решение, которое может использоваться для игнорирования конкретного тестового класса.
Те же темы, обсуждаемые в группе testng-user, но прямой ответ не ссылаются на поток почты - Re: [testng-users] Игнорировать класс в testng
Вы можете использовать classfilesetref и определить список классов, которые хотите запустить.
<fileset id="test.classes" dir="${test.classes.dir}" casesensitive="yes">
<exclude name="**/ExcludeClass.java" />
</fileset>
<testng [...]>
<!-- your setting here -->
<classfilesetref refid="test.classes"/>
</testng>
У меня была такая же проблема! Во всяком случае, решение, которое я нашел, использует классы тегов вместо пакетов, это мой файл testng.xml:
<classes>
<class name="brms.impl.BrmsServicesFactoryTest" />
<!-- <class name="brms.impl.ServicesFactoryTest" /> -->
</classes>
в этом случае выполняются только тесты класса BrmsServicesFactoryTest, другие тесты класса не выполняются!
Надеюсь, это поможет вам!
В качестве обходного пути вы можете добавлять псевдогруппы к каждому тесту с именем, равным методу тестирования или классу тестов через аннотационный трансформатор
public class TestNGAnnotationTransformer implements IAnnotationTransformer {
@Override
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
if (testMethod == null || annotation == null) {
return;
}
String pseudoGroupClass = testMethod.getDeclaringClass().getSimpleName();
String pseudoGroupMethod = pseudoGroupClass + "." + testMethod.getName();
String[] existingGroups = annotation.getGroups();
String[] extendedGroups;
if (existingGroups == null) {
extendedGroups = new String[] { pseudoGroupClass, pseudoGroupMethod };
} else {
List<String> tmp = new ArrayList<String>();
for (String group : existingGroups) {
tmp.add(group);
}
tmp.add(pseudoGroupClass);
tmp.add(pseudoGroupMethod);
extendedGroups = tmp.toArray(new String[0]);
}
annotation.setGroups(extendedGroups);
}
}
и использовать его в testng.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="My tests">
<test name="tests" enabled="true">
<groups>
<run>
<include name="My Group"/>
<include name="MySuperClass"/>
<exclude name="MySuperClass.badMethod"/>
<exclude name="DontLikeThisClassAnymore"/>
</run>
</groups>
<packages>
<package name="com.mycompany.*"/>
</packages>
</test>
<listeners>
<listener class-name="com.mycompany.TestNGAnnotationTransformer"/>
</listeners>
</suite>
Если вы используете xml файл (testng.xml) для определения набора и, начиная с TestNG 6.14.3, вы не можете исключать классы в теге XML, способ исключения определенного класса внутри пакета заключается в следующем:
<suite name="suite-name" >
<test name="test-name">
<packages>
<package name="ab.cd.ef.*"/>
</packages>
<classes>
<class
name="ab.cd.ef.ClassToBeExcluded">
<methods>
<exclude name=".*" />
</methods>
</class>
</classes>
</test>
По сути, вместо исключения класса (dtd не позволяет) все методы класса исключаются.