3天爆肝整理,自动化测试-YAML文件读写实战(超细总结)
目录:导读
- 前言
- 一、Python编程入门到精通
- 二、接口自动化项目实战
- 三、Web自动化项目实战
- 四、App自动化项目实战
- 五、一线大厂简历
- 六、测试开发DevOps体系
- 七、常用自动化测试工具
- 八、JMeter性能测试
- 九、总结(尾部小惊喜)
前言
YAML 简介
YAML,Yet Another Markup Language的简写,通常用来编写项目配置,也可用于数据存储,相比conf等配置文件要更简洁。
YAML 语法
支持的数据类型:
字典、列表、字符串、布尔值、整数、浮点数、Null、时间等
基本语法规则:
1、大小写敏感
2、使用缩进表示层级关系
3、相同层级的元素左侧对齐
4、键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔
5、数组前加有 “-” 符号,符号与值之间需用空格分隔
6、None值可用null 和 ~ 表示
7、多组数据之间使用3横杠—分割
8、# 表示注释,但不能在一段代码的行末尾加 #注释,否则会报错
注意:网上查找到各种博客都提到yaml缩进时不能使用tab键,但我在pycharm编辑器里实际使用时是可以使用tab键进行缩进的,读写时并没有报错!
安装第三方yaml文件处理库PyYAML
python没有自带的处理yaml文件的库,需要下载第三方库PyYAML 或 ruamel.yaml ,这里我们安装PyYAML。
pip install pyyaml# 下载速度慢的话加上清华镜像源
pip install pyyaml -i https://pypi.tuna.tsinghua.edu.cn/simple
读取yaml文件
1、从yaml中读取字典
yaml中的字典格式如下:
# yaml文件,文件名为yamlData
os: Android
osVersion: 10
account:username: xiaoqqpassword: 123456
deviceName: null
appPackage: ~
bool1: True
读取字典代码:
import yamlwith open('./yamlData.yml', 'r', encoding='utf-8') as f:result = yaml.load(f.read(), Loader=yaml.FullLoader)
print(result, type(result))
print(result['os'], type(result['os']))
print(result['osVersion'], type(result['osVersion']))
print(result['account'], type(result['account']))
print(result['account']['username'])
print(result['deviceName'])
print(result['appPackage'])
print(result['bool1'], type(result['bool1']))
读取结果:
{'os': 'Android', 'osVersion': 10, 'account': {'username': 'xiaoqq', 'password': 123456}, 'deviceName': None, 'appPackage': None} <class 'dict'>
Android <class 'str'>
10 <class 'int'>
{'username': 'xiaoqq', 'password': 123456} <class 'dict'>
xiaoqq
None
None
True <class 'bool'>
从读取结果可以看出:
读取出来的数据不会改变原数据类型,即yaml里是什么数据类型,读出来就是什么类型。
Loader=yaml.FullLoader参数不写的话对结果不会有影响,但运行时会出现警告信息。
yaml.load(f.read(), Loader=yaml.FullLoader)也可以写成yaml.load(f, Loader=yaml.FullLoader),读取出来的结果相同。
2、从yaml中读取list
yaml中list格式:数据前加’-’ 并使用空格与数据间隔开,如下:
#yaml文件名yamlData
- Android
- 10
- null
- ~
- True
读取list代码:
import yamlwith open('./yamlData.yml', 'r', encoding='utf-8') as f:result = yaml.load(f.read(), Loader=yaml.FullLoader)
print(result, type(result))
读取结果:
['Android', 10, None, None, True] <class 'list'>
3、从yaml中读取元组
yaml中存储元组格式:yaml中使用!!对数据类型进行转换,yaml中tuple由list转换而来。如下:
# yaml文件名yamlData
!!python/tuple
- Android
- 10
- null
- ~
- True
读取元组代码:
import yamlwith open('./yamlData.yml', 'r', encoding='utf-8') as f:result = yaml.load(f.read(), Loader=yaml.FullLoader)
print(result, type(result))
读取结果:
('Android', 10, None, None, True) <class 'tuple'>
在实际使用中,很多的时候往往是多种类型嵌套的数据。如下yaml数据
# yaml文件名yamlDataos: Android
osVersion: 10
account:- username1: xiaoqq- password1: 123456- username2: Lilei- password2: 888888
deviceName: null
appPackage: ~
bool1: True
读取结果:
{'os': 'Android', 'osVersion': 10, 'account': [{'username1': 'xiaoqq'}, {'password1': 123456}, {'username2': 'Lilei'}, {'password2': 888888}], 'deviceName': None, 'appPackage': None, 'bool1': True}
4、从yaml中读取多组数据
yaml多组数据时,每组数据之间需要用3横杠分隔’—',如下:
os: Android
osVersion: 10
account1:username1: xiaoqqpassword1: 123456
---
os: ios
osVersion: 12
account1:username2: Lileipassword2: 888888
从yaml中读取多组数据时需要使用yaml.load_all()方法,返回结果为一个生成器,需要使用for循环语句获取每组数据。代码如下:
import yamlwith open('./yamlData.yml', 'r', encoding='utf-8') as f:result = yaml.load_all(f.read(), Loader=yaml.FullLoader)print(result, type(result))for i in result:print(i)
读取结果:
<generator object load_all at 0x000001F78EBD5B48> <class 'generator'>
{'os': 'Android', 'osVersion': 10, 'account1': {'username1': 'xiaoqq', 'password1': 123456}}
{'os': 'ios', 'osVersion': 12, 'account1': {'username2': 'Lilei', 'password2': 888888}}
写入yaml文件
1、单组数据写入yaml文件
使用yaml.dump()方法,加入allow_unicode=True参数防止写入的中文乱码,如下:
import yamlapiData = {"page": 1,"msg": "地址","data": [{"id": 1,"name": "学校"}, {"id": 2,"name": "公寓"}, {"id": 3,"name": "流动人口社区"}],
}with open('./writeYamlData.yml', 'w', encoding='utf-8') as f:yaml.dump(data=apiData, stream=f, allow_unicode=True)
写入结果:
data:
- id: 1name: 学校
- id: 2name: 公寓
- id: 3name: 流动人口社区
msg: 地址
page: 1
2、多组数据写入yaml文件
使用yaml.dump_all()方法,如下:
import yamlapiData1 = {"page": 1,"msg": "地址","data": [{"id": 1,"name": "学校"}, {"id": 2,"name": "公寓"}, {"id": 3,"name": "流动人口社区"}],
}apiData2 = {"page": 2,"msg": "地址","data": [{"id": 1,"name": "酒店"}, {"id": 2,"name": "医院"}, {"id": 3,"name": "养老院"}],
}with open('./writeYamlData.yml', 'w', encoding='utf-8') as f:yaml.dump_all(documents=[apiData1, apiData2], stream=f, allow_unicode=True)
写入结果:
data:
- id: 1name: 学校
- id: 2name: 公寓
- id: 3name: 流动人口社区
msg: 地址
page: 1
---
data:
- id: 1name: 酒店
- id: 2name: 医院
- id: 3name: 养老院
msg: 地址
page: 2
在Python中除了PyYAML库之外,还有ruamel.yaml库也可以对yaml文件进行读写操作。
| 下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战

