测试开发全栈之Python自动化 [自动化测试学习笔记] yaml 文件操作

程序员一凡 · 2020年12月16日 · 最后由 An 回复于 2022年12月23日 · 3343 次阅读

什么是 yaml

一种标记语言。yaml 是专门用来写配置文件的语言,非常简洁和强大
更直观,更方便,有点类似于 json 格式

自动化测试需要做到代码和数据分离,我们经常需要将不同的数据放到不同的文件内进行读取,比如用例放到 Excel 表里,配置文件放到 ini 文件里等等。yaml 专门用于写配置文件

yaml 基本语法规则

大小写敏感
使用缩进表示层级关系
缩进时不允许使用 Tab 键,只允许使用空格。
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
# 表示注释,这个和 python 的注释一样

安装 yaml
###pip install pyyaml

读取 yaml
键值对 (dict)
yaml 文件,test.yaml

###user: admin
pwd: 123456

用 python 读取 yaml 文件案例如下,先用 open 方法读取文件数据,再通过 load 方法转成 Python 对像,这个 load 跟 json 里面的 load 是相似的。

#! /usr/bin/python3

-- coding:utf-8 --

@Time : 2020/8/17 9:23

@Author : 程序员一凡

import yaml

定义 yaml 文件路径

yaml_path = "E:\study\date.yaml"

打开 yaml 文件

file = open(yaml_path, "r", encoding="utf-8")

读取

string = file.read()
dict = yaml.load(string)

转换后数据类型为:dict

print(type(dict))
print(dict)

运行结果:

{'usr': 'admin', 'pwd': 123456}

序列 (list)

yaml 里面写一个数组,前面加一个 ‘-’ 符号,如下

  • admin1
  • admin2
  • admin3

#! /usr/bin/python3

-- coding:utf-8 --

@FileName: day6.py

@Time : 2020/8/17 9:23

@Author : 程序员一凡

import yaml

定义文件路径

yaml_path = "E:\study\date.yaml"
file = open(yaml_path, "r", encoding="utf-8")
string = file.read()
print(string)

转换后数据类型为列表

list = yaml.load(string, Loader=yaml.FullLoader)
print(list)

运行结果


['admin1', 'admin2', 'admin3']

纯量 (str)
单个的、不可再分的值。如:字符串、布尔值、整数、浮点数、Null、时间、日期

布尔值 true/false

n: true

int

n1: 12

float

n2: 12.3
# None
n3: ~

{'n': True, 'n1': 12, 'n2': 12.3, 'n3': None}

混合使用

字典镶嵌在列表内

  • usr:
    name: admin
    pwd: 123456

  • mail:
    user: 1224653735@qq.com
    pwd: 123456

运行结果:

###[{'usr': {'name': 'admin', 'pwd': 123456}}, {'mail': {'user': '1224653735@qq.com', 'pwd': 123456}}]

数据写入 yaml

使用 yaml 下的 dump 方法将数据写入到 yaml 文件内

#! /usr/bin/python3

-- coding:utf-8 --

@Time : 2020/8/17 9:23

@Author : 程序员一凡

import yaml
写入键值对

data = {"send_mail": "7924348@qq.com"}

写入列表

data =["7924348@qq.com", "1224653735@qq.com"]

写入混合数据

data = [{"mai": {"send": "1224653735@qq.com"}}]

yaml 文件路径

yaml_path = "E:\study\date.yaml"

打开文件,a 是在文件末尾写入内容

file = open(yaml_path, "a", encoding="utf-8")

写入数据, allow_unicode=True

yaml.dump(data, file)

关闭文件

file.close()

运行结果

键值对

send_mail: 7924348@qq.com

列表

  • 7924348@qq.com
  • 1224653735@qq.com

混合数据

  • mai: send: 1224653735@qq.com

实战

上面我们说了 yaml 用于在自动化测试中实现代码和数据分离。那么我们在企业项目中如何用 yaml 实现代码和数据分离呢?有一个场景,我们要发送邮件给指定收件人。

编写 yaml 文件

将收发邮件人数据写到 yaml 文件内

发件人邮箱和授权码

  • send_mail: xxx@qq.com password: QQ 邮箱的授权码 # 收件人邮箱
  • get_mail: yyyy@qq.com

读取 yaml 文件

#! /usr/bin/python3

-- coding:utf-8 --

@FileName: read_yaml.py

@Time : 2020/8/19 16:21

公众号 : 程序员一凡

import yaml

def read_yaml():
"""读取 yaml 文件"""

# 定义 yaml 文件路径
yaml_path = "E:\mail\date\yaml.yaml"
# 打开 yaml 文件
file = open(yaml_path, "r")
# 读取文件
string = file.read()
# 转换为 python 对像,类型为字典
dict = yaml.load(string)
print(dict)
# 返回数据为字典类型
return dict

运行结果
###[{'send_mail': 'xxx@qq.com', 'password': 'code'}, {'get_mail': 'yyyy@qq.com'}]

发送邮件
#! /usr/bin/python3

-- coding:utf-8 --

@FileName: mail.py

@Time : 2020/8/19 16:20

公众号 : 程序员一凡

import zmail

导入 common 文件下的 read_yaml 函数

from common import read_yaml

调用 yaml 文件里的数据

response = read_yaml.read_yaml()

def send(send_mail, password, get_mail):
"""发送测试报告"""

report_path = "E:\mail\report\test.html"
MAIL = {
'subject': '邮件主题',
'content_text': '测试发送邮件',
'attachments': report_path,
}
server = zmail.server(send_mail, password)
server.send_mail(get_mail, MAIL)

send(response[0]["sendmail"], response[0]["password"], response[1]["getmail"])

课后练习

写一个登录的脚本,把登录的测试数据放在 yaml 文件中,然后读取 yaml 文件,执行脚本
将执行后的结果写入 Yaml 文件

文章首发于公众号程序员一凡,愿你我相遇皆有所获!

共收到 2 条回复 时间 点赞

请教个问题,要读取的 yaml 文件内容如图

但是通过 yaml.load 方法读取后,返回的类型是 string,不是 dict,这是咋回事?

晴天 回复

你的 yaml 文件格式不正确,应该是 name: 哼哼哼 注意冒号后面是要有一个空格的这样才会识别为字典

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册