2012-11-06 18 views
15

मैं निम्नलिखित मान प्रदान करने की जरूरत है के लिए Maven से एक पैरामीटर पारित करने के लिए ...कैसे जावा कोड परीक्षण

exeEvironment (टेस्ट पर्यावरण), testGroup (TestNG में समूह)

कमान से रेखा -> पीओएम -> टेस्टएनजी -> टेस्ट केस।

इन दो पदों के आधार पर ....

pass a java parameter from maven

How to pass parameters to guicified TestNG test from Surefire Maven plugin?

मैं निम्नलिखित विन्यास किया था ..

अचूक प्लगइन में, मैं दो विकल्प निम्नलिखित की कोशिश की, कोई काम नहीं कर रहा है।

=====

(1)

<execution> 
<id>default-test</id> 
    <goals> 
     <goal>test</goal> 
    </goals> 
    <configuration> 
     <properties> 
      <exeEnvironment>${exeEnvironment}</exeEnvironment> 
      <testGroup>${testGroup}</testGroup> 
     </properties> 
     <suiteXmlFiles> 
      <suiteXmlFile>testng.xml</suiteXmlFile> 
     </suiteXmlFiles> 
    </configuration> 
</execution> 

(2)

<execution> 
<id>default-test</id> 
<goals> 
    <goal>test</goal> 
</goals> 
<configuration> 
    <systemPropertyVariables> <exeEnvironment>${exeEnvironment}</exeEnvironment> 
     <testGroup>${testGroup}</testGroup> </systemPropertyVariables> 
    <suiteXmlFiles> 
     <suiteXmlFile>testng.xml</suiteXmlFile> 
    </suiteXmlFiles> 
</configuration> 
</execution> 

में testNG.xml, मैं उपयोग कर सकते हैं परिवर्तनीय testGroup ली के ...

<test name="Web Build Acceptance"> 
    <groups> 
     <run> 
      <include name="${testGroup} /> 
     </run> 
    </groups> 
    <classes> 
     <class name="com.abc.pqr" /> 
    </classes> 
</test> 

यह रूप में अच्छी तरह काम करने के लिए नहीं लगता है, मैं एक पैरामीटर परिभाषित करने की जरूरत है।


परीक्षण मामलों में, मैं दो तरीकों से ... निम्नलिखित में वह चर पाने की कोशिश की। (1)

testEnv = testContext.getSuite().getParameter("exeEnvironment"); 
testGroup = testContext.getSuite().getParameter("testGroup"); 

(2)

testEnv = System.getProperty("exeEnvironment"); 
testGroup = System.getProperty("testGroup"); 

उत्तर

33

यह वही बात है जो मैं अपने स्वचालन परीक्षण की तलाश में था और मुझे यह काम मिल गया।

कमांड लाइन तर्क

mvn clean test -Denv.USER=UAT -Dgroups=Sniff 

मेरे पोम Xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>TestNg</groupId> 
    <artifactId>TestNg</artifactId> 
    <version>1.0</version> 

    <dependencies> 
     <dependency> 
      <groupId>org.testng</groupId> 
      <artifactId>testng</artifactId> 
      <version>6.8</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.12.4</version> 
       <configuration> 
        <systemPropertyVariables> 
         <environment>${env.USER}</environment> 
        </systemPropertyVariables> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

TestNG परीक्षण

import org.testng.annotations.Parameters; 
import org.testng.annotations.Test; 


public class TestAuthentication { 

    @Test (groups = { "Sniff", "Regression" }) 
    public void validAuthenticationTest(){ 
     System.out.println(" Sniff + Regression" + System.getProperty("environment")); 
    } 

    @Test (groups = { "Regression" },parameters = {"environment"}) 
    public void failedAuthenticationTest(String environment){ 
     System.out.println("Regression-"+environment); 
    } 

    @Parameters("environment") 
    @Test (groups = { "Sniff"}) 
    public void newUserAuthenticationTest(String environment){ 
     System.out.println("Sniff-"+environment); 
    } 
} 

अच्छी तरह से ऊपर काम करता है। साथ ही, आपको testng.xml उपयोग करने की आवश्यकता है, तो आप suiteXmlFile तरह

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12.4</version> 
      <configuration> 
       <systemPropertyVariables> 
        <environment>${env.USER}</environment> 
       </systemPropertyVariables> 
       <suiteXmlFiles> 
        <suiteXmlFile>testng.xml</suiteXmlFile> 
       </suiteXmlFiles> 
      </configuration> 
     </plugin> 

इसके अलावा @Test() में बाद में के रूप में निर्दिष्ट कर सकते हैं ..., मैं @Parameters बजाय parameters उपयोग करने को प्राथमिकता मान्य नहीं है।

+0

वादा करता है, मुझे कोशिश करने और वापस पाने दो। साझा करने के लिए धन्यवाद। – Girish

+0

वैसे, आपने testng.xml का उपयोग करके खा लिया? – Girish

+4

