当前位置: 首页 > news >正文

11 web 自动化之 DDT 数据驱动详解

文章目录

      • 一、DDT 数据驱动介绍
      • 二、实战

一、DDT 数据驱动介绍

数据驱动: 现在主流的设计模式之一(以数据驱动测试)
结合 unittest 框架如何实现数据驱动? ddt 模块实现
数据驱动的意义: 通过不同的数据对同一脚本实现循环测试,最终实现数据与脚本的分离
ddt 模块模块的安装: pip install ddt
ddt 模块: 一个类装饰器 + 三个装饰器方法

  • ddt 类装饰器:装饰继承 unittest.TestCase 的类
  • data 装饰器方法 data()装饰器方法:把列表、元组、字典作为参数
  • unpack 装饰器方法:实现把复杂的数据实现分解成多个数据
  • file_data装饰器方法:可以直接接收数据文件(json 数据/基于 yaml 数据文件),实现循环测试

二、实战

用了三种方式去实现数据驱动:

方法名数据参数类型从哪读取数据备注
test_login_fail1元组直接提供
test_login_fail2列表yaml 文件yaml 数据读取参考 web 自动化之 yaml 数据/日志/截图
test_login_fail3字典yaml 文件
import os.path
import unittest
from TestPOM.pageobjects.login_page import LoginPage
from TestPOM.testdata import login_datas as ld
from selenium import webdriver
from ddt import ddt, data, unpack, file_data
from TestPOM.common.getdatas import Data
from TestPOM.common import dir_config as Dir
@ddt
class TestLogin(unittest.TestCase):@unittest.skip("skip")def test_login_success(self):# 实例化对象self.driver = webdriver.Edge()loginPage = LoginPage(self.driver)loginPage.login(username=ld.success[0], password=ld.success[1])loginPage.sleep(2)# 传入数据参数(列表/元组/字典)。实现数据驱动# data 表示测试数据是直接提供的。@unittest.skip("skip")@data(("hc_test","hctest123456","密码错误"),("hc_test1","hctest123","登录帐号不存在"))def test_login_fail1(self,login_data):# 实例化对象self.driver = webdriver.Edge()loginPage = LoginPage(driver=self.driver)loginPage.login(login_data[0], login_data[1])loginPage.sleep(2)# 断言:登录结果login_msg = loginPage.login_msg()print(login_msg)self.assertEqual(login_data[2], login_msg)@unittest.skip("skip")@data(*Data("fail").data[0])def test_login_fail2(self,login_data):# 实例化对象self.driver = webdriver.Edge()loginPage = LoginPage(driver=self.driver)loginPage.login(login_data[0], login_data[1])loginPage.sleep(2)# 断言:登录结果login_msg = loginPage.login_msg()print(login_msg)self.assertEqual(login_data[2], login_msg)file_name = os.path.join(Dir.testdata_dir,"login_fail.yaml")@file_data(file_name)# unpack 表示,对于每一组数据(dic、list 或者 tuple),那么就分拆成独立的参数。# 注意:如果传入的数据是字典,方法参数名必须和字典的key一样@unpack@unittest.skipdef test_login_fail3(self,username,password,error_message):# 实例化对象self.driver = webdriver.Edge()loginPage = LoginPage(driver=self.driver)loginPage.login(username, password)loginPage.sleep(2)# 断言:登录结果login_msg = loginPage.login_msg()print(login_msg)self.assertEqual(error_message, login_msg)@data(("hc_test","hctest123","登录成功"),("hc_test","hctest123456","密码错误"),("hc_test1","hctest123","登录帐号不存在"))def test_login(self,login_data):# 实例化对象self.driver = webdriver.Edge()loginPage = LoginPage(driver=self.driver)loginPage.login(login_data[0], login_data[1])# 断言:登录结果login_msg = loginPage.login_msg()print(login_msg)self.assertEqual(login_data[2], login_msg)

test_datas.yaml 文件内容(test_login_fail2 方法用到):

login:url : "/user/logininfo.html"success:- hc_test- hctest123fail:-- hc_test- hctest123456- 密码错误-- hc_test1- hctest123- 登录帐号不存在

login_fail.yaml 文件内容(test_login_fail3 方法用到):

-username: hc_testpassword: hctest123456error_message: 密码错误
-username: hc_test1password: hctest123error_message: 登录帐号不存在

相关文章:

  • Swagger go中文版本手册
  • 【HCIA】策略路由
  • 搭建Hadoop集群standalone
  • STM32 SD卡拔插后FatFs挂载失败可能原因
  • 短视频二创App功能深度解析:短剧创作与推广的智能化革命
  • 开源模型应用落地-模型上下文协议(MCP)-Resources-资源的使用逻辑
  • Python中plotext 库详细使用(命令行界面中直接绘制各种图形)
  • 前馈神经网络回归(ANN Regression)从原理到实战
  • 从单线程到多线程:项目实战web Worker线程使用总结
  • 联合建模组织学和分子标记用于癌症分类|文献速递-深度学习医疗AI最新文献
  • 2025 后端自学UNIAPP【项目实战:旅游项目】5、个人中心页面:微信登录,同意授权,获取用户信息
  • 大模型智能体与 React Flow:构建智能化可视化交互系统的技术范式
  • Node.js 安装 + React Flow 快速入门:环境安装与项目搭建
  • #跟着若城学鸿蒙# 鸿蒙-卡证识别
  • 【搭建Node-RED + MQTT Broker实现AI大模型交互】
  • 游戏引擎学习第283天:“让‘Standing-on’成为一个更严谨的概念
  • 算法分析:蛮力法
  • 【PX4飞控】在 Matlab Simulink 中使用 Mavlink 协议与 PX4 飞行器进行交互
  • Java应用OOM排查:面试通关“三部曲”心法
  • 使用LoRA微调Qwen2.5-VL-7B-Instruct完成电气主接线图识别
  • “免签圈”扩容,旅游平台:今年以来巴西等国入境游订单显著增加
  • “85后”贵阳市政府驻重庆办事处主任吴育材拟任新职
  • 风雨天涯梦——《袁保龄公牍》发微
  • 警方通报:某博主遭勒索后自杀系自导自演,已立案调查
  • 秦洪看盘|预期改善,或迎来新的增量资金
  • A股高开高走:沪指涨0.82%,创指涨2.63%,超4100股收涨