2数据驱动是什么
相同的测试脚本使用不同的测试数据,将测试数据与测试行为完全分离,这样的设计模式称为数据驱
动,如测试网站的登录使用不同的用户名和密码
步骤
1、编写测试脚本,包含读取数据功能,数据来源为对象,文件或数据库等
2、将测试数据存入外部对象,如对象,文件或数据库等
3、运行脚本,读取测试数据
4、验证测试结果
使用TestNG进行数据驱动
1、idea新建maven项目,选择java 1.8
2、给项目命名dataProvide_test,包名后面的example删掉
3、把浏览器驱动放入src/main/resources文件夹,驱动从前面的项目中复制过来,csv和xlsx文件自己新
建即可
4、在src/main/java下新建package,命名为util,在包内新建类CsvUtil,作为查询csv文件数据的工具类
package util;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class CsvUtil {
public static Object[][] getTestData(String filename)throws IOException{
List<Object[]> records = new ArrayList<Object[]>();
BufferedReader file = new BufferedReader(new InputStreamReader(
new FileInputStream(filename),"UTF-8"));
// file.readLine(); //忽略第一行
// 遍历表中的每一行
String record; //每一行数据
while((record = file.readLine()) != null){
System.out.println(record);
String fields[] = record.split(",");//csv文件的数据均以','分隔,以此为分隔,存到数组
records.add(fields);
}
file.close();
Object[][] results = new Object[records.size()][];
for (int i = 0; i < records.size(); i++) {
results[i] = records.get(i);
}
return results;
}
}
5、在src/main/java下新建类TestDataProviderByCSVFile,作为测试入口
import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import util.CsvUtil;
import java.io.IOException;
public class TestDataProviderByCSVFile {
public WebDriver driver;
String url = "http://www.baidu.com";
public static String filePath = "src/main/resources/dataProvider.csv";//文件相
对路径
@DataProvider(name = "testData")
public static Object[][] words() throws IOException{
return CsvUtil.getTestData(filePath);
}
@Test(dataProvider = "testData")
public void test(String searchWord1, String searchWord2, String SearchResult)
{
driver.get(url); //打开百度首页
driver.findElement(By.id("kw")).sendKeys(searchWord1+" "+searchWord2);//
在搜索框中输入searchWord1+" "+searchWord2
driver.findElement(By.id("su")).click(); //点击”百度一下”按钮
//强制等待3S
/*try {
Thread.sleep(3000);
}catch (InterruptedException e){
e.printStackTrace();
}*/
//显式等待,等待元素加载完毕再进行下一步
(new WebDriverWait(driver,10)).until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver d){
return d.findElement(By.id("help")).getText().contains("用户反
馈");
}
});
Assert.assertTrue(driver.getPageSource().contains(SearchResult));//断言,
检查页面中是否包含SearchResult元素
// driver.quit();
}
@BeforeMethod
public void beforeMethod(){
driver = new ChromeDriver();
}
@AfterMethod
public void AfterMethod(){
driver.quit();
}
}
6、在pom.xml文件中加入依赖包
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.4.0</version>
<scope>compile</scope>
</dependency>
7、在TestDataProviderByCSVFile文件中
@DataProvider(name = "testData") 和 @Test(dataProvider = "testData")的名字必须一致,用以数据绑定,
否则运行将报没有名为testData的数据
CsvUtil.getTestData(filePath) 为从CsvUtil类中调用getTestData函数,获取csv文件中的数据
8、运行TestDataProviderByCSVFile测试
网友评论