Python3-unittest测试框架之DDT数据驱动
unittest测试框架之DDT数据驱动
ddt的使用
DDT数据驱动
- DDT:Data Driver Test(数据驱动测试)
- 数据驱动思想:数据和用例进行分离,通过外部数据去生成测试用例
安装
pip install ddt
修改ddt源码(是为了在生成的测试报告中显示每条用例所对应的标题title)
- ddt文件中的ddt()方法
- 把原来的test_data_docstring = _get_test_data_docstring(func, v)注释掉
- 如果数据是用对象来保存的,就添加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
创建测试用例类,加上ddt装饰器@ddt
读取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()
创建测试用例方法,加上ddt装饰器@data
@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中

Python3-unittest测试框架之DDT数据驱动的更多相关文章
- 基于Python的接口自动化-unittest测试框架和ddt数据驱动
引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...
- Python 下的unittest测试框架
unittest测试框架,直接上图吧: data:数据:主要格式为CSV:读取方式:csv.reade: public:封装的模块:通用的模块单独封装,所需参数设置为变量: testcase:测试用例 ...
- python利用unittest测试框架组织测试用例的5种方法
利用unittest测试框架可以编写测试用例,执行方式分两大类:利用main方法和利用testsuite,其中利用测试套件来组织测试用例可以有4种写法. 在此之前,先了解几个概念 TestCase:所 ...
- Python接口测试实战3(下)- unittest测试框架
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- <day002>Selenium基本操作+unittest测试框架
任务1:Selenium基本操作 from selenium import webdriver # 通用选择 from selenium.webdriver.common.by import By # ...
- Python单元测试unittest测试框架
本文的主题是自动化测试框架的实现,在实现之前,先了解一下关于unittest模块的相关知识: Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回 ...
- unittest测试框架详解
单元测试的定义 1. 什么是单元测试? 单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类,一般是开发来做的,按照测试 ...
- unittest测试框架
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果. 一.u ...
- python实例编写(6)--引入unittest测试框架,构造测试集批量测试(以微信统一管理平台为例)
---恢复内容开始--- 一.python单元测试实例介绍 unittest框架又叫PyUnit框架,是python的单元测试框架. 先介绍一个普通的单元测试(不用unittest框架)的实例: 首先 ...
随机推荐
- Android传感器系统架构【转】
本文转载自:http://blog.csdn.net/qianjin0703/article/details/5942579 版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 体系结构 2. ...
- spoj 3267 D-query
题目链接:http://vjudge.net/problem/SPOJ-DQUERY --------------------------------------------------------- ...
- qbzt day5 下午
农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地.John打算在牧场上的某几格里种上美味的草,供他的奶牛们享 ...
- 关于崩溃报告的日志以及dump文件
在用户使用软件的过程当中突然产生软件崩溃的问题,必须采取相关的措施去拦截崩溃产生的原因,这有助于程序员解决此类崩溃的再次发生.特别是有些难以复现的崩溃,不稳定的崩溃,更有必要去调查崩溃产生的原因.一般 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_07 Collections工具类_2_Collections集合工具类的方法
默认规则一般都是升序排序 再来创建一个字符串的数组 排序后,按照升序输出结果 自定义类型排序 创建一个Person类,getter和setter 有参构造和无参构造 重写toString的方法 传对象 ...
- 44 答疑(三)--join的写法/Simple nested loop join的性能问题/Distinct和group by的性能/备库自增主键问题
44 答疑(三) Join的写法 35节介绍了join执行顺序,加了straight_join,两个问题: --1 如果用left join,左边的表一定是驱动表吗 --2 如果两个表的join包含多 ...
- IntelliJ IDEA的常用设置
1.设置IDEA主题样式 ①设置方法: ②效果:设置为Darcula之后整体的风格就是暗黑主题,如上图. 2.设置编辑区主题 ①设置方法: 注:由于IDEA自带的编辑区主题比较少,想要更多的编辑区主题 ...
- 阅读jdk源码的流程(从今天开始要阅读jdk源码)
1.java.lang 2.java.util 3.java.util.concurrent 4.java.util.concurrent.atomic 5.java.lang.reflect 6.j ...
- REACT--》fetch---基本使用
[WangQI]---fetch---基本使用 一.fetch fetch是一种XMLHttpRequest的一种替代方案,在工作当中除了用ajax获取后台数据外我们还可以使用fetch.axio ...
- js获取select下拉框中的值
现在有一id为userType的下拉框,怎么获取选中的值: 用户类型: <select name="type" id="userType"> < ...