testNG的常用用法Parameters,DataProvider读取excel

    @Parameters("Name")
    @Test
    public void parametersTest(String Name){
        System.out.println(Name);
    }


在testng.xml中配置  里面的name值对应写到 Parameters中然后,在test中输出这个参数名,就可以得到配置中的value值

<suite name="Suite" parallel="classes" thread-count="3">
    <test verbose="2" preserve-order="true" name="TestDebug">
        <parameter name="Name" value="asdfsfa" />
        <classes>
            <class name="com.seventhDay.TestNG1" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->


 //参数化两种方式,一种是对象数据,一种是迭代器
    @DataProvider(name="user")
    public Object[][] User(){
        return new Object[][]{
                {"root","password"},
                {"asdf","asfa"},
                {"vcz","afwe"}
        };
    }
    @Test(dataProvider = "user")
    public void verifyUser(String userName,String password){
        System.out.println("userName:"+userName+"   password:"+password);
    }
    //迭代器
    @DataProvider(name="data")
    public Iterator<Object[]> dataForTestMethod(Method method) throws FileNotFoundException {
        String sheetName = "Sheet1";
        return (Iterator<Object[]>) new ExcelDataProvider(sheetName);
    }
    @Test(dataProvider = "data")
    public void interfaceTest(Map<String,String> map){
     String caseName = map.get("用例名称");
        String xieyi = map.get("协议");
        System.out.println("caseName"+caseName+"xieyi"+xieyi);
    }



package com.seventhDay;

/**
 * Created by Administrator on 2017/9/6 0006.
 */
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.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class ExcelDataProvider implements Iterator<Object[]> {

    HSSFSheet hssfSheet;
    POIFSFileSystem poifsFileSystem;
    int colFlag = 0;
    int rowFlag = 0;
    int usedRowFlag = 1;
    String[] colName = null;
    FileInputStream intputStream;
    /*
    * 构造方法
    * */
    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 || v.equals("")) {
                        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)
            return true;  //To change body of implemented methods use File | Settings | File Templates.
        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;
        return object;  //To change body of implemented methods use File | Settings | File Templates.
    }

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

    /**
     * 获得TestData.xls的绝对路径
     * @return
     */
    public String getPath() {
        File file = new File("Data");
        String path = file.getAbsolutePath();
        path = path + "\\" + "TestData.xls";
        path="D:\\接口测试用例Excel.xls";
        return path;
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NeilNiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值