首页 技术 正文
技术 2022年11月23日
0 收藏 993 点赞 2,481 浏览 2280 个字

目录


1、DDT简介

Data-Driven Tests(DDT)即数据驱动测试。它允许您通过不同的测试数据来运行同一个测试用例,使它作为多个测试用例出现。其官方文档给出的定义如下:

DDT (Data-Driven Tests) allows you to multiply one test case by running it with different test data, and make it appear as multiple test cases.

DDT的经典使用场景之一是:测试用例的代码不变,只有测试数据在变化。DDT作为第三方库,使用前需要先安装:

sudo  pip3 install ddt

2、data装饰器

@data()是一个装饰器,它包含了您想提供给测试方法的值,个数和测试方法参数一样多。使用方法:在测试类(继承于unittest.TestCase)上面设置装饰器@ddt,在测试方法上设置装饰器@data()

[示例1] @data

#coding:utf-8
import unittest
#从ddt模块导入装饰器ddt,file_data,unpack,data
from ddt import ddt,file_data,unpack,data@ddt
#定义测试类BoolTest
class BoolTest(unittest.TestCase):
@data(1,"hello",3>2)
def test_true_001(self,value):
self.assertTrue(value)
@data("",1>2,{})
def test_false_002(self,value):
self.assertFalse(value)
if __name__ == "__main__":
unittest.main()

示例1运行结果如下:

我们只编写了两个测试方法,但是通过6组不同的测试数据,最终可以达到运行6个测试用例的目的。这就是数据驱动测试的强大之处。再来看一个多个输入值的示例。

@unpack 自动解压元组,列表到多个参数;字典到多个关键字参数。

3、unpack装饰器

[示例2] unpack dict

#coding:utf-8
import unittest
#从ddt模块导入装饰器ddt,file_data,unpack,data
from ddt import ddt,file_data,unpack,data
#测试取绝对值函数abs()
@ddt
class AbsTest(unittest.TestCase):
@data({"val":1,"res":1},
{"val":0,"res":0},
{"val":-1,"res":1})
@unpack
def test_abs(self,val,res):
self.assertEqual(abs(val),res)if __name__ == "__main__":
unittest.main()

示例2运行结果:

[示例3] unpack list

#测试取绝对值函数abs()
@ddt
class AbsTest(unittest.TestCase):
# @data({"val":1,"res":1},
# {"val":0,"res":0},
# {"val":-1,"res":1})
@data([-1,1],[0,0],[1,1])
@unpack
def test_abs(self,val,res):
self.assertEqual(abs(val),res)if __name__ == "__main__":
unittest.main()

示例3运行结果同示例2。

4、file_data装饰器

ddt支持从文件中加载数据,@file_data()装饰器会从json或yaml中加载数据。只有以“.yml” 和 “.yaml” 结尾的文件被加载为Yaml文件。所有其他格式文件都作为json文件加载,比如txt。修改示例3。

abs_data.json文件位于测试用例同级目录,内容如下:

{
"case1":{
"val":1,
"res":1
},
"case2":{
"val":-1,
"res":1
},
"case3":{
"val":0,
"res":0
}}

[示例4] load json

在测试方法test_abs上设置@file_data装饰器:

#测试取绝对值函数abs()
@ddt
class AbsTest(unittest.TestCase):
# @data({"val":1,"res":1},
# {"val":0,"res":0},
# {"val":-1,"res":1})
@file_data("./abs_data.json")
def test_abs(self,val,res):
self.assertEqual(abs(val),res)if __name__ == "__main__":
unittest.main()

示例4运行结果:

5、总结

使用数据驱动思想编写测试用例有以下优势:

  • 测试代码和测试数据分开,比较灵活,易维护。
  • 在测试代码相对健壮的情况下,新增用例只需新增测试数据即可,开发难度小。
  • 避免编写大量相同的测试代码,代码复用率高。

劣势是对测试代码的质量要求相对较高,试想如果因为测试数据的变化而需要频繁改动测试方法,那也是一件很痛苦的事情哦。关于测试数据驱动测试,有的玩法是通过从Excel加载测试数据,这一定程度上来讲也是可行的,但是碰到复杂的业务场景和测试数据比较多的情况,非常容易翻车的哦。

(完)

点击这里返回本篇目录

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,966
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,487
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,332
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,115
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,748
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,783