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技术站