目录

  • 一、数据驱动介绍
  • 二、DDT基本使用介绍
    • 2.0 测试基类
    • 2.1 使用步骤
    • 2.1 ddt读取单个数据
      • 2.2.1 案例
    • 2.2 ddt读取组合中的数据(@unpack)
      • 2.2.1 加unpack
      • 2.2.2 不加unpack
    • 2.3 读取字典
  • 三、DDT和Excel结合
    • 3.1 excel解析类写法
    • 3.2 ddt和excel结合案例

一、数据驱动介绍

数据驱动,我的理解,说的简单一点,就是数据测试数据的参数化。

二、DDT基本使用介绍

2.0 测试基类

class Test:def __init__(self, a, b):self.a = aself.b = bdef add(self):return self.a + self.bdef sub(self):return self.a - self.bdef multi(self):return self.a * self.bdef div(self):return self.a / self.b

2.1 使用步骤

  1. 导包
from ddt import ddt, data, unpack
  1. 使用ddt

2.1 ddt读取单个数据

这种方式应用的不多

2.2.1 案例

@ddt
class TestExample0428(unittest.TestCase):def setUp(self):pass@data(1, 2, 3)def test_add(self, *args, **kwargs):print(*args)

打印3次,分别为1, 2, 3

2.2 ddt读取组合中的数据(@unpack)

这种方式是较为常见的方式,可以实现多参数用例的参数化

2.2.1 加unpack

@ddt
class TestExample0428(unittest.TestCase):def setUp(self):pass@data((1, 2, 3), (2, 3, 5), (1, 1, 1))@unpackdef test_dict(self, *args, **kwargs):print("开始打印数据")# print(*args, **kwargs)print(*args)

打印结果

开始打印数据
1 2 3
开始打印数据
2 3 5
开始打印数据
1 1 1

2.2.2 不加unpack

@ddt
class TestExample0428(unittest.TestCase):def setUp(self):pass@data((1, 2, 3), (2, 3, 5), (1, 1, 1))def test_dict(self, *args, **kwargs):print("开始打印数据")# print(*args, **kwargs)print(*args)

打印结果

开始打印数据
(1, 2, 3)
开始打印数据
(2, 3, 5)
开始打印数据
(1, 1, 1)

2.3 读取字典

@ddt
class TestExample0428(unittest.TestCase):def setUp(self):pass@data({"name":"gupan", "length":"170cm"}, {"age":"12"})def test_dict(self, *args, **kwargs):print("开始打印数据")print(*args, **kwargs)

打印结果

开始打印数据
{'name': 'gupan', 'length': '170cm'}
开始打印数据
{'age': '12'}

三、DDT和Excel结合

3.1 excel解析类写法

