python自动化测试学习笔记-10YAML
之前学习的编写测试用例的方法,都是从excel中编写接口的测试用例,然后通过读取excel文件进行接口自动化测试,这种方式我们叫做数据驱动的方式,由于excel操作起来不灵活,无法实现关联关系的接口测试,所以我们学习一种更灵活的编写测试用例的方法YAML方式,可以通过数据驱动和代码驱动实现自动化测试;
YAML是一种容易人类阅读、适合表示程序语言的数据结构、可用于不同程序间交换数据、支持泛型工具、支持串行处理、丰富的表达能力和可扩展性、易于使用的语言。
YAML利用缩进或者是explicit indicatior(如{})来表示属性的嵌套,更为直观和simple。
一、YAML的格式
YAML的格式及特点如下:
YAML使用可打印的Unicode字元,可使用UTF-8或UTF-16。
使用空白字元为文件缩排来表示结构;不过不能使用跳格字元(TAB)。
注解由井字号( # )开始,可以出现在一行中的任何位置,而且范围只有一行(也就是一般所谓的单行注解)
每个清单成员以单行表示,并用短杠+空白( - )起始。或使用方括号( [ ] ),并用逗号+空白( , )分开成员。
每个杂凑表的成员用冒号+空白( : )分开键值和内容。或使用大括号( { } ),并用逗号+空白( , )分开。
杂凑表的键值可以用问号 ( ? )起始,用来明确的表示多个词汇组成的键值。
字串平常并不使用引号,但必要的时候可以用双引号 ( " )或单引号 ( ' )框住。
使用双引号表示字串时,可用倒斜线( \ )开始的跳脱字元(这跟C语言类似)表示特殊字元。
区块的字串用缩排和修饰词(非必要)来和其他资料分隔,有新行保留(preserve)(使用符号 | )或新行折叠(flod)(使用符号 > )两种方式。
在单一档案中,可用连续三个连字号(---)区分多个档案。
另外,还有选择性的连续三个点号( ... )用来表示档案结尾。
重复的内容可使从参考标记星号 ( * )复制到锚点标记( & )。
指定格式可以使用两个惊叹号 ( !! ),后面接上名称。
档案中的单一文件可以使用指导指令,使用方法是百分比符号( % )。有两个指导指令在YAML1.1版中被定义:
%YAML 指导指令,用来识别文件的YAML版本。
%TAG 指导指令,被用在URI的字首标记。这个方法在标记节点的型态时相当有用。
YAML再使用逗号及冒号时,后面都必须接一个空白字元。
以下示例:
1、yaml中支持映射或字典的表示,如下:
username : pei
passwd : 123456
2、yaml中支持列表或数组的表示,如下:
area :
- 海淀
- 昌平
- 大兴
3、字典和列表可以复合起来使用
- name : wang
age : 24
- name: pei
age: 26
4、yaml中有以下基本类型:
字符串 整型 浮点型 布尔型 null 时间 日期
str: "Hello World!"
int: 99
float: 8.88
boolean: true # or false
None: null # 也可以用 ~ 号来表示 null
time: 2016-09-22t11:43:30.20+08:00 # ISO8601,写法百度
date: 2016-09-22 # 同样ISO8601
5、强制转换
yaml是可以进行强制转换的,用 !! 实现,如下:
str: !!str 3.14
int: !!int "123"
输出后结果:{'str': '3.14', 'int': 123}
6、
在同一个yaml文件中,可以用 — 来分段,这样可以将多个文档写在一个文件中
name : wang
age : 24
---
name: pei
age: 26
7、yaml中分级使用缩进表示,只要在同一个缩进上就是同一个级别
name : wang
age : 24
money:
建行 : 10000
工行 : 20000
农行 : 30000
商行 : 40000
执行查看结果:
{'age': 24, 'name': 'wang', 'money': {'农行': 30000, '工行': 20000, '建行': 10000, '商行': 40000}}
二、应用
1、Python中可以解析yaml文件,用户数据获取,通过load方法读取文件内容:
先新建一个yaml文件userinfo.yml或者userinfo.yaml格式都可以
username : pei
passwd : 123456
age : 24
weight : 55
height : 166
sex : 女
house :
- 海淀
- 昌平
- 大兴
money :
- ¥
- $
- ¥
新建一个Python文件,用来获取yaml文件的内容:
test.py
import yaml
f=open('userinfo.yml','r',encoding='utf-8')
print(yaml.load(f))
执行查看结果:
{'mony': ['¥', '$', '¥'], 'sex': '女', 'heigth': 166, 'passwd': 123456, 'house': ['海淀', '昌平', '大兴'], 'age': 24, 'weigth': 55, 'username': 'pei'}
2、当yaml文件中有多个区块的时候,可以使用load_all()获取数据,如下:
load_all()生成一个迭代器
---
username : pei
passwd : 123456
age : 24
weight : 55
height : 166
sex : 女
house :
- 海淀
- 昌平
- 大兴
money : 3000
---
username : LI
passwd : 123456
age : 24
weight : 56
height : 165
sex : 女
house :
- 海淀
- 昌平
- 大兴
money : 300
---
username : XING
passwd : 123456
age : 24
weight : 67
height : 178
sex : 男
house :
- 海淀
- 昌平
- 大兴
money : 10000
Python:
import yaml,json
f=open('userinfo.yml','r',encoding='utf-8')
data=yaml.load_all(f)
for i in data:
print(i)
执行查看结果:
{'house': ['海淀', '昌平', '大兴'], 'username': 'pei', 'passwd': 123456, 'weight': 55, 'sex': '女', 'height': 166, 'money': 3000, 'age': 24}
{'house': ['海淀', '昌平', '大兴'], 'username': 'LI', 'passwd': 123456, 'weight': 56, 'sex': '女', 'height': 165, 'money': 300, 'age': 24}
{'house': ['海淀', '昌平', '大兴'], 'username': 'XING', 'passwd': 123456, 'weight': 67, 'sex': '男', 'height': 178, 'money': 10000, 'age': 24}
3、yaml.dump 将一个python对象生成为yaml文档
import yaml
data={
'username':'wang',
'age':25,
'money':10000
}
f=open('dumpyaml.yaml','w',encoding='utf-8')
yaml.dump(data,f)
yaml.dump接收的第二个参数一定要是一个打开的文本文件或二进制文件,yaml.dump会把生成的yaml文档写到文件里
执行查看结果:生成了一个文件,写入了值
{age: 25, money: 10000, username: wang}
4、yaml.dump_all()将多个段输出到一个文件中
import yaml
data={
'username':'wang',
'age':25,
'money':10000
}
data2={
'username':'pei',
'passwd':'123456' }
f=open('dumpyaml.yaml','w',encoding='utf-8')
print(yaml.dump_all([data,data2],f))
执行查看结果:
{age: 25, money: 10000, username: wang}
--- {passwd: '123456', username: pei}
如果使用的是yaml.dump()传入过个段,则会被当做一个list传入,如下:
yaml.dump([data,data2],f)
执行:
- {age: 25, money: 10000, username: wang}
- {passwd: '123456', username: pei}
python自动化测试学习笔记-10YAML的更多相关文章
- python自动化测试学习笔记-1
一.什么是自动化 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.直白的就是为了节省人力.时间或硬件资源,提高测试效率,便引入了通过软件或程序自动化执行测试用例进行测试: 二.python ...
- python自动化测试学习笔记-9测试框架
学习了这么久的python,我们已经可以自己搭建一个简单的测试和框架了,先从简单的开始,有时我们编写接口的测试用例会用excel进行编写,以下面的接口测试用例模板为例,进行编写:
- python自动化测试学习笔记-6urllib模块&request模块
python3的urllib 模块提供了获取页面的功能. urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capat ...
- python自动化测试学习笔记-5常用模块
上一次学习了os模块,sys模块,json模块,random模块,string模块,time模块,hashlib模块,今天继续学习以下的常用模块: 1.datetime模块 2.pymysql模块(3 ...
- python自动化测试学习笔记-4常用模块
常用模块 1.os 2.sys 3.random 4.string 5.time 6.hashlib 一.os模块 os模块主要用来操作文件.目录,与操作系统无关.要使用os模块首先要导入OS模块,用 ...
- python自动化测试学习笔记-4内置函数,处理json
函数.全局变量 写代码时注意的几点事项: 1.一般写代码的时候尽量少用或不用全局变量,首先全局变量不安全,大家协作的情况下,代码公用容易被篡改,其次全局变量会一直占用系统内容. 2.函数里如果有多个r ...
- python自动化测试学习笔记-2-列表
上次我们学习了python的基本概念,了解了python的变量及数据类型,并实战了条件判断,for/while循环,字符串输出,格式化输出的一些基本用法,接下来我们继续学习其他的一些数据类型. pyt ...
- python自动化测试学习笔记-9python的日志模块
参考 logging模块,用来处理python中的日志: import logging logging.debug('debug')logging.info('info')logging.warnin ...
- python自动化测试学习笔记-unittest参数化
做接口测试的时候,当一个参数需要输入多个值的时候,就可以使用参数来实现: python中unittest单元测试,可以使用nose_parameterized来实现: 首先需要安装:pip inst ...
随机推荐
- bzoj4504 k个串 kstring 可持久化线段树 (标记永久化)
[fjwc2015]k个串 kstring [题目描述] 兔子们在玩k个串的游戏.首先,它们拿出了一个长度为n的数字序列,选出其中的一个连续子串,然后统计其子串中所有数字之和(注意这里重复出现的数字只 ...
- 权限管理组件:rbac
rbac: Role_Based Access Control,基于角色的权限控制 权限:一个包含正则表达式 的url就是一个权限 目录结构: rbac这个app中的文件代码如下: rbac/mode ...
- Django开发:(1)django基础 & url控制器
HTTP请求协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本 ...
- Codeforces679C. Bear and Square Grid
n<=500,n*n的01矩阵,可以选择一个k*k的矩阵全变1,求最大1联通区域. 敢敢n^3..模拟k*k的矩阵的位置,从左到右扫的时候,每变一个位置只会引起边界的信息变化,就记含边界的k*k ...
- csu1364 Interview
对拍了一波才找到的错误,此题我用的是二分答案加倍增查询,实际上query那里我觉得仍然有缺陷,因为每一次我的查找还是在循环找到一个k使得x+2^k <= y,而错的地方也正在此地,一开始没有判断 ...
- Network-POJ3694(最小公共祖先LCA+Tarjin)
http://poj.org/problem?id=3694 这一题 为什么要找最小祖先呢 当两个节点连到一块的时候 找最小公共节点就相当于找强连通分支 再找最小公共节点的过程中直到找到 这个过 ...
- bzoj1444 有趣的游戏(AC自动机+概率dp)
题意: 给定n个长度为l的模式串,现在要用前m个大写字母生成一个随机串,每个字符有自己的出现几率,第一次出现的字符串获胜,求最终每个字符串的获胜几率. 分析: 容易想到先把所有的字符串建成一个AC自动 ...
- windows-nginx安装与运行静态资源
windows-nginx 官网 http://nginx.org/en/docs/windows.html 点击跳转 安装包下载 http://nginx.org/en/download.html ...
- 洛谷 P3137 [USACO16FEB]圆形谷仓Circular Barn_Silver
P3137 [USACO16FEB]圆形谷仓Circular Barn_Silver 题目描述 Being a fan of contemporary architecture, Farmer Joh ...
- GNS3配置SecureCRT
C:\SecureCRT\SecureCRT.exe /script D:\GNS3\DyRouter.vbs /T /telnet 127.0.0.1 %p "D:\Program Fil ...