Selenium selenium 入门学习 (四)

顺流而下 · 2017年08月07日 · 最后由 顺流而下 回复于 2018年06月26日 · 517 次阅读

前文链接

通过 Excel 对用例参数进行配置

  • pom.xm 依赖:

    <dependency>
        <groupId>net.sourceforge.jexcelapi</groupId>
        <artifactId>jxl</artifactId>
        <version>2.6.12</version>
    </dependency>
    
  • Excel 读取类:通过迭代器实现,这样比较方便封装,实现 Excel 读取类型的多态性;这里用的是 Map 实现;

    public class ExcelIterator implements Iterator<Object[]> {
    private Workbook book = null;
    private Sheet sheet = null;
    
    private int rowNum = 0;
    private int curRowNo = 0;
    private int columnNum = 0;
    private String[] columnName;
    private int singleline = 0;
    
    public ExcelIterator(String filename, String testMethodname) {
        try {
            FileInputStream fs = new FileInputStream(filename);
            this.book = Workbook.getWorkbook(fs);
            this.sheet = book.getSheet(testMethodname);
            this.rowNum = sheet.getRows();
            Cell[] c = sheet.getRow(0);
            this.columnNum = c.length;
            columnName = new String[c.length];
            for (int i = 0; i < c.length; i++) {
                columnName[i] = c[i].getContents().toString();
            }
    
            if (this.singleline > 0) {
                this.curRowNo = this.singleline;
            } else {
                this.curRowNo++;
            }
    
        } catch (FileNotFoundException e) {
            System.out.println("文件IO异常");
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    @Override
    public boolean hasNext() {
        if (this.rowNum == 0 || this.curRowNo >= this.rowNum) {
            book.close();
            return false;
        }
        if (this.singleline > 0 && this.curRowNo > this.singleline) {
            book.close();
            return false;
        }
        return true;
    }
    
    @Override
    public Object[] next() {
        Cell[] c = sheet.getRow(this.curRowNo);
        Map<String, Object> s = new LinkedHashMap<String, Object>();
    
        for (int i = 0; i < this.columnNum; i++) {
            String data = c[i].getContents().toString();
            s.put(this.columnName[i], data);
        }
        this.curRowNo++;
        return new Object[] { s };
    }
    
    @Override
    public void remove() {
        // TODO Auto-generated method stub
    }
    }
    
  • 读取 Excle 用例示例:

public class TestDriverData {
    @Test(dataProvider = "test_selenium1")
    public void f(Map<String, String> data) {
        System.out.println("用例标题:" + data.get("comment"));
  }

    @DataProvider(name = "test_selenium1")
    public Iterator<Object[]> dataProvider() {
        return new ExcelIterator("D:\\data\\ErShouFangWebDetailTest.xls", "testEsfWebDetail");
    }
}
  • Excel 展示:

  • Excel 读取执行用例结果:

问题:

  • 怎么通过配置读取直接将用例参数根据用例名称加载进来;需要使用配置文件的读取,这些如果实现用什么方式进行维护呢?
共收到 9 条回复 时间 点赞

感觉 excel 可以换 xml 了,excel 很痛苦

白纸 回复

xml 的话,格式怎么设置,没有接触过用 xml 配置用例。会不会看着比较乱

顺流而下 回复

作为开发或者懂点代码的...XML 更简洁.

格式 就是

<?xml version="1.0" encoding="UTF-8"?>
<data>

    <emailAddress>
        <username>139384xxxxx</username>
        <password>xxxxx</password>
        <rescipename>刘明</rescipename>
        <recipephone>13999999999</recipephone>
        <recipeaddress>东城区xxxxx</recipeaddress>
    </emailAddress>
</data>
```  之类的

然后写个 XML读取工具类, 直接转换成String [] []  的二维数组丢给 Testng 的数据驱动  传参
白纸 回复

学习了,这两天试试看;这样对比感觉使用 Execl 对于测试流程可能比较重,XML 相对轻便些;如果数据量比较多的情况下 XML 维护方便吗

#3 楼 @baizhi 能否将数据写到 json 中,替换用 excel 和 xml 的方式?

—— 来自 TesterHome 官方 安卓客户端

有尝试过表格或者 xml、json 几种格式来编写用例么,效果如何?哪种在后续编写或长期维护中会表现的比较好?

lofbat 回复

公司转型了。。。。

顺流而下 回复

时隔半年。。能问下现在实践结果怎么样么,转型指的是?

lofbat 回复

现在在做数据处理了,公司架构调整,自动化方面不推广了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册