什么是 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
import yaml
yaml_path = "E:\study\date.yaml"
file = open(yaml_path, "r", encoding="utf-8")
string = file.read()
dict = yaml.load(string)
print(type(dict))
print(dict)
{'usr': 'admin', 'pwd': 123456}
序列 (list)
yaml 里面写一个数组,前面加一个 ‘-’ 符号,如下
#! /usr/bin/python3
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、时间、日期
n: true
n1: 12
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
import yaml
写入键值对
yaml_path = "E:\study\date.yaml"
file = open(yaml_path, "a", encoding="utf-8")
yaml.dump(data, file)
file.close()
运行结果
send_mail: 7924348@qq.com
实战
上面我们说了 yaml 用于在自动化测试中实现代码和数据分离。那么我们在企业项目中如何用 yaml 实现代码和数据分离呢?有一个场景,我们要发送邮件给指定收件人。
编写 yaml 文件
将收发邮件人数据写到 yaml 文件内
读取 yaml 文件
#! /usr/bin/python3
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
import zmail
from common import read_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 文件
文章首发于公众号程序员一凡,愿你我相遇皆有所获!