目录
1. Yaml格式简介
1.1 Python搭建Yaml环境
2. Yaml基本语法
2.1 基本规则
2.2 yaml转字典
2.3 yaml转列表
2.4 复合结构
2.5 基本类型
2.6 引用
2.7 强制转换
3. Yaml格式测试用例
3. 1 yaml使用场景
3.2 yaml语法
3.3 yaml操作
1. Yaml格式简介
YAML的意思是:“Yet Another Markup Language”(仍是一种置标语言)的缩写
YAML是专门用来写配置文件的语言,非常简洁和强大,远比JSON格式方便
可以用之作为你自动化测试框架的配置文件或者用例文件
1.1 Python搭建Yaml环境
PyYaml是Python的一个专门针对yaml文件操作的模块,使用起来非常简单
pip install PyYaml
2. Yaml基本语法
2.1 基本规则
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左对齐即可
#表示注释,从它开始到行尾都被忽略
2.2 yaml转字典
# 下面格式读到python里会是个dict
name:灰蓝
age:0
job:Tester
输出
{'job':'Tester','age':0,'name':u\u7070\u84dd}
2.3 yaml转列表
yaml中支持列表或数组的表示,如下:
# 下面格式读到python里回事个list
- 灰蓝
- 0
- Tester
输出
[u'\u7070\u84dd', 0, 'Tester']
2.4 复合结构
字典和列表可以复合起来使用,如下:
# 下面格式读到python里会是个dict
- name:灰蓝
age:0
job:Tester
- name:jams
age:30
输出
[{'job':'Tester','age':0,'name':u\u7070\u84dd},
{'age':30,'name':'jams'}]
2.5 基本类型
yaml中有以下基本类型:
字符串
整形
浮点型
布尔型
null
时间
日期
我们写个例子看看:
str: "Hello world!"
int: 110
float: 3.14
boolean: true # or false
None: null # 也可以用 ~ 号来表示null
time: 2020-07-20t11:43:30.20+08:00 # ISO8601,写法百度
date: 2020-07-20 # 同样ISO8601
输出:
{'str': 'Hello world!', 'int': 110, 'float': 3.14, 'boolean': True, 'None': None, 'time': datetime.datetime(2020, 7, 20, 11, 43, 30, 200000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800))), 'date': datetime.date(2020, 7, 20)}
这里要注意单引号和双引号的区别,单引号中的特殊字符转到Python会被转义,也就是到最后是原样输出了,双引号不会被python转义,到最后是输出了特殊字符;可能比较拗口,来个例子理解下:
info: helloworld
info1: 'hello\world'
info2: "hello\nworld"
import yaml
def get_yaml_data(fileDir):
# 1. 打开yaml文件
fo = open(fileDir,'r',encoding='utf-8')
# 2. 使用第三方库去获取
res = yaml.load(fo,Loader=yaml.FullLoader) # 处理警告
print(res)
print(res['info1'])
print(res['info2'])
if __name__ == '__main__':
get_yaml_data('../configs/config.yaml')
如果字符串没有空格或者特殊字符,不需要加引号,但如果其中有空格或特殊字符,则需要加引号了
info: helloworld
info1: "hello world"
info2: "hello\nworld"
输出:
这里要注意单引号和双引号的区别,单引号中的特殊字符转到Python会被转义,也就是到最后是原样输出了,双引号不会被python转义,到最后是输出了特殊字符;可能比较拗口,来个例子理解下:
# 单引号/n 双引号/n
info: helloworld
info1: 'hello world'
info2: "hello\nworld"
输出:
可以看到,单引号中的'/n'最后是输出了,双引号中的'/n'最后是转义成了回车
字符串处理中写成多行、'|'、'>'、'+'、'-'的意义这里就不讲了。
分隔符,分割多个yaml文件
# 分隔符,分割多个yaml文件 ---
---
info:
- 10
- 20
- 30
---
data:
- 1000
- 2000
- 3000
import yaml
# def get_yaml_data(fileDir):
# # 1. 打开yaml文件
# fo = open(fileDir,'r',encoding='utf-8')
# # 2. 使用第三方库去获取
# res = yaml.load(fo,Loader=yaml.FullLoader) # 处理警告
# print(res)
# print(res['info1'])
# print(res['info2'])
def get_yamls_data(fileDir):
'''
des: 一个yaml文件内包含多个yaml数据
:param fileDir:
:return:
'''
# 1. 打开yaml文件
fo = open(fileDir,'r',encoding='utf-8')
# 2. 使用第三方库去获取
res = yaml.load_all(fo,Loader=yaml.FullLoader) # 处理警告
for one in res:
print(one)
if __name__ == '__main__':
get_yamls_data('../configs/config.yaml')
2.6 引用
&和*用于引用
name: &name 灰蓝
tester: *name
输出:
name: 灰蓝
tester: 灰蓝
2.7 强制转换
yaml是可以进行强制转换的,用! ! 实现,如下:
str: !!str 3.14
int: !!int "123"
输出:
明显能够看到23被强制转成了int类型,而flaoat型的3.14则被强转成了str型。
另外pyYaml还支持转换成Python/object类型。
2.8 分段
在同一个yaml文件中,可用 ---来分段,这样可以将多个文档写在一个文件中
---
name: cc
age: 20
---
name: cici
age: 18
这时候我们就得用到我们的load_all()方法出场了,load_all方法会生成一个迭代器,可以用for输出出来:
import yaml
ys = yaml.load_all(file('test.yaml','r'))
for y in ys:
print y
输出:
{'age': 20, 'name': 'cc'}
{'age': 18, 'name': 'kk'}
对应的也有dump_all()方法,一个意思,就是将多个段输出到一个文件中,
import yaml
object1 = {"name":"cc","age":20}
object2 = {"kk",18}
with open('test.yaml','w') as f:
res = yaml.dump_all([object1, object2], f)
打开test.yaml:
dump()和dump_all()方法可以传入列表,也可以传入一个可序列化生成器,如:range(0), 如下:
import yaml
y =yaml.dump(range(10))
print y
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
在dump和dump_all()的时候还可以配一堆参数
3. Yaml格式测试用例
3. 1 yaml使用场景
配置文件
测试用例
3.2 yaml语法
字典
列表
嵌套
注释
&*变量操作
多用例
空格与颜色变化
# yaml 测试用例
# 登录模块
# 列表:里面每个元素就是一个用例
# 字典:一个用例里面:一些详情
- #login_test_01
url: /account/sLogin #路径
method: POST #详情
detail: 用户名正确,密码正确 #详情
headers: #请求头
data: #请求体
username: md0000
password: 888888
resp:
code: 20000 #code
msg: 成功
- #login_test_02
url: /account/sLogin #路径
method: POST #详情
detail: 用户名正确,密码为空 #详情
headers: #请求头
data: #请求体
username: md0000
password:
resp:
code: 9999 #code
msg: 输入的密码错误!
3.3 yaml操作
运行模式
1. 使用终端运行:python -m run.py
2. 使用执行文件运行:
run.bat(windows)
run.sh(linux) 运行指令 ./run.sh
3. jenkins运行 会使用自带的sh 功能运行