あなたが所属する名前とグループによってテストメソッドを実行するようフィルタリングしたいと思う限り、 まず、純粋なTestNGに特別な解決策はありません(そうしなければ、@juherrのようなTestNGの専門家が答えたでしょう)。 InvokedMethodListener
の実装でテストメソッドをスキップすると、望ましくないログが残ります。
2つのオプションがあります。
Set<Method>
またはSet<String>
でテストクラスをインスタンス化できる@Factory
メソッドをコンストラクタのパラメータとして実装できます。それぞれのテストクラスでは、実行するメソッド(またはそのString
表現)がSet
にあるかどうかをチェックします。 @Before
注釈付きメソッドまたはbeforeInvocation
メソッドは、指定されたメソッドが実行されるかどうかにかかわらずロジックを処理します。さらに、testng.xml
は、実行する要素を<groups>
と指定します。この場合も、Skipped: x
をログとレポートに残すという欠点があります。
2番目のオプションは、MavenとそのSurefire Pluginをうまく活用することです。 (GradleやMavenのようなビルドツールを使用していない場合は、試してみてください)。 Mavenでテストするときには、実行するグループとテストメソッドを指定できます。 あなたpom.xml
は、以下のような非常にする必要があります:あなたのtestng.xml
あなたがグループを実行している、情報を置くことができるで
public class TestClass {
@Test(groups = {"firstGroup"})
public void firstMethod(Method method) {
assertEquals(1, 1);
System.out.println(method.getName());
}
@Test(groups = {"secondGroup"})
public void secondMethod(Method method) {
assertEquals(1, 1);
System.out.println(method.getName());
}
@Test(groups = {"secondGroup"})
public void thirdMethod(Method method) {
assertEquals(1, 1);
System.out.println(method.getName());
}
@Test(groups = {"secondGroup"})
public void fourthMethod(Method method) {
assertEquals(1, 1);
System.out.println(method.getName());
}
}
:
<!-- modelVersion, groupId, etc. -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
<!-- (...) -->
</plugins>
<!-- (...) -->
</build>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.10</version>
</dependency>
<!-- (...) -->
</dependencies>
言って、あなたはそのようなテストクラスを持っています
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite Name">
<groups>
<run>
<include name="secondGroup"/>
</run>
</groups>
<test name="Default Test Name">
<classes>
<class name="TestClass"/>
</classes>
</test>
</suite>
次に、実行する方法を決定するMavenの目標を実行します。
mvn clean -Dtest=TestClass#thirdMethod+secondMethod test
複数のメソッドと複数のクラスの構文はhereです。
出力:
Running TestClass
secondMethod
thirdMethod
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
第四の方法は、それがsecondGroup
に属していても、実行されていません。 実行するメソッドがたくさんある場合は、カスタムbashスクリプトを記述することができます。
MavenのグループとTestNGのメソッドをフィルタリングすることはできませんでした(少なくとも私にとって)。
予想される動作は何ですか?現在のスイートファイルにはすべてが含まれているため、すべてが実行されます。 – juherr
実際には、私が組み込んだ方法を実行します。または、私が言及したグループを実行します。私の質問は、両方を混在させる方法はありますか?この例では、私が含まれているメソッドのためのグループサニティだけを実行するのが好きです。 – Jeyabal
@Jeyabal、Mavenを使用しますか? –