zoukankan      html  css  js  c++  java
  • TestNg参数化测试之读取csv文件

    转自:https://blog.csdn.net/testdeveloper/article/details/51770111

    1、新建csv文档,准备好测试数据

    在当前工程的resources目录下,新建文件名为add的csv文档

    这里写图片描述

    打开csv文件,构造n1、n2、r1三个参数数据 
    这里写图片描述

    2、新建一个CSVData类用来获取csv文件中的数据

    package com.mcj.testng;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.TreeMap;
    import java.util.regex.Matcher;
    
    public class CSVData implements Iterator<Object[]> {
        BufferedReader in;
        ArrayList<String> csvList=new ArrayList<String>();
        int rowNum=0;     //行数
        int columnNum=0;  //列数
        int curRowNo=0;   //当前行数
        String columnName[];  //列名
        /**
         * 在TestNG中由@DataProvider(dataProvider = "name")修饰的方法
         * 取csv文件数据时时,调用此类构造方法(此方法会得到列名并将当前行移到下以后)执行后,转发到
         * TestNG自己的方法中去,然后由它们调用此类实现的hasNext()、next()方法
         * 得到一行数据,然后返回给由@Test(dataProvider = "name")修饰的方法,如此
         * 反复到数据读完为止
         * @param fileName
         * @throws IOException 
         */
        public CSVData(String fileName) throws IOException{
            File directory=new File(".");
            String path=".src.resources.";
            String absolutePath=directory.getCanonicalPath()+path.replaceAll("\.", Matcher.quoteReplacement("\"))+fileName;
            System.out.println(absolutePath);
            File csv=new File(absolutePath);
            in=new BufferedReader(new FileReader(csv));
            while (in.ready()) {            
                csvList.add(in.readLine());
                this.rowNum++;
            }       
            String[] str=csvList.get(0).split(",");
            this.columnNum=str.length; 
            columnName=new String[columnNum];
            //获取列名
            for (int i = 0; i < columnNum; i++) {
                columnName[i]=str[i];
            }
            this.curRowNo++;
        }
        @Override
        public boolean hasNext() {
            // TODO Auto-generated method stub
            if(rowNum==0||curRowNo>=rowNum){
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return false;
            }else{
                return true;
            }       
        }
        /**
         * 获取一组参数,即一行数据
         */
        @Override
        public Object[] next() {
            // TODO Auto-generated method stub
            Map<String,String> s=new TreeMap<String,String>();
            String csvCell[]=csvList.get(curRowNo).split(",");
            for(int i=0;i<this.columnNum;i++){
                s.put(columnName[i], csvCell[i]);           
            }
            Object[] d=new Object[1];
            d[0]=s;
            this.curRowNo++;
            return d;
        }
    
        @Override
        public void remove() {
            // TODO Auto-generated method stub
            throw new UnsupportedOperationException("remove unsupported");
        }
    
    }

    3、创建TestNg测试类CalculatorCSV

    package com.mcj.testng;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.Map;
    import org.testng.Assert;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    public class CalculatorCSV {
        Calculator cal=new Calculator();
    
        @DataProvider(name="num")
        public Iterator<Object[]> Numbers() throws IOException{      
            return (Iterator<Object[]>)new CSVData("add.csv");
        }
        @Test(dataProvider="num")
        public void testAdd(Map<String, String> data){
            float num1=Float.parseFloat(data.get("n1"));
            float num2=Float.parseFloat(data.get("n2"));
            float expectedResult=Float.parseFloat(data.get("r1"));  
            Float actual=cal.add(num1, num2);
            Assert.assertEquals(actual, expectedResult);
        }
    }

    4、运行结果

    PASSED: testAdd({n1=3, n2=2, r1=5}) 
    PASSED: testAdd({n1=-3, n2=8, r1=5}) 
    FAILED: testAdd({n1=5.4, n2=6.6, r1=11.9}) 
    java.lang.AssertionError: expected [11.9] but found [12.0] 
    at org.testng.Assert.fail(Assert.java:94)

  • 相关阅读:
    malloc
    排序算法学习笔记(三)-- 快速排序
    排序算法学习笔记(二)-- 归并排序
    排序算法学习笔记(一)-- 冒泡排序,选择排序,插入排序,希尔排序
    网络协议笔记
    域名和IP地址并用的理由
    WebSocket协议介绍
    Ajax概念
    共享密钥加密、公开密钥加密及HTTPS混合加密
    HTTP缺点
  • 原文地址:https://www.cnblogs.com/zj1234/p/8708213.html
Copyright © 2011-2022 走看看