我有一個.Jar文件包含需要在TestNG test.I上運行的文件需要在該JAR文件中運行一個特定的XML文件。我的要求是有可能執行TestNG測試指向.Jar文件,如果有的話我該怎麼做。如何運行TestNG測試指向一個罐子
回答
您可以閱讀testng.xml並以編程方式運行它,而無需提取jar。
首先你需要讀取xml並解析它。 這裏我創建了一些bean類來匹配我的xml文件格式。 這是我的bean類,創建你自己的一套配合您的要求
@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 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);
}
最後我們運行套件:
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是一個zip文件。
您可以使用jar xf testfile.jar
獲取該文件並訪問您想要的文件。
此答案也可能對您有所幫助。
您可以使用-xmlpathinjar套房/ GroupBased_Tests.xml選項來運行你的XML。
如果有幫助,可以參考maven here的步驟。
對於您可以使用的其他選項,請參考Testng文檔here。
我可以執行編程而不是命令行嗎? – gihan
你想以編程方式執行jar嗎? –
yes.i有一個從maven build.let生成的jar文件,說我的jar文件名是'myproject-1.0-SNAPSHOT'這個jar包含我所有的'src/target'文件夾resources.so我想執行我的'testngTestfile .xml「,它位於生成的jar文件中。我想以編程方式執行它。例如:用戶將jar文件名作爲arg並以編程方式執行該測試.'executeTest(.jarfilelocation,fileNametobeExecuted)'.inside this method test將會運行。 – gihan
- 1. Maven start從罐子TestNG測試
- 2. 的IntelliJ運行一個測試TestNG中
- 3. java.util.MissingResourceException運行一個罐子
- 4. TESTNG測試運行序列
- 5. TestNG沒有運行測試
- 6. 運行TestNG測試實例
- 7. TestNG測試不會運行
- 8. 運行位於在一個罐子裏是另一個罐子
- 9. 如何運行sbt-assembly構建的罐子的測試
- 10. 如何從罐子中運行JUnit測試,而JUnit的找不到測試類
- 11. 重新運行TestNG的測試導致測試運行永遠
- 12. TestNG測試不能並行運行
- 13. 如何像參數化一樣多次運行TestNG測試?
- 14. 從一個組運行TestNG單一測試
- 15. TestNG的僅在運行第一個測試在一套房
- 16. 運行從另一個罐子的罐子
- 17. 在另一個罐子裏面運行外部罐子
- 18. TestNG的BeforeSuite只運行一個測試類
- 19. 在同一個瀏覽器中運行所有測試webdriver testng
- 20. 導出並運行一個罐子
- 21. 運行一個罐子兩次
- 22. 運行TestNG的GUI工具測試
- 23. testng多次運行硒測試
- 24. Jenkins沒有運行TestNG測試
- 25. TestNG多測試類 - 運行其他類
- 26. TestNG未在eclipse上運行測試
- 27. 通過JUnit TestSuite運行TestNg測試
- 28. 從.Net運行Java TestNG測試
- 29. 在IntelliJ中運行TestNG測試
- 30. 所有測試跳過運行testNg programaticaly
Thanks.it正常工作正常。 – gihan