2012-07-09 10 views
10

TestNGには多くのテストスイートがあります。これらはXMLファイルです。私は、Mavenから統合テストを実行する際に、複数のXMLスイートを選択できるようにしたいと考えています。Maven surefireプラグインをパラメータ化して実行するTestNGスイートを選択する方法

現在、私はこのようなのpom.xmlするスイートのファイルを追加することができます

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
    <suiteXmlFiles> 
     <suiteXmlFile>${pathToMySuiteFile_1}</suiteXmlFile> 
     <suiteXmlFile>${pathToMySuiteFile_1}</suiteXmlFile> 
    </suiteXmlFiles> 
    </configuration> 
</plugin> 

このソリューションは、いくつかの制限があります。私はpom.xmlで定義したテストスイートへのパスのみを変更できます。だから私の例では、常に2つのファイルでなければなりません。私は実行することはできません、言うことができる、5つのスイートまたはただ1つ。

どうやらpom.xmlの "suiteXmlFiles"セクション全体をパラメータ化する方法はありますか?私は私が持っているすべてのスイートをロードし、TestNGのスイートでグループを使用するだけで選択したテストを実行したくない :テストグループを与え一致

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
    <suiteXmlFiles> 
     ${multiple_paths_ToMySuiteFiles} 
    </suiteXmlFiles> 
    </configuration> 
</plugin> 

実行するすべては私のためのオプションではありません。グループフィルタを使用してすべてのテストスイートを実行した後にレポートが生成されるのは、選択したテストスイートのみが実行された場合のレポートとは異なるためです。

答えて

0

あなたはgroupsパラメータを使用するか、コマンドラインで-Dgroups = ...を指定することができます。このテストのために

(のみJUnit4.8 +とTestNGの/ JUnit47プロバイダ)グループ。 ここで指定されたグループのうちの1つで装飾されたクラス/メソッド/ etcのみが、テスト実行に含まれます(指定されている場合)。 JUnitの場合、この パラメータは4.7プロバイダの使用を強制します。suiteXmlFilesパラメータが指定されている場合、このパラメータは無視されます。 。

+0

私はそれがテスト結果レポートを破壊し、とにかく柔軟かどうか、それはだ – maestr0

+0

十分に柔軟ではないとして、私はグループを使用しないということを述べましたあなたの唯一の選択。あなたのグループがきめ細かく柔軟に対応できます。もちろん、個々のテストを実行する以外にも。 –

5

私たちもテストでこの問題にぶつかりました。 現在使用している現在の回避策は、プロパティセクションでプロパティ変数を定義し、それをsure-fire suiteXmlFilesブロックに注入することです。何もコマンドラインから指定されていない場合は、プラグインセクションで次に

<properties> 
    <!-- Default suites --> 
    <batsSuiteFile>${project.build.testOutputDirectory}/BatsTests.xml</batsSuiteFile> 
    <smokeSuiteFile>${project.build.testOutputDirectory}/SmokeTests.xml</smokeSuiteFile> 

    <!-- Default suite files if not being specified from mvn command line --> 
    <defaultSuiteFiles>${batsSuiteFile},${smokeSuiteFile}</defaultSuiteFiles> 
    <suiteFile>${defaultSuiteFiles}</suiteFile> 
</properties> 

...

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.12</version> 
    <configuration> 
     <suiteXmlFiles> 
      <!-- Suite file injection parameter from command line --> 
      <suiteXmlFile>${suiteFile}</suiteXmlFile> 
     </suiteXmlFiles> 
    </configuration> 
</plugin> 

それは背中と、デフォルトのプロパティ]セクションで、上記指定された2つのスイートに分類されます。あなたは引数のsuiteXmlFilesだけで、コマンドラインからこれをオーバーライドする必要がありますだけコンマを受け入れる必要があることを期待してMavenのドキュメントから驚くべきことに

mvn test -DsuiteFile=test1.xml,test2.xml 

:あなたはあなたが行うことができますスイートファイルの指定されたセットをキックオフしたい場合は、 testng xmlの区切りリスト http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#suiteXmlFiles

誰かが他のより良い方法を共有してください。あなたが使用することができますsuiteXmlFilesUser Propertyによると

+1

@ maestr0助けていただければ、回答を受け入れ可能とマークしてください。 – mekdev

+0

他の方法は、他のmvn -Dテスト$ {path}/test1 test、mvn -D tests $ {path}/test2のテストと依存関係の後に1つ下のコマンドを実行することです。 org.apache.maven.plugins のmaven-確実な-プラグイン 2.12 <設定> <! - コマンドラインからスイートファイル噴射パラメータ - > $ {テスト} .xmlの Badrinath

+0

代わりに '-Dsurefire.suiteXmlFiles'を使用してください。下の私の答えを見てください。 – norbertpy

12

mvn test -Dsurefire.suiteXmlFiles=test1.xml,test2.xml 
+0

このソリューションを使用すると、pom.xmlファイルでタグを指定する必要はありません。最高の答え。 –

関連する問題