1. 程式人生 > >數據驅動測試二:使用TestNG和CSV文件進行數據驅動

數據驅動測試二:使用TestNG和CSV文件進行數據驅動

exceptio gets 完成 urn fine 數據驅動 兩個 二位數組 ==

轉載:https://blog.csdn.net/heart_1014/article/details/52013173

使用@DataProvider註解定義當前方法中的返回對象CSV文件(存放測試數據)作為測試腳本的測試數據集進行數據驅動。

用法參考代碼:

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

  1. //從CSV文件中讀取每行中前2個逗號分割的中文詞作為搜索框中輸入的搜索關鍵詞
  2. //斷言搜索結果頁面是否包含CSV文件中每行的最後一個詞匯的關鍵字
  3. import java.io.BufferedReader;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.concurrent.TimeUnit;
  10. import org.openqa.selenium.By;
  11. import org.openqa.selenium.WebDriver;
  12. import org.openqa.selenium.firefox.FirefoxDriver;
  13. import org.openqa.selenium.support.ui.ExpectedCondition;
  14. import org.openqa.selenium.support.ui.WebDriverWait;
  15. import org.testng.Assert;
  16. import org.testng.annotations.AfterMethod;
  17. import org.testng.annotations.BeforeMethod;
  18. import org.testng.annotations.DataProvider;
  19. import org.testng.annotations.Test;
  20. public class TestDataByCSVFile {
  21. private static WebDriver driver;
  22. @DataProvider(name="searchData")
  23. public static Object[][] data() throws IOException
  24. {
  25. return getSearchData("E:\\AutoData\\testData.csv");//獲取CSV文件的測試數據
  26. }
  27. @Test(dataProvider="searchData")
  28. public void testSearch(String searchdata1,String searchdata2,String searchResult) {
  29. //打開sogou首頁
  30. driver.get("http://www.sogou.com/");
  31. //輸入搜索條件
  32. //從CSV文件中讀取每行中前2個逗號分割的中文詞作為搜索框中輸入的搜索關鍵詞,在兩個搜索詞中間增加一個空格
  33. driver.findElement(By.id("query")).sendKeys(searchdata1+" "+searchdata2);
  34. //單擊搜索按鈕
  35. driver.findElement(By.id("stb")).click();
  36. //使用顯式等待方式,確認頁面已經加載完成,頁面底部的關鍵字"搜索幫助"已經顯示在頁面上
  37. (new WebDriverWait(driver,3)).until(new ExpectedCondition<Boolean>(){
  38. @Override
  39. public Boolean apply(WebDriver d) {
  40. return d.findElement(By.id("sogou_webhelp")).getText().contains("搜索幫助");
  41. }});
  42. //斷言搜索結果頁面是否包含CSV文件中每行的最後一個詞匯的關鍵字
  43. Assert.assertTrue(driver.getPageSource().contains(searchResult));
  44. }
  45. @BeforeMethod
  46. public void beforeMethod() {
  47. //若無法打開Firefox瀏覽器,可設定Firefox瀏覽器的安裝路徑
  48. System.setProperty("webdriver.firefox.bin", "D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
  49. //打開Firefox瀏覽器
  50. driver=new FirefoxDriver();
  51. //設定等待時間為5秒
  52. driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
  53. }
  54. @AfterMethod
  55. public void afterMethod() {
  56. //關閉打開的瀏覽器
  57. driver.quit();
  58. }
  59. //讀取CSV文件的靜態方法,使用CSV文件的絕對文件路徑作為函數參數
  60. public static Object[][] getSearchData(String FileNameroot) throws IOException{
  61. List<Object[]> records=new ArrayList<Object[]>();
  62. String record;
  63. //設定UTF-8字符集,使用帶緩沖區的字符輸入流BufferedReader讀取文件內容
  64. BufferedReader file=new BufferedReader(new InputStreamReader(new FileInputStream(FileNameroot),"UTF-8"));
  65. //忽略讀取CSV文件的標題行(第一行)
  66. file.readLine();
  67. //遍歷讀取文件中除第一行外的其他所有內容並存儲在名為records的ArrayList中,每一行records中存儲的對象為一個String數組
  68. while((record=file.readLine())!=null){
  69. String fields[]=record.split(",");
  70. records.add(fields);
  71. }
  72. //關閉文件對象
  73. file.close();
  74. //將存儲測試數據的List轉換為一個Object的二維數組
  75. Object[][] results=new Object[records.size()][];
  76. //設置二位數組每行的值,每行是一個Object對象
  77. for(int i=0;i<records.size();i++){
  78. results[i]=records.get(i);
  79. }
  80. return results;
  81. }
  82. }

運行結果:

  1. PASSED: testSearch("老九門", "演員", "趙麗穎")
  2. PASSED: testSearch("X站警天啟", "導演", "布萊恩·辛格")
  3. PASSED: testSearch("誅仙青雲誌", "編劇", "張戩")
  4. ===============================================
  5. Default test
  6. Tests run: 3, Failures: 0, Skips: 0
  7. ===============================================

測試數據的CSV文件內容:

搜索關鍵詞1,搜索關鍵詞2,搜索結果
老九門,演員,趙麗穎
X站警天啟,導演,布萊恩·辛格
誅仙青雲誌,編劇,張戩

註意:使用寫字板程序編輯CSV文件內容,在保存文件時要將文件存儲為UTF-8編碼格式。

數據驅動測試二:使用TestNG和CSV文件進行數據驅動