1. 程式人生 > >資料驅動測試二:使用TestNG和CSV檔案進行資料驅動

資料驅動測試二:使用TestNG和CSV檔案進行資料驅動

使用@DataProvider註解定義當前方法中的返回物件CSV檔案(存放測試資料)作為測試指令碼的測試資料集進行資料驅動。

用法參考程式碼:

程式碼在搜尋完成後使用顯式等待方式,確認頁面已經載入完成,頁面底部的關鍵字"搜尋幫助"已經顯示在頁面上

//從CSV檔案中讀取每行中前2個逗號分割的中文詞作為搜尋框中輸入的搜尋關鍵詞
//斷言搜尋結果頁面是否包含CSV檔案中每行的最後一個詞彙的關鍵字
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestDataByCSVFile {
	private static WebDriver driver;
	@DataProvider(name="searchData")
	public static Object[][] data() throws IOException
	{
		return getSearchData("E:\\AutoData\\testData.csv");//獲取CSV檔案的測試資料
	}
  @Test(dataProvider="searchData")
  public void testSearch(String searchdata1,String searchdata2,String searchResult) {
	  //開啟sogou首頁
	  driver.get("http://www.sogou.com/");
	  //輸入搜尋條件
	  //從CSV檔案中讀取每行中前2個逗號分割的中文詞作為搜尋框中輸入的搜尋關鍵詞,在兩個搜尋詞中間增加一個空格
	  driver.findElement(By.id("query")).sendKeys(searchdata1+" "+searchdata2);
	  //單擊搜尋按鈕
	  driver.findElement(By.id("stb")).click();
	  
	  //使用顯式等待方式,確認頁面已經載入完成,頁面底部的關鍵字"搜尋幫助"已經顯示在頁面上
	  (new WebDriverWait(driver,3)).until(new ExpectedCondition<Boolean>(){

		@Override
		public Boolean apply(WebDriver d) {
			return d.findElement(By.id("sogou_webhelp")).getText().contains("搜尋幫助");
		}});

	  //斷言搜尋結果頁面是否包含CSV檔案中每行的最後一個詞彙的關鍵字
	  Assert.assertTrue(driver.getPageSource().contains(searchResult));
  }
  @BeforeMethod
  public void beforeMethod() {
	  //若無法開啟Firefox瀏覽器,可設定Firefox瀏覽器的安裝路徑
	  System.setProperty("webdriver.firefox.bin", "D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
	  //開啟Firefox瀏覽器
	  driver=new FirefoxDriver();
	  //設定等待時間為5秒
	  driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
  }

  @AfterMethod
  public void afterMethod() {
	  //關閉開啟的瀏覽器
	  driver.quit();
  }
  //讀取CSV檔案的靜態方法,使用CSV檔案的絕對檔案路徑作為函式引數
  public static Object[][] getSearchData(String FileNameroot) throws IOException{
	  List<Object[]> records=new ArrayList<Object[]>();
	  String record;
	  //設定UTF-8字符集,使用帶緩衝區的字元輸入流BufferedReader讀取檔案內容
	  BufferedReader file=new BufferedReader(new InputStreamReader(new FileInputStream(FileNameroot),"UTF-8"));
	  //忽略讀取CSV檔案的標題行(第一行)
	  file.readLine();
	  //遍歷讀取檔案中除第一行外的其他所有內容並存儲在名為records的ArrayList中,每一行records中儲存的物件為一個String陣列
	  while((record=file.readLine())!=null){
		  String fields[]=record.split(",");
		  records.add(fields);
	  }
	  //關閉檔案物件
	  file.close();
	  //將儲存測試資料的List轉換為一個Object的二維陣列
	  Object[][] results=new Object[records.size()][];
	  //設定二位陣列每行的值,每行是一個Object物件
	  for(int i=0;i<records.size();i++){
		  results[i]=records.get(i);
	  }
	  return results;	  
  }
}
執行結果:
PASSED: testSearch("老九門", "演員", "趙麗穎")
PASSED: testSearch("X站警天啟", "導演", "布萊恩·辛格")
PASSED: testSearch("誅仙青雲志", "編劇", "張戩")

===============================================
    Default test
    Tests run: 3, Failures: 0, Skips: 0
===============================================
測試資料的CSV檔案內容:
搜尋關鍵詞1,搜尋關鍵詞2,搜尋結果
老九門,演員,趙麗穎
X站警天啟,導演,布萊恩·辛格
誅仙青雲志,編劇,張戩

注意:使用寫字板程式編輯CSV檔案內容,在儲存檔案時要將檔案儲存為UTF-8編碼格式。