`

TestNG参数化测试在selenium web automation中的应用

阅读更多

在用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

分享到:
评论

相关推荐

    TestAutomation:使用JAVA + TestNG的基本测试自动化框架,包括基于Selenium WebDriver的UI测试,针对ASF和RESTful的API测试等

    TestNG是一个功能丰富的测试框架,它扩展了JUnit的功能,支持更复杂的测试配置,如并发测试、分组测试和参数化测试。使用TestNG,我们可以编写易于维护和扩展的测试代码。 Selenium WebDriver是Selenium工具集的一...

    Automation:自动化测试示例代码Java,Selenium,Maven,Cucumber,TestNG

    这个压缩包"Automation:自动化测试示例代码Java,Selenium,Maven,Cucumber,TestNG"提供了一套完整的自动化测试框架,涵盖了多种工具和技术,下面我们将深入探讨这些技术及其在自动化测试中的应用。 1. **Java**...

    spring-selenium-automation:一个简单的基于Spring的Web自动化框架

    综上所述,"spring-selenium-automation"项目提供了一个简洁而强大的测试解决方案,它将Spring的灵活性和Selenium的强大功能结合在一起,为Java Web应用程序的自动化测试提供了一种高效的方法。通过深入理解和使用这...

    UIAutomation:基于Selenium的UI自动化框架

    在Java编程环境下,Selenium库提供了丰富的API,使得开发者能够编写可扩展、可靠的Web应用程序测试脚本。这个框架的构建旨在简化自动化测试过程,减少手动测试的工作量,并且提供更高效的回归测试。 Selenium是一个...

    Selenium_Automation

    Selenium自动化测试是一种广泛应用于Web应用测试的技术,它允许开发者使用多种编程语言(如Python、Java、C#等)编写脚本来控制浏览器的行为,模拟真实用户操作。在本压缩包"Selenium_Automation"中,我们可以预见到...

    WebAutomation1003:Web自动化1003

    2. TestNG:TestNG是另一个用于单元测试和集成测试的框架,它在JUnit的基础上增加了许多功能,如并发测试、参数化测试和报告生成。TestNG与Selenium结合使用时,可以创建更复杂的测试场景和测试套件。 三、Web...

    Java自动化测试-Test.rar

    5. TestNG:尽管JUnit是常用的测试框架,但TestNG提供了更多高级特性,如并发测试、参数化测试、灵活的测试配置和报告。TestNG的@Parameters注解允许从外部文件或命令行传递参数,而@Test注解可以指定测试的优先级、...

    selenium_BDD_framework:使用Selenium,Cucumberjava,testng,maven,phantomjs的行为驱动开发UI自动化框架

    通过在运行时传递参数,可以在无头浏览器(Phantomjs)中运行测试。 如果任何方案失败,将截取屏幕截图,并将其保存在/ outputFiles文件夹下。 每次执行测试后都会生成HTML报告,可以在/target/cucumber-...

    selenium_java:web_automation_project

    7. **TestNG的优势**:相比于JUnit,TestNG提供了更高级的功能,如并发测试、参数化测试、数据驱动测试和分组测试,这在大型自动化测试项目中特别有用。 8. **WebDriverManager**:这个库可以自动管理和更新...

    WebAutomation_Practice

    TestNG是另一个关键组件,它是一个测试框架,比JUnit提供了更多的功能,如并发测试、参数化测试、分组测试等。TestNG允许编写更复杂的测试套件,并可以生成详细的测试报告,这对于持续集成和持续交付(CI/CD)流程非常...

    WebAutomation

    此外,日志记录工具如Log4j可以帮助我们在测试过程中记录和分析问题。 为了实现Web自动化,我们还需要理解HTML和CSS选择器,因为它们是定位页面元素的关键。理解DOM(文档对象模型)结构,能够更精确地找到和操作...

    SDET_Automation_Batch3:这包括DB,Selenium,Maven,TestNG,BDD,API,Excel

    7. **Excel应用**:在测试中,Excel常用于数据驱动测试,创建测试数据集或存储测试结果。VBA(Visual Basic for Applications)编程可以自动化Excel操作,提高测试效率。 综上,"SDET_Automation_Batch3"项目旨在...

    poc-automation-testNG

    在测试环境中,Singletons可以用来创建和管理共享资源,例如数据库连接池或线程池,确保在整个测试过程中只有一个实例存在,避免了资源冲突和不必要的初始化。 "静态" 在这里可能是指静态方法或静态变量。在Java中...

    selenium-automation

    Selenium是一款强大的Web应用程序自动化测试工具,尤其在Python编程语言的支持下,它的功能和灵活性得到了极大的提升。本篇将深入探讨Selenium在Python环境下的应用,以及如何利用它进行高效的自动化测试。 一、...

    testAutomation:自动化框架和脚本

    在这个“testAutomation”项目中,主要聚焦于使用Selenium这一流行的Web应用程序自动化测试工具,以及相关的测试自动化框架。让我们深入探讨Selenium和自动化测试框架的基本概念、应用场景及其实现细节。 Selenium...

    TestAutomation

    JUnit支持注解、参数化测试、异常测试等多种功能,使得编写和维护测试变得更加便捷。 TestNG则是另一个强大的测试框架,由Cedric Beust开发。TestNG在JUnit的基础上增加了一些高级功能,如并发测试、测试分组、依赖...

    AutomationTest

    Mockito是一个流行的mocking框架,用于模拟对象的行为和状态,以便在测试中隔离依赖。通过mocking,我们可以专注于测试单个组件,而不是整个系统。在"AutomationTest"项目中,可能会有使用Mockito进行单元测试的实例...

    Test-Automation:此存储库包含与测试自动化相关的资源

    3. **断言**:在测试脚本中设置断言,确保预期的结果与实际结果一致。 4. **测试数据管理**:如果需要执行参数化测试,需要有有效的方式管理测试数据,例如使用CSV文件或数据库。 5. **报告和日志**:记录测试结果,...

    web-logistics-standard:物流标准版自动化测试

    5. **Mocking and Stubbing**: 在测试过程中,可能会用到Mockito等工具模拟依赖服务,比如模拟物流API响应,以便隔离测试环境并提高测试效率。 6. **日志分析和性能监控**: 使用如Log4j进行日志记录,便于追踪错误...

    自动化测试

    TestNG则是在JUnit的基础上扩展,增加了更多特性,如并发测试、参数化测试和分组测试等。 Selenium是一个用于Web应用程序的自动化测试工具,支持多种浏览器和编程语言,包括Java。通过Selenium,测试人员可以编写脚...

Global site tag (gtag.js) - Google Analytics