如何快速掌握DDT数据驱动测试?
前言
网盗概念相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离, 这样的测试脚本设计模式称为数据驱动。(网盗结束)当我们测试某个网站的登录功能时,我们往往会使用不同的用户名和密码来验证登录模块对系统的影响,那么如果我们每一条数据都编写一条测试用例,这无疑是增加了代码量,代码重复,且显得那么臃肿(谁不喜欢身材好的呢?你懂的),这时候我们可以使用不同数据驱动代码执行相同的用例测试不同的场景
实施数据驱动步骤
我们再来说说实施数据驱动测试的步骤:
1.创建/准备测试数据
2.封装读取数据的方法,保留测试脚本调用的接口/属性(我们需要传递给脚本什么参数)
3.编写自动化测试脚本
4.脚本中调用封装好的处理数据文件的模块并引入测试数据
5.执行测试脚本并分析测试结果
数据驱动测试环境准备
1.安装python3.x开发环境(能看到此文章的应该都有这个环境,没有的自行百度吧)
2.安装数据驱动模块ddt
安装方式1:cmd下执行命令 pip install ddt
安装方式2:Links for ddt 下载 并解压任意目录,cmd 运行命令python setup.py install
3.验证安装 pycharm 新建python文件并输入 import ddt 运行无报错信息既表示安装成功或者cmd 命令依次输入python回车 import ddt回车 无保存信息表示安装成功
4.unittest框架和ddt进行数据驱动
测试步骤
1.访问地址:https://mail.sohu.com/fe/#/login
2.输入用户名和密码
3.点击登录按钮
4.判断是否登录成功
数据存储
数据存在当前脚本中
数据准备
我们要实现的是用户登录的操作,所以用户名和密码是必须有的,期望结果可以有也可以没有。数据类型看源代码!
实例代码
简单数据驱动测试.py
源码分析
1.@ddt来装饰测试类(ddt数据驱动的规范写法,记住就ok)
2.@data(*value)装饰测试用例(也是一种规范,这边又涉及到装饰器,不懂的可以百度或者看我之前的文章又介绍,这边不再赘述,一句话两句话也说不清楚)记住:*value作用是打散数据,比如上面代码是用一个大列表存储两个小列表存放数据的,那么*value会得到两个小列表,每个小列表是一组测试数据
3.@unpack 解析*value数据,会把两个小列表里面的每一个数据取出来分别传递给我们测试用例的形参
方式1缺点
存储大量数据时,需查看源代码,不利于脚本的维护
json文件读取测试数据进行数据驱动测试
数据准备
新建一个json文件(也可以是txt文件),将我们需要的两组测试数据以列表的形式写到json文件中,每组数据的每一项参数用相同的符号分割开(方便脚本读取数据)
实例代码
test_data.json
使用数据文件驱动测试.py
源码分析
1.相对上个实例,这里使用了@file_data(文件路径), 参数必须是一个文件,这里是一个json文件, 数据可以是一个列表,也可以是一个字典
-
# 列表形式 -
[ -
"*******@sohu.com||xiaochao11520||https://mail.sohu.com/fe/#/homepage", -
"*******@sohu.com||xiaochao11520||https://mail.sohu.com/fe/#/homepage" -
]
2.测试用例接收的是一个字符串,需要对字符串进行处理,把用户名,密码,期望值解析出来
方式2优缺点
测试数据存在文件中,方便管理修改,添加数据,易于维护,缺点呢?emmm个人认为这种方式最好!
从xml读取数据进行数据驱动测试
数据准备
新建一个xml格式的文件,按照xml格式的语法需求,填写数据(xml文档我也不是很懂,简单的显示个文字啥的还可以^-^!)
xmlData.xml
实例代码
doXML.py
从xml文件读取数据驱动测试.py
源码分析
1.xml文档编写(深入了解需百度)有点像html,但又有不同,xml中的节点可以是任意名称,每个节点同样是成双出现
2.增加了doXML.py文档,用来解析xml文件,方便脚本获取数据(注释写的很详细,不懂的化可以慢慢调试,哪里不懂print哪里)
3.测试脚本和上面的实例大致相同(不懂的加我qq直接问)
方式3优缺点
优点是做到了数据与测试的分离,方便数据维护,缺点也比较明显,需要对xml文档有一定的了
总结
上面的数据驱动测试步骤是我自己总结的,看了上面的实例对于步骤应该还算合理,下面是我在网上找到的数据驱动测试步骤(感觉比较官方!大家可以参考)
1.编写测试脚本, 脚本需要支持从程序对象, 文件,或者数据库读入数据。(个人观点:如果脚本先编写完,测试数据还未准备,后期还要做修改)
2.将测试脚本使用的测试数据存入程序对象,文件,或者数据库等外部介质中。(个人观点:这个阶段实为准备数据的阶段,也就是我们数据要存在哪里,理应放在第一步)
3.运行脚本过程中,循环调用存储在外部介质中的测试数据。(个人观点:这里要考虑我们如何读取,使用数据)
4.验证所有的测试结果是否符合预期结果
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

