11111111

本文介绍了Yaml这种配置文件语言的基本语法,包括大小写敏感、缩进规则、字典和列表的转换,以及基本数据类型。在Python中,可以使用PyYaml模块读写Yaml文件,方便地将Yaml转换为Python的数据结构。文章还提到了Yaml的复合结构、引用、强制转换以及在测试用例中的应用。
摘要由CSDN通过智能技术生成

目录

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 功能运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值