Yaml使用

Posted zibinchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yaml使用相关的知识,希望对你有一定的参考价值。

Yaml使用说明

 

前面我们配置Capability时,各个参数都是在代码里面写死的,比如:desired_caps[‘platformVersion‘]=‘5.1.1‘ 一旦设备和测试的app发生改变则需要去代码里面一个个修改,要么同时根据不同设备不同App来维护多套代码,这样显示是不符合规范而且是低效的!违背了自动化的初衷,那么如何改进这样的现状呢?

 

 

针对这种可能频繁变动的部分,可以将数据和代码分离。将数据单独抽离出来放在配置文件里面, 代码直接从配置文件去读取数据,这样能够减少代码冗余,提高效率。PS:类似的Web前端的html标签和css分离。

 

配置数据该如何管理?这里我们推荐使用yaml来管理配置数据。

1、Yaml概述

1、Yaml简介

正如YAML所表示的YAML Ain’t Markup Language,YAML 是一种简洁的非标记语言。YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。

 

由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。列一下现有的语言实现:Ruby,Java,Perl,Python,phpjavascript等。

 

YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。比如同一段数据Josn和Yaml的表示分别如下:

Json

{ name: Tom Smith,age: 37,spouse: { name: Jane Smith, age: 25 },children: [ { name: Jimmy Smith, age: 15 },{ name: Jenny Smith, age: 12 } ] }

yaml

name: Tom Smith
age: 37
spouse:
    name: Jane Smith
    age: 25
children:
 - name: Jimmy Smith
   age: 15
 - name: Jenny Smith
   age: 12

 

2、语法特点

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

3、yaml下载安装

pip install pyyaml

检查是否安装成功

1、输入python

2、再输入:import yaml

报不是内部文件证明没有安装成功,需要重新安装

没有报错,表明安装成功

 

2、Yaml数据类型详解

1、支持数据类型

  • 纯量scalars):单个的、不可再分的值
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

 

2、纯量

数据最小的单位,不可以再分割。类似于Python中单个变量

flag

 

3、list数组

Python的list数组结构类似,数组元素使用“-”开头,也可以根据缩进进行数组嵌套。

- Jack
- Harry
- Sunny

# 也可以写成一行
[Jack,Harry,Sunny]

 

4、对象

对象的一组键值对,使用冒号结构表示。类似Python中的字典数据结构。

platformName: android
platformVersion: 6.0.1

# Yaml 也允许另一种写法,将所有键值对写成一个行内对象。
{platformName: Android,platformVersion: 6.0.1}

注意:冒号后面一定要有空格!对应到python字典的写法如下:

{platformName: Android, platformVersion: 6.0.1}

 

5、数据嵌套

yaml数据嵌套表示可以将上面的各类数据根据实际场景进行组合嵌套。

数据场景

Tom Smith 37岁,他有一个妻子叫 Jane Smith,25岁。 另外他有2个孩子,一个叫Jimmy Smith,15岁;另外一个叫Jenny Smith ,12岁。

yaml语法表示如下:

familyInfo.yaml

name: Tom Smith
age: 37
spouse:
    name: Jane Smith
    age: 25
children:
 - name: Jimmy Smith
   age: 15
 - name: Jenny Smith
   age: 12

转化为Python的写法为:

{name:Tom Smith,age:37,spouse:{name:Jane Smith,age:25},childern:[{name:Jimmy Smith,age:15},{name:Jenny Smith,age:12}]}

 

3、Yaml数据操作

 1、数据读取

测试场景
  • 读取配置中的所有信息
  • 读取yaml数据表中Tom Smith的姓名、年龄、信息
  • 单独读取配偶的姓名和年龄信息
  • 分别读取两个孩子的姓名、年龄信息
load方法

load(stream, Loader=Loader) 解析文件流中的第一个YAML文档并生成相应的Python对象。

代码实现

yaml_load.py

 1 import yaml
 2 
 3 file=open(familyInfo.yaml,r)
 4 data=yaml.load(file)
 5 
 6 print(data)
 7 
 8 print(data[name])
 9 print(data[age])
10 
11 print(data[spouse])
12 print(data[spouse][name])
13 print(data[spouse][age])
14 
15 print(data[children])
16 print(data[children][0][name])
17 print(data[children][0][age])
18 
19 print(data[children][1][name])
20 print(data[children][1][age])

 

2、数据修改

如果想改变某个数据,可以使用如下方法:

data[name]=555543d
print(data[name])

注意:此处只是变量类型的数据变更,不会真正修改到yaml配置表中的数据。

 

3、数据转化

方法:dump()可以将Python对象序列化成YAML流。如果stream为None,则返回生成的字符串。

 

测试场景

将下面python数据类型转化为yaml数据类型

slogan=[welcome,to,51098]
website={url:www.baidu.com.net}

代码:

 1 import yaml
 2 
 3 slogan=[welcome,to,wc098]
 4 website={url:www.baidu.com.net}
 5 
 6 #python data
 7 print(slogan)
 8 print(website)
 9 
10 #yaml data
11 print(yaml.dump(slogan))
12 print(yaml.dump(website))
[welcome, to, wc098]
{url: www.baidu.com.net}
- welcome
- to
- wc098

url: www.baidu.com.net

 

 

 

以上是关于Yaml使用的主要内容,如果未能解决你的问题,请参考以下文章

云原生时代的 YAML 教程

如何转义 YAML 字符串中的冒号和其他特殊字符?

如何从 python 中的嵌套 YAML 文件中读取数据?

如何在 graphQL 片段中定义可选字段以进行查询

实用的 PyYAML 使用技巧

如何在自定义PyYAML构造函数中处理递归?