-
文档获取方式: -
加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)
这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取
相关文章:
如何快速掌握DDT数据驱动测试?
前言 网盗概念相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离, 这样的测试脚本设计模式称为数据驱动。(网盗结束)当我们测试某个网站的登录功能时,我们往往会使用不同的用户名和密码来验证登录模块对系统的影响&#x…...
OpenCV如何实现背投(58)
返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV直方图比较(57) 下一篇:OpenCV如何模板匹配(59) 目标 在本教程中,您将学习: 什么是背投以及它为什么有用如何使用 OpenCV 函数 cv::calcBackP…...
5-在Linux上部署各类软件
1. MySQL 数据库安装部署 1.1 MySQL 5.7 版本在 CentOS 系统安装 注意:安装操作需要 root 权限 MySQL 的安装我们可以通过前面学习的 yum 命令进行。 1.1.1 安装 配置 yum 仓库 # 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022# 安装Mysql…...
【Jenkins】持续集成与交付 (八):Jenkins凭证管理(实现使用 SSH 、HTTP克隆Gitlab代码)
🟣【Jenkins】持续集成与交付 (八):Jenkins凭证管理(实现使用 SSH 、HTTP克隆Gitlab代码) 1、安装Credentials Binding、git插件2、凭证类型及用途3、(用户名和密码类型)凭证的添加和使用3.1 用户密码类型3.2 测试凭证是否可用3.3 开始构建项目3.3 查看结果(进入Jenk…...
开源模型应用落地-CodeQwen模型小试-SQL专家测试(二)
一、前言 代码专家模型是基于人工智能的先进技术,它能够自动分析和理解大量的代码库,并从中学习常见的编码模式和最佳实践。这种模型可以提供准确而高效的代码建议,帮助开发人员在编写代码时避免常见的错误和陷阱。 通过学习代码专家模型&…...
Arch Linux安装macOS
安装需要的包 sudo pacman -S qemu-full libvirt virt-manager p7zip yay -S dmg2img安装步骤 cd ~ git clone --depth 1 --recursive https://github.com/kholia/OSX-KVM.git cd OSX-KVM # 选择iOS版本 ./fetch-macOS.py #将上一步下载的BaseSystem.dmg转换格式 dmg2img -…...
接口自动化框架篇:Pytest + Allure报告企业定制化实现!
接口自动化框架是现代软件开发中的重要组成部分,能够帮助开发团队提高测试效率和质量。本文将介绍如何使用Pytest作为测试框架,并结合Allure报告进行企业定制化实现。 目标规划 在开始编写接口自动化测试框架之前,我们需要先进行目标规划。…...
保持 Hiti 证卡打印机清洁的重要性和推荐的清洁用品
在证卡印刷业务中,保持印刷设备的清洁至关重要。特别是对于 Hiti 证卡打印机来说,它们是生产高质量证卡的关键工具。保持设备清洁不仅可以保证打印质量和效率,还可以延长其使用寿命。本文将探讨保持 Hiti 证卡打印机清洁卡的重要性࿰…...
Unity C#的底层原理概述
文章目录 前言IL与IL2CPP总结 前言 看到底层二字,会感到很高深,好似下一秒就要踏入深渊。实际上,对于C#底层的理解非常简单,比冒泡排序这种基础算法还要简单。 底层的两种机制:Mono和IL2CPP。 IL2CPP其中的"2&qu…...
国产数据库的发展势不可挡
前言 新的一天又开始了,光头强强总不紧不慢地来到办公室,准备为今天一天的工作,做一个初上安排。突然,熊二直接进入办公室,说:“强总老大,昨天有一个数据库群炸了锅了,有一位姓虎的…...
权益商城系统源码 现支持多种支付方式
简介: 权益商城系统源码,支持多种支付方式,后台商品管理,订单管理,串货管理,分站管理,会员列表,分销日志,应用配置。 上传到服务器,修改数据库信息ÿ…...
python安装问题及解决办法(pip不是内部或外部命令也不是可运行)
pip是python的包管理工具,使python可在cmd(命令行窗口,WinR后输入cmd)中执行 针对 “pip不是内部或外部命令也不是可运行” 问题,需要在安装的时候将python添加到环境变量中 上图第三个选项必须勾选才能在cmd中使用pi…...
Json高效处理方法
一、参考我之前的博客,Delphi可以很方便的把类和结构体转换成JSON数据,但是数据量大了,就会非常之慢,1万条数据需要20秒左右。如果引用Serializers单元,那么100万数据只需要4秒左右,每秒处理20万+,速度还是很快的。 二、写一个简单的类  TPeople = class private …...
若依分离版-前端使用echarts组件
1 npm list:显示已安装的模块 该命令用于列出当前项目的所有依赖关系,包括直接依赖和间接依赖。执行 npm list 时,npm 将从当前目录开始,递归地列出所有已安装的模块及其版本信息 npm list 2 npm outdated:用于检查当前项目中的npm包是否有…...
android native开发
framwork 一些重要的流程都是要放到native中做的 原因也很简单,效率,尤其是针对性能优化方面的,更离不开native开发 目前针对native开发也回顾下,总结下经验 1 jni开发有两种,app端一般是静态模式,要有jav…...
Partisia Blockchain 生态zk跨链DEX上线,加密资产将无缝转移
在 5 月 1 日,由 Partisia Blockchain 与 zkCross 创建合作推出的 Partisia zkCrossDEX 在 Partisia Blockchain 生态正式上线。Partisia zkCrossDEX 是 Partisia Blockchain 上重要的互操作枢纽,其融合了 zkCross 的 zk 技术跨链互操作方案,…...
Vue3组合式API + TS项目中手写国际化插件
文章目录 1. 在项目中创建一个国际化插件的文件i18n.ts2. 创建语言模块json3. 注册插件4. 语言切换组件5. 使用插件(ts中使用全局需注意点) 1. 在项目中创建一个国际化插件的文件i18n.ts <!-- plugins/i18n.ts --> export const i18nPlugin {install(app: any, option:…...
深入解析Jackson的ObjectMapper:核心功能与方法指南
com.fasterxml.jackson.databind.ObjectMapper 是Jackson库的核心类,负责JSON序列化与反序列化的重任。本文旨在详细介绍其成员属性和方法,帮助开发者更好地利用Jackson进行Java对象与JSON数据之间的转换操作。 初始化与配置 构造与复制 默认构造函数…...
计算机是如何执行指令的
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
Jetson Orin NX L4T35.5.0平台相机stop导致系统死机问题调试
1. 环境 硬件:国产OrinNX套件 系统版本: L4T35.5.0 相机: SDI 相机,1080P50fps 2. 问题描述 移植驱动已经开始正常采集相机图像,但是会出现以下问题: 采集流程如下: (1)start SDI camera (2)gst-launch-1.0采集图像 gst-launch-1.0 v4l2src device=/dev/vide…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
