python 基于DDT实现数据驱动测试

python基于DDT实现数据驱动测试

数据驱动测试是指用数据来推动测试执行,高效地测试大量不同的数据组合和多样化场景。在测试中,我们需要构建复杂数据结构,去测试不同条件下的代码正确性或者服务功能是否正确。而这就需要针对不同情况运行测试,数据驱动测试的方式,就可以有效地解决这些问题。

Python是一种简单易学但十分强大的编程语言,因其简洁优雅、易读易写、开发效率高而变得越来越受欢迎。DDT(Data-Driven-Testing)是数据驱动测试的缩写,它帮助我们实现了这种数据驱动思想。接下来,我们将详细讲解,如何基于DDT实现数据驱动测试。

环境搭建

在介绍如何基于DDT实现数据驱动测试之前,我们要先搭建好测试环境,需要系统安装以下工具:

  • Python3,建议使用Python3.7版本
  • PyCharm,用于代码编写

安装依赖

数据驱动测试的核心工具是DDT,我们需要安装一些依赖:

pip3 install ddt
pip3 install unittest

数据驱动测试实现

本文的数据驱动测试实现,我们将以计算器功能测试为例,分别测试加减乘除。假设我们有以下测试用例:

a b operation expected_result
1 1 + 2
2 1 - 1
3 2 * 6
8 2 / 4

我们可以将这些测试数据,放在一个Excel或CSV文件中,并用Python将其读入,从而读取并执行测试。

代码实现

下面是一个示例测试脚本,用于计算器功能测试。我们使用了unittest模块和DDT模块,实现了从CSV文件中读取测试数据,以及每个测试数据的执行。

import csv
import unittest
from ddt import ddt, data, unpack

def get_data(file_name):
    rows = []
    data_file = open(file_name, "rt")
    reader = csv.reader(data_file)
    next(reader, None)
    for row in reader:
        rows.append(row)
    return rows

@ddt
class TestCalculator(unittest.TestCase):

    @data(*get_data("test_data.csv"))
    @unpack
    def test_calculate(self, a, b, operation, expected_result):
        a = int(a)
        b = int(b)
        if operation == '+':
            result = a + b
        elif operation == '-':
            result = a - b
        elif operation == '*':
            result = a * b
        elif operation == '/':
            result = a / b
        self.assertEqual(result, int(expected_result))

if __name__ == '__main__':
    unittest.main()

示例说明

示例一

测试数据文件test_data.csv内容如下:

a,b,operation,expected_result
1,1,+,2
2,1,-,1
3,2,*,6
8,2,/,4

执行测试脚本后,我们可以看到测试结果:

..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

测试通过了。

示例二

我们将测试文件test_data.csv中的第一行,修改为:

a,b,operation,expected_result
1,1,+,3
2,1,-,0
3,2,*,7
8,2,/,3

执行测试脚本后,我们可以看到测试结果:

F.FF
======================================================================
FAIL: test_calculate (test_ddt.TestCalculator)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/lemony/PycharmProjects/test_ddt/test_ddt.py", line 25, in test_calculate
    self.assertEqual(result, int(expected_result))
AssertionError: 2 != 3

======================================================================
FAIL: test_calculate (test_ddt.TestCalculator)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/lemony/PycharmProjects/test_ddt/test_ddt.py", line 25, in test_calculate
    self.assertEqual(result, int(expected_result))
AssertionError: 1 != 0

======================================================================
FAIL: test_calculate (test_ddt.TestCalculator)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/lemony/PycharmProjects/test_ddt/test_ddt.py", line 25, in test_calculate
    self.assertEqual(result, int(expected_result))
AssertionError: 6 != 7

======================================================================
FAIL: test_calculate (test_ddt.TestCalculator)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/lemony/PycharmProjects/test_ddt/test_ddt.py", line 25, in test_calculate
    self.assertEqual(result, int(expected_result))
AssertionError: 4 != 3

----------------------------------------------------------------------
Ran 4 tests in 0.001s

FAILED (failures=4)

