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框架)的实例: 首先 ...
随机推荐
- java操作solr
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</a ...
- shift()函数
用于对dataframe中的数整体上移或下移, 当为正数时,向下移. 当为负数时,向上移. 缺少的会填充NaN 参考: https://blog.csdn.net/kizgel/article/det ...
- win10+jdk+mysql+tomcat+jpress环境搭建与部署
本机搭建jpress用于接口测试的学习 目录 1.环境与工具准备 2.mysql服务端安装 3.tomcat配置 4.jpress部署 1.环境与工具准备 a.服务器为本机为win10 64位 b.j ...
- Numpy 里线性代数函数
c
- C# Thread3——前台线程后台线程
默认情况下,显示创建的线程都是前台线程,进程会等待内部所有的前台线程执行完才会结束退出 1.默认创建的线程都是前台线程 2.进程会等待所有的前台线程执行完而结束,如果还存在后台线程则会强行中断并且退出 ...
- git_01_上传第一个项目至git
前言 Git是一个开源的分布式版本控制系统,可以有效.高速地处理从小到大的项目版本管理.最近在自己研究自动测试,也准备放到git上管理.由于工作中是在已有的代码库拉取.提交代码.自己想要初次建库上传项 ...
- LeetCode 94. Binary Tree Inorder Traversal 动态演示
非递归的中序遍历,要用到一个stack class Solution { public: vector<int> inorderTraversal(TreeNode* root) { ve ...
- JAVA总结--java数据类型
一.String 1.String定义是指向堆内存中的引用:String的赋值本身是引用对象的切换,切换前后的对象依然存在:源码为:private final char value[]: 2.对多个S ...
- POJ-2287.Tian Ji -- The Horse Racing (贪心)
Tian Ji -- The Horse Racing Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 17662 Acc ...
- dfs(枚举)
http://codeforces.com/gym/100989/problem/L L. Plus or Minus (A) time limit per test 1.0 s memory lim ...