python模块03 --ddt数据驱动

news2025/1/11 19:46:38

自动化框架设计思想:

(1) 数据驱动测试:即英文单词Data-Driven Testing,简称DDT。

(2) 关键字驱动测试:即英文单词Keyword-Driven Testing,简称KDT。

(3) 业务流程测试:即英文单词Business Process Tesing,简称BPT。

(4) 页面对象模式:即英文单词Page Object Model,简称POM。

(5) 基于组件的测试:即英文单词Component-Based Testing,简称CBT。

本文介绍ddt数据驱动

1 DDT数据驱动

​        DDT(Date Driver Test),所谓数据驱动测试,简单来说就是由数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。通过使用数据驱动测试的方法,可以在需要验证多组数据测试场景中,使用外部数据源实现对输入输出与期望值的参数化,避免在测试中使用硬编码的数据,也就是测试数据和用例脚本代码分离。

​         DDT它其实就是一个装饰器,它会根据你传递进来的数据来决定要生成几个测试用例。

引入原因:许多数据集进行相同的测试。若一个用例一个测试集,则造成冗余,而且,每个数据集值创建不同的测试既耗时又效率低下 

1.1 优点:

  1. 代码复用率高:一个测试逻辑只需要写一次,可以多条测试数据复用,同时提高测试脚本的编写效率。
  2. 异常排查效率高:根据测试数据,每条数据生成一条测试用例,用例相互分离,一条失败的情况下不会影响其他测试用例。
  3. 代码可维护性高:简洁明了的测试框架,利于其他同事阅读,提高代码的可维护性。

1.2 常用

  • @ddt:装饰测试类
    • @ddt它做的事情其实就等同于这句代码:LoginTestCase = ddt(LoginTestCase),把具体的类名传给ddt,告诉ddt是这个测试用例类要使用数据驱动。
  • @data:装饰测试用例
    •  @data做的事情就是把测试数据作为一个参数传递给测试用例,一个数据对应生成一条测试用例,如果data里面有多个数据那么就对应生成多条测试用例。如果data里放的类似是元组、列表等这样的序列类型的数据,data会把他们当成是一个整体,即一个测试数据。
    • 如果想一次传递多个参数给测试用例,需要自行在脚本中对数据进行分解或者使用
  • @unpack:装饰测试用例
    • @unpack则是可以把序列类型的数据拆分为多个,以多个参数传给测试用例,但测试用例也需要定义同等数量的参数来接收。

1.3 @ddt:装饰测试类步骤:

  1. 安装:pip install ddt  
    ddt导入
    --安装:选择国内源 pip install -i https://mirrors.aliyun.com/pypi/simple
    --ddt导入时注意:项目当中不要有模块/文件命名成ddt
            ANS:重名到时引用的就是项目下的ddt模块,不是python的第三方包
    --尽量不要重名
  2. 导入 import ddt
  3. 测试类加上:@ddt.ddt
  4. 需要进行数据驱动的方法上加:@ddt.data(*cases)
  5. 测试用例方法用参数接收:def test_login(self, case_info):

import unittest
import ddt
def add(x, y):
    """简单数字加减"""
    if type(x) == int and type(y) == int:
        return x + y
    return  None

#1 写用例,可以写到excel,此处简略用列表,要确保和excel读取一致
cases = [
    {"x": 1,"y":2, "expected": 3},
    {"x": 10,"y":3, "expected": 13},
    {"x": -50,"y":2, "expected": -48}

]

#写测试用例方法
@ddt.ddt
class TestAdd(unittest.TestCase):

    @ddt.data(*cases)
    def test_add(self, case_info):
        expected = case_info['expected']
        actual = add(case_info['x'], case_info['y'])
        self.assertEqual(expected, actual)

#TODO: 一定要在空白行运行,不然会出现no test 报错
if __name__ == '__main__':
    unittest.main()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI大模型:开源与闭源的激烈交锋与未来展望

在人工智能的浩瀚星空中,大模型作为技术的璀璨明珠,正引领着行业变革的浪潮。从最初的闭源垄断到如今的开源与闭源并驾齐驱,AI大模型的发布趋势、竞争格局以及技术演进,无不彰显着这一领域的蓬勃生机与无限可能。本文将深入探讨开…

大白话讲微服务的灾难性雪崩效应

讲在前面,为什么微服务需要有熔断等策略呢?今天我们用大白话来讲讲微服务的灾难性雪崩效应,熔断策略就是解决雪崩效应的有效解决方案。 什么是灾难性雪崩效应? 假设我们有两个访问量比较大的服务A和B,这两个服务分别依…

深度理解指针(2)

hello各位小伙伴们&#xff0c;关于指针的了解我们断更了好久了&#xff0c;接下来这几天我会带领大家继续我们指针的学习。 数组名的理解 我们首先来看一段代码&#xff1a; #include<stdio.h> int main () {int arr[10] {1,2,3,4,5,6,7,8,9,10};printf("arr …

汇编语言:标志寄存器ZF、PF、SF、CF、OF、DF、IF、AF

CPU内部的寄存器中&#xff0c;一种特殊的寄存器&#xff08;对于不同的CPU&#xff0c;个数和结构可能都不同&#xff09;&#xff0c;具有以下3种作用。 &#xff08;1&#xff09;用来存储相关指令的某些执行结果 &#xff08;2&#xff09;用来为CPU执行相关指令提供行为…

科技大通缩

BCG 增长份额矩阵的经典“摇钱树”象限。 来源&#xff1a;Understanding the BCG Growth Share Matrix and How to Use It &#xfeff; S 曲线的暴政 要了解这如何应用于科技行业&#xff0c;我们需要了解 S 曲线现象。 成功产品带来的价值通常会经历 S 曲线增长&#xff…

