YAML快速学习-自动化测试应用场景

YAML

yet another markup language

概述

yaml是设计专门用来写配置文件的标记语言。

安装pyyaml模块
pip install pyyaml
语法要求:
  1. yaml大小写敏感;
  2. 使用缩进代表层级关系;
  3. 缩进只能使用空格,不能使用tab键,而不严格空格数量,同级左对齐即可;
  4. #表示行注释
yaml数据格式:

yaml只有三种数据格式:常量、对象和数组

1. 对象:

键值对的集合,包括 映射 哈希和字典,使用冒号加个空格表示, 格式为 key:value

 key:
      child_key1:value1
      child_key2:value2

yaml可以使用流式(flow)语法表示对象,即:
key:{child_key1:value1,child_key2:value2}
复杂对象格式:
可以使用问号加一个空格代表一个复杂的key,配合一个冒号加一个空格代表一个value:

	?
        - complexkey1
        - complexkey2
    :
        - complexvalue1
        - complexvalue2
2. 数组

一组按次序排列的值,包括序列和列表,使用短横线加个空格表示

	name:
 		- tom
  		- abby
	-
 	 	- tom
 		- abby

–>可以理解[[tom,abby]]

属性和数组相互构成的例子:

companies:
    -
        id: 1
        name: company1
        location: beijing
    -
        id: 2
        name: company2
        location: shanghai
3. 常量

提供了多种包括:整数、浮点数、字符串、布尔型、NULL、日期和时间的常量结构;
boolean:
- TRUE #true,True都可以
- FALSE #false,False都可以
float:
- 3.14
- 6.8523015e+5 #可以使用科学计数法
int:
- 123
- 0b1010_0111_0100_1010_1110 #二进制表示
null:
nodeName: ‘node’
parent: ~ #使用~表示null
string:
- 哈哈
- ‘Hello world’ #可以使用双引号或者单引号包裹特殊字符
- newline
newline2 #字符串可以拆成多行,每一行会被转化成一个空格
date:
- 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
- 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
使用双感叹号,表示强制转换
var1: !!str 11 #int转str
var2: !!str true #bool转str

使用场景1:yaml文件复杂格式的写入,包括list嵌套dict,dict嵌套list

  1. list嵌套dict,在yaml里面写入如下内容:
- user: admin1
  psw: '123456'
- user: admin2
  psw: '111111'
- user: admin3
  psw: '222222'
用python读取出来的结果:
    [{'user': 'admin1', 'psw': '123456'},
    {'user': 'admin2', 'psw': '111111'},
    {'user': 'admin3', 'psw': '222222'}]
  1. dict嵌套list,在yaml里面写入如下内容:
	nub1:
        - admin1
        - '123456'
    nb2:
        - admin2
        - '111111'
    nb3:
        - admin3
        - '222222'
用python读取出来的结果:
    {'nub1': ['admin1', '123456'],
    'nb2': ['admin2', '111111'],
    'nb3': ['admin3', '222222']}

使用场景2:python读取yaml文件内容

解决方法: 使用python3,先用open方法读取文件数据,再通过load方法转换成字典

 def get_inputData(filename):
    # 获取yaml文件路径
    yamlPath = os.path.join(mockFileDir, filename)
    # open方法打开yaml输入文件,直接读出来
    f = open(yamlPath, 'r', encoding='utf-8')
    cfg = f.read()  # type(cfg)->str
    # 用load方法转字典
    dict_data = yaml.load(cfg)
    return dict_data

使用场景3:python写入yaml文件内容

解决方法:使用python3,先用open方法追加写入文件,再通过dump装载数据

获取yaml文件路径

 	yamlPath = os.path.join(mockFileDir, "output.yaml")
    # open方法写入yaml输出文件,a表示追加写入数据,w表示覆盖写入
    fa = open(yamlPath, 'a', encoding='utf-8')
    data = {"kv1", {'para1': 'value1', 'para2': 'value2', 'para3': 'value3'}}
    yaml.dump(data, fa)
    # 验证写入的数据是否正确
    f = open(yamlPath, 'r', encoding='utf-8')
    content=f.read()
    dict_data = yaml.load(content)
    print(dict_data.get('kv1'))

你可能感兴趣的:(#,自动化脚本开发)