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
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;
}
}
jar ist nur eine zip-Datei.
Sie können diese extrahieren mit jar xf testfile.jar
und greifen Sie auf die Datei, die Sie wollen.
Diese Antwort könnte Ihnen auch helfen.
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.
kann ich programmgesteuert anstelle der Befehlszeile ausführen? – gihan
Sie möchten das Jar programmgesteuert ausführen? –
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
- 1. So führen Sie Flex-Proben
- 2. Erstellen Sie ein eigenständiges Glas mit JRuby
- 3. Generieren Sie Indexinformationen für ein ausführbares Glas?
- 4. So führen Sie Spezifikationen sequenziell
- 5. Ein Glas verteilen
- 6. Erstellen Sie ein Glas von MoPub sdk
- 7. So führen Sie ein Unix-Shell-Skript aus Windows
- 8. So führen Sie ein Julia-Skript in Atom
- 9. So führen Sie ein PHP-Skript lokal mit der Webseite
- 10. So führen Sie ein custom.R Skript mit OpenCPU
- 11. So führen Sie ein Skript aus Batch-Datei
- 12. Android-Layouts und ein Glas
- 13. So führen Sie ein Skript in zufälligen Intervallen aus
- 14. So führen Sie ein Update in Webapi mithilfe von httpget
- 15. So führen Sie TextConnection ohne ein temporäres Objekt aus
- 16. So führen Sie ein Shell-Skript mit dockerfiles CMD
- 17. So führen Sie ein SQL Plus-Skript in PowerShell aus
- 18. So führen Sie esoterische Sprache ZOMBIE
- 19. So führen Sie Anaconda Python auf sudo aus
- 20. So führen Sie PowerShell in CMD aus
- 21. So führen Sie cssnano von der Befehlszeile
- 22. So führen Sie die interne Abwicklungsfunktion aus:
- 23. So führen Sie Suche auf einer Liste von Tupeln
- 24. So führen Sie eine Funktion auf jeder Seite in AngularJs
- 25. So führen Sie Elixir Supervisor in escript
- 26. So führen Sie Update-Abfragen auf Spark-SQL
- 27. So führen Sie Git-Befehle auf Remote-Repository aus
- 28. So führen Sie den ElasticSearch-Server auf verschiedenen Computern aus
- 29. So führen Sie eine data.table-Zusammenführungsoperation aus
- 30. So führen Sie eine Methode durch Klicken auf eine Benachrichtigung
Thanks.it funktioniert gut wie erwartet. – gihan