• mysql提供dataprovider


    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();
        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();
            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()));
        }*/
    
    }
    

    数据库配置文件:

    #DataProvider SQL Config
    #----------------------------------------------------------------------------#
    SQLProviderIp=10.253.43.98
    SQLProviderUser=root
    SQLProviderPw=qwER!@#$1234
    SQLProviderDB=dataprovider

    testng中使用:

      

    @DataProvider(name="periodnum")
    public Iterator<Object[]> periodnum() throws IOException {
    return (Iterator<Object[]>)new SQLProvider("mmd","proidnum3","proidnum6","proidnum12");
    }

      

  • 相关阅读:
    使用钉钉对接禅道的bug系统,实现禅道提的bug实时在钉钉提醒并艾特对应的开发人员处理
    Python3数据驱动ddt
    Python3发送邮件功能
    Python3的日志添加功能
    【最小生成树】BZOJ1016: [JSOI2008]最小生成树计数
    【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院
    【最小生成树+子集枚举】Uva1151 Buy or Build
    【最小生成树】UVA1494Qin Shi Huang's National Road System秦始皇修路
    【最小生成树+贪心】BZOJ1821: [JSOI2010]Group 部落划分 Group
    【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup
  • 原文地址:https://www.cnblogs.com/HCT118/p/6178624.html
Copyright © 2020-2023  润新知