我对使用Java的TestNG有疑问。我完全是TestNG的新手。我的疑问是,如何在没有main()方法的情况下使用java中的TestNG执行所有测试用例?如果您有任何想法,请建议我。下面的代码是在java中使用TestNG的示例测试用例的示例。但是如果你注意到,你可以在代码中找到一个没有main()方法的东西。然后,测试用例是如何执行的?
我有另一个疑问。是硒Webdriver和TestNG组合执行脚本需要main()方法吗?或者我们可以在没有main()方法的情况下执行测试用例吗?如果我们可以在没有main()的情况下执行测试用例,那么它是如何实现的呢?
package com.first.example;
import org.testng.annotations.Test;
public class demoOne {
@Test
public void firstTestCase()
{
System.out.println("im in first test case from demoOne Class");
}
@Test
public void secondTestCase()
{
System.out.println("im in second test case from demoOne Class");
}
}
答案 0 :(得分:4)
这是许多测试人员的有效怀疑。因为运行Java程序需要main()方法,而在TestNg中编写测试时我们不使用main()方法,而是使用Annotations。
TestNG中的注释是可以控制如何执行它们下面的方法的代码行。因此,简而言之,您不需要编写main()方法,TestNg本身就是这样做的。请参阅注释documentation末尾的代码,了解它是如何发生的。
正如在这个答案中正确指出的那样:https://stackoverflow.com/a/1918154/3619412
注释是元元对象,可用于描述其他对象 元对象。元对象是类,字段和方法。问一个 调用其元对象的对象(例如anObj.getClass()) 内省。内省可以更进一步,我们可以问一个 元对象它的注释是什么(例如aClass.getAnnotations)。 内省和注释属于所谓的反思和 元编程。
此外,在测试中没有必要使用main()方法,但如果需要,可以使用main()方法运行TestNg测试。请参阅this。
答案 1 :(得分:0)
从cmd提示符运行脚本我们使用下面的语句
java org.testng.TestNG testng1.xml
TestNG.java类中的main方法如何接受命令行参数,
public static void main(String[] argv) {
TestNG testng = privateMain(argv, null);
System.exit(testng.getStatus());
}
答案 2 :(得分:0)
您看对了。测试用例通过testng执行,该测试框架是受junit启发的测试框架,没有main()
方法,但广泛使用annotations。
根据Annotations中的文档,大多数API需要大量的样板代码。要编写Web服务,您需要提供成对的接口和实现。如果可以用注释指示可以远程访问哪些方法的程序进行“装饰”,则该模板可以由工具自动生成。注释不会直接影响程序的语义,但会影响工具和库对程序的处理方式,进而会影响正在运行的程序的语义。
TestNG是一个基于注释的简单测试框架,它使用标记注释类型指示一种方法是一种测试方法,应由测试工具运行。例如:
import org.testng.annotations.Test;
@Test
public void foo() {
System.out.println("With in foo test");
}
正在使用的测试工具如下:
import java.lang.reflect.*;
public class RunTests {
public static void main(String[] args) throws Exception {
int passed = 0, failed = 0;
for (Method m : Class.forName(args[0]).getMethods()) {
if (m.isAnnotationPresent(Test.class)) {
try {
m.invoke(null);
passed++;
} catch (Throwable ex) {
System.out.printf("Test %s failed: %s %n", m, ex.getCause());
failed++;
}
}
}
System.out.printf("Passed: %d, Failed %d%n", passed, failed);
}
}