【接口自动化_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)结果

相关推荐
乘云数字DATABUFF3 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--5 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森5 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜5 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB6 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode8 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220709 天前
如何搭建本地yum源(上)
运维
大树8811 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠11 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质12 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务