码迷,mamicode.com
首页 > 数据库 > 详细

DataProvider结合数据库实现数据驱动

时间:2018-04-23 23:18:06      阅读:753      评论:0      收藏:0      [点我收藏+]

标签:amp   hashmap   table   manage   regex   row   character   count()   inf   

第一:编写实现类

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;
import java.util.regex.Matcher;

public class SQLProvider implements Iterator<Object[]> {
    List<Map<String, String>> sqlList = new ArrayList<Map<String, String>>();
    int rowNum=0;     //行数
    int curRowNo=0;   //当前行数
    String sql = null;
    String category = "";


    /**
     * 在TestNG中由@DataProvider(dataProvider = "name")修饰的方法
     * 取SQL数据时,调用此类构造方法(此方法会得到列名并将当前行移到下以后)执行后,转发到
     * TestNG自己的方法中去,然后由它们调用此类实现的hasNext()、next()方法
     * 得到一行数据,然后返回给由@Test(dataProvider = "name")修饰的方法,如此
     * 反复到数据读完为止
     * @param tablename
     */
    public SQLProvider(String tablename, String ... key) {
        String ip = null;
        String user = null;
        String pw = null;
        String db = null;
        Properties prop = new Properties();
        try {
            File directory=new File(".");
            String path=".src.test.resources.properties.";
            String absolutePath=directory.getCanonicalPath()+path.replaceAll("\\.", Matcher.quoteReplacement("\\"))+"conf.properties";
            absolutePath = absolutePath.replace("\\",File.separator).replace("/",File.separator);
            InputStream in = new FileInputStream(absolutePath);
            prop.load(in);
            ip = prop.getProperty("SQLProviderIp").trim();
            user = prop.getProperty("SQLProviderUser").trim();
            pw = prop.getProperty("SQLProviderPw").trim();
            db = prop.getProperty("SQLProviderDB").trim();
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (key.length > 0){
            for (int i = 0 ;i < key.length;i++){
                category += "‘"+key[i]+"‘,";
            }
            category = category.substring(0,category.length()-1);
            sql = "select * from "+tablename+" where category in ("+category+")";
        }else{
            sql = "select * from " + tablename;
        }
        sqlList = getConnection(sql,ip,user,pw,db);
        this.rowNum = sqlList.size();
    }

    @Override
    public boolean hasNext() {
        // TODO Auto-generated method stub
        if(rowNum==0||curRowNo>=rowNum){
            return false;
        }else{
            return true;
        }
    }
    /**
     * 获取一组参数,即一行数据
     */
    @Override
    public Object[] next() {
        // TODO Auto-generated method stub
        Map<String,String> s=new TreeMap<String,String>();
        s=sqlList.get(curRowNo);
        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");
    }

    public static   List<Map<String,String>> getConnection(String sql,String ip,String user,String pw,String db) {
        Connection conn = null;
        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://" + ip + "/"+db+"?user=" + user
                    + "&password=" + pw
                    + "&useUnicode=true&characterEncoding=UTF8";
            conn = DriverManager.getConnection(url);
            Statement stmt = conn.createStatement();
            ResultSet result = stmt.executeQuery(sql);
            while (result.next()) {
                Map<String, String> m = new HashMap<String, String>();
                for (int i = 2; i <= result.getMetaData().getColumnCount(); i++) {
                    String k = result.getMetaData().getColumnName(i);
                    String v = result.getString(i);
                    m.put(k,v);
                }
                list.add(m);
            }
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return list;

    }

/*    public static void main (String []args) throws IOException {
        ConnDB d = new ConnDB();
        d.setDb("dataprovider");
        d.setDbUrl("localhost");
        d.setPwd("shen1986");
        d.setUserName("root");
        d.ConnDB();
        System.out.println(getConnection("select * from zfk",d.getConn()));
    }*/

}

  第二、testng中使用

    @DataProvider(name="All_data")
    public Iterator<Object[]> ToubaoTestData() throws IOException {
        return new SQLProvider("baobei_shanyin","shanyin_normal","shanyin_earlyrepay");
    }

    第三、数据库中配置测试数据

 技术分享图片

 

DataProvider结合数据库实现数据驱动

标签:amp   hashmap   table   manage   regex   row   character   count()   inf   

原文地址:https://www.cnblogs.com/HCT118/p/8922484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!