# -*- coding:utf-8 -*-
# __author__ = 'gupan'from config import settings
import os
import sys
from src.utils import utils
import xlrd
import tracebackclass ExcelParse:"""EXCEL解析类self.file_path:测试数据存放路径self.workbook:打开的excel对象self.sheet_obj:打开的表单对象self.nrows:表单有数据的行数self.ncols:表单有数据的列数__init__(self, file_path):aquire_cell_data(self, row, col):获取一个单元格的数据,不需要-1heads(self, *args, **kwargs):获取测试数据表头aquire_methodName_col(self):获取测试方法名aquire_each_col_type(self):获取每一个数据列的数据类型datas(self, *args, **kwargs):获取所有的测试数据,根据方法名按字典存储"""def __init__(self, file_path):''':param file_path: 测试数据存放路径'''self.file_path = file_pathif not os.path.exists(self.file_path):utils.print_log_error(self.file_path + "不存在,请确认路径!!!!!")sys.exit(1)try:self.workbook = xlrd.open_workbook(self.file_path)except Exception as err:utils.print_log_error("文件应为xls格式的数据\n")utils.print_log_error(traceback.format_exc())raise err# 默认一个Excel表中只存储一个表单,并且,所以只需要获取第一个表单即可self.sheet_obj = self.workbook.sheets()[0]# 获取表单行数self.nrows = self.sheet_obj.nrows# 获取表单列数self.ncols = self.sheet_obj.ncolsif self.nrows == 1 or self.ncols == 0:utils.print_log_error(file_path + "表单为空,请填写测试数据!!!!!")sys.exit(1)def aquire_cell_data(self, row, col):'''获取单元格数据:param row: 单元格所在行数(不必主动-1):param col: 单元格所在列数(不必主动-1):return: 该单元格数据(str类型)'''return self.sheet_obj.cell_value(row - 1,col - 1)def heads(self, *args, **kwargs):'''获取表头:param args::param kwargs::return: 表头列表'''heads_info = []for col in range(0, self.ncols):heads_info.append(self.sheet_obj.cell_value(0, col))return heads_infodef aquire_methodName_col(self):'''获取测试方法名锁占据的列数:return: 测试方法名存放路径'''heads = self.heads()try:idx = heads.index(settings.method_desc)except IndexError as err:utils.print_log_error(self.file_path+"中不存在"+settings.method_desc + '\n')utils.print_log_error(traceback.format_exc())raise errreturn idxdef aquire_each_col_type(self):'''获取测试方法名锁占据的列数:return: 获取每一个数据列的数据类型,以列表形式返回'''col_type_desc_list = []for col in range(0, self.ncols):col_type_desc_list.append(self.sheet_obj.cell_value(settings.desc_type_row - 1, col))return col_type_desc_listdef datas(self, *args, **kwargs):'''获取测试数据,根据测试方法名按字典返回:param args::param kwargs::return: 字典格式的测试数据,每一个测试方法名对应的key值为列表形式'''test_datas = {}# 测试数据开始数据列数data_begin_col = settings.data_begin_col - 1# 获取测试开始数据行数data_begin_row = settings.data_begin_row - 1# 获取每一列数据对应的数据类型列表type_list = self.aquire_each_col_type()# 测试测试方法名所在列数method_col = self.aquire_methodName_col()# 初始化测试方法名字pre_method_name = self.sheet_obj.cell_value(data_begin_row, method_col)# 存储一个method的测试数据method_datas = []method_count = 0# 表头无测试数据,去除表头for row in range(settings.data_begin_row - 1, self.nrows):row_data = []cur_method_name = self.sheet_obj.cell_value(row, method_col)# 开始获取数据for col in range(data_begin_col, self.ncols):type_desc = type_list[col]cell_data = self.sheet_obj.cell_value(row, col)cell_data = utils.type_switch(cell_data, type_desc)row_data.append(cell_data)if pre_method_name == cur_method_name:method_datas.append(row_data)method_count += 1else:test_datas[pre_method_name] = method_datas.copy()# 测试方法改变后,测试数据前置条件清空method_datas.clear()method_count = 0pre_method_name = cur_method_namemethod_datas.append(row_data)# 不为0表示有些数据没有加上去if method_count != 0:test_datas[pre_method_name] = method_datasreturn test_datas

3.2 ddt和excel结合案例

@ddt
class TestExample0428(unittest.TestCase):def setUp(self):pass@data(*test_datas['test_add'])@unpackdef test_add(self, *args, **kwargs):p1, p2, value = argsresult = Test(p1, p2).add()try:self.assertEqual(result, value, "加法错误,请重新输入")utils.print_log_info("加法测试成功")except AssertionError as err:err_str = traceback.format_exc()utils.print_log_error(err_str)raise err

测试结果

test_add_1__2__2__4_ (src.test.case.testExample.TestExample0428) ... 加法测试成功
ok
加法测试成功
test_add_2__2__2__4_ (src.test.case.testExample.TestExample0428) ... ok
加法测试成功
test_add_3__3__3__6_ (src.test.case.testExample.TestExample0428) ... ok
加法测试成功
test_add_4__4__4__8_ (src.test.case.testExample.TestExample0428) ... ok
test_dict (src.test.case.testExample.TestExample0428) ... ok
test_div (src.test.case.testExample.TestExample0428) ... ok
test_multi (src.test.case.testExample.TestExample0428) ... ok
test_sub (src.test.case.testExample.TestExample0428) ... ok

