上一篇我们介绍用如何用yaml结合testng做数据驱动,就又想来个数据库的参数化

备注:@DataProvider的返回值类型只能是Object[][]与Iterator<Object>[]

思路:

解析sql查询返回结果,然后把解析出来的list转换成Object[][]类型的数据,且结合在@DataProvider中。

然后把解析出来的list转换成Object[][]类型的数据,且结合在@DataProvider中。

DbDataHeleper.java

  1. import org.testng.annotations.DataProvider;
  2.  
  3. import java.sql.*;
  4. import java.util.*;
  5.  
  6. /**
  7. * 数据库操作工具
  8. *
  9. * @author longrong.lang
  10. */
  11. public class DbDataHeleper {
  12.  
  13. static Connection conn = null;
  14.  
  15. public static String driverClassName = "com.mysql.jdbc.Driver";
  16. public static String url = "jdbc:mysql://127.0.0.1:3306/demo";
  17. public static String username = "root";
  18. public static String password = "root";
  19.  
  20. /**
  21. * 执行sql
  22. *
  23. * @param jdbcUrl 数据库配置连接
  24. * @param sql sql语句
  25. * @return
  26. */
  27. public static List<Map<String, String>> getDataList(String jdbcUrl, String sql) {
  28. List<Map<String, String>> paramList = new ArrayList<Map<String, String>>();
  29. Map<String, String> param = new HashMap<>();
  30. Statement stmt = null;
  31. try {
  32. // 注册 JDBC 驱动
  33. Class.forName(driverClassName);
  34. // 打开链接
  35. conn = DriverManager.getConnection(jdbcUrl, username, password);
  36. // 执行查询
  37. stmt = conn.createStatement();
  38. ResultSet rs = null;
  39. rs = stmt.executeQuery(sql);
  40. String columns[] = {"username", "passWord", "remark"};
  41. // 展开结果集数据库
  42. while (rs.next()) {
  43. Map<String, String> map = new LinkedHashMap<String, String>();
  44. for (int i = 0; i < columns.length; i++) {
  45. String cellData = rs.getString(columns[i]);
  46. map.put(columns[i], cellData);
  47. }
  48. paramList.add(map);
  49. }
  50. // 完成后关闭
  51. rs.close();
  52. stmt.close();
  53. conn.close();
  54. } catch (SQLException se) {
  55. // 处理 JDBC 错误
  56. System.out.println("处理 JDBC 错误!");
  57. } catch (Exception e) {
  58. // 处理 Class.forName 错误
  59. System.out.println("处理 Class.forName 错误");
  60. } finally {
  61. // 关闭资源
  62. try {
  63. if (stmt != null) stmt.close();
  64. if (conn != null) conn.close();
  65. } catch (SQLException se) {
  66. se.printStackTrace();
  67. }
  68. }
  69. return paramList;
  70. }
  71.  
  72. @DataProvider
  73. public Object[][] dbDataMethod() {
  74. String sql = "SELECT * FROM `account`;";
  75. List<Map<String, String>> result = getDataList(url, sql);
  76. Object[][] files = new Object[result.size()][];
  77. for (int i = 0; i < result.size(); i++) {
  78. files[i] = new Object[]{result.get(i)};
  79. }
  80. return files;
  81. }
  82. }

再通过测试文件来测试一下:

TestDbData.java

  1. import org.testng.annotations.Test;
  2.  
  3. import java.util.Map;
  4.  
  5. public class TestDbData extends DbDataHeleper {
  6.  
  7. @Test(dataProvider = "dbDataMethod")
  8. public void testmethod1(Map<?, ?> param) {
  9. System.out.println(param.get("username") + "\t" + param.get("passWord") + "\t" + param.get("remark"));
  10. }
  11. }

运行效果:

  1. [TestNG] Running:
  2. C:\Users\Administrator\.IntelliJIdea2018.2\system\temp-testng-customsuite.xml
  3. rongrong 123456 3
  4. xiaoqiang 123654 4
  5. gates 112121 1
  6. gates 112121 2
  7.  
  8. ===============================================
  9. Default Suite
  10. Total tests run: 4, Failures: 0, Skips: 0
  11. ===============================================
  12.  
  13. Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
  14.  
  15. Process finished with exit code 0

