一、maven项目添加插件
<dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.14.3</version> <scope>compile</scope> </dependency>
二、关于testng中各个组件的执行顺序
参考 https://blog.csdn.net/cunchi4221/article/details/107475221
依赖:@Test(dependsOnMethods = {"你的依赖函数"})
忽略:@Test(enable = false)
import org.testng.Assert; import org.testng.annotations.*; public class TC1 { @BeforeClass public void beforeClass() { System.out.println("BeforeClass,开始执行一次"); } @AfterClass public void afterClass() { System.out.println("AfterClass,结束执行一次");} @BeforeMethod public void beforeTest() { System.out.println("BeforeMethod,每个用例前执行一次"); } @AfterMethod public void afterMethod() { System.out.println("AfterMethod,每个用例后执行一次"); } @BeforeGroups("mark") public void beforeGroups() { System.out.println("BeforeGroups,group前执行一次"); } @AfterGroups("mark") public void afterGroups() { System.out.println("AfterGroups,group后执行一次"); } @Test(groups = "mark", priority = 2) // 将该case 的groups标注为 mark;priority表示运行顺序 public void case1() { Assert.assertEquals(1, 1); } @Test(dataProvider = "dp", priority = 1) // dataProvider 获取数据驱动 public void case2(Integer n, String s) { System.out.println("case2:"+n+s); } @DataProvider // 做数据驱动,数据源文件可以是EXCEL,XML,甚至可以是TXT文本 public Object[][] dp() { System.out.println("Inside @DataProvider"); return new Object[][] { new Object[] { 1, "a" }, new Object[] { 2, "b" },}; } } /* 执行结果如下: BeforeClass,开始执行一次 Inside @DataProvider BeforeMethod,每个用例前执行一次 case2:1a AfterMethod,每个用例后执行一次 BeforeMethod,每个用例前执行一次 case2:2b AfterMethod,每个用例后执行一次 BeforeGroups,group前执行一次 BeforeMethod,每个用例前执行一次 AfterMethod,每个用例后执行一次 AfterGroups,group后执行一次 AfterClass,结束执行一次 =============================================== Default Suite Total tests run: 3, Failures: 0, Skips: 0 =============================================== */
三、关于测试套件
上面有TC1类,补下下面xml用到的Suite类、TC2类以及TC2引用到的Utils类
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
public class Suite {
@BeforeSuite
public void suiteBefore(){
System.out.println("测试BeforeSuite");
}
@AfterSuite
public void suiteAfter(){
System.out.println("测试AfterSuite");
}
}
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TC2 {
@Test(dataProvider = "dp",groups = "1")
public void test_add(Integer x, Integer y) {
Utils u = new Utils();
Assert.assertEquals(u.add(x, y), x + y);
}
@Test(dataProvider = "dp",groups = "2")
public void test_subtract(Integer x, Integer y) {
Utils u = new Utils();
Assert.assertEquals(u.subtract(x, y), x - y);
}
@Test(dataProvider = "dpName")
public void test_setName(String s) {
Utils.setName(s);
Assert.assertEquals(Utils.NAME, s);
}
@DataProvider
public Object[][] dp() {
return new Object[][] { new Object[] { 1, 1 }, new Object[] { 2, 2 }, };
}
@DataProvider
public Object[][] dpName() {
return new Object[][] { new Object[] { "Utils" }, new Object[] { "MyUtils" }, };
}
}
public class Utils { public static String NAME = ""; public int add(int x, int y) { return x + y; } public int subtract(int x, int y) { return x - y; } public static void setName(String s) { System.out.println("Setting NAME to " + s); NAME = s; } }
下面是一个xml的测试套件,文件名不限。在xml文件上,右键run testng.xml即可,verbose参数是测试结果详细程度
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="TestAll"> <test name="测试套件"> <classes> <class name="com.example.demo.testng.Suite"/> </classes> </test> <!-- <test name="测试用例,include-包含、exclude-排除">--> <!-- <classes>--> <!-- <class name="com.example.demo.testng.TC1">--> <!-- <methods>--> <!-- <include name="case1"/>--> <!-- <exclude name="case2"/>--> <!-- </methods>--> <!-- </class>--> <!-- </classes>--> <!-- </test>--> <test name="测试group,include-包含、exclude-排除" verbose="2"> <groups> <run> <exclude name="1" /> <include name="2" /> </run> </groups> <classes> <class name="com.example.demo.testng.TC2" /> </classes> </test> <!-- <test name="测试类">--> <!-- <classes>--> <!-- <class name="com.example.demo.testng.TC1"/>--> <!-- <class name="com.example.demo.testng.TC2"/>--> <!-- </classes>--> <!-- </test>--> <!-- <test name="测试目录">--> <!-- <packages>--> <!-- <package name="com.example.demo.testng.*"/>--> <!-- </packages>--> <!-- </test>--> </suite>
四、默认的测试报告
IDEA默认不会生成报告,这里我们通过设置使用默认的报告模板来生成报告。
设置方法:Run——Edit Configurations,再按如下截图操作。
设置完成后,运行第三部的xml测试套件,生成的测试报告在 test-output 目录下,实际打开报告有乱码,没找到解决办法。
(如果用浏览器打开则不会乱码,如果是从idea跳转到浏览器则会乱码,2种方式在浏览器打开的url也不同,不明白。
如果在html报告中添加utf-8的说明,则idea跳转到浏览器也不会乱码)