一、yaml简介

yaml:一种标记语言,专门用来写配置文件。

二、yaml基础语法

  • 区分大小写;
  • 使用缩进表示层级关系;
  • 使用空格键缩进,而非Tab键缩进
  • 缩进的空格数目不固定,只需要相同层级的元素左侧对齐;
  • 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
  • 注释标识为#

三、yaml的数据结构

  • 对象:键值对的集合(简称 "映射或字典")
    键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔
  • 数组:一组按序排列的值(简称 "序列或列表")
    数组前加有 “-” 符号,符号与值之间需用空格分隔
  • 纯量(scalars):单个的、不可再分的值(如:字符串、bool值、整数、浮点数、时间、日期、null等)
    None值可用null可 ~ 表示
 
四、使用python读取yaml常见的数据结构

前提:python中读取yaml文件前需要安装pyyaml和导入yaml模块。

python读取yaml:

# get_yaml.py

import yaml

def get_yaml_data(yaml_file):
print("*****获取yaml数据*****")
with open(yaml_file, encoding='utf-8')as file:
content = file.read()
print(content)
print(type(content)) print("\n*****转换yaml数据为字典或列表*****")
# 设置Loader=yaml.FullLoader忽略YAMLLoadWarning警告
data = yaml.load(content, Loader=yaml.FullLoader)
print(data)
print(type(data))
print(data.get('my')) # 类型为字典 <class 'dict'>
    # print(data[0]["model"]) # 若类型为列表 <class 'list'>
if __name__ == "__main__":
get_yaml_data("config.yaml")
 
1、yaml键值对:即python中的字典

# config.yaml
user: my
pwd:

运行结果:

*****获取yaml数据*****
# yaml键值对:即python中的字典
user: my
pwd: 1111
<class 'str'> *****转换yaml数据为字典或列表*****
{'user': 'my', 'pwd': 1111}
<class 'dict'>
my

2、yaml键值对嵌套:即python中的字典嵌套字典

# config.yaml

user1:
name: a
pwd: 111222
user2:
name: b
pwd: 222333

运行结果:

*****获取yaml数据*****
user1:
name: a
pwd: 111222
user2:
name: b
pwd: 222333
<class 'str'> *****转换yaml数据为字典或列表*****
{'user1': {'name': 'a', 'pwd': 111222}, 'user2': {'name': 'b', 'pwd': 222333}}
<class 'dict'>
{'name': 'a', 'pwd': 111222}

3、yaml键值对中嵌套数组

# config.yaml

user3:
- a
- b
user4:
- d
- e

运行结果:

*****获取yaml数据*****
user3:
- a
- b
user4:
- d
- e
<class 'str'> *****转换yaml数据为字典或列表*****
{'user3': ['a', 'b'], 'user4': ['d', 'e']}
<class 'dict'>
['a', 'b']

4、yaml数组中嵌套键值对

# config.yaml

- user1: aaa
- pwd1: 111
user2: bbb
pwd2: 222

运行结果:

*****获取yaml数据*****
- user1: aaa
- pwd1: 111
user2: bbb
pwd2: 222
<class 'str'> *****转换yaml数据为字典或列表*****
[{'user1': 'aaa'}, {'pwd1': 111, 'user2': 'bbb', 'pwd2': 222}]
<class 'list'>  # 注意,此时的类型为list而非dict, 所以用下标访问,即data[0]["user1"]
aaa

5、yaml中纯量

# config.yaml

s_val: hello world
num_val: 15
bol_val: true
nul_val: null
data_val: 2020-08-17

运行结果:

*****获取yaml数据*****
s_val: hello world
num_val: 15
bol_val: true
nul_val: null
data_val: 2020-08-17
<class 'str'> *****转换yaml数据为字典或列表*****
{'s_val': 'hello world', 'num_val': 15, 'bol_val': True, 'nul_val': None, 'data_val': datetime.date(2020, 8, 17)}
<class 'dict'>
hello world
 案例实践:
# config.yaml

# 使用-分隔用例,则yaml读取到的数据类型为列表
-
model: 注册模块
title: 注册成功
url: http://api.nnzhp.cn/api/user/user_reg
method: POST
data:
username: yingcr8
pwd: Ace123456
cpwd: Ace123456
check:
error_code: 0
msg: 注册成功!
-
model: 注册模块
title: 用户名长度小于6位,注册失败
url: http://api.nnzhp.cn/api/user/user_reg
method: POST
data:
username: yingc
pwd: Ace123456
cpwd: Ace123456
check:
error_code: 3002
# get_yaml.py

import requests
import yaml
import urllib3
import json
urllib3.disable_warnings() class SignTest(): def __init__(self, file):
self.file = file def test_sign(self):
with open(self.file, encoding='utf-8') as fobj:
content = fobj.read()
       # 使用 yaml.load()将yaml数据转换为list或dict
data = yaml.load(content, Loader=yaml.FullLoader)
       # 使用for循环,依次读取测试用例
for i in range(len(data)):
# 从config.yaml中提取接口的参数
       # 由于读取到的数据类型为list列表,所以只能用下标访问
