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

YAML在自动化测试中的三大核心作用

YAML在自动化测试中的三大核心作用

  1. 配置中心:管理测试环境/参数

    # config.yaml  
    environments:dev: url: "http://dev.api.com"timeout: 5prod:url: "https://api.com"timeout: 10
  2. 数据驱动:分离测试数据与脚本

    # test_data.yaml
    login_cases:- name: "正确账号"username: "admin"password: "P@ssw0rd"expected: "登录成功"- name: "密码错误"username: "admin"password: "wrong"expected: "密码错误"
    
  3. 流程定义:描述测试步骤序列

    # test_flow.yaml
    smoke_test:- step: "打开首页"action: "get"url: "/home"- step: "用户登录"action: "post"url: "/login"body: user: "${admin_user}"  # 引用变量pwd: "${admin_pwd}"

零基础YAML语法速成(附避坑指南)

基础规则(5分钟掌握)

# 1. 键值对(冒号后必须空格!)
name: "登录测试"   # ✅ 正确
version:1.0       # ❌ 错误(冒号后缺空格)# 2. 列表(用短横线表示)
test_tags:- smoke- regression   # 注意缩进对齐# 3. 嵌套结构(缩进=2空格)
database:host: "localhost"port: 3306credentials:   # 嵌套对象user: "root"password: "123456"# 4. 多行文本(|保留换行 >折叠换行)
description: |  这是第一行这是第二行  # 输出两行summary: >这是一段很长很长的文本,实际输出会变成一行  #### 自动化测试专用技巧  
```yaml
# 1. 变量引用(配合框架实现)
api_config:base_url: "https://api.example.com"login: "${base_url}/auth"  # → https://api.example.com/auth# 2. 复用代码块(锚点&别名)
common_headers: &default_headers  # 定义锚点Content-Type: "application/json"User-Agent: "AutoTest/1.0"test_cases:case1:headers: <<: *default_headers        # 继承锚点X-Token: "abc123"           # 新增字段

实战:用YAML驱动Pytest测试(完整案例)

目录结构

project/
├── config/
│   ├── env.yaml        # 环境配置
│   └── users.yaml      # 用户数据
├── test_cases/
│   └── login_test.yaml # 测试用例  
└── test_login.py       # 测试脚本
步骤1:定义YAML配置文件
# env.yaml
prod:base_url: "https://api.myapp.com"timeout: 10# users.yaml
credentials:admin:username: "admin@company.com"password: "S3cret!2024"guest:username: "guest@test.com"password: "TempP@ss"

步骤2:设计数据驱动测试用例

# login_test.yaml
test_suite: "用户登录验证"test_cases:- case_id: "TC-LOGIN-01"description: "管理员正常登录"data:username: "${credentials.admin.username}"password: "${credentials.admin.password}"expected:code: 200message: "success"- case_id: "TC-LOGIN-02"description: "错误密码登录"data:username: "${credentials.admin.username}"password: "wrong_password"expected:code: 401message: "invalid password"

步骤3:Python测试脚本解析YAML

import yaml
import pytest# 加载YAML文件
def load_yaml(file_path):with open(file_path) as f:return yaml.safe_load(f)# 动态生成测试用例
@pytest.mark.parametrize("case", load_yaml("test_cases/login_test.yaml")["test_cases"])
def test_login(case):# 模拟实际测试逻辑response = fake_api_login(case["data"]) # 断言验证assert response["code"] == case["expected"]["code"]assert case["expected"]["message"] in response["text"]print(f"测试通过: {case['description']}")# 伪代码:模拟API调用
def fake_api_login(data):if data["password"] == "wrong_password":return {"code":401, "text":"invalid password"}return {"code":200, "text":"success"}

执行结果

$ pytest -v
=========================
test_login.py::test_login[TC-LOGIN-01] PASSED  [50%]
test_login.py::test_login[TC-LOGIN-02] PASSED  [100%]

YAML使用高频避坑指南

  1. 缩进陷阱

    • 必须使用空格(严禁Tab键)
    • 同级元素缩进必须对齐
  2. 特殊字符处理

    # 错误:未转义冒号
    key: "value:contains:colon"   # ❌ 解析错误# 正确:用引号包裹
    key: "value:contains:colon"   # ✅
  3. 数据类型混淆

    version: 1.0     # 浮点数 → 1.0
    version: "1.0"   # 字符串 → "1.0"
    is_prod: true    # 布尔值 → True (Python)
    
  4. 大文件优化技巧

    # 避免超过500行(拆分多个文件)
    # 使用锚点减少重复代码
    

「小贴士」:点击头像→【关注】按钮,获取更多软件测试的晋升认知不迷路! 🚀

相关文章:

YAML在自动化测试中的三大核心作用

YAML在自动化测试中的三大核心作用 配置中心&#xff1a;管理测试环境/参数 # config.yaml environments:dev: url: "http://dev.api.com"timeout: 5prod:url: "https://api.com"timeout: 10数据驱动&#xff1a;分离测试数据与脚本 # test_data.yaml lo…...

命名管道实现本地通信

目录 命名管道实现通信 命名管道通信头文件 创建命名管道mkfifo 删除命名管道unlink 构造函数 以读方式打开命名管道 以写方式打开命名管道 读操作 写操作 析构函数 服务端 客户端 运行结果 命名管道实现通信 命名管道通信头文件 #pragma#include <iostream> #include &l…...

iOS上传应用包错误问题 “Invalid bundle. The “UIInterfaceOrientationPortrait”“

引言 在开发 iOS 应用的整个生命周期中&#xff0c;打包上传到 App Store 是一个至关重要的步骤。每一次提交&#xff0c;Xcode 都会在后台执行一系列严格的校验流程&#xff0c;包括对 Info.plist 配置的检查、架构兼容性的验证、资源完整性的审查等。如果某些关键项配置不当…...

【LeetCode】1061. 按字典序排列最小的等效字符串(并查集)

LeetCode 1061. 按字典序排列最小的等效字符串 (中等) 题目链接&#xff1a;LeetCode 1061. 按字典序排列最小的等效字符串 (中等) 题目描述 给出长度相同的两个字符串s1 和 s2 &#xff0c;还有一个字符串 baseStr 。 其中 s1[i] 和 s2[i] 是一组等价字符。 举个例子&#…...

猎板厚铜PCB工艺能力如何?

在电子产业向高功率、高集成化狂奔的今天&#xff0c;电路板早已不是沉默的配角。当5G基站、新能源汽车、工业电源等领域对电流承载、散热效率提出严苛要求时&#xff0c;一块能够“扛得住大电流、耐得住高温”的厚铜PCB&#xff0c;正成为决定产品性能的关键拼图。而在这条赛道…...

Flutter快速上手,入门教程

目录 一、参考文档 二、准备工作 下载Flutter SDK&#xff1a; 配置环境 解决环境报错 zsh:command not found:flutter 执行【flutter doctor】测试效果 安装Xcode IOS环境 需要安装brew&#xff0c;通过brew安装CocoaPods. 复制命令行&#xff0c;打开终端 分别执行…...

算法:前缀和

1.【模版】前缀和 【模板】前缀和_牛客题霸_牛客网 这道题如果使用暴力解法时间复杂度为O(n*m)&#xff0c;会超时&#xff0c;所以要使用前缀和算法。 前缀和->快速求出数组中某一个连续区间的和。 第一步&#xff1a;预处理出一个前缀和数组 dp。 dp[i]表示[1, i] 区间…...

DEVICENET转MODBUS TCP网关与AB数据输出模块的高效融合方案研究

在工业自动化领域&#xff0c;多样化的设备通常采用不同的通信协议&#xff0c;这为系统集成带来了显著的挑战。特别是在需要将遵循DeviceNet协议的设备与基于MODBUS TCP协议的系统进行互连时&#xff0c;这一挑战尤为突出。AB数据输出作为一种功能卓越的DeviceNet分布式输入/输…...

牛客小白月赛113

前言&#xff1a;这场的E题补的我头皮都发麻了。 A. 2025 题目大意&#xff1a;一个仅有‘-’‘*’组成的字符串&#xff0c;初始有一个sum 1&#xff0c; 从左到右依次遍历字符串&#xff0c;遇到-就让sum--&#xff1b;遇到*就让sum* 2&#xff0c;问sum有没有可能大于等于…...

Mac版本Android Studio配置LeetCode插件

第一步&#xff1a;Android Studio里面找到Settings&#xff0c;找到Plugins&#xff0c;在Marketplace里面搜索LeetCode Editor。 第二步&#xff1a;安装对应插件&#xff0c;并在Tools->LeetCode Plugin页面输入帐号和密码。 理论上&#xff0c;应该就可以使用了。但是&a…...

电子电路基础1(杂乱)

电路基础知识 注意&#xff1a;电压源与电流源的表现形式 注意&#xff1a;在同一根导线上电势相等 电阻电路的等效变换 电子元器件基础 电阻...

rocketmq延迟消息的底层原理浅析

rocketmq延迟消息的底层原理 消息实体 延时消息是指允许消息在指定延迟时间后才被消费者消费 Apache RocketMQ 中&#xff0c;消息的核心实体类是 org.apache.rocketmq.common.message.Message public class Message implements Serializable {private String topic; …...

【openssl】升级为3.3.1,避免安全漏洞

本文档旨在形成 对Linux系统openssl版本进行升级 的搭建标准操作过程&#xff0c;搭建完成后&#xff0c;实现 openssl 达到3.3以上版本&#xff0c;避免安全漏洞 效果。 一、查看当前版本 版本不高于3.1的&#xff0c;均需要升级。 # 服务器上运行以下命令&#xff0c;查看…...

使用 HTML +JavaScript 从零构建视频帧提取器

在视频编辑、内容分析和多媒体处理领域&#xff0c;常常需要从视频中提取关键帧。手动截取不仅效率低下&#xff0c;还容易遗漏重要画面。本文介绍的视频帧提取工具通过 HTML5 技术栈实现了一个完整的浏览器端解决方案&#xff0c;用户可以轻松选择视频文件并进行手动或自动帧捕…...

基于若依前后分离版-用户密码错误锁定

sys_config配置参数 user.password.maxRetryCount&#xff1a;最大错误次数 user.password.lockTime&#xff1a;锁定时长 //SysLoginController//登录 PostMapping("/login") public AjaxResult login(RequestBody LoginBody loginBody) {AjaxResult ajax AjaxR…...

论文速读《DexWild:野外机器人策略的灵巧人机交互》

项目链接&#xff1a;https://dexwild.github.io/ 论文链接&#xff1a;https://arxiv.org/pdf/2505.07813 0. 简介 2025年5月&#xff0c;卡内基梅隆大学&#xff08;CMU&#xff09;发布了一篇突破性论文《DexWild: Dexterous Human Interactions for In-the-Wild Robot Pol…...

Bug问题

一、list 页面 import React, { useEffect, useState } from react; import { shallowEqual, useHistory, useSelector } from dva; import { Button, message } from choerodon-ui/pro; import formatterCollections from hzero-front/lib/utils/intl/formatterCollections; …...

【数据结构】5. 双向链表

文章目录 一、链表的分类1、双向链表的结构 二、双向链表的实现0、准备工作1、初始化2、打印3、尾插4、头插5、尾删6、头删7、查找8、在指定位置之后插入数据9、删除指定位置10、销毁 一、链表的分类 链表总共分为8种&#xff0c;具体的分组方式如图所示&#xff1a; 带头指的…...

【Linux手册】冯诺依曼体系结构

目录 前言 五大组件 数据信号 存储器&#xff08;内存&#xff09;有必要吗 常见面试题 前言 冯诺依曼体系结构是当代计算机基本架构&#xff0c;冯诺依曼体系有五大组件&#xff0c;通过这五大组件直观的描述了计算机的工作原理&#xff1b;学习冯诺依曼体系可以让给我们更…...

Mobile App UI自动化locator

在开展mobile app UI层自动化测试时&#xff0c;编写目标元素的locator是比较耗时的一个环节&#xff0c;弄清楚locator背后的逻辑&#xff0c;可以有效降低UI层测试维护成本。此篇博客以webdriverioappium作为UI自动化工具为例子&#xff0c;看看有哪些selector方法&#xff0…...

PaloAlto-Expedition OS命令注入漏洞复现(CVE-2025-0107)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前…...

(LeetCode 每日一题) 1061. 按字典序排列最小的等效字符串 (并查集)

题目&#xff1a;1061. 按字典序排列最小的等效字符串 思路&#xff1a;使用并查集&#xff0c;来将等价的字符连起来&#xff0c;形成一棵树。这棵树最小的字母&#xff0c;就代表整颗树&#xff0c;时间复杂度0(n)&#xff0c;细节看注释。 C版本&#xff1a; class Solutio…...

linux 安装mysql8.0;支持国产麒麟,统信uos系统

一&#xff1a;使用我已经改好的mysql linux mysql8.0解压可用&#xff0c;点我下载 也在国产麒麟系统&#xff0c;统信uos系统也测试过&#xff0c;可用&#xff1b; 下载后&#xff0c;上传mysql.tar.gz 然后使用root角色去执行几个命令即可&#xff1b;数据库密码&#xf…...

C#实现远程锁屏

前言 这是一次提前下班没有锁屏进而引发的一次思考后的产物&#xff0c;思考的主要场景是当人离开电脑后&#xff0c;怎么能控制电脑锁屏&#xff0c;避免屏幕上的聊天记录被曝光。 首先想到通过系统的电源计划设置闲置超时时间熄屏&#xff0c;这可能是最接近场景的解决方案&a…...

历史记录隐藏的安全风险

引言 在数字化生活与工作场景中&#xff0c;历史记录功能广泛存在于浏览器、办公软件、移动应用等各类平台。它通过记录用户的搜索内容、操作痕迹、访问路径等信息&#xff0c;为用户提供便捷的操作体验和个性化服务。然而&#xff0c;这种看似便利的功能背后&#xff0c;却隐藏…...

SpringBoot3整合MySQL8的注意事项

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 注意事项 1、请添加添加如下依赖&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><…...

网络安全大模型理解

一、网络安全大模型的概述 网络安全大模型是一种用于识别和应对各种网络安全威胁的模型。它通过分析网络数据包、网络行为等信息&#xff0c;识别潜在的网络安全事件&#xff0c;并采取相应的措施进行防御。网络安全大模型主要包括以下几个部分&#xff1a; 1. 数据预处理&am…...

智语心桥:当AI遇上“星星的孩子”,科技如何点亮沟通之路?

目录: 引言:当科技的温度,遇见“星星的孩子”“智语心桥”:一座为孤独症儿童搭建的AI沟通之桥核心技术探秘:AI如何赋能“读心”与“对话”?个性化魔法:AI如何实现“千人千面”的精准干预?应用场景畅想:从家庭到机构,AI的全方位支持为什么是“智语心桥”?——价值、可…...

itop-3568开发板机器视觉opencv开发手册-图像绘制-画线

本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程 \04_OpenCV 开发配套资料\11”目录下&#xff0c;如下图所示&#xff1a; cv2.line 函数功能&#xff1a; 绘制一条直线。 函数原型&#xff1a; cv2.line(img,pt1,pt2,color,thicknessNone,lin…...

【高频面试题】快慢指针及相关应用

文章目录 1 简介2 相关应用3 相关题目4 典型例题4.1 判断链表是否有环4.2 寻找链表的入环点4.3 寻找链表的中点4.4 寻找链表的倒数第k个节点4.5 重排链表 &#xff08;反转链表找链表中点合并链表&#xff09;4.6 寻找重复数&#xff08;快慢指针 or 二分&#xff09;4.7 回文链…...