java结合testng,利用mysql数据库做数据源的数据驱动实例的更多相关文章

  1. java结合testng,利用excel做数据源的数据驱动实例

    数据驱动部分,是自动化测试常用部分,也是参数化设计的重要环节,前面分享了,mysql.yaml做数据源,那么再来分享下excel做数据驱动 思路: 先用POI读取excel.解析读取数据,返回list ...

  2. java结合testng,利用yaml做数据源的数据驱动实例

    testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以yaml为例: 备注:@DataProvider的返回 ...

  3. java结合testng,利用txt做数据源的数据驱动实例

    import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.io.Buffe ...

  4. Java通过JDBC 进行MySQL数据库操作

    转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...

  5. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

  6. java用JDBC连接MySQL数据库的详细知识点

    想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...

  7. 【mysql】备份篇2:使用java程序定期备份mysql数据库

    承接备份篇1, 在备份篇1中,使用dat文件加+系统计划任务程序完成mysql定期备份任务 在这一篇,备份使用java程序定期备份mysql数据库. 下面代码和程序思想给出: package com. ...

  8. Java Web工程连接MySQL数据库及Tomcat服务器页面中文乱码

    Java Web工程连接MySQL数据库 一. 准备工作 1.下载连接MySQL数据库的JDBC (可以去官网下,也可以去百度云找) 2.将下载的jar文件复制到Tomcat的lib目录下 3.新建一 ...

  9. ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

    1.MySQL存储过程   1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if  while)等等 的sql语句   1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...

随机推荐

  1. 031、none和host网络的适用场景(2019-02-18 周一)

    参考https://www.cnblogs.com/CloudMan6/p/7053617.html   本节开始,会学习docker的几种原生网络,以及如何创建自定义网络.然后探究容器之间如何通信, ...

  2. gcc 编译 汇编 链接

    要想研究使用 gcc, gcc-multilib 这个包是一定要安装的, 它允许通过 -m32 和 -m64 选项来选择生成 32 位或者 64 的 ELF 文件. 我们知道程序的默认起点是 _sta ...

  3. jQuery漏洞

    1.使用jQuery.append().jQuery.html()方法时,如果其中内容包含<script>脚本而没有经过任何处理的话,会执行它. 2.版本低于1.7的jQuery过滤用户输 ...

  4. 【python小练】0010

    第 0010 题:使用 Python 生成类似于下图中的字母验证码图片 思路: 1. 随机生成字符串 2. 创建画布往上头写字符串 3. 干扰画面 code: # codeing: utf-8 fro ...

  5. 唯一约束(UNIQUE_KEY)

    唯一约束可以保证记录的唯一性 唯一约束的字段可以为空值(NULL) 每张数据表可以存在多个唯一约束(主键只有一个) mysql> CREATE TABLE tb7( -> id SMALL ...

  6. ubuntu安装matplotlib一些坑

    ubuntu16.04,python2.7 安装matplotlib, 1.在root权限下执行命令 pip install matplotlib==1.5.1 这里有个困扰我一个星期的问题,系统都被 ...

  7. mac 下node,yarn安装及版本切换

    node安装 https://nodejs.org/en/download/ 到官网下载指定版本 安装node的管理工具 sudo npm install -g n //安装n sudo n 8.9. ...

  8. steps/train_lda_mllt.sh

    LDA+MLLT指的是在计算MFCC后对特征进行的变换:首先对特征进行扩帧,使用LDA降维(默认降低到40),然后经过多次迭代轮数估计一个对角变换(又称为MLLT或CTC) .详见 http://ka ...

  9. vue项目使用element-ui的Tooltip 无效

    我之前要使用vue开发一个项目,使用到了element-UI的Tooltip 组件 <el-tooltip class="item" effect="dark&qu ...

  10. 使用C++ stringstream来进行数据类型转换

    参考链接: http://blog.csdn.net/tao_627/article/details/39000779