当前位置: 首页 > 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: 登录帐号不存在
http://www.xdnf.cn/news/465085.html

相关文章:

  • 文件目录与检索综合练习题
  • 面试 Linux 运维相关问题
  • 基于SpringBoot的家政服务系统设计与实现(源码+文档+部署讲解)
  • 20、鸿蒙学习——OAID、AAID、ODID
  • openEuler24.03 LTS下安装MySQL8.0.42
  • 气动排渣煤粉炉专用V型球阀——法兰连接耐磨阀门生产厂家解析-耀圣
  • 详解 Zephyr RTOS:架构、功能与开发指南
  • Function Calling
  • 106. 从中序与后序遍历序列构造二叉树
  • 【206】VS2022 C++ 实现无符号32位整数和IP地址字符串互相转换
  • element-ui的el-cascader增加全选按钮实现(附源码)
  • DB-GPT扩展自定义app配置说明
  • 【网络编程】九、详解 HTTPS 加密原理
  • 鸿蒙 ArkUI - ArkTS 组件 官方 UI组件 合集
  • AEO认证的好处 ,如何快速获取AEO认证?
  • Java应用OOM排查:面试通关“三部曲”心法
  • android display 笔记(十四)VAU 和GSP 分别代表什么
  • fpga系列 HDL : Microchip FPGA开发软件 Libero Soc 安装 license申请
  • 企业级Javaweb开发常用注解
  • macOS中5000端口被控制中心占用问题
  • 洛谷P4907题解
  • Milvus(23):过滤
  • 《Python星球日记》 第81天:回看图像生成与风格迁移
  • Python机器学习笔记(二十三 模型评估与改进-网格搜索)
  • AcroForm 文档(打开时)级脚本对比 Excel VBA 参考
  • 关于多线程的Redis模型
  • 数据科学和机器学习的“看家兵器”——pandas模块 之二
  • c++从入门到精通(四)--动态内存,模板与泛型编程
  • python克洛伊婚纱摄影预约管理系统
  • P2679 [NOIP 2015 提高组] 子串