zoukankan      html  css  js  c++  java
  • 【框架】用excel管理测试用例需要的参数数据(二)

    一、总体思路

    以类为excel名,测试方法名为sheet名,建立excel文件。用jxl包里的方法去读取excel文件里的内容,然后用testng里的dataprovider,将数据传递给测试用例

    二、代码实现

    package com.jxl.excel;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    import jxl.Sheet;
    import jxl.Workbook;
    import jxl.read.biff.BiffException;
    
    public class ExcelData {
    	String classname;
    	String casename;
    
    	/**
    	 * @param classname
    	 *            excel文件名
    	 * @param casename
    	 *            sheet名
    	 */
    	public ExcelData(String classname, String casename) {
    		this.classname = classname;
    		this.casename = casename;
    	}
    
    	/**
    	 * 获取excel文件的路径
    	 * 
    	 * @return
    	 */
    	public String getPath() {
    		String path = "./testdata/" + classname + ".xls";
    		return path;
    	}
    
    	/**
    	 * 获取excel对应sheet中的数据
    	 * 
    	 * @return
    	 * @throws IOException
    	 */
    	public Object[][] getExcelData() {
    		File file = new File(getPath());
    		Workbook book = null;
    		Sheet sheet = null;
    		try {
    			book = Workbook.getWorkbook(file);
    			sheet = book.getSheet(casename);
    		} catch (Exception e) {
    			System.out.println(classname + ".xls文件读取失败");
    		}
    		int rows = sheet.getRows();
    		int cols = sheet.getColumns();
    		// 如果行数少于2,则没有必要再继续运行下去了,不会返回数据,直接退出程序
    		if (rows <= 1) {
    			System.out.println(classname + ".xls的" + casename + " sheet没有数据");
    			System.exit(0);
    		}
    		// 为了返回值是Object[][]类型,定义一个多行单列的二维数组
    		HashMap<String, String>[][] arrMap = new HashMap[rows - 1][1];
    		// 对数组中的所有元素初始化
    		for (int i = 0; i < rows - 1; i++) {
    			arrMap[i][0] = new HashMap<>();
    		}
    		// 定义一个list,存储第一行的标题,作为key用
    		// 需要注意的是,getCell(col,row),第一个纵坐标,第二个位横坐标
    		List<String> list = new ArrayList<String>();
    		for (int c = 0; c < cols; c++) {
    			list.add(sheet.getCell(c, 0).getContents());
    		}
    		// 以行为单位,将一行的数据,以键值对的形式,存进一个哈希表里
    		for (int r = 1; r < rows; r++) {
    			for (int c = 0; c < cols; c++) {
    				arrMap[r - 1][0].put(list.get(c), sheet.getCell(c, r).getContents());
    			}
    		}
    		book.close();
    		return arrMap;
    	}
    }
    

     

    testng的测试用例里,这样传递数据 

    @DataProvider(name = "noNameTip")
    	public Object[][] noNameData() {
        //excel的文件名和类名一致,为LoginTest,测试方法和sheet名一致,为testNoNameLogin
    		ExcelData e = new ExcelData("LoginTest", "testNoNameLogin");
    		return e.getExcelData();
    	}
    
    	/**
    	 * 测试登录没有输入用户名
    	 */
    	@Test(dataProvider = "noNameTip")
    	public void testNoNameLogin(HashMap<String, String> data) {
        //按列名取值
    		String username = data.get("username");
    		String password = data.get("password");
    		loginPage.doLogin(username, password);
    		assertEquals(loginPage.getNoNameTip(), data.get("expectedNoNameTip"));
    	}

     testng中当有多个方法,需要传递数据的时候,将method传递给dataprovider

    @DataProvider(name = "loginData")
    	public Object[][] testData(Method method)  {		
    		ExcelData e = new ExcelData("LoginTest", method.getName());
    		return e.getExcelData();
    	}
    
    	/**
    	 * 测试登录没有输入用户名
    	 */
    	@Test(dataProvider = "loginData")
    	public void testNoNameLogin(HashMap<String, String> data) {
        //按列名取值
    		String username = data.get("username");
    		String password = data.get("password");
    		loginPage.doLogin(username, password);
    		assertEquals(loginPage.getNoNameTip(), data.get("expectedNoNameTip"));
    	}
    

      

  • 相关阅读:
    linux 上安装sqlplus
    如何使用 SVN 找到一段时间内提交的代码文件
    nginx 快速检查配置文件的方法
    nginx 报错 [emerg] 1164#1664: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
    nginx 负载均衡
    C#可扩展编程之MEF学习
    5天玩转C#并行和多线程编程
    C#综合揭秘——深入分析委托与事件
    解析C#中[],List,Array,ArrayList的区别及应用
    在easyui datagrid中formatter数据后使用linkbutton
  • 原文地址:https://www.cnblogs.com/Jourly/p/7000003.html
Copyright © 2011-2022 走看看