मैं testng.xml का उपयोग नहीं कर रहा हूं, वैसे ही आपको POM फ़ाइल में पैरामीटर जोड़ने की आवश्यकता नहीं है। mvn स्वच्छ परीक्षण -Denvironment = क्यूए -Dgroups = प्रतिगमन आप इस 1. केवल प्रतिगमन समूह निष्पादित किया जाएगा (@Test (समूहों = { "पहचानोगे", "प्रतिगमन"}) 2 का उपयोग करें।@ पैरामीटर ("पर्यावरण") - मूल्य "क्यूए" सीधे आपके परीक्षण – KingArasan

2

आप TestNG xml या पोम में समूहों के लिए कुछ भी परिभाषित नहीं की जरूरत है, समर्थन इनबिल्ट आता है। आप बस .. cmd लाइन http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#groups

आशा है कि यह मदद करता है पर समूह निर्दिष्ट कर सकते

संपादित करें 2: परिभाषित करें

यहाँ Ok..so एक और विकल्प है ... लागू IMethodInterceptor

अपने कस्टम संपत्ति अपने कमांड लाइन कॉल में -Dcustomproperty = groupthatneedstoberun का उपयोग करें।

इंटरसेप्ट कॉल में, सभी विधियों के माध्यम से स्कैन करें .. प्रभाव के लिए कुछ ..

System.getProperty("customproperty"); 
for(IMethodInstance ins : methods) { 
    if(ins.getMethod().getGroups()) contains group) 
     Add to returnedVal; 
    } 
return returnedVal; 

इसे अपने एक्सएमएल में श्रोताओं की सूची में जोड़ें।

+0

उत्तर के लिए धन्यवाद और आप सही हैं, समूह निश्चित रूप से पोम प्लगइन में अंतर्निहित हैं लेकिन अगर मैं suiteXMLFile निर्दिष्ट करता हूं, तो इसे अनदेखा कर दिया जाएगा। इसलिए मूल रूप से मैं पीओएम को कमांड लाइन पर गतिशील रूप से समूह प्रदान करना चाहता हूं और यह testNG का उपयोग करके उन परीक्षणों को चलाने में सक्षम होना चाहिए। कृपया कोई अन्य विचार? – Girish

2

बिल्कुल सही।

को ABC.java

pom.xml

<properties> 
    <hostName>myhostname.com</hostName> 
</properties> 

और ABC.java में हम इस

System.getProperty("hostName") 
तरह प्रणाली गुणों से यह कॉल कर सकते हैं pom.xml से चर पारित करने के लिए सबसे आसान तरीका
+1

'16: 20: 15,676 DEBUG के साथ निष्पादित करने की आवश्यकता है TestApp: 21 - होस्टनाम: शून्य ' – Wingie

+1

यह मेरे लिए "शून्य" के साथ भी विफल रहता है – JohnP2

0

आपको पर्यावरण चर का उपयोग करने या उन्हें उपयोग करने के लिए pom.xml संपादित करने की आवश्यकता नहीं है।

बिल्ड अनुभाग के तहत Invoke Maven 3 के लिए लक्ष्य और विकल्प पैरामीटर लेते हैं।

Invoke Maven 3 
    Goals and options = test -Denv=$PARAM_ENV -Dgroup=$PARAM_GROUP 
1

ब्राउज़र की तरह पैरामीटर पासिंग और अन्य के रूप में नीचे किया जा सकता है:

<properties>  
    <BrowserName></BrowserName> 
    <TestRunID></TestRunID> 
</properties> 



     <!-- Below plug-in is used to execute tests --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.18.1</version> 
      <configuration> 
       <suiteXmlFiles> 
        <suiteXmlFile>src/test/resources/${testXml}</suiteXmlFile> 
       </suiteXmlFiles> 
       <systemPropertyVariables> 
        <browserName>${BrowserName}</browserName> 
        <testRunID>${TestRunID}</testRunID> 
       </systemPropertyVariables> 
      </configuration> 
      <executions> 
       <execution> 
        <id>surefire-it</id> 
        <phase>integration-test</phase> 
        <goals> 
         <goal>test</goal> 
        </goals> 
        <configuration> 
         <skip>false</skip> 
         <testFailureIgnore>true</testFailureIgnore> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

और जावा कोड उपयोग इस में इस संभाल करने के लिए:

public static final String Browser_Jenkin=System.getProperty("BrowserName"); 
    public static final String TestRunID=System.getProperty("TestRunID"); 

    public static String browser_Setter() 
    { 
     String value=null; 
     try { 
      if(!Browser_Jenkin.isEmpty()) 
      { 
       value = Browser_Jenkin; 
      } 
     } catch (Exception e) { 
      value =propObj.getProperty("BROWSER"); 
     } 
     return value; 
    } 

    public static String testRunID_Setter() 
    { 
     String value=null; 
     try { 
      if(!TestRunID.isEmpty()) 
      { 
       value = TestRunID; 
      } 
     } catch (Exception e) { 
      value =propObj.getProperty("TEST_RUN_ID"); 
     } 
     return value; 
    } 
इस (आप यह सोचते हैं निर्माण parameterized) की कोशिश करो
संबंधित मुद्दे