unittest测试框架之DDT数据驱动

ddt的使用

DDT数据驱动

DDT:Data Driver Test(数据驱动测试)

数据驱动思想:数据和用例进行分离,通过外部数据去生成测试用例

安装

pip install ddt

修改ddt源码(是为了在生成的测试报告中显示每条用例所对应的标题title)

ddt文件中的ddt()方法

如果数据是用对象来保存的,就添加test_data_docstring = v.title

如果数据使用字典来保存的,就添加test_data_docstring = v["title"]

修改后生成的测试报告就能把title列显示到测试报告中

注意:title要是Excel表中的列名

def ddt(cls):

for name, func in list(cls.__dict__.items()):

if hasattr(func, DATA_ATTR):

for i, v in enumerate(getattr(func, DATA_ATTR)):

test_name = mk_test_name(name, getattr(v, "__name__", v), i)

# test_data_docstring = _get_test_data_docstring(func, v) # 原来的

# test_data_docstring = v.title # 数据使用对象来保存,改成这样

test_data_docstring = v["title"] # 数据使用字典来保存,改成这样

if hasattr(func, UNPACK_ATTR):...

else:

add_test(cls, test_name, test_data_docstring, func, v)

delattr(cls, name)

elif hasattr(func, FILE_ATTR):...

return cls

在测试类中使用ddt数据驱动获取数据(这时一个测试用例类只需要一个测试方法就可以)

先准备一个简单的登陆功能函数

def login(name=None, pwd=None):

if name and pwd:

if name == "desire" and pwd == "123456":

return {"code": 0, "msg": "登陆成功"}

else:

return {"code": 1, "msg": "账号密码错误"}

else:

return {"code": 1001, "msg": "不能有空值"}

准备excel测试用例表格

导入ddt模块

from ddt import ddt, data

读取excel表格ReadExcel

@ddt

class LoginTestCase(unittest.TestCase):

# DATA_DIR:测试用例存放的路径,用os模块进行拼接excel用例表格的路径

excel_path = os.path.join(DATA_DIR, 'cases.xlsx')

login = ReadExcel(excel_path, "login")

# 读取数据(字典形式)

login_datas = login.read_data_dict()

# 读取数据(类的形式)

# login_datas = login.read_data_obj()

@data()里面传的参数要进行拆包,把每次的数据传到方法里case参数

@data(*login_datas)

def test_login(self, case):

pass

第一步:准备用例数据

①:字典形式取值(使用时需要修改ddt源文件为字典形式)

# 1.参数

login_data = eval(case["data"])

# 2.预期结果

expected = eval(case["expected"])

# 3.用例序号

case_id = case["case_id"]

②:类形式取值(使用时需要修改ddt源文件为类形式)

# 1.参数

login_data = eval(case.data)

# 2.预期结果

expected = eval(case.expected)

# 3.用例序号

case_id = case.case_id

第二步:执行功能函数,获取实际结果

result = login(*login_data)

第三步:通过断言比对预期结果和实际结果

try:

self.assertEqual(expected, result)

except AssertionError as a:

# 把用例未通过结果写入excel中(调用[ReadExcel](https://www.cnblogs.com/desireyang/p/12059916.html)类中的写入方法)

self.login.write_data(row=case_id + 1, column=5, value="用例未通过")

raise a

else:

self.login.write_data(row=case_id + 1, column=5, value="用例通过")

直接可以运行测试用例类,会把自动化测试结果写入到excel中

原文:https://www.cnblogs.com/desireyang/p/12091154.html

