《手把手教你》系列基础篇(七十四)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 上篇(详解教程)

1.简介

  上一篇文章中宏哥简单的讲解了一下通过xml文件传递参数,这一篇宏哥讲解通过通过@DataProvider传递参数,也就是我们常说的数据驱动测试。如何利用TestNG实现DDT(数据驱动测试 Data Driver Test),什么是数据驱动测试呢?且听宏哥娓娓道来。

2.什么是数据驱动测试?

数据驱动测试是指使用相同的测试用例,但是每次都使用不同的测试数据,进行的一种测试。这些测试数据,通常来自于外部,如.csv文件,.xsl文件,文本文件,或者来自数据库。数据驱动测试是一种最常见的自动化测试技术,用于在许多不同的输入中验证应用程序。从它的定义来看,就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。说的直白些,就是参数化的应用。

3.为什么需要数据驱动测试?

数据驱动测试是一种在软件测试过程中使用的方法,用于描述直接测试的输入、可验证输出的条件表,以及测试环境的设置还有控制编码的过程。

4.数据驱动测试的好处包括:

1.就算应用程序开发还在进行当中,测试者仍然可以进行脚本的编写工作。

2.减少了冗余和不必要的测试脚本。

3.用较少的代码生成测试脚本。

4.所有信息,如输入、输出和预期结果,都以适当的文本记录形式进行存储。

5.为应用程序的维护提供利了灵活性条件。

6.如果功能发生了变化,只需要调整特定的函数脚本就足够了。

5.项目实战1

1.一个简单的@DataProvider示例,传递一个int参数。

5.1代码设计

5.2参考代码
package lessons;

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

/**
 * @author 北京-宏哥
 * 
 * @公众号:北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
 * 
 * 《手把手教你》系列基础篇(七十四)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT(详解教程)
 *
 * 2022年2月28日
 */
public class TestDataProvider {

    @Test(dataProvider = "provideNumbers")
    public void test(int number, int expected) {
        Assert.assertEquals(number + 10, expected);
    }

    @DataProvider(name = "provideNumbers")
    public Object[][] provideData() {

        return new Object[][] { { 10, 20 }, { 100, 110 }, { 200, 210 } };
    }

}
5.3运行代码

1.运行代码,右键Run AS->TestNG Suite,控制台输出,如下图所示:

6.项目实战2

1.@DataProvider支持传递一个对象参数。 下面的例子显示了如何传递一个Map对象作为参数。

6.1代码设计

1.创建一个名称为:db.properties 的文件,放在项目src目录下, 如下图所示 :

2.创建一个名称为:TestDDT.java 的文件, 其代码如下图所示 :

6.2参考代码
package library;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

/**
 * @author 北京-宏哥
 * 
 * @公众号:北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
 * 
 * 《手把手教你》系列基础篇(七十四)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 上篇(详解教程)
 *
 * 2022年2月21日
 */

public class TestDDT {

    @Test(dataProvider = "dbconfig")
    public void testConnection(Map<String, String> map) {

        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("[Key] : " + entry.getKey() + " [Value] : " + entry.getValue());
        }

    }

    @DataProvider(name = "dbconfig")
    public Object[][] provideDbConfig() {
        Map<String, String> map = readDbConfig();
        return new Object[][] { { map } };
    }

    public Map<String, String> readDbConfig() {

        Properties prop = new Properties();
        InputStream input = null;
        Map<String, String> map = new HashMap<String, String>();

        try {
            input = getClass().getClassLoader().getResourceAsStream("db.properties");

            prop.load(input);

            map.put("jdbc.driver", prop.getProperty("jdbc.driver"));
            map.put("jdbc.url", prop.getProperty("jdbc.url"));
            map.put("jdbc.username", prop.getProperty("jdbc.username"));
            map.put("jdbc.password", prop.getProperty("jdbc.password"));

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return map;

    }

}
6.3运行代码

1.运行代码,右键Run AS->TestNG Suite,控制台输出,如下图所示:

7.小结

  好了,时间也不早了,今天就分享和讲解到这里,希望对您有所帮助,感谢您耐心地阅读!

 每天学习一点,今后必成大神-

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问)或者微信搜索: 北京宏哥  公众号提前解锁更多干货。

Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值