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");
}

  

最新文章

  1. C#获取当前程序运行路径的方法集合
  2. EXT.NET 使用总结(1)
  3. SQL SERVER 2008 r2安装失败之Integration Service
  4. 谈谈java的运行机制
  5. js编写当天简单日历
  6. svn 安装 、使用(1)
  7. node.js 快速体验
  8. 用Java发送邮件
  9. 在外部存储器上写入或读取文件(Environment类、File类的使用)
  10. Dubbo配置方式详解
  11. 再起航,我的学习笔记之JavaScript设计模式06(抽象工厂模式)
  12. [MySQL] 5.7版本以上group by语句报1055错误问题
  13. fatal error LNK1169: 找到一个或多个多重定义的符号或多个.c/.cpp文件想同时调用定义在.h文件里面的全局变量,防止重定义变量问题。
  14. Mybatis(一)走进Mybatis与FisrtExample
  15. javascript进阶笔记(2)
  16. bzoj3751 / P2312 解方程
  17. Javascript继承机制的设计思想
  18. centos下dnsmasq安装与配置
  19. .NET中zip的压缩和解压
  20. Jmeter模拟http请求

热门文章

  1. 重复安装相同包名APK出现的问题。
  2. TCP/IP中链路层的附加数据(Trailer数据)和作用
  3. JavaScript中的私有属性
  4. Html中的文本框和单选按钮
  5. MediaElement 的两种模式
  6. TomCat的安装与配置方法
  7. pip 与pip3
  8. PHP图片加文字水印和图片水印方法(鉴于李老师博客因没加水印被盗,特搜集的办法。希望能有用!)
  9. 用ffmpeg合并音频文件
  10. D3.js学习(一)