说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!
接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/103892214
一、什么是测试框架
-
自动化测试框架是由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。
-
在上一篇博客中使用Selenium框架操作浏览器编写脚本完成了webtours案例的自动化订票,但是编写的代码,不能进行复用,换句话说如果将上一篇的代码用于其他网站则需要全部重新编写,复用性极低
二、搭建 TestNG 框架环境
1.什么是 TestNG
- 是一个开源自动化测试框架,TestNG 表示下一代。
- 用于设置测试前的准备代码,测试代码,测试完毕后的处理代码。
- 在前面的Java白盒测试用的是JUnit框架
2.安装 testng-6.14.zip
-
离线安装
✔ (先断网)帮助→安装新软件→添加,位置选择 achive,选择 zip 文件即可。 -
网络安装
✔ 帮 助 → 安 装 新 软 件 → 联 网 安 装 testing , Work with 下 输 入 :http://beust.com/eclipse→添加→勾选 TestNG -
这里博主采用离线安装,帮助——安装新软件
-
选择testng安装包
-
选择全部安装
-
接受协议,完成安装
三、使用 TestNG 中注解进行测试
1.什么是注解
- 表示“在某些阶段必然被调用的代码”;
- 下面的注解一般用于修饰测试方法,测试方法名随意。
2.常用注解
2.1 @BeforeClass 注解
- 在调用当前类的第一个测试方法之前运行。
2.2 @AfterClass 注解
- 在调用当前类的最后一个测试方法之后运行。
2.3 @BeforeMethod 注解
- 在每个测试方法之前运行。
2.4 @AfterMethod 注解
- 在每个测试方法之后运行。
2.5 @Test(属性 1=值 1,属性 2=值 2,…)注解
-
用于修饰测试方法,表示要对被测试类的某个或某些方法进行测试。
-
属性
✔ description=“测试描述”
✔ priority=优先级(从 0 开始)
✔ enabled=false(false 表示忽略测试)
✔ timeOut=?ms(限时测试,一旦测试的内容运行超过了该时间长度,那么将会终止,同时标记为 failed)
✔ dataProvider=“Dataprovider 的名称或方法名”
✔ dataProviderClass=产生测试数据的类
2.6 @DataProvider(name=“参数集名”)注解
- 用于修饰获得参数的方法。
✔ 此方法用于生成测试数据。
✔ @Listeners({TestReport.class}) //监听测试报告类
2.7 使用注解对webtours案例代码进行拆分
- 对webtours案例中创建驱动对象代码进行拆分,使用@BeforeClass注释提取代码中打开浏览器操作,因为该操作只进行一次并且是一开始就进行的
- 使用@AfterClass注解来关闭浏览器
- 将打开网站操作使用@Test注解封装成一个方法,将之前打开网站的代码剪切进来,博主这里对打开网站检查点结果进行了if判断
- 在每个方法执行完成后,为了防止程序运行太快,检查点无法通过,所以通过@AfterMethod注释在每个测试方法执行完后执行的方法中添加等待时长
- 拆分出登录代码,封装到@Test注解的方法中
- 拆分出订票的代码,封装到findFlights方法中,在代码中的等待时长跟@AfterMethod注解方法中的不一样,注解中的是没执行一个@Test注解的测试方法则会调用@AfterMethod注解的waitTime方法等待3秒,而代码中的等待3秒只限于三次订票中的等待
- 剩下的为注销模块
- 完整代码如下
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class TNGTest {
WebDriver driver;
@BeforeClass
public void startChorme(){
// 打开谷歌浏览器
System.setProperty("webdriver.chrome.driver", "C:/Users/Administrator/Desktop/bro_tool/chromedriver.exe");
WebDriver driver=new ChromeDriver();
}
@AfterClass
public void endChorme(){
// 关闭浏览器
driver.quit();
}
@AfterMethod
public void waitTime() throws Exception{
// 等待时间
Thread.sleep(3000);
}
@Test(description="打开网站")
public void openUrl(){
String url="http://localhost:1080/webtours/";
driver.get(url);
// 检查打开网站
driver.switchTo().frame("body");
driver.switchTo().frame("info");
boolean openResult = driver.findElement(By.tagName("body"