在用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类,去读取测试测试数据,并以二维数组返回, 再将返回的值传递给我们的测试方法就可以了.以下是getRunData(File file)方法:
// Excel文件中最后一列值为n的行将被忽略,用以管理某个测试是否要执行 public static String[][] getRunData(File file)throws IOException { List<String[]> results = new ArrayList<String[]>(); 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<String> 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)方法,针对不同的测试环境自动读取Excel下面不同的sheet
相关推荐
TestNG是一个功能丰富的测试框架,它扩展了JUnit的功能,支持更复杂的测试配置,如并发测试、分组测试和参数化测试。使用TestNG,我们可以编写易于维护和扩展的测试代码。 Selenium WebDriver是Selenium工具集的一...
这个压缩包"Automation:自动化测试示例代码Java,Selenium,Maven,Cucumber,TestNG"提供了一套完整的自动化测试框架,涵盖了多种工具和技术,下面我们将深入探讨这些技术及其在自动化测试中的应用。 1. **Java**...
综上所述,"spring-selenium-automation"项目提供了一个简洁而强大的测试解决方案,它将Spring的灵活性和Selenium的强大功能结合在一起,为Java Web应用程序的自动化测试提供了一种高效的方法。通过深入理解和使用这...
在Java编程环境下,Selenium库提供了丰富的API,使得开发者能够编写可扩展、可靠的Web应用程序测试脚本。这个框架的构建旨在简化自动化测试过程,减少手动测试的工作量,并且提供更高效的回归测试。 Selenium是一个...
Selenium自动化测试是一种广泛应用于Web应用测试的技术,它允许开发者使用多种编程语言(如Python、Java、C#等)编写脚本来控制浏览器的行为,模拟真实用户操作。在本压缩包"Selenium_Automation"中,我们可以预见到...
2. TestNG:TestNG是另一个用于单元测试和集成测试的框架,它在JUnit的基础上增加了许多功能,如并发测试、参数化测试和报告生成。TestNG与Selenium结合使用时,可以创建更复杂的测试场景和测试套件。 三、Web...
5. TestNG:尽管JUnit是常用的测试框架,但TestNG提供了更多高级特性,如并发测试、参数化测试、灵活的测试配置和报告。TestNG的@Parameters注解允许从外部文件或命令行传递参数,而@Test注解可以指定测试的优先级、...
通过在运行时传递参数,可以在无头浏览器(Phantomjs)中运行测试。 如果任何方案失败,将截取屏幕截图,并将其保存在/ outputFiles文件夹下。 每次执行测试后都会生成HTML报告,可以在/target/cucumber-...
7. **TestNG的优势**:相比于JUnit,TestNG提供了更高级的功能,如并发测试、参数化测试、数据驱动测试和分组测试,这在大型自动化测试项目中特别有用。 8. **WebDriverManager**:这个库可以自动管理和更新...
TestNG是另一个关键组件,它是一个测试框架,比JUnit提供了更多的功能,如并发测试、参数化测试、分组测试等。TestNG允许编写更复杂的测试套件,并可以生成详细的测试报告,这对于持续集成和持续交付(CI/CD)流程非常...
此外,日志记录工具如Log4j可以帮助我们在测试过程中记录和分析问题。 为了实现Web自动化,我们还需要理解HTML和CSS选择器,因为它们是定位页面元素的关键。理解DOM(文档对象模型)结构,能够更精确地找到和操作...
7. **Excel应用**:在测试中,Excel常用于数据驱动测试,创建测试数据集或存储测试结果。VBA(Visual Basic for Applications)编程可以自动化Excel操作,提高测试效率。 综上,"SDET_Automation_Batch3"项目旨在...
在测试环境中,Singletons可以用来创建和管理共享资源,例如数据库连接池或线程池,确保在整个测试过程中只有一个实例存在,避免了资源冲突和不必要的初始化。 "静态" 在这里可能是指静态方法或静态变量。在Java中...
Selenium是一款强大的Web应用程序自动化测试工具,尤其在Python编程语言的支持下,它的功能和灵活性得到了极大的提升。本篇将深入探讨Selenium在Python环境下的应用,以及如何利用它进行高效的自动化测试。 一、...
在这个“testAutomation”项目中,主要聚焦于使用Selenium这一流行的Web应用程序自动化测试工具,以及相关的测试自动化框架。让我们深入探讨Selenium和自动化测试框架的基本概念、应用场景及其实现细节。 Selenium...
JUnit支持注解、参数化测试、异常测试等多种功能,使得编写和维护测试变得更加便捷。 TestNG则是另一个强大的测试框架,由Cedric Beust开发。TestNG在JUnit的基础上增加了一些高级功能,如并发测试、测试分组、依赖...
Mockito是一个流行的mocking框架,用于模拟对象的行为和状态,以便在测试中隔离依赖。通过mocking,我们可以专注于测试单个组件,而不是整个系统。在"AutomationTest"项目中,可能会有使用Mockito进行单元测试的实例...
3. **断言**:在测试脚本中设置断言,确保预期的结果与实际结果一致。 4. **测试数据管理**:如果需要执行参数化测试,需要有有效的方式管理测试数据,例如使用CSV文件或数据库。 5. **报告和日志**:记录测试结果,...
5. **Mocking and Stubbing**: 在测试过程中,可能会用到Mockito等工具模拟依赖服务,比如模拟物流API响应,以便隔离测试环境并提高测试效率。 6. **日志分析和性能监控**: 使用如Log4j进行日志记录,便于追踪错误...
TestNG则是在JUnit的基础上扩展,增加了更多特性,如并发测试、参数化测试和分组测试等。 Selenium是一个用于Web应用程序的自动化测试工具,支持多种浏览器和编程语言,包括Java。通过Selenium,测试人员可以编写脚...