TestNGパラメータ化テストselenium web automationでの応用
6114 ワード
詳細
seleniumでweb automationを作るとき、外部のテストデータを読み取る必要があります.同じシーンに対して、同じクラスの操作で、私たちのテストデータを巡ります.このときパラメータ化テストが役に立ちます.
この文書では、SeleniumとTestNGを組み合わせて、Excelファイルを利用してテストデータの書き込みパラメータ化テストを格納する方法について説明します.
まずTestNG公式サイトのコードを見てみましょう.
だから、私たちの考え方は簡単で、ExcelReaderクラスを書いて、テストデータを読み出して、2次元配列で返して、戻った値を私たちのテスト方法に伝えればいいです.以下にgetRunData(File file)メソッドを示します.
次に、テスト・インスタンス・コードを示します.
テストメソッドを実行すると、コードはExcelファイルの最後の列の値が「n」でないすべての行を巡回します.各行のテストデータは、最終的にテスト結果を生成します.
テスト例ごとにdev,uat,prodなどの異なるテスト環境で実行する必要がある場合もあり、テストデータも異なるため、String[][getRunData(File file,String env)メソッドをもう1つ書き、異なるテスト環境に対してExcelの下の異なるsheetを自動的に読み出すこともできます.
seleniumでweb automationを作るとき、外部のテストデータを読み取る必要があります.同じシーンに対して、同じクラスの操作で、私たちのテストデータを巡ります.このときパラメータ化テストが役に立ちます.
この文書では、SeleniumとTestNGを組み合わせて、Excelファイルを利用してテストデータの書き込みパラメータ化テストを格納する方法について説明します.
まずTestNG公式サイトのコードを見てみましょう.
//This method will provide data to any test method that declares that its Data Provider
//is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
return new Object[][] {
{ "Cedric", new Integer(36) },
{ "Anne", new Integer(37)},
};
}
//This test method declares that its data should be supplied by the Data Provider
//named "test1"
@Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
System.out.println(n1 + " " + n2);
}
だから、私たちの考え方は簡単で、ExcelReaderクラスを書いて、テストデータを読み出して、2次元配列で返して、戻った値を私たちのテスト方法に伝えればいいです.以下にgetRunData(File file)メソッドを示します.
// Excel n ,
public static String[][] getRunData(File file)throws IOException {
List results = new ArrayList();
FileInputStream fis = new FileInputStream(file);
POIFSFileSystem POIStream = new POIFSFileSystem(fis);
HSSFWorkbook workBook = new HSSFWorkbook(POIStream);
HSSFSheet sheet = workBook.getSheetAt(0);
int rowSize = sheet.getLastRowNum();
System.out.println("The row size is: " + rowSize);
for (int rowIndex =1; rowIndex <= rowSize; rowIndex++ ) {
HSSFRow row = sheet.getRow(rowIndex);
int colSize = row.getLastCellNum();
HSSFCell lastcell = row.getCell(colSize-1);
if (lastcell.getStringCellValue().equalsIgnoreCase("n")){
continue;
}
System.out.println("The column size is: " + colSize);
String[] values = new String[colSize-1];
Arrays.fill(values, "defaultvalue");
for (int columnIndex=0; columnIndex < colSize-1 ; columnIndex++){
String value = "";
HSSFCell cell = row.getCell(columnIndex);
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
if (date != null) {
value = new SimpleDateFormat("yyyy-MM-dd").format(date);
} else {
value = "";
}
} else {
value = new DecimalFormat("0").format(cell.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_FORMULA:
if (!cell.getStringCellValue().equals("")) {
value = cell.getStringCellValue();
} else {
value = cell.getNumericCellValue() + "";
}
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_ERROR:
value = "";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
value = (cell.getBooleanCellValue() == true ? "Y" : "N");
break;
default:
value = "default";
}
}
values[columnIndex] = value.trim();
}
results.add(values);
}
fis.close();
String[][] returnArray = new String[results.size()][rowSize];
for (int i = 0; i < returnArray.length; i++) {
returnArray[i] = (String[]) results.get(i);
}
return returnArray;
}
次に、テスト・インスタンス・コードを示します.
// .xls
@DataProvider(name = "dcpages")
public Object[][] createData() throws IOException {
URL url = DCHelpAllLinksValidationTest.class.getResource(this.getClass().getSimpleName()+".xls");
File file = new File(url.getPath());
return (Object[][]) ExcelReader.getRunData(file);
}
//Excel ,
@Test(dataProvider = "dcpages")
public void verifyPageLinks(String menu, String submenu) throws HttpException, IOException {
System.out.println(menu+ submenu);
moveToElement(driver.findElement(By.linkText(menu)));
String pagelink = driver.findElement(By.linkText(submenu)).getAttribute("href");
driver.get(pagelink);
Set links = getDCPageLinks();
assert (links.size()>=1);
for (String link : links) {
assert (HttpClientValidation.getHttpResonseCode(httpClient, link)== 200);
}
}
テストメソッドを実行すると、コードはExcelファイルの最後の列の値が「n」でないすべての行を巡回します.各行のテストデータは、最終的にテスト結果を生成します.
テスト例ごとにdev,uat,prodなどの異なるテスト環境で実行する必要がある場合もあり、テストデータも異なるため、String[][getRunData(File file,String env)メソッドをもう1つ書き、異なるテスト環境に対してExcelの下の異なるsheetを自動的に読み出すこともできます.