使用TestNg要先在eclipse上安装插件
一、TestNg常用注脚介绍
1. @Test
·表示的意义:
1)表示该方法是一个测试方法,在运行时,会自动运行有@Test注脚的方法
2. @BeforeMethod 和 @AfterMethod
·表示的意义:
1) @BeforeMethod加了该注脚的方法在每一个test运行之前都会自动的被调用运行
2) @AfterMethod该注脚的方法会在每一个测试方法运行之后自动的被调用运行
示例:
3. @BeforeClass 和 @AfterClass
表示的意义:
1)BeforeClass与AfterClass,这个两个注脚的方法,在每个类运行之前会自动的被调用一次
用处:
1)在自动化脚本运行时,一个类里面的所有测试方法设计的是在一个浏览器里运行,那么就是说在这个类对象产生之前,就要把浏览器给启动起来,这个时候beforeclass可以启动浏览器,afterclass就可以关闭浏览器了
示例:
运行结果:
二、TestNg的数据驱动
1. 数据驱动
1)什么是数据驱动?
·数据驱动是指在一个脚本固定的情况下,用数据来控制该脚本是否运行,以及运行的次数,还有每次运行时对应的参数
2)数据驱动的应用场景:
·比如我们在测试登录时,要测试用不同的账户登录,难道我们需要针对每一个账户去写一个脚本吗?这样显然是不明智的,于是,testng为我们提供了这个注脚,让我们只需要提供出数据,就可以控制脚本运行次数及相应的参数。
2. TestNg数据驱动(数据源)
1)实现方式:
·用注脚: @DataProvider
2)示例:
第一种实现方式:不指定name
运行结果:
第二种方式:指定name
运行结果:
三、TestNg用XML运行
TestNg的几种运行方式:
1. 以method为基点
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" verbose="1" parallel="false" thread-count="1">
<test name="test1">
<classes>
<class name="com.test.ng1.test1">
<methods>
<include name="test2"/>
<include name="test1"/>
</methods>
</class>
</classes>
</test>
</suite>
运行结果:
2. 以class为基点
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" verbose="1" parallel="false" thread-count="1">
<test name="test1">
<classes>
<class name="com.test.ng1.test1">
</class>
</classes>
</test>
</suite>
运行结果:
3. 以package为基点
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" verbose="1" parallel="false" thread-count="1">
<test name="test1">
<packages>
<package name="com.test.ng1"/>
</packages>
</test>
</suite>
四、TestNg用例管理
1. 用例管理原则——用例独立少依赖
package com.test.ng1;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
public class test1 {
//无名的数据驱动,调用可以使用方法名
@DataProvider
public Object[][] logindata(){
return new Object[][]{{"a"},{"b"}};
}
//因为数据驱动没有名字,搜易可以写方法名
@Test(dataProvider="logindata")
public void test1(String info){
System.out.println(info);
}
//为数据驱动定义名字
@DataProvider(name="longoutdata")
public Object[][] logoutDataInfo(){
return new Object[][]{{"1"},{"2"}};
}
//指定数据驱动的名字,而非方法名
@Test(dataProvider="longoutdata")
public void test2(String info){
System.out.println(info);
}
@BeforeClass
public void bClass(){
System.out.println("BeforeClass");
}
@AfterClass
public void aClass(){
System.out.println("AfterClass");
}
@BeforeMethod
public void setUp(){
System.out.println("beforemethod,setUp");
}
@AfterMethod
public void tearDown(){
System.out.println("aftermethod,tearDown");
}
}