在测试工作中,可以使用yaml编写测试用例,执行测试用例时直接获取yaml中的用例数据进行测试(如:接口自动化测试)

1.什么是yaml

  是一种可读的数据序列化语言,通常用于配置文件

  非常简洁和强大,远比json格式更方便

  可用作自动化测试框架的配置文件和测试用例文件

  原则
  a.大小写敏感
  b.使用缩进表示层级关系
  c.缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
  d.使用#表示注释
  e.字符串可以不用引号标注

2.yaml配置文件的格式

  使用:号隔开表示键值对

  使用-号表示数组

  例如:

ip: 127.0.0.1
port: 2002
port_in: 8764
charset: utf-8
post_type:
- 1
- 2
- 3
- 4 读取后的结果:
{'ip': '127.0.0.1', 'port': 2002, 'port_in': 8764, 'charset': 'utf-8', 'post_type': [1, 2, 3, 4]}

&和*用于引用

ip: &ip 127.0.0.1
url: *ip #运行结果
{'ip': '127.0.0.1', 'url': '127.0.0.1'}

3.使用python操作yaml配置文件

  (注:PyYAML5.1之后,通过禁止默认加载程序(FullLoader)执行任意功能,该load函数也变得更加安全)

  pyyaml:python的第三方库,用于操作yaml配置文件

  安装pyyaml:pip install PyYaml

  字符串转换成字典:yaml.load()  

import yaml

def get_configres(filepath):
'''
获取yaml配置文件中的内容
:param filepath:
:return: 返回的是一个字典
'''
f1=open(filepath,"r")
res=yaml.load(f1,Loader=yaml.FullLoader)
return res res=get_configres("../config/cfg.yaml")
print(res,type(res)) #运行结果:
{'ip': '127.0.0.1', 'port': 2002, 'port_in': 8764, 'charset': 'utf-8', 'post_type': [1, 2, 3, 4]} <class 'dict'>

 字典转换成字符串:yaml.dump()

params={'ip': '127.0.0.1', 'port': 2002, 'port_in': 8764, 'charset': 'utf-8', 'post_type': [1, 2, 3, 4]}
res_str=yaml.dump(params)
print(res_str,type(res_str)) #运行结果:
charset: utf-8
ip: 127.0.0.1
port: 2002
port_in: 8764
post_type:
- 1
- 2
- 3
- 4
<class 'str'>

  使用yaml写测试用例

--- #登录模块
- #test1
url: /api/login
method: post
detail: 正常登录
data:
username: admin
password: ipharmacare
check:
retcode: 0 - #test2
url: /api/login
method: post
detail: 不传账号,传密码
data:
username: test2
password: ipharmacare2
check:
retcode: 0 #运行结果:
[{'url': '/api/login', 'method': 'post', 'detail': '正常登录', 'data': {'username': 'admin', 'password': 'ipharmacare'}, 'check': {'retcode': 0}}, {'url': '/api/login', 'method': 'post', 'detail': '不传账号,传密码', 'data': {'username': 'test2', 'password': 'ipharmacare2'}, 'check': {'retcode': 0}}]

  在一个文件中保存多个Yaml文档内容:用---隔开,使用yaml.load_all()方法

test.yml

--- #登录模块
- #test1
url: /api/login
method: post
detail: 正常登录
data:
username: admin
password: ipharmacare
check:
retcode: 0 --- #登录模块2
- #test1
url: /api/login
method: post
detail: 不传账号,传密码
data:
username: test2
password: ipharmacare2
check:
retcode: 0

  读取使用yaml.load_all()方法

import yaml

def get_configres(filepath):
'''
获取yaml配置文件中的内容
:param filepath:
:return: 返回的是一个字典
'''
f1=open(filepath,"r",encoding='utf-8')
res=yaml.load_all(f1,Loader=yaml.FullLoader)
return res res=get_configres("../config/test.yml")
print(res,type(res))
for i in res:
print(i) #读取后的结果:
<generator object load_all at 0x0322C570> <class 'generator'>
[{'url': '/api/login', 'method': 'post', 'detail': '正常登录', 'data': {'username': 'admin', 'password': 'ipharmacare'}, 'check': {'retcode': 0}}]
[{'url': '/api/login', 'method': 'post', 'detail': '不传账号,传密码', 'data': {'username': 'test2', 'password': 'ipharmacare2'}, 'check': {'retcode': 0}}]

  

 

