TestNG是一个非常好用d自动化测试框架,对于经常使用selenium做web端UI测试的童鞋来说是个不错的工具。
具备基本常识的测试童鞋们,可能需要知道存在即合理,存在即有用的道理。任何一个工具,或者一件事的存在如果令人得不到益处,那么是不会有人继续使用的。这个常识基本上人人都懂。
在自动化测试,TestNG是个非常好用的框架。在实际项目中,会有成千上百个测试用例进行执行,这时候需要用到并发执行测试。在TestNG中,提供了很好的并发执行的方法。下面从4个方面来理一下
TestNG对并发执行的处理。
1. TestNG并发执行测试的实现方法【Suite.xml, testng.xml etc 】
2. TestNG并发执行测试的测试用例执行顺序控制[ preserve-order, priority ]
3. TestNG并发执行测试用例的优先级控制 [ priority = 0, 1, 2, 3, 4 ....]
4. 设置TestNG对某些测试用例作为选测或者忽略测试的控制【optional 】
下面1 1 详细具体来说。
1. TestNG里有suite的概念,即可以把多个测试用例放在一个***testng.xml的XML文件中执行,里面有定义好的要测的测试用例。举个栗子。
<suite name="Test-class Suite" parallel="tests" thread-count="2">
<test name="test-method One">
<parameter name="test-name" value="test-method One" />
<classes>
<class name="testngcase.ParallelSuiteTest" />
</classes>
</test>
<test name="test-method Two">
<parameter name="test-name" value="test-method Two" />
<classes>
<class name="testngcase.ParallelSuiteTest" />
</classes>
</test>
</suite>
在测试项目目录下创建xml文件,设定好要测试的测试用例,如上码好,不要遗漏。同时,这里需要在类方法里有对应的@BeforeTest注解,和@Parameters({"param-name"})来完成测试用例到XML文件的
照应关系,注意param-name必须跟xml文件里的parameter name值 1 1对应。好了,这样就完成一个并发用例的执行,右键Run As TestNG class即可。
2. 如果想要进一步的对测试套集里的测试用例执行顺序进行限定和设置的话,那么可以用到TestNG的另一个属性preserve-order, 当preserve-order="true", 表示测试用例按照XML文件里所列的顺序进行顺序执行,当preserve-order="false"时,表示测试用例不会按照XML文件里的顺序进行顺序执行,即会有乱序执行。
<xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="test_testng">
<test name="test" preserve-order="true">
<classes>
<class name="testngcase.ParallelClassesTestOne"></class>
<class name="testngcase.ParallelClassesTestTwo"></class>
</classes>
</test>
</suite>
如上一个使用preserve-order来控制测试用例执行的顺序的xml文件,实际执行的时候,将会按照上面给定的顺序1次执行ParallelClassesTestOne, ParallelClassesTestTwo两个测试用例。
3. 如果还想有其他的自如控制用例执行顺序的需求,那么TestNG提供了一个priority关键字,可以自行设定。具体见栗子。
@Test(priority=1)
public void testMethodOne() {
long id=Thread.currentThread().getId();
System.out.println("Sample test-method One. Thread id is:"+id);
}
@Test(priority=2)
public void testMethodTwo() {
long id=Thread.currentThread().getId();
System.out.println("Sample test-method Two. Thread id is:"+id);
}
上面两个测试方法上分别在@Test后加了priority=*的设定,通过设定priority的值来控制方法执行的顺序,值越大,执行顺序越靠后。
4. 其他有助于测试用例的执行的关键字,对于执行用例时因为各种因素可能出现的状况而不能执行时,可以采用在@Test(enabled=false)设定来忽略某些测试方法。
@Test(enabled=false)
public void testMethodTwo() {
long id=Thread.currentThread().getId();
System.out.println("Sample test-method Two. Thread id is:"+id);
}
这样做了标注后就达到里忽略此测试方法的目的。
另外一个关键字,@Optional通常用在@Parameters相关的测试方法下,对于在xml文件中没有对参数值给出值的参数,给出一个备选的值,以免执行出现问题。
以上4点总结,关于TestNG在并发执行用例上的使用,个人小左,欢迎补充和指正~~~