四、App自动化项目实战

五、一线大厂简历

六、测试开发DevOps体系

七、常用自动化测试工具

八、JMeter性能测试

九、总结(尾部小惊喜)
在疲惫时,坚持不懈;在困难中,挑战自我;在迷茫时,保持梦想。奋斗是人生的密码,努力是成功的秘诀。相信自己的能力,勇敢前行,你将书写出属于自己的辉煌篇章。
人生犹如航行的船只,奋斗是驶向成功的风帆,不论风浪如何,只需坚持航向,扬起勇气的旗帜,便能穿越苦难,到达胜利的彼岸。相信自己,敢于追逐梦想,付出努力,你将创造令人惊艳的人生奇迹。
生活可能会给你带来挫折和困难,但不要屈服,勇敢面对并奋力前行。坚持努力,相信自己的潜能,你能超越极限,创造出令人惊叹的成就。
相关文章:
3天爆肝整理,自动化测试-YAML文件读写实战(超细总结)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 YAML 简介 YAML&…...
算法通关村——透彻理解二分查找
1. 循环法 public static int binarySearch(int[] arr, int low, int high, int target) {while (low < high) {// 这样写主要是避免溢出的情况,以及>>优先级小于,避免出现死循环int mid low ((high - low) >> 1);if (arr[mid] target…...
PAT(Advanced Level)刷题指南 —— 第六弹(⭐有点难度⭐)
一、1010 Radix 1. 问题重述 2. Sample Input1 6 110 1 103. Sample Output1 24. Sample Input 2 1 ab 1 25. Sample Output 2...
个人对智能家居平台选择的思考
本人之前开发过不少MicroPython程序,其中涉及到自动化以及局域网控制思路,也可以作为智能家居的实现方式。而NodeMCUESPHome的方案具有方便添加硬件、容易更新程序和容量占用小的优势,本人也查看过相关教程后感觉部署ESPHome和编译固件的步骤…...
无涯教程-Lua - while语句函数
只要给定条件为真,Lua编程语言中的 while 循环语句就会重复执行目标语句。 while loop - 语法 Lua编程语言中 while 循环的语法如下- while(condition) dostatement(s) end while loop - 流程图 在这里,需要注意的关键是 while 循环可能根本不执行。…...
MySql学习3:常用函数
常用字符串函数 CHAR_LENGTH(s):返回字符串的长度 select *, char_length(name) as nameLength from emp;CONCAT(s1,s2…sn):字符串拼接 select name,concat(name,入职时间:,entrydata) as 入职时间 from emp;CONCAT_WS(x, s1,s2…sn)&a…...
24届近5年江南大学自动化考研院校分析
今天给大家带来的是江南大学控制考研分析 满满干货~还不快快点赞收藏 一、江南大学 学校简介 江南大学(Jiangnan University)是国家“双一流”建设高校,“211工程”、“985工程优势学科创新平台”重点建设高校,入选…...
C++ 数组
数组是具有一定顺序关系的若干对象的集合体,组成数组的对象称为该数组的元素。 数组元素用数组名与带方括号的下标表示,同一数组的各个元素具有相同的类型。数组可以由除void型以外的任何一种类型构成,构成数组的类型和数组之间的关系&#x…...
Android LinearLayout dynamic add child ImageView,Glide load,kotlin
Android LinearLayout dynamic add child ImageView,Glide load,kotlin images.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"andro…...
HTML 是什么?它的全称是什么?
聚沙成塔每天进步一点点 专栏简介HTML是什么?HTML的全称是什么?写在最后 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对We…...
ATF(TF-A)安全通告
目录计划如下,相关内容补充中,待完成后进行超链接,敬请期待,欢迎关注 1、Advisory TFV-1 (CVE-2016-10319) 2、Advisory TFV-2 (CVE-2017-7564) 3、Advisory TFV-3 (CVE-2017-7563) 4、Advisory TFV-4 (CVE-2017-9607) 5、Adviso…...
LVS—DR集群的搭建
目录 lvs-dr模式工作原理: 搭建结构: 1、RS: 1)两台RS准备好httpd环境和测试文件 2)添加虚拟IP(vip)、添加访问本地vip的静态路由 并抑制ARP 2、DS: 1)安装ipvasadm…...
如何理解容量测试?如何做容量测试?
1、如何理解容量测试? 容量测试,是性能测试里的一部分,它的目的是测量系统的最大容量,为系统扩容、性能优化提供参考,节省成本投入,提高资源利用率。就是运用各种方法和工具在这种复杂的情况下去不断验证容…...
文件上传漏洞(webshell)
一、防护 1、防护 1、判断文件后缀,为图片的话才让上传成功。 2、解析文件内容(文件幻数)判断文件头和文件尾部是否一致 幻数 常见的 3、隐藏按钮(带上code唯一值) 4、二次渲染(类似拿着你的图片ÿ…...
.net几行代码音乐API各排行榜 热搜 入库
对比了几家大厂的音乐API的接口 这家相对规范些 现在开始从零开始 net6敏捷开发对接 入库吧 关键技术工具和思维 1 json 生成类 2 分析类 规划表设计3 sqlsuger codefirst 生成表 4 封装get post 连接5 类映射automapper6 sqlsuger 插入数据 1 json 生成类 宇宙 第 一的…...
使用gpt对对话数据进行扩增,对话数据扩增,数据增强
我们知道一个问题可以使用很多方式问,但都可以使用完全一样的回答,基于这个思路,我们可以很快的扩增我们的数据集。思路就是使用chatgpt或者gpt4生成类似问题,如下: 然后我们可以工程化这个过程,从而快速扩…...
算法练习工程1.2
题目要求: * 问题标题:删除有序数组中的重复项: * 题意说明: * 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 * …...
数字IC流片经历有多重要?怎样才能有流片机会?
都说拥有流片经验可以显示你在实际项目中的实践能力和对整个设计流程的了解程度,流片经历的重要性不言而喻。 什么是芯片流片 像流水线一样通过一系列工艺步骤制造芯片,这就是流片。在芯片制造过程中一般有两段时间可以叫作流片。 流片:英…...
fontfaceobserver 第三方字体加载优化方案
fontfaceobserver 第三方字体加载优化方案 1. github地址 https://github.com/bramstein/fontfaceobserver 2. 基础使用方法 const font new FontFaceObserver(My Family, {weight: 400 });font.load().then(function () {console.log(Font is available); }, function ()…...
laravel安装composer依赖
一.问题描述 拉取的新项目没有依赖 项目根目录没有vendor目录 报错 二.安装composer,拉取依赖 1.如果没有composer先去下载 官网地址:Packagist / Composer 中国全量镜像 我的博客安装composer:composer最新版本安装_荒-漠的博客-CSDN博客 2.进入项目根目录cmd或者在项目中…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