python数据驱动-ddt相关推荐

  1. python ddt mysql_Python数据驱动DDT的应用

    原标题:Python数据驱动DDT的应用 在开始之前,我们先来明确一下什么是数据驱动,在百度百科中数据驱动的解释是:数据驱动测试,即黑盒测试(Black-box Testing),又称为功能测试,是把 ...

  2. python中什么是数据驱动_Python数据驱动DDT的应用

    原标题:Python数据驱动DDT的应用 在开始之前,我们先来明确一下什么是数据驱动,在百度百科中数据驱动的解释是:数据驱动测试,即黑盒测试(Black-box Testing),又称为功能测试,是把 ...

  3. Python 数据驱动工具:DDT

    Python 数据驱动工具:DDT 背景 python 的unittest 没有自带数据驱动功能. 所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成. DDT是 &quo ...

  4. python 基于ddt实现数据驱动测试

    这篇文章主要介绍了python 基于DDT实现数据驱动测试的方法,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下 简单介绍 ​ ddt(date driver test),所谓数据驱 ...

  5. python使用ddt找不到方法_python使用ddt过程中遇到的问题及解决方案【推荐】

    前言: 在使用DDT数据驱动+HTMLTestRunner输出测试报告时遇到过2个问题: 1.生成的测试报告中,用例名称后有dict() -> new empty dictionary 2.使用 ...

  6. ddt数据驱动 python_Python3数据驱动ddt

    对于同一个方法执行大量数据的程序时,我们可以采用ddt数据驱动的方式,来对数据规范化整理及输出 一.需要使用python的ddt库,ddt,data,unpack方法 1.仅使用ddt和data,代码 ...

  7. python之ddt模式json随记

    ddt数据驱动模式还可以使用json文件来作为数据驱动,如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import ddt import unittest ## ...

  8. python+Unittest+ddt 自动化测试

    此为系列博客 Python测试 Coverage代码覆盖率 python+Unittest+ddt 自动化测试 (当前位置) UnitTest+HTMLTestRunner 测试可视化 文章目录 安装 ...

  9. python语言百度百科-Python 语言下数据驱动DDT的应用

    数据驱动测试的含义: 在百度百科上的解释是: 数据驱动测试,即黑盒测试(Black-box Testing),又称为功能测试,是把测试对象看作一个黑盒子.利用黑盒测试法进行动态测试时,需要测试软件产品 ...

最新文章

  1. 【数组方法大合集】原生js数组array常用工具方法大合集
  2. 深度学习的数学 (1)基本概念
  3. 【NLP】相当全面:各种深度学习模型在文本分类任务上的应用
  4. mysql 日均pv100w_日均百万PV架构第四弹(分布式监控)_MySQL
  5. 如何手动删除一个business document和pricing document的relationship
  6. 重言式判别c语言中文网,重言式判别 重言式判别源码及课程设计 c语言版.doc
  7. 靖江机器人怎么样_铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?...
  8. 2013款MacBook Air装Windows7单系统
  9. 奇偶排序(OddEven Sort)----(排序算法十一)
  10. 辨异 —— 数学基本概念
  11. qtp java_QTP Java swing 一些控件的遍历
  12. python 去除文本空行
  13. mysql删除某天前的数据
  14. 学完后端还要学前端,在这之间还有中间件
  15. 第五章 政策问题与议程设定
  16. 我是如何用一行代码表白学妹~❤520情人节送女朋友的3D樱花雨相册礼物❤~(程序员表白专属)
  17. 小米电视安装 Plex 打造家庭影院
  18. [java 新手练习1]5x5横排竖排方阵代码(java)
  19. 如何恢复计算机我的电脑工具栏,我的电脑工具栏不见了,怎样恢復
  20. 米歇尔·福柯——生平与著作

热门文章

  1. 分享一波学习编程刷题网站
  2. 论文阅读:知识图谱技术综述
  3. 编译原理学习-形式语言 乔姆斯基文法
  4. VMWARE 16 宿主虚拟机 Deepin 20.4 本地系统盘扩充方法
  5. SkeyeVSS矿山采盗监控系统智能化管控非法采矿解决方案
  6. 基于python的2048游戏设计_Python经典练习,游戏2048实现思路
  7. 如何绘制三维模型——SolidWorks软件使用简介
  8. 在本地调试crx插件
  9. 卵形曲线坐标计算方法
  10. 设置共享显示没有启动服务器服务,共享文件夹的时候提示 服务器没有启动这个服务 是怎么一回事??...