• testNG-dataprovider实现


    1. dataprovider取对应excel中的值

    代码结构目录,取data目录下的user.xls文件

    2. ExcelDataProvider.java中对excel中数据进行取值,再进行封装成一个map,将第一行的数值成为key

    package com.course.testing.utils;

    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.Map;

    /**
    * 用户管理方法
    *
    * @类名称: com.course.testing.utils
    * @author: 高夏莲
    * @date: 2020/6/3
    */
    public class ExcelDataProvider implements Iterator<Object[]> {

    HSSFSheet hssfSheet;
    POIFSFileSystem poifsFileSystem;
    int colFlag = 0;
    int rowFlag = 0;
    int usedRowFlag = 1;
    String[] colName = null;
    FileInputStream intputStream;

    /**
    * 构造方法
    *
    * @param className
    * @throws FileNotFoundException
    */
    public ExcelDataProvider(String className) throws FileNotFoundException {
    //数据放到数据流里面
    intputStream = new FileInputStream(this.getPath());
    poifsFileSystem = null;
    try {
    poifsFileSystem = new POIFSFileSystem(intputStream);
    //打开 EXCEL工作薄
    HSSFWorkbook hssfWorkbook = new HSSFWorkbook(poifsFileSystem);
    //获取 sheet
    hssfSheet = hssfWorkbook.getSheet(className);
    //获取一行对象
    HSSFRow hssfRow = hssfSheet.getRow(0);
    //获取有多少列
    colFlag = hssfRow.getPhysicalNumberOfCells();
    //获取有多少行
    int rows = hssfSheet.getLastRowNum();
    colName = new String[colFlag];
    //获取所有的列名
    for (int i = 0; i < colFlag; i++) {
    colName[i] = hssfSheet.getRow(0).getCell(i).toString();
    }
    //获取有多少行
    for (int r = 1; r <= rows; r++) {
    try {
    String v = hssfSheet.getRow(r).getCell(0).toString();
    if (v == null || "".equals(v)) {
    break;
    }
    } catch (NullPointerException e) {
    break;
    }
    this.rowFlag++;
    }
    } catch (IOException e) {
    e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }
    }

    /**
    * 判断是否仍有元素可以迭代
    *
    * @return
    */
    @Override
    public boolean hasNext() {
    //行数大于0 并且 第一列有数据 并且 当前的行数小于等于 最大行
    if (rowFlag > 0 && hssfSheet.getRow(rowFlag).getCell(0).toString() != "" && usedRowFlag <= rowFlag) {
    //To change body of implemented methods use File | Settings | File Templates.
    return true;
    } else {
    try {
    intputStream.close();
    } catch (IOException e) {
    e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }
    return false;
    }
    }

    /**
    * 返回迭代的下一个元素
    *
    * @return
    */
    @Override
    public Object[] next() {
    Object[] object = new Object[1];
    Map<String, String> map = new LinkedHashMap<String, String>();
    //遍历所有列
    for (int c = 0; c < colFlag; c++) {
    String cellValue = "";
    try {
    //获取单元格的值
    cellValue = hssfSheet.getRow(this.usedRowFlag).getCell(c).toString();
    } catch (Exception e) {
    map.put(colName[c], cellValue);
    continue;
    }
    // colName[c] 获取当前列的列头
    map.put(colName[c], cellValue);
    }
    this.usedRowFlag++;
    object[0] = map;
    //To change body of implemented methods use File | Settings | File Templates.
    return object;
    }

    /**
    * 删除
    */
    @Override
    public void remove() {
    //To change body of implemented methods use File | Settings | File Templates.
    }

    /**
    * 获得TestData.xls的绝对路径
    *
    * @return
    */
    public String getPath() {
    String path = System.getProperty("user.dir");
    path = path + "\data\user.xls";
    return path;
    }
    }

    3. 在testcase中调用对象,生成map
    public class DataProviderTest {
    @DataProvider(name="data1")
    public Iterator<Object[]> dataForTestMethod(Method method) throws FileNotFoundException {
    String sheetName = "Sheet1";
    return (Iterator<Object[]>) new ExcelDataProvider(sheetName);
    }
    @Test(dataProvider = "data1")
    public void testServerCase2(Map<String,String> map){
    System.out.println("-------param1="+map.get("我的"));
    }

     }

    4. excel中的数据

    5. 结果

  • 相关阅读:
    计算机网络 基础 1
    JAVA 基础之 多线程
    HashMap 多线程处理之 FailFast机制:
    Struts2
    JAVA 由浅及深之 Servlet
    Servlet 会话技术 , Session 及 Cookie 详解
    JAVA 设计模式 : 单例模式
    JAVA 基础之 序列化 Serializable
    代理模式 及 实现AOP 拦截机制
    web.xml 文件详解 及 listener、 filter、servlet 加载顺序
  • 原文地址:https://www.cnblogs.com/gaoxialian/p/13039484.html
Copyright © 2020-2023  润新知