mysql的provider_mysql提供dataprovider

这个类实现了从MySQL数据库中获取数据的功能,通过在TestNG中定义数据提供器(DataProvider)。它根据指定的条件(如category)从指定的表中读取数据,并通过迭代器的方式返回每行数据。
摘要由CSDN通过智能技术生成

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 {

List> 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 s=new TreeMap();

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> getConnection(String sql,String ip,String user,String pw,String db) {

Connection conn = null;

List> 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 m = new HashMap();

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 periodnum() throws IOException {

return (Iterator)new SQLProvider("mmd","proidnum3","proidnum6","proidnum12");

}

730cf4db8b6c482233a36e9f8705e4f5.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值