1、TestNG按顺序执行Case
1)优先级法:@Test(Priority=?)优先级设置的值越小,则越优先。
2)字母排序法:由@Test的方法名的首字母由a~~z。
3)在xml中设置标识 preserve-order可以控制类和方法执行顺序,其顺序就是xml中指定的顺序。
< test name ="test12" preserve-order ="true">
2、TestNG异常测试
@Test(expectedExceptions=ArithmeticException.class)
@Test(expectedExceptions = IllegalArgumentException.class)
预期该方法中会出现这样的异常,一旦运行的时候出现异常则认为是测试通过,获取到了该异常不会报失败
3、TestNG测试分组
1) 在方法上的分组 package TankLearn2.Learn;
import org.testng.annotations.Test;
public class GroupTest {
@Test(groups = {"selenium-test"})
public void testLogin(){
System.out.println("this is test login");
}
@Test(groups = {"functiontest"})
public void testOpenPage(){
System.out.println("this is test Open Page");
}
}
然后在testng.xml中 按组执行测试用例 <? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > < suite name ="Suite1"> < test name ="test1"> < groups > < run > < include name =" selenium-test " /> </ run > </ groups >
<classes> <class name="TankLearn2.Learn.GroupTest" /> </classes> </ test > </ suite > 还有一种all的情况? 还有兼容的情况 @Test(groups = {"functiontest"," selenium-test "}) 2) 在类上的分组
package com.yiibai;
import org.testng.annotations.Test;
@Test(groups = "selenium-test")
public class TestSelenium {
public void runSelenium() {
System.out.println("runSelenium()");
}
public void runSelenium1() {
System.out.println("runSelenium()1");
}
}
创建一个测试类: testng.xml ,其代码如下所示 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > < suite name =" TestAll "> <!-- Run test method on group "selenium" only --> < test name =" selenium "> < groups > < run > < include name =" selenium-test " /> </ run > </ groups > < classes > < class name =" com.yiibai.TestSelenium " /> < class name =" com.yiibai.TestGroup " /> </ classes > </ test > </ suite > 总结: 分组测试其实可以控制哪部分方法和类执行测试,主要通过xxx.xml进行配置和控制 < groups > < run > < include name =" selenium-test " /> </ run > </ groups >
< classes > < class name =" com.yiibai.TestSelenium " /> < class name =" com.yiibai.TestGroup " /> </ classes > 代表类( com.yiibai.TestSelenium,com.yiibai.TestGroup )中带有@Test(groups = " selenium-test " )所有类和方法都要执行。
4、 TestNG依赖测试 1) dependsOnMethods import org.testng.annotations.Test;
public class TestngDependencies { @Test public void testmethod(){ System.out.println("我是否为第一个执行"); } @Test public void serverstartok (){ System.err.println("method1 runs after me......"); } @Test(dependsOnMethods = {"serverstartok"} ) public void method1(){ System.out.println("depens on serverstartok."); } } 2)dependsOnGroups package com.yiibai;
import org.testng.Assert; import org.testng.annotations.Test;
public class DependencyTestUsingAnnotation { String message = "Manisha"; MessageUtil messageUtil = new MessageUtil(message);
@Test(groups = { "init1" }) public void testPrintMessage() { System.out.println("Inside testPrintMessage()"); message = "Manisha"; Assert.assertEquals(message, messageUtil.printMessage()); }
@Test(groups = { "init1" }, dependsOnGroups = { "init2" }, alwaysRun = true) //执行init1组的时候,要先执行init2组的东西(被依赖) public void testSalutationMessage() { System.out.println("Inside testSalutationMessage()"); message = "Hi!" + "Manisha"; Assert.assertEquals(message, messageUtil.salutationMessage()); }
@Test(groups = { "init2" }) public void initEnvironmentTest() { System.out.println("This is initEnvironmentTest"); } } ------------------------------------------------------------------------------------------------------- <test verbose="2" name="TestngDependOnGroups"> <groups> <run> <include name="init1" /> </run> </groups> ----------------- groups用来控制分组的,执行所有groups=init1----------------------- <classes> <class name="com.yiibai.DependencyTestUsingAnnotation"> </class> </classes> </test> ---------------- 强制依赖 :如果被依赖的某一个方法发生了 异常 ,那么之后的方法都 不会被执行 (默认) 顺序依赖 :无论被依赖的方法是否出现异常, 后续的方法都会被执行,通过alwaysRun=“true”来配置
默认是强制依赖,就是出现异常就终止。。。。程序跳出
- public class TestngDependOnGroups {
- @Test(groups = { "init" })
- public void serverStartedOk() {
- System.out.println("serverStartedOk.....");
- }
- @Test(groups = { "init2" })
- public void initEnvironment() {
- System.out.println("initEnvironment.....");
- throw new RuntimeException("unexpected fail......");
- }
- @Test(dependsOnGroups = { "init.*" })
- public void method1() {
- System.err.println("I am over here.....");
- }
- }
如果添加, alwaysRun = true则变为顺序依赖,哪怕被依赖出现异常也继续执行
- @Test(dependsOnGroups = { "init.*" }, alwaysRun = true)
- public void method1() {
- System.err.println("I am over here.....");
- }
<classes> <class name="com.yiibai.TestngDependOnGroups "> </class> </classes>
注意:单独执行组的时候,dependsOnGrops @Test (dependsOnGroups = { "init.*" }) 的不会执行,只有 @Test(groups = { "init1" }, dependsOnGroups = { "init2" }, alwaysRun = true)在执行组init1的时候才能执行。
5、TestNG忽略测试
有时候测试用例还没准备好, 可以给测试用例加上 @Test(enable = false) , 来禁用此测试用例 package TankLearn2.Learn; import org.testng.annotations.Test; public class TesgNGIgnore { @Test(enabled = false ) public void testIgnore(){ System.out.println("This test case will ignore"); }}
6、TestNG参数化