[基于Selenium2+Java的UI自动化(13)]-单元测试框架testNG(3)

java

#1

一、测试用例@Test的几个属性配置


(1)用例优先级:priority

使用优先级关键属性,可以定义多个用例的执行先后顺序,priority=0 优先级最高,最先执行,数值越大,优先级越低;

package com.automation.testng;
import org.testng.annotations.Test;
/**
 * 类说明:用例执行的先后顺序:优先级priority
 * <br/>
 * @version 1.0
 * 2016年11月30日 下午9:32:15
 */
public class TestPriority {
	
  @Test(priority=0)
  public void fun1() {
	  System.out.println("1. fun1  第一个执行;");
  }
  
  @Test(priority=2)
  public void fun2() {
	  System.out.println("2. fun2  第二个执行;");
  }

  @Test(priority=4)
  public void fun4() {
	  System.out.println("4. fun4  第四个执行;");
  }
  
  @Test(priority=3)
  public void fun3() {
	  System.out.println("3. fun3  第三个执行;");
  }
}


如果我们不设置用例的执行先后顺序的话,用例将随机执行;


(2)用例依赖:dependsOnMethods

使用依赖,可以加强不同用例的关联性,dependsOnMethods = {“依赖的用例名称”} ,例如发邮件的用例,必须依赖于登录的用例,先登录才能发邮件;

package com.automation.testng;
import org.testng.annotations.Test;
/**
 * 类说明:用例执行的先后顺序:依赖dependsOnMethods
 * <br/>
 * @version 1.0
 * 2016年11月30日 下午9:32:15
 */
public class TestDependent {
	
  @Test
  public void fun1() {
	  System.out.println("1. fun1  第一个执行, 因为fun3依赖它;");
  }
  
  @Test( dependsOnMethods = {"fun3"} )
  public void fun2() {
	  System.out.println("2. fun2  最后执行,因为fun3已经执行完毕。;");
  }
  
  @Test( dependsOnMethods = {"fun1"} )
  public void fun3() {
	  System.out.println("3. fun3  第二个执行,因为它依赖的fun1已经执行完毕;");
  }

}

使用用例之间的相互依赖,也可以间接设置用例的执行先后顺序:只有用例A 所依赖的用例B 先执行完毕,A才会执行,否则A不执行。


(3)设定用例是否执行:enabled

使用enabled 属性,可以设定当前用例是否执行 ,enabled = false 的时候,当前用例将不会执行;

package com.automation.testng;
import org.testng.annotations.Test;
/**
 * 类说明:用例执行与否:enabled
 * <br/>
 * @version 1.0
 * 2016年11月30日 下午9:32:15
 */
public class TestEnabled {
	
  @Test(enabled = true)
  public void fun1() {
	  System.out.println("1. fun1  的enabled属性为true,则fun1肯定执行;");
  }
  
  @Test(enabled = false)
  public void fun2() {
	  System.out.println("2. fun2 的enabled属性为false,则fun2肯定不执行;");
  }
  
  @Test
  public void fun3() {
	  System.out.println("3. fun3  没有对enabled进行设置,默认执行;");
  }
}


二、用例分组

用例分组,就是将一系列的不同的用例归为一个小单元,那么,执行这个小单元,就会执行属于这个小单元的所有用例;

并且,一个用例可以同时属于不同的组;
例如:登录这个用例,不仅属于发邮件的组别中,也属于读邮件的组别中。

package com.automation.testng;
import org.testng.annotations.Test;
/**
 * 类说明:用例分组,按组别执行;
 * <br/>执行group1---->运行fun1、fun4
 * <br/>执行group2---->运行fun1、fun3
 * @version 1.0
 * 2016年11月30日 下午9:32:15
 */
public class TestGroups {
	
  @Test(groups = {"group1","group2"})
  public void fun1() {
	  System.out.println("1. fun1同时属于group1  和 group2,所以group1、group2执行的时候,fun1都执行;");
  }
  
  @Test
  public void fun2() {
	  System.out.println("2. fun2  不属于任何一个组,所以按组执行的之后,fun2不执行;");
  }

  @Test(groups = {"group1"})
  public void fun4() {
	  System.out.println("4. fun4  属于group1,所以group1执行的时候,fun4执行;");
  }
  
  @Test(groups = {"group2"})
  public void fun3() {
	  System.out.println("3. fun3  属于group2,所以group2执行的时候,fun3执行;");
  }
}

执行一个组,那么就必须使用配置文件testng.xml来执行了;

配置文件中标签的说明:
groups:里边包含的分组信息;
run:设置需要运行的组别;
include:这次运行用例中,需要执行的组别;
exclude:跟include相反,意思是这次不需要执行的组别;

通过定义需要运行的组,那么对配置文件执行的之后,就只运行group1这个组中方法:fun1 、fun4

当然,除了这样的分组,还可以自定义组中组,有兴趣可以查看网络上很多说明的帖子;


(無悠) #2

楼主,你得过来手把手教我才行啊:stuck_out_tongue_winking_eye:


#3

@king 你不是玩儿Python吗,你应该学习unittest才合适。


(Jamesz2011) #4

看来priority属性只能@Test使用,LZ 请问我怎么从A类依赖B类的某一个方法?deploymethod怎么夸class使用,请指导,谢谢。


#5

涉及到跨class中的@Test依赖,可以使用group这个属性,group的依赖关系,可以跨class引用,例如:

class1:

public class Test1 {

@Test(groups={"Test1.verifyConfig"})
public void verifyConfig(){
	boolean flag = true;
	System.out.println("This is a Test1.verifyConfig!");
	Assert.assertTrue(flag, "error");
}

}

clsss2:

public class Test2 {

@Test(dependsOnGroups={“Test1.verifyConfig”})
public void TestOn(){
boolean flag = true;
System.out.println(“This is a Test2!===========TestOn”);
Assert.assertTrue(flag, “error”);
}
}

单独执行class2中的测试用例TestOn,执行后控制台输出:

[RemoteTestNG] detected TestNG version 6.9.10
[TestNG] Running:
  C:\Users\62803\AppData\Local\Temp\testng-eclipse--1086566518\testng-customsuite.xml

This is a Test1.verifyConfig!
This is a Test2!===========TestOn
PASSED: verifyConfig
PASSED: TestOn

===============================================
    Default test
    Tests run: 2, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@1936f0f5: 30 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@3a03464: 32 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 5 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@234bef66: 8 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@36f6e879: 4 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@2c9f9fb0: 4 ms

(骑车去看海) #6

不会,楼主过来手把手教才行:grinning:


(冰河) #7

(冰河) #8