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
[email protected]#$1234
SQLProviderDB=dataprovider

testng中使用:

  

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

  

时间: 2024-10-20 15:30:20

mysql提供dataprovider的相关文章

关于MySQL提供的Last_insert_id()函数使用的理解

Last_insert_id()是MYSQL提供的返回当前客户端最后一个insert或update查询中设置为AUTO_INCREMENT列的值 Last_insert_id()不受其他客户端影响,所以是线程安全的,当前客户端只能拿到当前客户端的最新值,不需加锁处理 mybatis中的userGeneratedKeys="true" keyProperty="id"可能就是使用Last_insert_id()函数实现的

Centos基于MySQL提供的Yum repository安装MySQL5.6

1.下载yum源 # wget http://dev.mysql.com/get/mysql57-community-release-el6-8.noarch.rpm 下载完成后,如下图所示: 2.安装yum包 2.1 查看此包要安装的文件 # rpm -qpl mysql80-community-release-el8-1.noarch.rpm 结果如下图所示: 2.2 安装 # rpm -ivh mysql80-community-release-el8-1.noarch.rpm 安装完成后

自定义ASP.NET Identity(三)- 实现自定义MySQL ASP.NET Identity存储提供程序

ASP.NET Identity是一个可扩展的系统,你可以创建属于你自己的存储提供程序并且将它集成到你的应用中,而不需要重构你的应用.本章将介绍如何创建一个ASP.NET Identity的MySQL存储提供程序.关于如何创建自定义存储提供程序的概述请查看自定义ASP.NET Identity(一)- 自定义ASP.NET Identity存储提供程序.要完成这个指南,你必须安装Visual Studio 2013 Update 2. 这个指南将包含如下内容: 怎样在Azure上创建MySQL数

MySQL分库分表方案

1. MySQL分库分表方案 1.1. 问题: 1.2. 回答: 1.2.1. 最好的切分MySQL的方式就是:除非万不得已,否则不要去干它. 1.2.2. 你的SQL语句不再是声明式的(declarative) 1.2.3. 你招致了大量的网络延时 1.2.4. 你失去了SQL的许多强大能力 1.2.5. MySQL没有API保证异步查询返回顺序结果 1.2.6. 总结 MySQL分库分表方案 翻译一个stackoverflow上的问答,关于分库分表的缺点的,原文链接: MySQL shard

mysql性能调优与架构设计笔记

1.mysql基本介绍 mysql支持多线程高并发的关系型数据库; 数据库存储引擎InnoDB.MyISAM; mysql快速崛起的原因就是他是开源的; 性能一直是mysql自豪的一大特点; 2.mysql架构组成 麻雀虽小五脏俱全,mysql虽然简单但其内部结构并不简单; mysql物理文件组成之日志文件: 错误日志error log这里记录mysql运行时严重的警告和错误,以及mysql启动和关闭的日志信息 二进制日志 binary log 记录mysql运行时所有的query和query执

MySQL字段属性介绍

这次Qi号分享MySQL字段属性简介.下面资料是Qi号搜集大量资料与个人理解的整理.看到最后有福利哦基友们 前言 MySQL提供了一组可以赋给表中各个列的数据类型,每个类型都强制数据满足为该数据类型预先确定的一组规则,例如大小.类型及格式. 这里先总结数据类型.MySQL中的数据类型大的方面来分,可以分为:日期和时间.数值,以及字符串.下面就分开来进行总结. 日期和时间数据类型 MySQL数据类型   含义 date 3字节,日期,格式:2014-09-18 time 3字节,时间,格式:08:

MySQL备份与恢复

body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10px; padding-bottom: 10px; background-color: white; padding: 30px } body>*:first-child { margin-top: 0 !important } body>*:last-child { margin-bottom:

MySQL内存使用分析

MySQL中内存分为全局内存和线程内存两大部分(其实并不全部,只是影响比较大的 部分) 线程内存公式: per_thread_buffers=(read_buffer_size+read_rnd_buffer_size+sort_buffer_size+thread_stack+join_buffer_size+binlog_cache_size+tmp_table_size)*max_connections 全局内存: global_buffers=innodb_buffer_pool_siz

MySQL存储引擎与数据类型

1 数据存储引擎 存储引擎的概念是MySQL的一个特性,它指定了表的类型(诸如表如何存储与索引数据.是否支持事务.外键等),表在计算机中的存储方式. 1.1 MySql支持的数据存储引擎 查看引擎信息 通过命令来查看引擎信息 show engines; 默认存储引擎为InnoDB,如下列出: Engine Support Comment Transactions XA Savepoints InnoDB DEFAULT Supports transactions, row-level locki