이 작업을 동적으로 수행하는 데는 최소한 두 가지 방법이 있습니다.
- 구현을 사용하여
org.testng.IAnnotationTransformer
. 여기서 당신은 기본적으로 인터페이스 org.testng.IAnnotationTransformer
을 구현하고 transform()
메서드 내에서 들어오는 testMethod
java.lang.reflect.Method
개체를 검사하여 해당 이름이 실행하거나 실행하지 않을 항목과 일치하는지 확인합니다. JVM 인수를 통해 여러 메소드를 실행/실행하지 않을 의도를 지정할 수 있습니다. 일치하는 것이 있으면 기본적으로 annotation.setEnabled(false)
을 통해 테스트 방법을 사용 중지합니다. annotation
은 org.testng.annotations.ITestAnnotation
입니다. suite xml 파일의 <listeners>
태그를 사용하여 서비스 로더 (또는)를 통해이 수신기에서 연결해야합니다. 청취자에 대한 자세한 내용은 내 블로그 게시물을 참조하십시오. here
- 또 다른 옵션은 beanshell을 사용하는 것입니다. 아래 샘플은 beanshell을 사용하는 방법을 보여줍니다. 내 블로그 게시물 here에서 beanshells로 작업하는 방법에 대한 자세한 내용을 볼 수 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="47230879_Suite" parallel="false" verbose="2">
<test name="47230879_test" verbose="2">
<method-selectors>
<method-selector>
<script language="beanshell">
<![CDATA[
try {
input = System.getProperty("methods","");
if (input.trim().isEmpty()) {
return true;
}
methods= input.split(",");
for (int i =0; i< methods.length; i++) {
if (method.getName().equals(methods[i])) {
return true;
}
}
return false;
} catch(e) {
print(e);
}
]]>
</script>
</method-selector>
</method-selectors>
<classes>
<class name="com.rationaleemotions.stackoverflow.qn47230879.TestclassSample"/>
</classes>
</test>
</suite>
테스트 클래스는
package com.rationaleemotions.stackoverflow.qn47230879;
import org.testng.annotations.Test;
public class TestclassSample {
@Test
public void a() {
System.err.println("a()");
}
@Test
public void b() {
System.err.println("b()");
}
@Test
public void c() {
System.err.println("c()");
}
@Test
public void d() {
System.err.println("d()");
}
@Test
public void e() {
System.err.println("e()");
}
}
당신은 JVM 인수를 통해 어떤 방법을 지정하지 않고 제품군을 실행하는 경우는, 모든 메소드가 실행 얻을 아래처럼 보이지만 경우를 통해 메소드 이름의 무리를 지정 JVM 인수 -Dmethods=a,b,c
(예를 들어)의 경우 해당 메소드 만 실행됩니다.
이것은 실제로 TestNG 질문이며 Selenium과 관련이 없습니다. 나는 다른 사람들을 혼란스럽게하지 않도록 태그를 제거 할 것이다. TestNG 문서를 보셨습니까? 최소한 이렇게하는 것이 하나의 방법 일 것이라고 확신합니다. – JeffC