java结合testng,利用mysql数据库做数据源的数据驱动实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java结合testng,利用mysql数据库做数据源的数据驱动实例相关的知识,希望对你有一定的参考价值。

java结合testng,利用mysql数据库做数据源的数据驱动实例

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

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

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

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

DbDataHeleper.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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") + "	" + param.get("passWord") + "	" + param.get("remark"));
    }
}

运行效果:


[TestNG] Running:
  C:UsersAdministrator.IntelliJIdea2018.2system	emp-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

EOF

本文作者:久曲建的测试窝
本文链接:https://www.cnblogs.com/longronglang/p/9971740.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
优秀不够,你是否无可替代

软件测试交流QQ群:721256703,期待你的加入!!

欢迎关注我的微信公众号:软件测试君
技术图片

以上是关于java结合testng,利用mysql数据库做数据源的数据驱动实例的主要内容,如果未能解决你的问题,请参考以下文章

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

java结合testng,利用XML做数据源的数据驱动示例

Selenium2(java)TestNG的使用 七

利用 TestNG 并行执行用例

TestNG

测试框架-TestNG-结合SeleniumAppiumOkHttpHttpClient的简单示例