Web UI自动化之Excel用例读取
本文讲解了如何从 Excel 表格中读取测试用例并在 TestNG 中执行。使用的例子是打开百度首页,输入用户名和密码,完成登录。
Excel 表格中的用例如图
我们将这个 Excel 取名为 test.xls,放在 resource 目录***意要将 resource 设为 Source Folder(右键点击文件夹 -> Build Path -> Use as Source Folder),否则文件读取不到
一、实现登录操作
将百度首页(www.baidu.com)定义为 SearchPage,在该类中实现登录操作的代码
public void login(WebDriver driver, Map<String,String> param){
//在页面上name为tj_login的元素有两个,所以用findElements,得到List,然后取第二个元素
driver.findElements(By.name("tj_login")).get(1).click();
//使线程休眠两秒,等待登录页面弹框加载
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//切换到使用账号登录
driver.findElement(By.id("TANGRAM__PSP_10__footerULoginBtn")).click();
//输入用户名
driver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys(param.get("用户名"));
//输入密码
driver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys(param.get("密码"));
//点击登录按钮
driver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
}
其中的 Map 参数 param 就是我们的测试用例。
用例读取后存放的形式如下:
[{“用户名”:“11111”, “密码”:“abcde”}, {“用户名”:“22222”,“密码”:“fghij”}]
其中有两条 map 数据,TestNG 会对它们分别执行
二、读取用例并保存
上面说到,用例是以 Map 形式存储的,具体是怎么实现的呢?
新建 ExcelUtils.java ,处理 Excel 文件并返回用例
public class ExcelUtils {
@DataProvider(name="excel")
public static Object[][] readFile(){
Object[][] obj=null;
Map<String,String> map = new HashMap<String,String>();
try{
//InputStream is = new FileInputStream("D:\\test.xls");
InputStream is = ExcelUtils.class.getResourceAsStream("/test.xls");
POIFSFileSystem poi = new POIFSFileSystem(is);
HSSFWorkbook wb = new HSSFWorkbook(poi);
HSSFSheet sheet = wb.getSheetAt(0);
obj = new Object[sheet.getLastRowNum()][];
for(int r=1; r <= sheet.getLastRowNum(); r++){
HSSFRow row = sheet.getRow(r);
map.clear();
for(int c=0; c< sheet.getRow(0).getLastCellNum(); c++){
Cell cell = row.getCell(c);
cell.setCellType(CellType.STRING);
map.put(sheet.getRow(0).getCell(c).getStringCellValue(), cell.getStringCellValue());
}
obj[r-1] = new Object[]{new HashMap<>(map)};
}
is.close();
wb.close();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return obj;
}
}
代码解释:
1、@DataProvider(name=“excel”)
在使用 TestNG 时,可以设置 DataProvider,指定数据源,这个方法返回的是用例,也就是数据源,所以要在方法前加上@DataProvider(name=“excel”),name 是我们自己定义的名字,也可以不填。
2、Excel 读取的实现
具体说明在这里 Java读写Excel文件
3、TestNG 的数据源是 Object[][] 对象,所以将 Excel 中的每一行都存放到 Map 中,再将 map 放到 Object[][] 中返回。
4、在读取 Excel 的过程中,纯数字文本会被当成 Numeric 类型处理,所以在读取前需要先设置单元格数据类型为 String
cell.setCellType(CellType.STRING);
三、编写测试类
新建 TestLogin.java,实现测试过程
public class TestLogin {
//指定数据源,数据源和 Test 方法不在一个类中时,需要说明数据源的 class
@Test(dataProvider="excel",dataProviderClass=ExcelUtils.class)
public void testLogin(Map<String,String> param){
Browser browser = new Browser();
Properties properties = Config.getProperties();
WebDriver driver = browser.openUrl(properties.getProperty("URL"));
SearchPage search = new SearchPage();
search.login(driver, param);
browser.close();
}
}
四、运行 TestNG
右键点击 TestLogin.java,选择Run As -> TestNG Test
执行结果如下:
欢迎关注微信公众号,您的支持是对我最大的鼓励
上一篇: Mixly按键控制LED灯
下一篇: web自动化测试初识(UI)
推荐阅读