一、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. golang bool值

    目录 前言 1.基本介绍 2.类型转换 3.使用: 跳转 前言 不做文字的搬运工,多做灵感性记录 这是平时学习总结的地方,用做知识库 平时看到其他文章的相关知识,也会增加到这里 随着学习深入,会进行知 ...

  2. 【高阶版】Python词典

    使用dict.fromkeys()创建词典的一个坑 创建词典有三种方法,第一是直接赋值,d = {1:2, 2:3}:第二个是,通过构造方法,d = dict([(1, 2), (2, 3)]),第三 ...

  3. JavaScript基础-03

    1. 条件判断语句 若条件成立才会执行,条件不成立则语句不执行: if语句 语法一: if(条件表达式) {语句}          :true就执行,false不执行: 语法二: if(条件表达式) ...

  4. async 函数的含义和用法

    Generator函数的含义与用法 Thunk函数的含义与用法 co函数库的含义与用法 async函数的含义与用法 一.终极解决 异步操作是 JavaScript 编程的麻烦事,麻烦到一直有人提出各种 ...

  5. ExcelWeb脚本助手,自定义脚本,批量操作Excel与网页

    ExcelWeb脚本助手,是一款可以自定义脚本操控Excel和浏览器的工具.提供了简单实用的Excel与Browser的API调用,通过自建脚本或自建项目,随意定制. 可以非常方便的根据Excel中的 ...

  6. 基于OpenSIPS 实现分机注册服务服务器

    呼叫中心平台中坐席是不可或缺的一环,而坐席打电话自然需要使用办公分机.通常情况下我们通过软交换平台FreeSWITCH.Asterisk即可搭建分机注册服务. 但单台FreeSWITCH或Asteri ...

  7. asp.net core mvc和angular项目的一些问题

    最近公司布置任务,用asp.net core mvc和angular改写原来的一个用Silverlight做的项目.从来没搞过,找了两本书看了一天,又看了一天代码,大致心里有底了,就开始动手.没想到一 ...

  8. Ubuntu 18.04 安装 docker, 设置阿里云加速

    1.卸载旧的 docker 环境 sudo apt-get remove docker docker-engine docker.io containerd runc 2.设置仓库 更新索引 sudo ...

  9. Android PopupWindow显示之后所在的Activity结束的时候出现短暂黑屏问题

    在当前Activity弹出PopuoWindow后,点击取消弹窗,然后结束当前Activity时会出现短暂黑屏现象.这是由于设置背景透明度时候造成的. //设置添加屏幕的背景透明度 public vo ...

  10. SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。——猿实战02

            猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是 ...