2016-02-29 8 views
6

पर ध्यान दिया गया है मेरे पास है। जार फ़ाइल जिसमें टेस्टएनजी परीक्षण पर चलाने के लिए आवश्यक फाइलें हैं। मैं उस जार फ़ाइल के अंदर एक विशिष्ट एक्सएमएल फ़ाइल चलाने के लिए चाहता हूं। मेरी आवश्यकता यह है कि पर इंगित टेस्टएनजी परीक्षण निष्पादित करना संभव है। अगर फ़ाइल है तो मैं ऐसा कैसे कर सकता हूं।टेस्टएनजी परीक्षणों को कैसे चलाने के लिए एक जार

उत्तर

1

आप testng.xml पढ़ सकते हैं और इसे जार निकालने के बिना प्रोग्रामेटिक रूप से चला सकते हैं।

सबसे पहले आपको एक्सएमएल पढ़ने और इसे पार्स करने की आवश्यकता है। यहां मैंने अपने एक्सएमएल फ़ाइल प्रारूप से मेल खाने के लिए कुछ बीन कक्षाएं बनाई हैं। सूट

public Suite getTestSuiteFromJar(String jarFilePath, String filename) { 
    File jarFile = new File(jarFilePath); 
    Suite suite = null; 
    try { 
     if (jarFile.isFile()) { 
      final JarFile jar = new JarFile(jarFile); 

      InputStream in = jar.getInputStream(new ZipEntry(filename)); 
      suite = XmlUtil.parseSuite(in); 
      jar.close(); 
     } 

    } catch (IOException | JAXBException | SAXException | ParserConfigurationException e) { 
     e.printStackTrace(); 
    } 
    return suite; 
} 

public static Suite parseSuite(InputStream is) throws JAXBException, SAXException, ParserConfigurationException { 
    JAXBContext jaxbContext = JAXBContext.newInstance(Suite.class); 
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
    return (Suite) jaxbUnmarshaller.unmarshal(is); 
} 

अंत में हम चलाते हैं: यह मेरा सेम वर्ग है, बनाते हैं तो आप वर्ग है जो आपकी आवश्यकता

@XmlRootElement(name = "suite") 
public class Suite { 

private String name; 
private String verbose = "1"; 
private boolean parallel =false; 

private List<Test> testCases = new ArrayList<Test>(); 
private List<Parameter> parameters = new ArrayList<Parameter>(); 

@XmlAttribute 
public String getName() { 
    return name; 
} 


public void setName(String name) { 
    this.name = name; 
} 

@XmlAttribute 
public String getVerbose() { 
    return verbose; 
} 


public void setVerbose(String verbose) { 
    this.verbose = verbose; 
} 

@XmlAttribute 
public boolean isParallel() { 
    return parallel; 
} 


public void setParallel(boolean parallel) { 
    this.parallel = parallel; 
} 

@XmlElement(name = "test") 
public List<Test> getTestCases() { 
    return testCases; 
} 

public void setTestCases(List<Test> testCases) { 
    this.testCases = testCases; 
} 

@XmlElement(name = "parameter") 
public List<Parameter> getParameters() { 
    return parameters; 
} 


public void setParameters(List<Parameter> parameters) { 
    this.parameters = parameters; 
} 
} 

के साथ मेल का सेट के मालिक हैं और इस आप कैसे पढ़ा है और पार्स यह

public static void runSuite(String jarFilePath, Suite s) 
     throws MalformedURLException, ClassNotFoundException { 
    //Don't confuse : XmlSuite here, is the standard testNg class. our bean class is Suite 
    XmlSuite suite = new XmlSuite(); 
    suite.setName(s.getName()); 

    for (Test t : s.getTestCases()) { 
     XmlTest test = new XmlTest(suite); 
     test.setName(t.getName()); 
     List<XmlClass> classes = new ArrayList<XmlClass>(); 
     for (TestClass tc : t.getClasses()) { 
      Class cls = loadClass(jarFilePath, tc.getName()); 
      if (cls != null) { 
       XmlClass xClass = new XmlClass(cls, false); 
       classes.add(xClass); 
       test.setXmlClasses(classes); 
      } 
     } 
    } 
    List<XmlSuite> suites = new ArrayList<XmlSuite>(); 

    suites.add(suite); 
    TestNG tng = new TestNG(); 

    tng.setXmlSuites(suites); 
    tng.run(); 
} 

public Class loadClass(String jarFilePath, String className) throws MalformedURLException, 
     ClassNotFoundException { 
File jarFile = new File(jarFilePath); 
    if (jarFile.isFile()) { 
     URL url = jarFile.toURL(); 
     URL[] urls = new URL[] { url }; 
     ClassLoader cl = new URLClassLoader(urls); 
     return cl.loadClass(className); 
    } else { 
     return null; 
    } 
} 
+0

से ऊपर साझा किया है धन्यवाद। यह अपेक्षा के अनुसार ठीक काम करता है। – gihan

1

जार एक बस एक ज़िप फ़ाइल है।

आप jar xf testfile.jar का उपयोग करके निकाले गए और अपनी इच्छित फ़ाइल तक पहुंच सकते हैं।


यह उत्तर आपको भी मदद कर सकता है।

Read a file from inside of an external Jar file?

2

आप अपने xml चलाने के लिए -xmlpathinjar सुइट्स/GroupBased_Tests.xml विकल्प का उपयोग कर सकते हैं।
अगर यह मदद करता है तो मैवेन here के साथ चरणों का उल्लेख कर सकते हैं।

अन्य विकल्पों के लिए आप उपयोग कर सकते हैं, कृपया टेस्टिंग दस्तावेज here देखें।

+0

क्या मैं कमांड लाइन के बजाय प्रोग्रामेटिक रूप से निष्पादित कर सकता हूं? – gihan

+0

आप जार प्रोग्रामेटिक रूप से निष्पादित करना चाहते हैं? –

+0

yes.i में एक जार फ़ाइल है जो maven build.let से उत्पन्न होती है, मेरा कहना है कि मेरा जार फ़ाइल नाम 'myproject-1.0-SNAPSHOT' है, इस जार में मेरे सभी 'src/target' फ़ोल्डर संसाधन हैं। इसलिए मैं अपने' testngTestfile को निष्पादित करना चाहता हूं .xml' जो जेनरेट की गई जेर फ़ाइल के अंदर स्थित है। मैं इसे प्रोग्रामेटिक रूप से करना चाहता हूं। Eg:user फ़ाइल नाम के साथ जार को एक तर्क के रूप में देता है और उस परीक्षा को प्रोग्रामेटिक रूप से निष्पादित करता है।'executeTest (.jarfilelocation, fileNametobeExecuted) '। इस विधि परीक्षण के अंदर चलाया जाएगा – gihan

संबंधित मुद्दे