Java 如何运行指向jar的TestNG测试
我有一个.Jar文件,其中包含在TestNG测试中运行所需的文件。我想在该Jar文件中运行一个特定的xml文件。我的要求是,是否可以执行指向.Jar文件的TestNG测试,如果可以,我该如何做。Jar只是一个zip文件 您可以使用Java 如何运行指向jar的TestNG测试,java,testng,Java,Testng,我有一个.Jar文件,其中包含在TestNG测试中运行所需的文件。我想在该Jar文件中运行一个特定的xml文件。我的要求是,是否可以执行指向.Jar文件的TestNG测试,如果可以,我该如何做。Jar只是一个zip文件 您可以使用jar xf testfile.jar提取该文件,并访问所需的文件 这个答案也可能对你有所帮助 您可以使用-xmlpathinjar suites/GroupBased_Tests.xml选项运行xml。 如果有帮助,可以参考maven的步骤 有关您可以使用的其他选项
jar xf testfile.jar
提取该文件,并访问所需的文件
这个答案也可能对你有所帮助
您可以使用-xmlpathinjar suites/GroupBased_Tests.xml选项运行xml。
如果有帮助,可以参考maven的步骤
有关您可以使用的其他选项,请参阅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 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;
}
}
publicstaticvoidrunsuite(字符串jarFilePath,suites)
引发畸形的DurLexException,ClassNotFoundException{
//不要混淆:这里的XmlSuite是标准的testNg类,我们的bean类是Suite
XmlSuite=newxmlsuite();
setName(s.getName());
for(测试t:s.getTestCases()){
XmlTest=新的XmlTest(套件);
test.setName(t.getName());
列表类=新的ArrayList();
for(TestClass tc:t.getClasses()){
类cls=loadClass(jarFilePath,tc.getName());
如果(cls!=null){
XmlClass xClass=新的XmlClass(cls,false);
添加(xClass);
test.setXmlClasses(类);
}
}
}
列表套件=新的ArrayList();
套房。添加(套房);
TestNG tng=新的TestNG();
tng.setXmlSuites(套房);
tng.run();
}
公共类loadClass(String jarFilePath,String className)引发畸形的异常,
ClassNotFoundException{
File jarFile=新文件(jarFilePath);
if(jarFile.isFile()){
URL=jarFile.toURL();
URL[]URL=新URL[]{URL};
ClassLoader cl=新的URLClassLoader(URL);
返回cl.loadClass(类名);
}否则{
返回null;
}
}
您想以编程方式执行jar吗?是的。我有一个从maven build生成的jar文件。假设我的jar文件名是myproject-1.0-SNAPSHOT
这个jar包含我的src/target
文件夹资源。所以我想执行位于生成的jar文件中的testngTestfile.xml
。我想要以编程方式执行。例如:用户将文件名作为参数给jar,并以编程方式执行该测试。executeTest(.jarfilelocation,fileNametobeExecuted)
。在该方法中,将运行测试。这可能会有所帮助。。那将是一个单独的问题,谢谢。据你所知,TestNG中有任何工具可以通过编程方式对jar运行测试吗?如果你是这样问的,你也可以通过编程方式在TestNG中运行测试,而无需在jar中打包
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;
}
}