2016-02-29 8 views
6

Ich habe eine .Jar Datei, die Dateien für Tests auf TestNG Test enthält.Ich möchte eine bestimmte XML-Datei innerhalb dieser Jar-Datei ausführen.Meine Anforderung ist das ist Es ist möglich, TestNG Test auf eine .Jar Datei ausgeführt, wenn ja, wie kann ich das tun.So führen Sie TestNG-Tests auf ein Glas

Antwort

1

Sie können die Datei "testng.xml" lesen und auch programmgesteuert ausführen, ohne das JAR zu extrahieren.

Zuerst müssen Sie das XML lesen und analysieren. Hier habe ich einige Bean-Klassen erstellt, die mit meinem XML-Dateiformat übereinstimmen. Diese meine Bean-Klasse ist, erstellen Sie von Klassen festgelegt hat, uns

@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; 
} 
} 

mit Ihrer Anforderung entsprechen Und das ist, wie Sie es lesen und analysieren:

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); 
} 

Schließlich führen wir die Suite:

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

Thanks.it funktioniert gut wie erwartet. – gihan

2

Sie können die -xmlpathinjar Suiten/GroupBased_Tests.xml Option benutzen, um Ihre xml auszuführen.
Kann Schritte mit Maven here verweisen, wenn es hilft.

Weitere Optionen, die Sie verwenden können, finden Sie in der Dokumentation von Testng here.

+0

kann ich programmgesteuert anstelle der Befehlszeile ausführen? – gihan

+0

Sie möchten das Jar programmgesteuert ausführen? –

+0

yes.i habe eine JAR-Datei, die aus maven build.let generiert wurde. Mein JAR-Dateiname ist 'myproject-1.0-SNAPSHOT'. Dieses JAR enthält alle meine' src/target' -Ordner-Ressourcen.so möchte ich meine 'testngTestfile ausführen .xml', das sich innerhalb dieser generierten jar-Datei befindet.i möchte es programmgesteuert tun.Eg:user geben Sie jar mit dem Dateinamen als Argument ein und führen Sie den Test programmgesteuert aus.executeTest (.jarfilelocation, fileNametobexecuted) '.inside this method test wird ausgeführt. – gihan

Verwandte Themen