自动化项目配置或用例文件格式推荐--yaml
关于yaml
- YAML语言的设计目标,就是方便人类读写。如果你想要实现一些用ini不好做到的配置,可以使用yaml格式作为配置文件
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#
表示注释,从它开始到行尾都被忽略
yaml数据结构
1. yaml转字典
yaml中支持映射或字典的表示,如下:
# 下面格式读到Python里会是个dict
name: 灰蓝
age: 0
job: Tester
输出:
{'job': 'Tester', 'age': 0, 'name': u'\u7070\u84dd'}
2. yaml转列表
yaml中支持列表或数组的表示,如下:
# 下面格式读到Python里会是个list
- 灰蓝
- 0
- Tester
输出:
[u'\u7070\u84dd', 0, 'Tester']
3. 复合结构
字典和列表可以复合起来使用,如下:
# 下面格式读到Python里是个list里包含dict
- name: 灰蓝
age: 0
job: Tester
- name: James
age: 30
输出:
[{'job': 'Tester', 'age': 0, 'name': u'\u7070\u84dd'}, {'age': 30, 'name': 'James'}]
4. 基本类型
yaml中有以下基本类型:
- 字符串
- 整型
- 浮点型
- 布尔型
- null
- 时间
- 日期
我们写个例子来看下:
# 这个例子输出一个字典,其中value包括所有基本类型
str: "Hello World!"
int: 110
float: 3.141
boolean: true # or false
None: null # 也可以用 ~ 号来表示 null
time: 2016-09-22t11:43:30.20+08:00 # ISO8601,写法百度
date: 2016-09-22 # 同样ISO8601
输出:
{'date': datetime.date(2016, 9, 22), 'None': None, 'boolean': True, 'str': 'Hello World!', 'time': datetime.datetime(2016, 9, 22, 3, 43, 30, 200000), 'int': 110, 'float': 3.141}
如果字符串没有空格或特殊字符,不需要加引号,但如果其中有空格或特殊字符,则需要加引号了
str: 灰蓝
str1: "Hello World"
str2: "Hello\nWorld"
输出:
{'str2': 'Hello\nWorld', 'str1': 'Hello World', 'str': u'\u7070\u84dd'}
这里要注意单引号和双引号的区别,单引号中的特殊字符转到Python会被转义,也就是到最后是原样输出了,双引号不会被Python转义,到最后是输出了特殊字符;可能比较拗口,来个例子理解下:
str1: 'Hello\nWorld'
str2: "Hello\nWorld"
# -*- coding: utf-8 -*-
import yaml
y = yaml.load(file('test.yaml', 'r'))
print y['str1']
print y['str2']
输出:
Hello\nWorld
Hello
World
可以看到,单引号中的’\n’最后是输出了,双引号中的’\n’最后是转义成了回车
读写yaml文件
- 安装:pip install ruamel.yaml
- 使用ruamel.yaml库里面函数参数Loader=ruamel.yaml.RoundTripLoader和Dumper=ruamel.yaml.RoundTripDumper可以用来保持新生成的yaml文件的表现和输入文件一致。代码如下:
from ruamel import yaml
if __name__ == "__main__":
#从yaml文件读取
with open('father.yml','r',encoding="utf-8"
) as f:
content = yaml.load(f, Loader=yaml.RoundTripLoader)
# output: <type 'dict'>
print(type(content))
print(content)
content.update({'age': 38})
print(content)
#写入到yaml文件
with open('ruamel.yml', 'w',,encoding="utf-8"
) as nf:
yaml.dump(content, nf, Dumper=yaml.RoundTripDumper)
生成新的yaml文件形式如下,正是我们期望的格式:
name: John Smith
age: 38
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 15
- name: Jenny Smith
age: 12
自动化项目配置或用例文件格式推荐--yaml的更多相关文章
- Selenium Web 自动化 - 项目持续集成(进阶)
Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置 2.1 SVN的安装及使用 2.2 新建Jenkins任务3 过程分析 1 背景 ...
- Selenium Web 自动化 - 项目持续集成
Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备 1.1 安装git 1.2 安装jenkins 1.3 安装jenkins插件 1.4 jekins ...
- Android 项目配置 gitlab-ci 持续集成
一.项目根目录下创建一个 .gitlab-ci.yml 文件 然后在 .gitlab-ci.yml 中配置持续集成的脚本: 脚本配置详细可以看: Configuration of your jobs ...
- Selenium Web 自动化 - 项目实战(一)
Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...
- playwright自动化项目搭建
这是关于playwright系列介绍的最后一篇.搭建基于 playwright 的自动化项目. GitHub地址: https://github.com/defnngj/playwright-pro ...
- python+pytest接口自动化(16)-接口自动化项目中日志的使用 (使用loguru模块)
通过上篇文章日志管理模块loguru简介,我们已经知道了loguru日志记录模块的简单使用.在自动化测试项目中,一般都需要通过记录日志的方式来确定项目运行的状态及结果,以方便定位问题. 这篇文章我们使 ...
- Selenium Web 自动化 - 项目实战(三)
Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解 3.1 解析新增页面目录 3.2 解析新增测试用例目录 3. ...
- Gulp.js - 简单、直观的自动化项目构建工具
Gulp.js 是一个简单.直观的构建系统.崇尚代码优于配置,使复杂的任务更好管理.通过结合 NodeJS 的数据流的能力,你能够快速构建.通过简单的 API 接口,只需几步就能搭建起自己的自动化项目 ...
- VC项目配置基础以及快捷键(收藏)
来自http://blog.csdn.net/phunxm/article/details/5082488 一.IDE基础配置 1.字体 VC6中“Tools→Options→Format→Font” ...
随机推荐
- 浅析String
浅析String String的设计结构: 首先我们看一下 String的源码 public final class String implements java.io.Serializabl ...
- IIR型高斯滤波的原理及实现
二.实现 GIMP中有IIR型高斯滤波的实现,代码位于contrast-retinex.c中,读者可自行查看.下面给出本人实现的核心代码: #include"stdafx.h" t ...
- 什么是Servlet容器?(分析很到位)
在本文中,我写了一些关于Web服务器.Servlet容器以及它与JVM的关系的基本概念.我想表达的是,Servlet容器也仅仅不过是一个Java程序. 1. 什么是Web服务器? 想要知道什么是Ser ...
- redis本地安装与开发
一.安装(MAC) https://redis.io sudo mv redis-4.0.11.tar.gz /usr/localcd /usr/localsudo tar -zxf redis-4. ...
- SpringBoot 2.x (7):拦截器
类似以前SpringMVC的拦截器,但也有一些区别 SpringBoot的拦截器有两种方式: 第一种方式:过时的方式,适用于SpringBoot1.x的方式 package org.dreamtech ...
- QQ面板拖拽(慕课网DOM事件探秘)(上)
QQ面板拖拽,效果如图 JavaScript代码如下: function getByClass(clsName, parent) { var oParent = parent ? document.g ...
- 数据库SQL server 删除一张表中的重复记录
--建立一张表 create table cat( catId int, catName varchar(40) ) --将下边的插入语句,多执行几次. insert into catvalues(1 ...
- Elasticsearch插件清单
1.API插件:主要对Elasticsearch添加的API特性或者功能,通常用于搜索或者映射 2. 报警插件: 当Elasticsearch的索引指标超过阀值时就会触发 3. 分词插件:ik是比较好 ...
- k近邻法(kNN)
<统计学习方法>(第二版)第3章 3 分类问题中的k近邻法 k近邻法不具有显式的学习过程. 3.1 算法(k近邻法) 根据给定的距离度量,在训练集\(T\)中找出与\(x\)最邻近的\(k ...
- Mac 创建软链接
ln -s /Volumes/dzqExt/source/wukongqipai/wukongqipai/ccclient/Classes/ ./frameworks/runtime-src/ ...