上篇搭建好環境後,正真開始個人自動化之旅了....
開始以前特別說明一下testNG的版本,不能直接使用Eclipse直接線上下載的版本,線上版本過高,不能兼容,運行程序會報如下錯誤,須要自行下載低一級的版本。html
一、下載jexcelapi_2_6_12.tar.gz,在上篇的項目基礎上建立com.testNG包,而且引入下載的jar包,用於Excel函數調用。java
二、建立IData接口web
1 package com.testNg; 2 /** 3 * @author bjlijia 4 * @version 1.0.0 5 */ 6 public interface IData { 7 8 public Object[][] getData(String caseName, String dataFile); 9 10 public Object[][] getData(String caseName, String dataFile,int colNum) ; 11 12 public Object[][] getData(String caseName, String dataFile,int beginNum,int endNum) ; 13 14 }
三、建立類BaseExcelDataapi
package com.testNg; import java.io.*; import java.util.ArrayList; import jxl.*; import jxl.read.biff.BiffException; /** * @author kaixie * @version 1.0.0 */ public class BaseExcelData implements IData{ String defaultPath = "D:/"; public Object[][] getData(String caseName, String dataFile){ return getData(caseName, dataFile, 0); } public Object[][] getData(String caseName, String dataFile, int rowNum) { Object[][] data = null; try { data = addList(caseName, dataFile, rowNum); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return data; } public Object[][] getData(String caseName, String dataFile, int beginRowNum, int endRowNum) { Object[][] data = null; try { data = addList2(caseName, dataFile, beginRowNum, endRowNum); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return data; } private Object[][] addList(String caseName,String dataFile,int rowNum) throws FileNotFoundException{ ArrayList<Object> list = new ArrayList<Object>(); // 文件路徑 InputStream is = new FileInputStream(defaultPath + dataFile); Object[][] data = null; try { Workbook wb = Workbook.getWorkbook(is); Sheet rs = wb.getSheet(caseName); //獲取表格總行數 int rsRows = rs.getRows(); //獲取表格總列數 int rsColumns = rs.getColumns(); if(rs!=null){ for (int i = 1; i <= rsRows-1; i++){ for (int j=0; j <= rsColumns-1; j++){ Cell c = rs.getCell(j, i); String cz = c.getContents(); list.add(cz); } } //System.out.println(list); } if (rowNum <= 0 || rowNum >= rsRows) { data = new Object[rsRows-1][rsColumns]; int k = -1; for (int i = 0; i < rsRows-1; i++) { for (int j = 0; j < rsColumns; j++) { if (k < list.size()) k++; data[i][j] = list.get(k); //System.out.println("i="+i+","+"j="+j+","+data[i][j]); } } } else { int k = -1; data = new Object[rowNum][rsColumns]; for (int i = 0; i < rowNum; i++) { for (int j = 0; j < rsColumns; j++) { if (k < list.size()) k++; if (i <= (rowNum - 1)) { data[i][j] = list.get(k); } } } } wb.close(); } catch (BiffException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return data; } private Object[][] addList2(String caseName, String dataFile, int beginNum, int endNum) throws FileNotFoundException { ArrayList<Object> list = new ArrayList<Object>(); // 文件路徑 InputStream is = new FileInputStream(defaultPath + dataFile); Object[][] data = null; try { Workbook wb = Workbook.getWorkbook(is); Sheet rs = wb.getSheet(caseName); //獲取表格總行數 int rsRows = rs.getRows(); //獲取表格總列數 int rsColumns = rs.getColumns(); if(rs!=null){ for (int i = 1; i <= rsRows-1; i++){ for (int j=0; j <= rsColumns-1; j++){ Cell c = rs.getCell(j, i); String cz = c.getContents(); list.add(cz); } } //System.out.println(list); } int sub = (endNum - beginNum) + 1; data = new Object[sub][rsColumns]; if (beginNum <= 0 || endNum > rsRows) { if(beginNum <= 0&&endNum > rsRows){ beginNum=0; endNum=rsRows; data = new Object[rsRows][rsColumns]; for (int i = 0; i < sub; i++) { for (int j = 0; j < rsColumns; j++) { if (beginNum < rsRows*rsColumns) data[i][j] = list.get(beginNum); beginNum++; } } }else if (beginNum <= 0&&endNum <= rsRows){ beginNum=0; sub=(endNum - beginNum); data = new Object[endNum][rsColumns]; for (int i = 0; i < sub; i++) { for (int j = 0; j < rsColumns; j++) { if (beginNum < sub * rsColumns) data[i][j] = list.get(beginNum); beginNum++; } } }else { endNum=rsRows; sub=(endNum - beginNum) + 1; data = new Object[sub][rsColumns]; for (int i = 0; i < sub; i++) { for (int j = 0; j < rsColumns; j++) { if (beginNum <=sub * rsColumns) data[i][j] = list.get(beginNum-1); beginNum++; } } } } else { int k = 0; int a=beginNum*rsColumns; for (int i = 0; i < sub; i++) { for (int j = 0; j < rsColumns; j++) { if (k < sub * rsColumns) data[i][j] = list.get(a+k-2); k++; } } } wb.close(); } catch (BiffException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return data; } }
四、建立類ExcelDataProvider瀏覽器
package com.testNg; import java.io.FileNotFoundException; import java.lang.reflect.Method; import org.testng.annotations.DataProvider; /** * @author kaixie * @version 1.0.0 */ public class ExcelDataProvider { // 從XML文本文件中得到數據 @DataProvider(name = "GetDataFromXml") public static Object[][] getTestDataFromXml(Method m) throws FileNotFoundException { // 經過反射得到函數名稱,能夠爲多個測試方法提供數據驅動 Object[][] o = new Object[][] {}; // 取用例數據集d1Test的所有數據(excel數據源) if (m.getName().equals("test1")) { return new BaseExcelData().getData("testA", "DataProvider.xls",0,3); } if (m.getName().equals("test2")) { return new BaseExcelData().getData("testB", "DataProvider.xls",2,5); } //取用例數據集d2Test的所有數據(excel數據源) /*if (m.getName().equals("test1")) { return new BaseExcelData.getData("d1Test","caipiaoTest.xls") }*/ return o; } }
五、建立測試類Baidutestide
package com.testNg; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; public class Baidutest { @Test(dataProvider = "GetDataFromXml", dataProviderClass = ExcelDataProvider.class) public void test1(String URL, String context) { //String expected = ""; //若是火狐瀏覽器沒有默認安裝在C盤,須要制定其路徑 //System.setProperty("webdriver.firefox.bin", "D:/Program Files/Mozilla firefox/firefox.exe"); WebDriver driver = new FirefoxDriver(); driver.get(URL); driver.manage().window().maximize(); WebElement txtbox = driver.findElement(By.name("wd")); txtbox.sendKeys(context); WebElement btn = driver.findElement(By.id("su")); btn.click(); driver.close(); } }
六、測試用例以下:函數
七、右擊選擇TestNG運行測試而且測試結果以下:測試
也能夠在項目路徑下D:\study\WebDriverDemo\test-output\Default suite\Default test.html,TestNG默認的HTML測試報告,以下所示:ui