python数据驱动读取用例_Python3-unittest测试框架之DDT数据驱动相关推荐

  1. 基于Python的接口自动化unittest测试框架和ddt数据驱动详解

    引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...

  2. python数据驱动读取用例_Python Selenium 之数据驱动测试

    数据驱动模式的测试好处相比普通模式的测试就显而易见了吧!使用数据驱动的模式,可以根据业务分解测试数据,只需定义变量,使用外部或者自定义的数据使其参数化,从而避免了使用之前测试脚本中固定的数据.可以将测 ...

  3. 使用python构造大量测试数据_python实例编写(6)--引入unittest测试框架,构造测试集批量测试(以微信统一管理平台为例)...

    ---恢复内容开始--- 一.python单元测试实例介绍 unittest框架又叫PyUnit框架,是python的单元测试框架. 先介绍一个普通的单元测试(不用unittest框架)的实例: 首先 ...

  4. python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...

    1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...

  5. unittest 测试框架

    文章目录 一.unittest测试框架 1.测试固件 1.1 setUp() 1.2 tearDown() 2.unittest 基本使用 3.测试套件(suit) 3.1 测试用例执行顺序 3.2 ...

  6. UnitTest测试框架全栈详解

    金字塔模型 从软件架构的⻆度来说,测试最重要的步骤是在软件开发的时候界入比较好,所以在早期测试的界入,从软件经济学的⻆度上来说,发现的问题解决成本低,投入的资源比较少.因此,对一个测试的系统,开始最佳 ...

  7. 自动化测试unittest测试框架实例

    本文采用unittest测试框架搭建一个简单的自动化测试实例,完成readmine网站的登录和新建项目用例,并生成测试报告. test_login文件 import unittest from sel ...

  8. python数据驱动读取用例_利用Python如何实现数据驱动的接口自动化测试

    前言 大家在接口测试的过程中,很多时候会用到对CSV的读取操作,本文主要说明Python3对CSV的写入和读取.下面话不多说了,来一起看看详细的介绍吧. 1.需求 某API,GET方法,token,m ...

  9. Python单元测试unittest测试框架

    本文的主题是自动化测试框架的实现,在实现之前,先了解一下关于unittest模块的相关知识: Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回 ...

  10. python+selenium+unittest测试框架1-unittest单元测试框架和断言

    unittest单元测试框架和断言 一.unittest单元测试框架简介 1.导入unittest模块 import unittest 2.定义测试类 class Login(unittest.Tes ...

最新文章

  1. 信号完整性与电源完整性分析_「1月11日 免费视频直播」高速PCB信号完整性和电源完整性仿真实战分析、ADS创新解决方案分享-送给工程师的一份新年礼物...
  2. 开源 java CMS - FreeCMS2.3员
  3. [专题目录]-CA/TA development导读目录
  4. 免费OA系统品牌有那些?
  5. Android 每天定时提醒功能实现
  6. JS保留4位小数(合集)
  7. ceiling和floor转化
  8. cmake 在安装mysql_cmake安装mysql
  9. Velocity教程 (zhuan)
  10. 批处理处理oracle数据库脚本导入
  11. 千斤顶装配图怎么画_机械制图——绘制千斤顶装配图教程.ppt
  12. 宠物商店电子商务系统er图
  13. Fast admin真垃圾 浪费我的时间不说还特么BUG一大堆
  14. VS 关于GetLastError()返回码列表及对应的解释
  15. Spark RDD API详解
  16. 图书馆和档案馆的职能
  17. js中回调函数的理解 举例说明js回调函数
  18. 谷歌大胃王,欲占领所有渠道--谷歌电视
  19. 台式计算机显卡最高温度多少,显卡温度多少是正常的(电脑的温度多少度才算是正常水平?)...
  20. 立体显示的原理-几种显示方式

热门文章

  1. cad统计多线段总长度插件_新手入门,学习CAD必须掌握,教你使用标注命令,绘图效率翻一倍...
  2. JS的浅拷贝和深拷贝
  3. 关于ES6 Class语法相关总结
  4. Android-界面-隐藏/显示
  5. scrollView滚动原理
  6. JQuery 使用笔记 2013.09.05
  7. asp.net定时自动执行控制台程序
  8. ADOMDConnection连接字符串与AnalysisService服务器配置
  9. spring源码-第四个后置处理器
  10. SpringMVC整合Quartz实现定时任务和Spring自带Task定时任务