Python办公自动化 生成房产销售的分析报告【2】

学好办公自动化&#xff0c;走遍天下都不怕&#xff01;&#xff01; 办公三件套Excel、Word 和PPT。前面已经学习过如何处理excel数据以及批量自动生成word文档。 今天主要是利用前面学习的python-pptx模块并且根据房屋销售信息生成分析报告。报告总共6页内容&#xff0c;包括…

C++进阶之智能指针

一、为什么需要智能指针 下面我们先分析一下下面这段程序有没有什么内存方面的问题&#xff1f;提示一下&#xff1a;注意分析MergeSort 函数中的问题。 int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return a / b; }…

机器人学——逆向运动学(机械臂)

正/逆运动学对比 求解 求解目标 Reachable workspace 与 Dexterous workspace Subspace 解的数目 多重解 解的选择 求解方法 栗子一 x,y,fai已知&#xff0c;求解theta(1,2,3)的具体数值 几何法 余弦定理定义&#xff1a;对于任意三角形ABC&#xff0c;设其三个内角分别为…

Behind the Code:Ewald Hess 带你一起深度解读链上能源与外交

2024 年 9 月 14 日&#xff0c;《Behind the Code: Web3 Thinkers》第二季第九集上线。在本集中&#xff0c;Ewald Hess 深入剖析了区块链技术在推动能源市场变革中的关键作用。长期以来&#xff0c;传统能源行业因垄断和低效饱受批评&#xff0c;但随着 Bitcoin 和 Ethereum …

企业入驻西安国际数字媒体产业园的十大好处

在当今数字化飞速发展的时代&#xff0c;企业的发展需要依托创新的平台和资源的整合。西安国际数字影像产业园&#xff0c;作为数字产业的引领者&#xff0c;为入驻企业提供了众多独特的优势和机遇。 好处一&#xff1a;产业集聚效应。西安国际数字影像产业园汇聚了众多数字媒体…

字符函数内存函数———C语言

字符分类函数 头文件&#xff1a; ctype.h 函数功能iscntrl判断字符是否为控制字符isspace判断字符是否为空白字符&#xff08;空格&#xff0c;换页、换行、回车、制表符或垂直制表符&#xff09;isdigit判断字符是否为十进制数字isxdigit判断字符是否为十六进制数字(0-9)(a…

二分+划分型dp,CF 360B - Levko and Array

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 B - Levko and Array 二、解题报告 1、思路分析 最小化最大值&#xff0…

射频前端加LNA放大具体应用方案介绍

1.1编写目的 接收机为了适应在一些应用场合要求&#xff0c;需要增大接收强度&#xff0c;必要时在前段增加一个低噪声放大器LNA以增大链路增益&#xff0c;本文编写一个最简单的低成本的LNA&#xff0c;记录是想给大家一个引导思路或借鉴。 1.2背景 以micrf220这款芯片在…

A4-80内六角螺栓产品特性及应用

A4-80内六角螺栓是一种常用的紧固件&#xff0c;广泛应用于需要高强度和耐腐蚀性能的各种场合。下面我们就来科普一下A4-80内六角螺栓的产品特性和应用场景。 产品特性 材质 A4-80内六角螺栓通常采用A4等级的不锈钢材料制成&#xff0c;这意味着它们具有优异的耐腐蚀性能&#…

【R语言】基于多模型的变量重要性图 (Variable Importance Plots)

变量重要性图 Variable Importance Plots 1. 写在前面2.1数据导入2.2 模型训练2.3 变量重要性2.4 变量重要性图2.5 模型模拟验证3.基于caret包计算变量重要性 1. 写在前面 好久没有更新博客了&#xff0c;正好最近在帮老师做一个项目&#xff0c;里面涉及到了不同环境变量的重要…

基于鸿蒙Next模拟扫图识物的一个过程

一、功能介绍&#xff08;基础&#xff09; 基于鸿蒙Next模拟扫图识物的一个过程&#xff0c;扫描到图片&#xff0c;提示出相关的图片内容&#xff0c;是一个什么东西。 二、使用场景&#xff08;大类&#xff09; 支付、社交、信息获取、在线调查、教育学习等等。 三、实现…

Vue指令:v-cloak、v-once、v-pre 指令

1、v-cloak 指令 v-cloak 指令可以隐藏未编译的 Mustache 标签直到实例准备完毕&#xff0c;否则在渲染页面时&#xff0c;有可能用户会先看到 Mustache 标签&#xff0c;然后看到编译后的数据。 &#xff08;1&#xff09;设置CSS样式 display:none <style type"te…

别再盲目推广了!用Xinstall,效果翻倍

在移动互联网时代&#xff0c;App的运营推广成为了开发者们最为关注的话题之一。然而&#xff0c;随着市场竞争的加剧&#xff0c;推广难度也越来越大。这时候&#xff0c;一款名为Xinstall的品牌走进了我们的视线&#xff0c;它以其独特的技术和解决方案&#xff0c;为App推广…

【系统架构设计】软件架构设计(2)

【系统架构设计】软件架构设计&#xff08;1&#xff09; 软件架构概述架构需求与软件质量属性软件架构风格层次系统架构风格面向服务的架构SOA概述微服务微服务和SOA差异 软件架构概述 架构需求与软件质量属性 软件架构风格 层次系统架构风格 面向服务的架构 SOA概述 面…

【生日视频制作】教师节中秋节国庆节直升飞机AE模板修改文字软件生成器教程特效素材【AE模板】

飞机生日视频制作教程AE模板改文字特效广软件告生成器玩法素材 怎么如何做的【生日视频制作】教师节中秋节国庆节直升飞机AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频…