一数据驱动测试的含义:

在百度百科上的解释是:
数据驱动测试,即黑盒测试(Black-box Testing),又称为功能测试,是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,
不需测试软件产品的内部结构和处理过程。数据驱动测试注重于测试软件的功能性需求,也即数据驱动测试使软件工程师派生出执行程序所有功能需求的输入条件。 在微软网站上的解释是: 数据驱动的单元测试是为数据源中的每一行重复运行的一种单元测试。
数据驱动的单元测试的常用情况是使用多个输入值测试 API。不是编写调用 API 的多个单元测试(每个单元测试均具有一组新的输入),也不是在单元测试中创建
一个数组并使用循环代码,而是可以编写执行 API 的单个单元测试方法。然后可以从数据库表的行中进行数据检索以便传递给该测试方法的连续调用。可以使用此
技术测试由不同用户(每个用户具有不同角色)使用的应用程序。对于每个用户,数据源中的一行将根据角色指示预期响应。然后,该测试将通过针对每个用户运行
功能,对该应用程序进行测试,并验证产生的响应是否与预期响应一致。 在测试工作中,针对某一API接口,或者某一个用户界面的输入框,需要设计大量相关的用例,每一个用例包含实际输入的各种可能的数据。通常的做法是,将测试
数据存放到一个数据文件里,然后从数据文件读取,在脚本中循环输入测试数据,并对结果进行验证。而该实现方案,按照微软网站的解释,并不属于数据驱动测试。
那么什么是数据驱动测试呢?接下来我们一起看一个实例,便一清二楚了。 数据驱动测试的环境准备: 测试框架的选择:在这里选择的是Python开发语言,测试框架使用Unittest和DDT相结合的方式。
在python中, unittest测试框架如下: import unittest class MyTestCase(unittest.TestCase): def setUp(self):
'''
testcase init ...
:return:
'''
print('setup') def test_sth(self):
'''
must use test_***
:return:
'''
print('test something') def tearDown(self):
'''
testcase release ...
:return:
'''
print('teardown') if __name__ == '__main__':
unittest.main()
  Unittest框架包含一个test Fixture,test Fixture由三部分组成,setup,testcase和teardown。Setup过程,是测试用例执行前的初始化过程,
teardown过程,是在测试用例执行后,对资源进行释放与回收的过程;而testcase是具体的测试用例。 引入ddt框架,需要从ddt官网安装ddt的模块。安装ddt模块后,使用测试驱动框架后,只需要以下几行代码:
   import unittest
import ddt @ddt.ddt
class MyTestCase(unittest.TestCase): def setUp(self):
'''
testcase init ...
:return:
'''
print('setup') @ddt.data(['t1' ,'r1'] ,
['t2' , 'r2'])
@ddt.unpack
def test_sth(self , testdata , expectresult):
'''
must use test_***
:return:
'''
print('test something')
print(colored('%s - %s'%(testdata , expectresult), 'blue')) def tearDown(self):
'''
testcase release ...
:return:
'''
print('teardown')
print() if __name__ == '__main__':
unittest.main()
   首先在头部导入ddt;其次在测试类前声明使用ddt(@ddt.ddt); 第三步,在测试方法前,使用@ddt.data和@unpack进行修饰。而测试数据,在data中进行填加,
该demo,有两条测试数据,每条测数据有两个字段,第一个是测试数据,第二个是期望的测试结果。从代码中,可以看到,我们在测试用例的实体中,并未使用循环。那么执行后
,是什么样的效果呢? setup
test something
t1 - r1
teardown .setup
test something
t2 - r2
teardown .
----------------------------------------------------------------------
Ran tests in .000s OK
   可以看到,测试结果有两条测试用例被执行,而非一条测试用例。也就是测试框架,自动将测试数据分在两条测试用例里来执行。通过调试的print语句,我们也可以看到
,两条用例执行时的输出情况。 数据驱动测试的实例: 上述,我们对数据驱动的使用进行了介绍,接下来,我们一起来看一下在工作中是如何应用的。目前数据驱动,被用在了搜索app的自动化测试执行过程中。应用的场景是,
测试时需要在app里打开不同的垂搜,并验证对应的垂搜页面被正常打开,此时需要传入两个字段,一是垂搜的名称,二是打开垂搜后,页面里的特殊标识,在此,我们选
择的是HTML5页面中的xpath。具体的代码示例如下: 在未使用数据驱动框架之前,测试这个场景时,每个垂搜单独实现了一条测试用例,这里面有18个垂搜,因此之前对应的是18条测试用例,可见重复的代码量很高。在使
用数据驱动框架后,只需要实现一条测试用例就可以满足需求,同时需要编写的代码量很低。关于数据驱动,网上也有很多其他的解决方案,例如将测试数据写到excel中,
再从excel中读取数据。而这一过程,需要编写一定的代码,使用框架后,完全省去了这一过程。 import unittest
from ddt import ddt, data, unpack
import csv
from pprint import pprint def add(a, b):
print('*'* ,a, b)
c = a + b
print('c' ,c)
return c def addstr(a, b):
c = a + b
return c def get_csv_data():
value_rows = []
with open('./mfile.csv') as f:
f_csv = csv.reader(f) # 忽略表头
next(f_csv)
for r in f_csv:
value_rows.append([ int(i) for i in r])
pprint(value_rows)
return value_rows def write_csv_data():
pass @ddt
class Test(unittest.TestCase):
@data((, , ), (, , ))
@unpack
def test_addnum(self, a, b, expected_value):
self.assertEqual(add(a, b), expected_value) @data(*get_csv_data())
@unpack
def test_addstr(self, a, b, expected_value):
self.assertEqual(add(a, b), expected_value) if __name__ == "__main__":
suite = unittest.TestLoader().loadTestsFromTestCase(Test)
unittest.TextTestRunner(verbosity=).run(suite)
     使用数据驱动框架的意义:
