【接口自动化_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数据,但是没写入

data0"res" ,整个data共2个字典元素,data0是第一个字典元素,data0"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:

    @staticmethod
    def 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文件(字典类型)的写入需要控制下标

dataidkey

字典,无序。

3、excele文件如何转为yaml

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

  2. 写入 yaml即可

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

自己手写是字典格式

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

复制代码
import openpyxl
from Dome_ExcelWriteYaml.config import *
import yaml

class FileReader:
    """
    专门用来读取文件的,Yaml、Excel
    """
    @staticmethod
    def 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


    @staticmethod
    def 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)结果

相关推荐
letisgo527 分钟前
VMware Workstation + Ubuntu 26.04 LTS 小白运维部署手册
linux·运维·ubuntu
蓝创工坊Blue Foundry32 分钟前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
晚风吹长发41 分钟前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ2131 小时前
Docker Compose 安装与配置指南
运维·docker·容器
麦聪聊数据1 小时前
企业数据市场建设(四):流程闭环与价值运营,让数据市场真正转起来
运维·数据库
是潮汕的灿灿展吖2 小时前
Centos离线部署nfs操作
linux·运维·centos
见合八方2 小时前
【噪声系数】高偏SOA噪声系数测试方法
网络·自动化·soa·光通信·激光雷达·半导体光放大器
FII工业富联科技服务2 小时前
从灯塔工厂到AI Factory新模式:AI正在重构制造业的四大核心能力
大数据·运维·人工智能·重构·ar·制造
小五传输2 小时前
自主可控建设指南:Serv-u替代方案,实现平滑迁移业务不中断
大数据·运维·安全
jun_bai2 小时前
Orthanc服务器使用java上传dicom影像文件
java·运维·服务器