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

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: 登录帐号不存在
http://www.lryc.cn/news/2379619.html

相关文章:

  • OpenCV-python灰度变化和直方图修正类型
  • 从 Excel 到 Data.olllo:数据分析师的提效之路
  • 图像定制大一统?字节提出DreamO,支持人物生成、 ID保持、虚拟试穿、风格迁移等多项任务,有效解决多泛化性冲突。
  • Nginx 动静分离在 ZKmall 开源商城静态资源管理中的深度优化
  • 在vs code 中无法运行npm并报无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查
  • 分布式2(限流算法、分布式一致性算法、Zookeeper )
  • 2089. 找出数组排序后的目标下标——O(n)做法!
  • ARM A64 LDR指令
  • 给大模型“贴膏药”:LoRA微调原理说明书
  • Spring-messaging-MessageHandler接口实现类ServiceActivatingHandler
  • asp.net core api RESTful 风格控制器
  • 【甲方安全建设】Python 项目静态扫描工具 Bandit 安装使用详细教程
  • 实习记录小程序|基于SSM+Vue的实习记录小程序设计与实现(源码+数据库+文档)
  • 老旧设备升级利器:Modbus TCP转 Profinet让能效监控更智能
  • 【从基础到模型网络】深度学习-语义分割-ROI
  • Qt控件:交互控件
  • 前端下载ZIP包方法总结
  • 掌握Docker:从运行到挂载的全面指南
  • Pandas pyecharts数据可视化基础③
  • QMK固件OLED显示屏配置教程:从零开始实现个性化键盘显示(实操部分)
  • 数据库中关于查询选课问题的解法
  • 基于Bootstrap 的网页html css 登录页制作成品
  • python中http.cookiejar和http.cookie的区别
  • 【NLP 71、常见大模型的模型结构对比】
  • 组件导航 (Navigation)+flutter项目搭建-混合开发+分栏
  • HGDB企业版迁移到HGDB安全版
  • ProfibusDP主站转modbusTCP网关与ABB电机保护器数据交互
  • AM32电调学习解读六:main.c文件的函数介绍
  • ubuntu24.04上安装NVIDIA driver+CUDA+cuDNN+Anaconda+Pytorch
  • AutoVACUUM (PostgreSQL) 与 DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC (Oracle) 对比