- 代码复用率高。同一测试逻辑编写一次,可以被多条测试数据复用,提高了测试代码的复用率,同时可以提高测试脚本的编写效率。
- 异常排查效率高。测试框架依据测试数据,每条数据生成一条测试用例,用例执行过程相互隔离,在其中一条失败的情况下,不会影响其他的测试用例。
- 代码的可维护性高。清晰的测试框架,利于其他测试工程师阅读,提高了代码的可维护性。

Python 数据驱动 unittest + ddt的更多相关文章

  1. Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构

    1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ...

  2. 【webdriver自动化】Python数据驱动工具DDT

    一.Python数据驱动工具ddt 1.  安装 ddt pip install ddt DDT是 “Data-Driven Tests”的缩写 资料:http://ddt.readthedocs.i ...

  3. python 数据驱动(ddt)

    DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),file_data(可以从json或者yaml中获取测试数据) 实例代码: import ddt import unittest ...

  4. python自动化测试中的数据驱动unittest+ddt

    ddt是一个unittest的插件,用来实现uniitest的数据驱动 本文以python自动化测试中的数据驱动为原则,记录学习ddt的过程 一.数据的传递规则

  5. python - 数据驱动测试 - ddt

    # -*- coding:utf-8 -*- ''' @project: jiaxy @author: Jimmy @file: study_ddt.py @ide: PyCharm Communit ...

  6. 接口自动化 之 unittest+ddt+openpyxl 综合

    前面写过python 之 unittest初探 和 python 之 unittest+ddt 两篇文章.在之前的文章中,写过可以再次优化.今天写第三篇的目的,就是在原有基础上,基于 openpyxl ...

  7. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

    1.环境准备: python3.6 requests xlrd openpyxl HTMLTestRunner_api 2.目前实现的功能: 封装requests请求方法 在excel填写接口请求参数 ...

  8. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(二)

    可以参考 python+requests接口自动化完整项目设计源码(一)https://www.cnblogs.com/111testing/p/9612671.html 原文地址https://ww ...

  9. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(已弃用)

    前言 1.环境准备: python3.6 requests xlrd openpyxl HTMLTestRunner_api 2.目前实现的功能: 封装requests请求方法 在excel填写接口请 ...

随机推荐

  1. web常见测试点总结

    上周五小组内对Web的常见测试点进行了交流学习,虽然这些信息网上一搜都一大把,但整理的过程中自己脑袋瓜里又重新回顾了一遍,大家都很认真的在学习,互相补充着,现总结如下,欢迎同行留言 一.新增.修改 用 ...

  2. sqoop导出数据

    export是HDFS里的文件导出到RDBMS的工具,不能从hive.hbase导出数据,且HDFS文件只能是文本格式.如果要把hive表数据导出到RDBMS,可以先把hive表通过查询写入到一个临时 ...

  3. Maven导入jar包

    可在该网址查找:http://search.maven.org/#search%7Cga%7C1%7Cjunit

  4. shell中获取本机ip地址

    shell中获取本机ip地址 方法一: /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr ...

  5. PHP速学

    基本代码 <?php echo "Hello world";?> 变量定义 <?php $a=true; $bool_value=true; $integer_v ...

  6. My first Python program(附增加清屏方法)

    #TempConvert.py TempStr = input("请输入带有符号的温度值:") if TempStr[-1] in ['F', 'f']: C = (eval(Te ...

  7. Unity 滚轮实现UGUI ScrollView的缩放

    本文原创,转载请注明出处http://www.cnblogs.com/AdvancePikachu/p/7908754.html 前段时间在做一个类似AnimationCurve的可视化编辑器,其中在 ...

  8. 添加、修改、删除XML节点代码例子

    version="1.0" encoding="gb2312"?> . <bookstore> . <book genre=" ...

  9. GDI+图形图像处理技术——GDIPlus绘图基础

    GDI+概述 GDI在windows中定义为Graphis Device interface,及图形设备接口,是Windows API(application Programming Interfac ...

  10. c#获取目录2

    // 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径. System.Diagnostics.Process.G ...