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

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

思路:

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

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

DbDataHeleper.java

import org.testng.annotations.DataProvider;

import java.sql.*;
import java.util.*; /**
* 数据库操作工具
*
* @author longrong.lang
*/
public class DbDataHeleper { static Connection conn = null; public static String driverClassName = "com.mysql.jdbc.Driver";
public static String url = "jdbc:mysql://127.0.0.1:3306/demo";
public static String username = "root";
public static String password = "root"; /**
* 执行sql
*
* @param jdbcUrl 数据库配置连接
* @param sql sql语句
* @return
*/
public static List<Map<String, String>> getDataList(String jdbcUrl, String sql) {
List<Map<String, String>> paramList = new ArrayList<Map<String, String>>();
Map<String, String> param = new HashMap<>();
Statement stmt = null;
try {
// 注册 JDBC 驱动
Class.forName(driverClassName);
// 打开链接
conn = DriverManager.getConnection(jdbcUrl, username, password);
// 执行查询
stmt = conn.createStatement();
ResultSet rs = null;
rs = stmt.executeQuery(sql);
String columns[] = {"username", "passWord", "remark"};
// 展开结果集数据库
while (rs.next()) {
Map<String, String> map = new LinkedHashMap<String, String>();
for (int i = 0; i < columns.length; i++) {
String cellData = rs.getString(columns[i]);
map.put(columns[i], cellData);
}
paramList.add(map);
}
// 完成后关闭
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
// 处理 JDBC 错误
System.out.println("处理 JDBC 错误!");
} catch (Exception e) {
// 处理 Class.forName 错误
System.out.println("处理 Class.forName 错误");
} finally {
// 关闭资源
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
return paramList;
} @DataProvider
public Object[][] dbDataMethod() {
String sql = "SELECT * FROM `account`;";
List<Map<String, String>> result = getDataList(url, sql);
Object[][] files = new Object[result.size()][];
for (int i = 0; i < result.size(); i++) {
files[i] = new Object[]{result.get(i)};
}
return files;
}
}

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

TestDbData.java

import org.testng.annotations.Test;

import java.util.Map;

public class TestDbData extends DbDataHeleper {

    @Test(dataProvider = "dbDataMethod")
public void testmethod1(Map<?, ?> param) {
System.out.println(param.get("username") + "\t" + param.get("passWord") + "\t" + param.get("remark"));
}
}

运行效果:

[TestNG] Running:
C:\Users\Administrator\.IntelliJIdea2018.2\system\temp-testng-customsuite.xml
rongrong 123456 3
xiaoqiang 123654 4
gates 112121 1
gates 112121 2 ===============================================
Default Suite
Total tests run: 4, Failures: 0, Skips: 0
=============================================== Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 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. iOS下如何阻止橡皮筋效果

    $(document).ready(function(){ var stopScrolling = function(event) { event.preventDefault(); } docume ...

  2. vue中slot插槽

    插槽就是vue实现的一套内容分发的API,将插槽元素作为承载分发内容的出口. 也就是说在组件模板中默认占用一个位置,当使用组件标签时候,组件标签的内容就会自动替换掉内容 slot中可以设置一些默认的内 ...

  3. Mark Text - 下一代所见即所得的Markdown编辑器

    Mark Text 所输及所见,摒弃了众多 markdown 编辑器左边写作右边预览的写作方式,巧妙的将编辑和预览融为一体.snabbdom 作为 Mark Text 的渲染引擎,保证了极速渲染编辑页 ...

  4. 使用js请求Servlet时的路径

    项目结构如下: 全是web的html页面 js部分重要代码: function ajaxValidate() { var flag=false; $.ajax({ "url":&q ...

  5. [译]ES6特性

    原文 作用域 使用let/const替代var. var有什么错? var说明的变量会产生作用于提升的概念. ES5: var x = 'outer'; function test(inner) { ...

  6. spring data jpa 关键字 命名

    http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#repository-query-keywords

  7. pyqt5-定时器

    定时器的操作方法有两种: 方法一:利用每个对象包含的timerEvent函数 方法二:利用定时器模块    需要  from PyQt5.QtCore import QTimer 方法一:利用每个对象 ...

  8. SQLQueryStress

    工具介绍及使用链接:http://www.cnblogs.com/lyhabc/p/3187922.html 工具下载链接:http://files.cnblogs.com/files/coce/sq ...

  9. Django REST framework 简介

    需求 REST framework需要如下: Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6) Django (1.10, 1.11, 2.0) 下面的文件包可以选择性安装 ...

  10. 计算价格, java中浮点数精度丢失的解决方案

    计算价格, java中浮点数精度丢失的解决方案