python pyyaml操作yaml配置文件的更多相关文章

  1. Python中操作ini配置文件

    这篇博客我主要想总结一下python中的ini文件的使用,最近在写python操作mysql数据库,那么作为测试人员测试的环境包括(测试环境,UAT环境,生产环境)每次需要连接数据库的ip,端口,都会 ...

  2. python基础-PyYaml操作yaml文件

    yaml语法 格式 它的基本语法规则如下 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 YAML 支持的数据结构有 ...

  3. Python - 通过PyYaml库操作YAML文件

    PyYaml简单介绍 Python的PyYAML模块是Python的YAML解析器和生成器 它有个版本分水岭,就是5.1 读取YAML5.1之前的读取方法 def read_yaml(self, pa ...

  4. python读取yaml配置文件

    支持多种语言:python.js.golang.java.c.c++ YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写.它实质上是一种通用的数据串行化格式. 它的基本语法规则如下 ...

  5. 6.YAML文件详解、PyYaml操作

      YAML简介: yaml是一种数据格式,支持注释,换行,多行字符串,裸字符串(正序,字符串)   YAML作用: 用于全局的配置文件 用于测试用例编写   YAML语法规则: 区分大小写 使用缩进 ...

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

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

  7. Appium + python -yaml配置文件

    在线安装:pip install yaml import yamlimport os # 获取当前脚本所在文件夹路径curpath = os.path.dirname(os.path.realpath ...

  8. python之数据驱动yaml操作

    Mail163.yaml配置文件如下: login_data: url : 'https://mail.163.com/'case1: user : '' passwd : '' errorText ...

  9. Python3操作YAML文件

    数据及配置文件之争 数据及文件通常有三种类型: 配置文件型:如ini,conf,properties文件,适合存储简单变量和配置项,最多支持两层,不适合存储多层嵌套数据 表格矩阵型:如csv,exce ...

随机推荐

  1. DLL注入-APC注入

    APC注入 APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下:     1)当EXE里某个线程执行到Sl ...

  2. Java 并发编程(一) → LockSupport 详解

    开心一刻 今天突然收到花呗推送的消息,说下个月 9 号需要还款多少钱 我就纳了闷了,我很长时间没用花呗了,怎么会欠花呗钱? 后面我一想,儿子这几天玩了我手机,是不是他偷摸用了我的花呗 于是我找到儿子问 ...

  3. 5分钟让你理解K8S必备架构概念,以及网络模型(下)

    写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...

  4. [bug] eclipse 点击new菜单后没有新建java project或class选项

    参考 https://blog.csdn.net/u013001763/article/details/54405758

  5. RHEL sosreport

    RHEL sosreport简介 sosreport对很多RedHat爱好者来说应该并不陌生! 它是一款在RedHat Linux下帮你收集系统信息打成一个tar包的工具,你可以将这个tar包发给供应 ...

  6. 资源限制 ( resource limit 或 rlimit ),是 Linux 内核控制 用户 或 进程 资源占用的机制。

    ###### https://learn-linux.readthedocs.io/zh_CN/latest/administration/kernel/rlimit.html ########### ...

  7. Ansible_使用Ansible galaxy部署角色

    一.介绍Anisble galaxy 1.介绍Ansibleu galaxy 1️⃣:Ansible Galaxy (官网:https://galaxy.ansible.com)是一个Ansible内 ...

  8. linux 服务开机自启动systemd方式 (Centos7)

    linux 服务开机自启动systemd方式 (Centos7) 1.编写一个 /opt/hello.sh 脚本 [root@jws-ftp prometheus]# cat /opt/hello.s ...

  9. Linux中级之ansible配置(playbook)

    一.playbooks 如果用模块形式一般有幂等性,如果用shell或者command没有幂等性 playbooks相当于是shell脚本,可以把要执行的任务写到文件当中,一次执行,方便调用 task ...

  10. haproxy env 安装与基础配置

    1. 安装 Use docker.package or source installations to install 第三方仓库 https://pkgs.org/download/haproxy ...