model = data[i]['model']
title = data[i]['title']
url = data[i]['url']
method = data[i]['method']
datas = data[i]['data']
check = data[i]['check']
self.sign_test(model, title, url, method, datas, check) def sign_test(self, model, title, url, method, datas, check):
print("模块:", model)
print("用例标题:", title)
response = requests.request(url=url, method=method, data=datas)
response = json.loads(response.text)
print(response)
try:
# 通过断言,判断实际结果是否与预期结果一致
assert check['error_code'] == response['error_code']
print("测试通过\n")
except Exception:
print("测试失败\n") if __name__ == "__main__":
signtest = SignTest("config.yaml")
signtest.test_sign()

运行结果:

模块: 注册模块
用例标题: 注册成功
{'error_code': 0, 'msg': '注册成功!'}
测试通过 模块: 注册模块
用例标题: 用户名长度小于6位,注册失败
{'error_code': 3002, 'msg': '用户名长度为6-10位!'}
测试通过
 
参考:https://www.jianshu.com/p/eaa1bf01b3a6

python之读取yaml数据的更多相关文章

  1. Delphi中使用python脚本读取Excel数据

    Delphi中使用python脚本读取Excel数据2007-10-18 17:28:22标签:Delphi Excel python原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...

  2. python中读取mongodb数据并保存为csv格式的文件

    import pandas as pd import matplotlib.pyplot as plt import pymongo %matplotlib inline # 连接mongodb数据库 ...

  3. 【Python】读取excel数据

    '''python3读取excle数据''' import xlrd workbook = xlrd.open_workbook(r'test.xls', encoding_override='gbk ...

  4. python 中读取yaml

    YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. YAML在python语言中有PyYAML安装包. YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类 ...

  5. python中读取文件数据时要注意文件路径

    我们在用python进行数据处理时往往需要将文件中的数据取出来做一些处理,这时我们应该注意数据文件的路径.文件路径不对,回报如下错误: FileNotFoundError: File b'..Adve ...

  6. Python——pandas读取JSON数据,xml,html数据(python programming)

  7. python分块读取大数据,避免内存不足

  8. python的logging模块之读取yaml配置文件。

    python的logging模块是用来记录应用程序的日志的.关于logging模块的介绍,我这里不赘述,请参见其他资料.这里主要讲讲如何来读取yaml配置文件进行定制化的日志输出. python要读取 ...

  9. Python读取Yaml文件

    近期看到好多使用Yaml文件做为配置文件或者数据文件的工程,随即也研究了下,发现Yaml有几个优点:可读性好.和脚本语言的交互性好(确实非常好).使用实现语言的数据类型.有一个一致的数据模型.易于实现 ...

随机推荐

  1. vue的使用规范之v-if 与 v-for 一起使用

    当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级,这意味着 v-if 将分别重复运行于每个 v-for 循环中 所以,不推荐v-if和v-for同时使用 使用推荐方 ...

  2. Python参数解析工具ArgumentParser

    通过命令行运行Python脚本时,可以通过ArgumentParser来高效地接受并解析命令行参数. 流程 新建一个ArgumentParser类对象,然后来添加若干个参数选项,最后通过parse_a ...

  3. 一文看懂 Netty 架构设计

    本文重点分析 Netty 的逻辑架构及关键的架构质量属性,希望有助于大家从 Netty 的架构设计中汲取营养,设计出高性能.高可靠性和可扩展的程序. Netty 的三层架构设计 Netty 采用了典型 ...

  4. MIT 6.828 | JOS | 关于虚拟空间和物理空间的总结

    Question: 做lab过程中越来越迷糊,为什么一会儿虚拟地址是4G 物理地址也是4G ,那这有什么作用呢? 解决途径: 停下来,根据当前lab的进展,再回头看上学期操作系统的ppt & ...

  5. git pull冲突的解决方案

    处理步骤: 1.先将本地修改存储起来 $ git stash 这样本地的所有修改就都被暂时存储起来 .使用git stash list可以看到保存的信息: git stash暂存修改 其中stash@ ...

  6. 3.配置及其名ip映射

    sudo vi /etc/hosts 192.168.117.50 master192.168.117.60 slave1192.168.117.70 slave2192.168.117.80 sla ...

  7. 第6章 运行Spark SQL CLI

    第6章 运行Spark SQL CLI Spark SQL CLI可以很方便的在本地运行Hive元数据服务以及从命令行执行查询任务.需要注意的是,Spark SQL CLI不能与Thrift JDBC ...

  8. Linux环境安装Docker入门教程

    安装 下载 wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.1-ce.tgz 解压 tar -xvf ...

  9. 【Eclipse+PyDev】使用Python的IDE安装及配置详解

    转的文章 https://blog.csdn.net/jkwwwwwwwwww/article/details/51338230 https://blog.csdn.net/Jkwwwwwwwwww/ ...

  10. 键盘敲入 A 字母时,操作系统期间发生了什么

    前言 键盘可以说是我们最常使用的输入硬件设备了,但身为程序员的你,你知道「键盘敲入A 字母时,操作系统期间发生了什么吗」? 那要想知道这个发生的过程,我们得先了解了解「操作系统是如何管理多种多样的的输 ...