测试结果中,我们可以看到计算器功能测试有4个失败。这是因为测试数据文件中期望结果与实际计算结果不一致。

结语

通过上述示例,我们了解了数据驱动测试的思路和实现方式。DDT工具让数据驱动测试变得更加高效,能够通过简单的修改数据文件,轻松地实现大规模的测试。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 基于DDT实现数据驱动测试 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python实时监控网站浏览记录实现过程详解

    Python实时监控网站浏览记录实现过程详解 监控网站浏览记录是一种通常被用来了解用户行为和网站使用情况的技术,它可以给网站的管理者提供方便的数据统计。Python是一种非常适合实现网站浏览记录监控的编程语言。在这篇文章中,我们将详细讲解如何使用Python实现网站浏览记录实时监控,并提供两个代码示例。 如何实现网站浏览记录的监控 要实现网站浏览记录监控的功…

    python 2023年5月20日
    00
  • 如何从python中的递归返回标志[重复]

    【问题标题】:How to return a flag from recursion in python [duplicate]如何从python中的递归返回标志[重复] 【发布时间】:2023-04-02 07:52:01 【问题描述】: 如果我满足代码中的 if 条件,我想将标志返回为 TRUE,但我无法做到。 class createnode: def…

    Python开发 2023年4月8日
    00
  • 如何使用Python实现数据库中数据的排序?

    以下是使用Python实现数据库中数据排序的完整攻略。 数据库中数据排序简介 在数据库中,数据排序是指按照指定的字段对数据进行排序。在Python中,可以使用pymysql库连接到MySQL数据库,并使用ORDER BY子句实现数据排序。 步骤1:连接到数据库 在Python中,可以使用pymysql库连接到MySQL数据库。以下是连接到MySQL数据库的基…

    python 2023年5月12日
    00
  • Python中http请求方法库汇总

    以下是关于“Python 中 HTTP 请求方法库汇总”的完整攻略: Python 中 HTTP 请求方法库汇总 在 Python 中,有很多 HTTP 请求方法库可供选择。这些库可以帮助我们发送 HTTP 请求,获取 HTTP 响应。以下是 Python 中常用的 HTTP 请求方法库的详细介绍。 requests requests 是 Python 中最…

    python 2023年5月15日
    00
  • python使用open函数对文件进行处理详解

    针对“python使用open函数对文件进行处理”的攻略,我给你详细解释一下。 什么是open函数 首先来解释一下,Python中的open()函数用于打开并读取文件。它通常与以下函数一起使用,例如read()、write()、seek()等,这些函数对文件进行处理并执行所需的操作。 open()函数可以传入两个参数:文件名和mode。(mode是打开文件的…

    python 2023年6月5日
    00
  • python实现class对象转换成json/字典的方法

    想要将Python中的class对象转换成JSON或字典格式,可以使用Python内置的json模块来实现。 具体步骤如下: 在Python中导入json模块以及定义需要转换的class类。 import json class MyClass: def __init__(self, name, age): self.name = name self.age …

    python 2023年5月13日
    00
  • Python 列表(List)的底层实现原理分析

    Python列表(List)的底层实现原理分析 在Python中,列表(List)是一种常用的数据类型,它可以存储多个元素,而且列表的长度是动的,可以随时添加或删除素。本文将详细讲解Python列表的底层实现原理,包括列表的内存分配、扩容机制、引和切片等。 列表的内存分配 在Python中,列表是一种动态数组,它的内存分配是在创建列表进行的。当创建一个空列表…

    python 2023年5月13日
    00
  • 浅谈python中的占位符

    下面我将详细讲解“浅谈python中的占位符”。 什么是占位符? 在编程中,占位符是一个特殊的标记。例如,在python中,我们可以使用占位符将变量值嵌入到字符串中。在使用占位符的情况下,我们可以简单地用变量来代替繁琐的字符串拼接操作。 常用的占位符 在python中常用的占位符包括: %d:表示整数。 %f:表示浮点数。 %s:表示字符串。 %x:表示十六…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部