繁体   English   中英

TestNG - selenium 脚本中的测试执行顺序

[英]TestNG - Order of Tests execution in selenium script

我正在使用 selenium 3.8.1 和 TestNG 6.9.2 版本,而在完成 @Test 方法之前测试执行另一个 @Test 方法开始,因此我在完成测试用例执行后在 selenium 脚本中遇到错误。

一班

public class LoginPage{


@Test(priority=0)
public void test1(){

System.out.println(first test);
}


@Test(priority=1)
public void test2(){

System.out.println(Second test);
}

}

二等舱

public class HomePage{


@Test(priority=0)
public void test3(){

System.out.println(first test);
}

@Test(priority=1)
public void test4(){

System.out.println(Second test);
}

}

测试文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test name="Test" preserve-order="true">
    <classes>
      <class name="com.tests.day.modules.LoginPage"/>
      <class name="com.tests.day.modules.HomePage"/>    
    </classes>
  </test>
</suite>

在完成登录页面类的 test2 之前使用 testng.xml 文件执行上述后,test3 正在启动 HomePage,因此我得到异常,无法找到元素。

注释中提到了TestNGpreserve-order属性如下:

默认情况下,TestNG 将按照在 XML 文件中找到的顺序运行您的测试。 如果您希望此文件中列出的类和方法以不可预测的顺序运行,请将保留顺序属性设置为 false

我执行了与您的代码块和testng.xml类似的相同测试,如下所示:

  • 登录页面

    package testng_order_of_tests_execution; import org.testng.annotations.Test; public class LoginPage { @Test(priority=0) public void test1(){ System.out.println("First Test"); } @Test(priority=1) public void test2(){ System.out.println("Second Test"); } }
  • 主页

    package testng_order_of_tests_execution; import org.testng.annotations.Test; public class HomePage { @Test(priority=0) public void test3(){ System.out.println("first test"); } @Test(priority=1) public void test4(){ System.out.println("second test"); } }
  • 测试文件

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <test name="Test" preserve-order="true"> <classes> <class name="testng_order_of_tests_execution.LoginPage"/> <class name="testng_order_of_tests_execution.HomePage"/> </classes> </test> <!-- Test --> </suite> <!-- Suite -->

我在控制台上发现的输出与您的类似,如下所示:

First Test
first test
Second Test
second test

这个Console Output显然给我们的印象是执行顺序是:

test1() -> test3() -> test2() -> test4()

但实际上没有

查看运行套件结果,您将获得如下图所示的实际执行顺序:

testng_order_of_tests_execution

所以很明显,实际的顺序是:

test1() -> test2() -> test3() -> test4()

琐事

您可以使用testng-results.xml进行更细致的观察,如下所示:

 <?xml version="1.0" encoding="UTF-8"?> <testng-results skipped="0" failed="0" ignored="0" total="4" passed="4"> <reporter-output> </reporter-output> <suite name="Suite" duration-ms="61" started-at="2017-12-25T12:57:12Z" finished-at="2017-12-25T12:57:12Z"> <groups> </groups> <test name="Test" duration-ms="61" started-at="2017-12-25T12:57:12Z" finished-at="2017-12-25T12:57:12Z"> <class name="testng_order_of_tests_execution.HomePage"> <test-method status="PASS" signature="test3()[pri:0, instance:testng_order_of_tests_execution.HomePage@5419f379]" name="test3" duration-ms="4" started-at="2017-12-25T18:27:12Z" finished-at="2017-12-25T18:27:12Z"> <reporter-output> </reporter-output> </test-method> <!-- test3 --> <test-method status="PASS" signature="test4()[pri:1, instance:testng_order_of_tests_execution.HomePage@5419f379]" name="test4" duration-ms="1" started-at="2017-12-25T18:27:12Z" finished-at="2017-12-25T18:27:12Z"> <reporter-output> </reporter-output> </test-method> <!-- test4 --> </class> <!-- testng_order_of_tests_execution.HomePage --> <class name="testng_order_of_tests_execution.LoginPage"> <test-method status="PASS" signature="test1()[pri:0, instance:testng_order_of_tests_execution.LoginPage@735b5592]" name="test1" duration-ms="14" started-at="2017-12-25T18:27:12Z" finished-at="2017-12-25T18:27:12Z"> <reporter-output> </reporter-output> </test-method> <!-- test1 --> <test-method status="PASS" signature="test2()[pri:1, instance:testng_order_of_tests_execution.LoginPage@735b5592]" name="test2" duration-ms="2" started-at="2017-12-25T18:27:12Z" finished-at="2017-12-25T18:27:12Z"> <reporter-output> </reporter-output> </test-method> <!-- test2 --> </class> <!-- testng_order_of_tests_execution.LoginPage --> </test> <!-- Test --> </suite> <!-- Suite --> </testng-results>

TestNG,results.xml你会发现,所有的测试开始于2017-12-25T12:57:12Z和结束在2017-12-25T12:57:12Z。 尽管测试执行所用的时间甚至不到 1 秒,但您仍然可以观察到实例名称的差异,例如instance:testng_order_of_tests_execution.HomePage@5419f379instance:testng_order_of_tests_execution.LoginPage@735b5592 由于我们的测试单线程测试,因此我们可以得出结论,执行顺序是正确的,符合预期。 但是控制台输出混淆了。

在 testng.xml 的test标签内使用group-by-instances="true"

定义您的 xml测试标签,如下所示:

<test name="Test" group-by-instances="true">

或者,您也可以检查以下代码行:

<test name="Test" preserve-order="true" group-by-instances="true">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM