在TestNG中按顺序执行测试

时间:2018-05-18 11:00:46

标签: java testing automated-tests testng

我有多个测试类,应该按顺序执行。我创建了包含以下内容的testng.xml文件。

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="MyTestSuite1" verbose="2" parallel="methods" thread-count="1">
    <listeners>
        <listener class-name="utils.TestNGListener"></listener>
    </listeners>

    <test name="Regression" parallel="false" verbose="2">
        <classes>
            <class name="test.LoginTest" />
            <class name="test.ClearTest" />
            <class name="test.SendMessageTest" />
        </classes>
    </test>
</suite>

我为项目创建了main()方法以提供入口点。

public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException {
    TestNG testNG = new TestNG();

    String xmlFileName = "testng.xml";
    List<XmlSuite> suite = (List<XmlSuite>)(new Parser(xmlFileName).parse());
    testNG.setXmlSuites(suite);

    testNG.run();
}

我不确定,如何按指定的顺序执行测试套件,收到错误信息。

  

线程“main”中的异常org.testng.TestNGException:无法找到   classpath中的类:test.LoginTest

tree命令的输出:

C:.
├───.idea
│   └───libraries
├───META-INF
├───out
│   └───artifacts
├───resources
│   └───leanftjar
├───RunResults
│   └───Resources
│       ├───Snapshots
│       └───User
├───src
│   ├───main
│   │   ├───java
│   │   │   ├───hu
│   │   │   │   └───mysoft
│   │   │   ├───jar
│   │   │   │   └───META-INF
│   │   │   ├───META-INF
│   │   │   ├───unittesting
│   │   │   └───utils
│   │   └───resources
│   └───test
│       └───java
│           └───test
├───target
│   ├───classes
│   │   ├───hu
│   │   │   └───mysoft
│   │   ├───leanftjar
│   │   ├───unittesting
│   │   └───utils
│   ├───generated-sources
│   │   └───annotations
│   ├───generated-test-sources
│   │   └───test-annotations
│   ├───maven-status
│   │   └───maven-compiler-plugin
│   │       └───compile
│   │           └───default-compile
│   └───test-classes
│       └───test
└───test-output
    ├───All Test Suite
    ├───junitreports
    └───old
        └───All Test Suite

3 个答案:

答案 0 :(得分:6)

问题在于您的代码。默认情况下,位于src/main/java下的类不具有驻留在src/test/java中的类的可见性。因此,当你从src/main/java在main()方法中创建TestNG实例时,TestNG正在尝试从同一个类加载类,因为它找不到它,所以它会抛出异常。

要解决此问题,请将包含main()方法的类移到src/test/java下的包中,然后重试。它会工作。

答案 1 :(得分:2)

为了执行TestNG测试,您应该使用org.testng.annotations.Test class

标记测试方法
@Test
public void testMyMethod() {

使用testng.xml时请参阅example

// 1. To run with testng.xml file, uncomment this one, comment 2
testng.setTestSuites(Arrays.asList("testng.xml"));

要执行测试,请使用setPreserveOrder

testng.setPreserveOrder(true);

答案 2 :(得分:1)

如果按顺序运行这些步骤是一项艰难的要求,为了让您的测试通过,似乎应该在测试中内部实现它们。

@Test
public void doIt() {
   login();
   clearMessage();
   sendMessage();
}

通过适当的成功检查将作为一个单元失败,而不是隐藏测试维护人员的操作,并在测试失败的情况下提供更好的调试输出而不是&#34;三个测试拼凑在一起&#34; 34。