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

【接口自动化_08课_Pytest+Yaml+Allure框架】

上节课一些内容 的补充

1、openxl这个方法,第一个元素是从1开始的,不是从0开始

回写的列在程序里写的是11,是因为是固定值

一、1. Yaml入门及应用

 1、什么是yaml

YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。

和excel没有太大的区别,只是格式不一样而已。

序列化 : 特定的格式需要去进行遵守。

2、yaml的语法

基本语法:(和python有点类似)
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab(前面的空格),只允许空格 ---总结一句,不要用tab
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#' 表示注释

 对空格数量不重要,左对齐的解释:

1)正常转换:

单个空格

多个空格

 

2)左对齐,但无空格

3) 未左对齐

4)报错--使用tab

 

3、Yaml的数据格式

Yaml可以写什么内容?(只要你在python用到一些类型和数据格式都是可以的)--了解

- 纯量(scalars):单个的、不可再分的值(例如数字、字符)
-  数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
-  对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

1)数组的写法:-开头+空格+数据

用 - 开头,后面跟一个空格(数量不做限制)

- 空格(数量不做限制) 数据1

-

 字符串18

与整型18

2)对象的写法:key: 空格(数量不做限制) value

3)数组套数组(列表套列表)

错误写法:

正确写法:通过- 来分层级,一个左对齐的 - 代表一个层级

 4)数组套对象(列表套字典)

4、读取yaml文件

yaml文件的创建

不管是什么文件都会有扩展名:xlsx/xls 、 doc /docx 、exe

yaml文件也有扩展名:yaml yml 两种扩展名都ok的

和读取text普通文件的方式一样,,

with open(file_path, "r", encoding="utf-8") as file:

但是读取yaml文件,需要

1)把模板调整成Yaml 格式,文件需要是.yaml

yaml中是用null代表空,但是由python读取后,是用none代表空

2)读取方法:safe_load()

需要引入pyyaml包

pip install pyyaml

pip install pyyaml -i https://pypi.tuna.tsinghua.edu.cn/simple

3)读取的写法

import yaml  # 普通文件的读取# 读取数据
file_path = "test_yaml_01.yaml"
with open(file_path, "r", encoding="utf-8") as file:# 读取data = yaml.safe_load(file)print(data)

运行结果:

yaml中是用null代表空,但是由python读取后,是用none代表空

[{'age': '18', 'ctiy': '长沙', 'name': '哈米', 'res': '登录失败'}, {'age': '19', 'ctiy': '长沙2', 'name': '哈米1', 'res': None}]

 5、写入yaml文件

1)修改了data数据,但是没写入

data[0]["res"] ,整个data共2个字典元素,data[0]是第一个字典元素,data[0]["res"]是第一个字典元素里的res

yaml文件内容不变

2)修改了data数据,写入了yaml

需要写:

allow_unicode=True,避免乱码

查看yaml文件,已经写入了

 二、pytest+yaml+allure框架

1、文件维护(2处)

1)data目录需要是yaml格式的文件和内容

2)config.py文件 :维护好文件路径:

2、 在FileDataDriver.py文件封装读取和写入的方法

1)读取方法的封装

import yaml# 用来读取和写入excel\yaml
from P08_PytestFrame.config import *class FileDataDriver:@staticmethoddef read_yaml(file_path=YAMLDATAURL):with open(file_path, "r", encoding="utf-8") as file:# 读取data = yaml.safe_load(file)return data
1.2)修改核心执行器里的数据源读取方式需要修改

pip install pymysql
pip install jinja2 -i https://pypi.tuna.tsinghua.edu.cn/simple
 1.2) 执行main方法

 2)写入方法的封装

excel文件的写入,需要控制行和列;yaml文件(字典类型)的写入需要控制下标

data[id][key]

字典,无序。

3、excele文件如何转为yaml

1. 读取EXCEL --- [{},{}]

2. 写入 yaml即可

这种写法,最后写出来 是字符串格式

自己手写是字典格式

1) 数据驱动,先读excel文件的数据

import openpyxl
from Dome_ExcelWriteYaml.config import *
import yamlclass FileReader:"""专门用来读取文件的,Yaml、Excel"""@staticmethoddef readExcelToDict(file_path=CASEDATAURL,sheet_name=SHEETNAME):# 打开现有的Excel文件或创建新的文件print(CASEDATAURL)try:workbook = openpyxl.load_workbook(file_path)except FileNotFoundError:workbook = openpyxl.Workbook()# 选择或创建指定的工作表if sheet_name in workbook.sheetnames:worksheet = workbook[sheet_name]else:worksheet = workbook.create_sheet(sheet_name)# 获取列名headers = [cell.value for cell in worksheet[2]]# 将数据存储为字典data = []# 把小的数据从第三行开始for row in worksheet.iter_rows(min_row=3, values_only=True):data.append(dict(zip(headers, row)))workbook.close()return data@staticmethoddef write_yaml(data, file_path=YAMLDATA):"""写入yaml文件,写入无序没有关系,通过key获取数据:param data: 需要写入的数据:param file_path: 文件路径:return:"""with open(file_path, 'w', encoding='utf-8') as file:# 可以结合异常处理进行封装try:yaml.dump(data, file, allow_unicode=True)print("YAML数据写入成功。")except yaml.YAMLError as e:print(f"YAML数据写入失败: {e}")

2)执行main方法

from Dome_ExcelWriteYaml.Common.FileDataDriver import FileReader
data = FileReader.readExcelToDict()
print(data)
FileReader.write_yaml(data)

3)结果

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从统计学、到机器学习和ChatGPT
  • 数据结构第三讲:单链表的实现
  • GitLab添加TortoiseGIT生成SSH Key
  • Java 中如何执行命令行方法
  • 初识godot游戏引擎并安装
  • JAVA基础知识4(static、继承)
  • Spring中存储Bean的相关注解及用法
  • 【C++】类和对象之继承
  • 数组算法--二分查找
  • php 做一个mqtt按钮,发布触发信号
  • Unity UGUI 之 Input Field
  • 深入浅出WebRTC—Pacer
  • elementPuls 表格反选实现
  • 【LLM】-07-提示工程-聊天机器人
  • HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 答案纯享版
  • 深入了解以太坊
  • ES6指北【2】—— 箭头函数
  • Android优雅地处理按钮重复点击
  • CSS3 变换
  • es6(二):字符串的扩展
  • ES6之路之模块详解
  • java多线程
  • PHP变量
  • React Transition Group -- Transition 组件
  • spark本地环境的搭建到运行第一个spark程序
  • Spark学习笔记之相关记录
  • 服务器从安装到部署全过程(二)
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 排序(1):冒泡排序
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端面试之闭包
  •  一套莫尔斯电报听写、翻译系统
  • 用Python写一份独特的元宵节祝福
  • PostgreSQL之连接数修改
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (C语言)fgets与fputs函数详解
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (接口自动化)Python3操作MySQL数据库
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (七)理解angular中的module和injector,即依赖注入
  • (全注解开发)学习Spring-MVC的第三天
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (四)Controller接口控制器详解(三)
  • (五)MySQL的备份及恢复
  • ****Linux下Mysql的安装和配置
  • ***检测工具之RKHunter AIDE
  • ***利用Ms05002溢出找“肉鸡
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET Compact Framework 多线程环境下的UI异步刷新