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

yizhihongxing

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命令行解析工具Argparse

    当你编写一个Python脚本时,它通常需要一些参数来提供上下文信息。例如,你可能需要指定文件路径,设置日志级别或指定输出格式。命令行参数是一种流行的方式来提供这些信息,但如果手工分析参数,则可能会变得非常棘手。因此,Python提供了Argparse模块来帮助我们通过解析命令行参数更加容易地获得所需信息。 Argparse简介 Argparse模块是Pyth…

    python 2023年5月18日
    00
  • python浅谈一下线程间通信之队列

    Python浅谈一下线程间通信之队列 在Python多线程编程中,线程间通信是一个非常重要的概念,通过线程间通信可以实现数据共享、协同工作等功能。队列是线程间通信的常用方式之一。 队列的作用 队列是一种数据结构,用于在多线程编程中传递信息。队列提供了一个先进先出(FIFO)的缓冲区,允许一个线程写数据,一个线程读数据。 Python队列的实现 Python标…

    python 2023年6月6日
    00
  • python实现灰度图

    下面是 python 实现灰度图的完整攻略。 什么是灰度图 灰度图是一种黑白图像,其中所有像素点只有一个亮度值,没有颜色信息。亮度值通常在 0 到 255 之间取值,其中 0 表示黑色,255 表示白色。 实现灰度图的方法 方法一:使用 PIL 库 PIL(Python Imaging Library)是 Python 中常用的图像处理库,可以用于图像读取、…

    python 2023年5月18日
    00
  • Python函数基础(定义函数、函数参数、匿名函数)

    下面是 Python 函数基础的完整攻略。 1. 定义函数 定义函数的语法: def function_name(parameters): """函数说明文档""" # 函数体 return [expression] 其中,function_name 为函数的名称,parameters 为函数的参数…

    python 2023年5月14日
    00
  • 从 Python 中的输入创建元组

    【问题标题】:Create a tuple from an input in Python从 Python 中的输入创建元组 【发布时间】:2023-04-06 07:43:01 【问题描述】: 这是我的例子: >>> a=input (‘some text : ‘) # value entered is 1,1 >>> …

    Python开发 2023年4月7日
    00
  • AUC计算方法与Python实现代码

    AUC计算方法与Python实现代码 AUC(Area Under Curve)是一种常用的分类模型评价指标,它可以用于评估分类模型的性能。在本文中我们将详细介绍AUC的计算方法,并提供两个示例,以说明如何使用Python实现AUC的计算。 AUC计算方法 AUC是ROC曲线的面积,ROC曲线是一种用于评估二分类模型性能的曲线。ROC曲的横轴是假正率(Fal…

    python 2023年5月14日
    00
  • Python opencv应用实现图片切分操作示例

    下面是Python Opencv应用实现图片切分操作的完整攻略: 1. 概述 在图像处理的领域中,图像切分是非常基础而重要的操作,它可以将一张大图片切分成小图片,方便进行后续的处理。本文将介绍如何使用Python Opencv实现图像切分操作。 2. 准备工作 在使用Python Opencv实现图像切分操作之前,需要安装以下工具和库: Python 3.x…

    python 2023年5月19日
    00
  • python实现图片压缩代码实例

    下面是“python实现图片压缩代码实例”的完整攻略。 介绍 在网页设计和开发中,图片是不可或缺的一部分,但过大的图片会让网页加载变得缓慢,影响用户体验。因此,我们需要将图片进行压缩,以减小图片的大小,加快网页加载速度。 本攻略将介绍如何使用Python实现图片压缩,以及几个实用的代码示例。 环境准备 在开始之前,我们需要先安装Python和Pillow库。…

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