2016-11-16 8 views
0

Java、Maven、TestNGを使用するブラウザ自動化フレームワークがあります。私は、次のようにテストに異なるパラメータを渡すためにtestng.xmlファイルを使用しています:実行時にJenkinsのパラメータ化されたビルドをtestng.xmlに渡す

<parameter name="firstName" value="John"/> 

私は非技術系の人々へのデータ入力を公開することが可能とパラメータ化ジェンキンスを使用することにより、これを行うことを提案したいですジョブ。

すべてのテストデータは文字列です。

Jenkinsでパラメータ化されたプロジェクトを作成し、プロジェクト内でStringパラメータを作成する方法を確認できます。

実行時にデータを渡す最善の方法は不明です。

私はAntスクリプトが使用できると理解していますが、私は既にMavenを使用しており、別の競合する技術を導入したくありません。

これはtestng.xmlのBeanshellスクリプトを使って行うことができると聞いていますが、testng docsの例から、これを実装するにはどうすればベストプラクティスがまだ不明です。

答えて

0

Maven Resources Pluginゴールcopy-resourcesを有効にして、filtersをテンプレートファイルの変数に置き換えることができます。 例:あなたのケースで

  <plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>3.0.1</version> 
      <executions> 
       <execution> 
        <id>copy-resources</id> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>path_to_output_folder/output</outputDirectory> 
         <resources>   
          <resource> 
           <directory>path_to_resource_dir/res</directory> <!--source to your testng.xml--> 
           <filtering>true</filtering> 
          </resource> 
         </resources>    
        </configuration>    
       </execution> 
      </executions> 
     </plugin> 

ジェンキンスでこれを使用する:

  • 変更あなたのtestng.xml - ><parameter name="firstName" value="${firstname}"/>

  • コールMavenのゴールmvn resources:resources -DfirstName=$FIRSTNAME($のFIRSTNAME)がありますJenkins変数。

希望します。

+0

これは*一部*ことができますが、私はまだ不明だ: - 1.ジェンキンスプロジェクトの設定2でジェンキンスのparamsを使用してデータを渡す方法を、これがために実用的でない方法を思われます多数のパラメータを渡します - 私のtestng_xmlファイルの中には50個以上のパラメータがあります3.クリーンインストール-DsuiteFile = src/test/resources/testng_staging.xml – Steerpike

0

この問題を解決する方法は次のとおりです。

  • Jenkinsを経由してスイートXMLファイルに渡すすべてのパラメータを追加し、いくつかのデフォルト値を定義します。
  • Jenkinsジョブでは、パラメータを作成しますが、ジョブ構成のパラメータの名前がSuite xmlファイルに追加した名前と一致するようにします。以下に示すようにTestNGのリスナーを利用し、その後、鉱山のthis blog postその後

に詳述されている方法のいずれかを使用して、それを配線します。次に、あなたが簡単にあなたが必要なものを行うことができるはず

  • 。パラメータが<test>レベルで定義されている場合は、以下に示すリスナーを拡張して、org.testng.ITestListenerリスナーを実装した後に同様のコードを追加できます。この例のように

    リスナー

    public class EnvReaderListener implements ISuiteListener { 
    
        @Override 
        public void onStart(ISuite suite) { 
         Map<String, String> parameters = suite.getXmlSuite().getParameters(); 
         for (Map.Entry<String, String> parameter : parameters.entrySet()) { 
          String env = System.getenv(parameter.getKey()); 
          if (env != null && ! env.trim().isEmpty()) { 
           parameter.setValue(env); 
          } 
         } 
        } 
    
        @Override 
        public void onFinish(ISuite suite) { 
    
        } 
    } 
    

    TestNGのスイートXML

    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
    <suite name="My Suite" parallel="methods" verbose="2"> 
        <listeners> 
         <listener class-name="org.rationale.emotions.EnvReaderListener"/> 
        </listeners> 
        <parameter name="name" value="Sample name"/> 
        <test name="My Test" verbose="2"> 
         <classes> 
          <class name="org.rationale.emotions.SampleTest"/> 
         </classes> 
        </test> 
    </suite> 
    

    、あなたの仕事はnameという名前のパラメータを持っているだろうことを確認する必要があります。

    サンプルテストクラス

    package org.rationale.emotions; 
    
    import org.testng.annotations.Parameters; 
    import org.testng.annotations.Test; 
    
    public class SampleTest { 
        @Test 
        @Parameters ("name") 
        public void testMethod(String name) { 
         System.err.println("Name that was passed in via Jenkins job " + name); 
        } 
    } 
    
  • 関連する問題