天天看点

TestNG使用方法总结

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”来配置

默认是强制依赖,就是出现异常就终止。。。。程序跳出

  1. public class TestngDependOnGroups {  
  2.     @Test(groups = { "init" })  
  3.     public void serverStartedOk() {  
  4.         System.out.println("serverStartedOk.....");  
  5.     }  
  6.     @Test(groups = { "init2" })  
  7.     public void initEnvironment() {  
  8.         System.out.println("initEnvironment.....");  
  9.         throw new RuntimeException("unexpected fail......");  
  10.     }  
  11.     @Test(dependsOnGroups = { "init.*" })  
  12.     public void method1() {  
  13.         System.err.println("I am over here.....");  
  14.     }  
  15. }  

如果添加, alwaysRun = true则变为顺序依赖,哪怕被依赖出现异常也继续执行

  1.   @Test(dependsOnGroups = { "init.*" }, alwaysRun = true)  
  2.     public void method1() {  
  3.         System.err.println("I am over here.....");  
  4.     }  

<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参数化