1、TestNG是什么:是Java中的一个测试框架,即可以做单元测试,也可以做集成测试。
2、TestNG的特点:注解;灵活的测试配置;测试例可以更容易地进行分组;实现测试并行;支持数据驱动测试;内置的报告。
3、TestNG注解
@BeforeSuite:在此套件中的所有测试运行之前运行。
@AfterSuite:在此套件中的所有测试运行之后运行。
@BeforeTest:在运行属于<test>标签内的类的任何测试方法之前运行。
@AfterTest:在运行属于<test>标签内的类的所有测试方法都已运行之后运行。
@BeforeGroups:在调用属于该组的第一个测试方法之前运行。
@AfterGroups:在调用属于组的最后一个测试方法之后运行。
@BeforeClass:在当前类的第一个测试方法之前运行。
@AfterClass:运行当前类中的所有测试方法之后都运行。
@BeforeMethod:每个测试方法之前运行。
@AfterMethod:每个测试方法之后运行。
4、TestNG套件测试类
第一个测试类:
@BeforeSuite
public void beforeSuite() {
System.out.println("beforeSuite");
}
@AfterSuite
public void afterSuite() {
System.out.println("afterSuite");
}
@BeforeTest
public void beforeTest() {
System.out.println("beforeTest");
}
@AfterTest
public void afterTest() {
System.out.println("afterTest");
}
第二个测试类:
@Test
public void test() {
System.out.println("test");
}
@Test
public void test1() {
System.out.println("test1");
}
创建一个XML文件一起运行多个测试用例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!-- @BeforeSuite -->
<suite name="TestAll">
<!-- @BeforeTest -->
<test name="case1">
<classes>
<class name="com.fu2.TestConfiguration"/>
<class name="com.fu2.TestDBConnection"/>
<class name="com.fu2.DBConfig"/>
</classes>
</test>
<!-- @AfterTest -->
<!-- @BeforeTest -->
<test name="case2">
<classes>
<class name="com.fu2.TestDBConnection"/>
<class name="com.fu2.DBConfig"/>
</classes>
</test>
<!-- @AfterTest -->
</suite>
<!-- @AfterSuite -->
5、TestNG异常测试
1.运行时异常
@Test(expectedExceptions = ArithmeticException.class)
public void test() {
int i = 1 / 0;
System.out.println(i);
}
2.检查异常
定义一个类:
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
自定义异常:
public class OrderSaveException extends RuntimeException {
public OrderSaveException(String message) {
super(message);
}
}
在其他方法抛出自定义异常:
public void save(Order order) throws OrderSaveException{
if (order == null){
throw new OrderSaveException("为空");
}
}
验证:
OrderBo orderBo = new OrderBo();
Order o = new Order();
@Test()
public void throwIfOrderIsNull() throws OrderSaveException {
orderBo.save(null);
}
6、TestNG忽略测试
@Test(enabled = false)注释在测试方法上,禁用此测试用例。
//不禁用此测试用例
@Test(enabled = true)
public void test() {
Assert.assertEquals(true, true);
}
//禁用此测试用例
@Test(enabled = false)
public void test1() {
Assert.assertEquals(true, true);
}
7、TestNG超时测试
“超时”表示如果单元测试花费的时间超过指定的毫秒数,那么Test将会中止它并将其标记为失败。
@Test(timeOut = 5000)
public void test() throws InterruptedException {
Thread.sleep(4000);
}
@Test(timeOut = 1000)
public void test1() {
while (true) {
}
}
8、分组测试:将方法调度到适当的部分,并执行复杂的测试方法分组。
1.在方法上的分组:
@BeforeGroups("database")
public void test1() {
System.out.println("test1");
}
@AfterGroups("database")
public void test2() {
System.out.println("test2");
}
@Test(groups = "selenium-test")
public void test3() {
System.out.println("test3");
}
@Test(groups = "selenium-test")
public void test4() {
System.out.println("test4");
}
@Test(groups = "database")
public void test5() {
System.out.println("test5");
}
@Test(groups = "database")
public void test6() {
System.out.println("test6");
}
@Test(dependsOnGroups = {"database", "selenium-test"})
public void test7() {
System.out.println("test7");
}
2.在类上的分组:
@Test(groups = "selenium-test")
public class TestSelenium {
public void test8() {
System.out.println("test8");
}
public void test9() {
System.out.println("test9");
}
9、TestNG依赖测试:使用dependOnMethods和dependOnGroups来实现依赖测试。如果依赖方法失败,将跳过所有后续测试方法。
1.dependOnMethods示例:方法一通过,执行方法二。方法一不通过,则跳过方法二。
@Test
public void method1() {
System.out.println("method1");
}
@Test(dependsOnMethods = {"method1"})
public void method2() {
System.out.println("method2");
}
2.dependOnGroups示例:
创建第一个类:
@Test(groups = "deploy")
public class TestServer {
@Test
public void test() {
System.out.println("test...");
}
@Test(dependsOnMethods = "test")
public void test1() {
System.out.println("test1...");
}
}
创建第二个类:
@Test(groups = "db", dependsOnGroups = "deploy")
public void test2() {
System.out.println("test2...");
}
@Test(dependsOnMethods = {"test2"}, groups = "db")
public void test3() {
System.out.println("test3...");
}
创建第三个类:
@Test(dependsOnGroups = {"deploy", "db"})
public void test4() {
System.out.println("test4...");
}
@Test(dependsOnMethods = "test4")
public void test5() {
System.out.println("test5...");
}
创建XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="TestDependency">
<test name="TestCase1">
<classes>
<class
name="com.fu8.TestApp">
</class>
<class
name="com.fu8.TestDatabase">
</class>
<class
name="com.fu8.TestServer">
</class>
</classes>
</test>
</suite>
10、TestNG参数化测试:使用testng.xml和使用数据提供者2种方式。
1.使用XML传递参数:
创建一个test.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="suite1">
<test name="test01">
<!--parameter标签中写要传入的参数 -->
<parameter name="URL" value="https://www.baidu.com"></parameter>
<parameter name="PORT" value="443"></parameter>
<classes>
<class name="com.fu9.ParametersTest" />
</classes>
</test>
</suite>
创建一个类:
WebDriver driver;
@Parameters({"URL", "PORT"})
@BeforeMethod
public void test(String URL, String PORT) {
System.setProperty("webdriver.firefox.bin", "E:\\Mozilla Firefox\\firefox.exe");
System.setProperty("webdriver.gecko.driver", "E:\\selenium\\geckodriver\\geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get(URL+":"+PORT);
}
@Test
public void test1()
{
String str = driver.getTitle();
Assert.assertEquals(str, "百度一下,你就知道");
}
@AfterMethod
public void test2() throws InterruptedException
{
Thread.sleep(2000);
driver.quit();
}
2.通过@DataProvider传递参数:
WebDriver driver;
@DataProvider(name = "data01")
public Object[][] test() {
return new Object[][]{{"!", "!_百度搜索"}, {"?", "?_百度搜索"}};
}
@DataProvider(name = "data02")
public Iterator<Object[]> test1() {
Set<Object[]> set = new HashSet<Object[]>();
set.add(new String[]{"!", "!_百度搜索"});
set.add(new String[]{"?", "?_百度搜索"});
return set.iterator();
}
@Parameters({"URL", "PORT"})
@BeforeMethod
public void test2(String URL, String PORT) {
System.setProperty("webdriver.firefox.bin", "E:\\Mozilla Firefox\\firefox.exe");
System.setProperty("webdriver.gecko.driver", "E:\\selenium\\geckodriver\\geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get(URL + ":" + PORT);
}
@Test(dataProvider = "data02")
public void test3(String a, String b) throws InterruptedException {
driver.findElement(By.cssSelector("#kw")).sendKeys(a);
driver.findElement(By.cssSelector("#su")).click();
Thread.sleep(1000);
String str = driver.getTitle();
Assert.assertEquals(str, b);
}
@AfterMethod
public void test4() throws InterruptedException {
Thread.sleep(2000);
driver.quit();
}

1184

被折叠的 条评论
为什么被折叠?



