資料驅動測試二:使用TestNG和CSV檔案進行資料驅動
阿新 • • 發佈:2019-02-14
使用@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編碼格式。