目录
- 自动化测试用例选择
- 测试框架
- yaml格式简介
- python 搭建yaml 环境
- yaml格式语法
- 基本规则
- 数据类型
- 用法
- 数据格式
- yaml格式测试用例
- pytest执行yaml测试用例
整体接口测试流程清查阅文章:本文不再赘述
自动化测试用例选择
- 测试用例类型
xmind思维导图形式,常见手工测试比较常用
excel用例,自动化使用
yaml用例,自动化使用
json/word/数据库等本文采用yaml
测试框架
- 框架结构:
python+yaml+pytest+allure
yaml格式简介
YAML:Yet Another Markup Language 一种标记语言
yaml专门用来写配置文件的语言,比json格式方便
可以用作自动化测试用例或者配置文件
python 搭建yaml 环境
- PyYaml是python的针对yaml的操作模块,安装:pycharm的终端直接安装使用
pip install PyYaml
yaml格式语法
基本规则
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab,只允许使用空格(建议,可以使用tab)
缩进的空格数目不重要,只要相同的层级元素对齐即可#
表示注释,从它开始到行尾都被忽略
数据类型
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值
用法
- 配置:在
configs
包下新建一个文件config.ymal
,把yaml文件作为配置文件来用,放到包下
#注释
#键值对形式:键: 值
name: zhangsan #姓名
age: 18 #年龄
- 读取 yaml文件
在tools
包下新建一个文件,getyamlData.py
import yaml
def getyamldata(filedir):
# 打开文件
fo = open(filedir, 'r', encoding='utf-8')
# 加载读取文件
data = yaml.load(fo, Loader=yaml.FullLoader)
print(data)
if __name__ == '__main__':
getyamldata('../configs/config.yaml')
输出:字典格式
{'name': 'zhangsan', 'age': 18}
数据格式
- 1、yaml 转字典单一模式
#键值对形式:键: 值
name: zhangsan #姓名
age: 18 #年龄
height: 180 #身高
- 2、yaml转列表单一模式
#数组格式:短横线 空格 值,这是一个列表
- 1
- 红色
- adv
输出:列表
[1, '红色', 'adv']
- 3、组合模式字典套列表
#3、列表套字典
-
name: zhangsan
age: 18
-
height: 180
weight: 60
输出:列表包含字典
- 4、列表套列表
#4、列表套列表
-
- 张三
- 19
-
- 160
- 65
- 红色
输出:列表包含列表
- 5、字典套列表
#5、字典套列表
name:
- zhangsan
- 旺旺
age:
- 19
- 18
输出:字典套列表
- 6、字典套字典
#6、字典套字典
name:
zhangsan: 张三
lisi: 李四
age:
age1: 10
age2: 20
输出;
- 7、
注意
:yaml配置文件中需要加引号的一律用双引号
,yaml对于普通字符串默认不需要加,加上单引号和默认不加是一样的效果。 - 8 、
yaml一个文件中只允许一种格式文件出现
,不允许多种格式混杂配置:如上1-6种格式,每一种只能用在一个文件里,eg:都是字典套字典的格式,不能再配置字典套列表的格式,如果非要配置到一个文件里,用‘---’
三横杠分隔符
- 多格式yaml文件配置
---
#6、字典套字典
name:
zhangsan: 张三
lisi: 李四
---
#字典套列表
age:
- 10
- 20
- **读取同一个文件下的多个yaml文件数据**
import yaml
def getyamldatas(filedir):
# 打开文件
'''
data:是一个yaml文件下配置了多个yaml配置数据
:param filedir:
:return:
'''
fo = open(filedir, 'r', encoding='utf-8')
# 加载读取一个文件中多个yaml配置数据
data = yaml.load_all(fo, Loader=yaml.FullLoader)
for i in data:
print(i)
if __name__ == '__main__':
getyamldatas('../configs/config.yaml')
输出:分别打印出来
yaml格式测试用例
思路:接口测试一般都是键值对的数据,常规采用列表套字典
的格式方便提取:[{},{},{}],列表中每一个元素(也就是字典)就是一条用例。
excel表用例参照:
yaml文件就把请求数据和响应数据配置到字典中:
用例再datas
目录下新建一个文件:case.yaml
6条如下格式配置用例
- #1、login_test01
url: /account/sLogin #请求路径
method: post #请求方法
detail: 用户名正确,密码正确 #请求详情数据
headers: #请求头
data: #请求体
username: xxxxxx
pwd: xxxxx1
resp: #响应数据
code: "20000" #响应返回码
msg: 成功 #响应信息
编写获取数据代码:
import yaml
def getyamldata(filedir):
loginlist = [] #预置一个空列表
# 打开文件
fo = open(filedir, 'r', encoding='utf-8')
# 加载读取文件
data = yaml.load(fo, Loader=yaml.FullLoader) # data类型是一个列表
for i in data:
indata = i['data'] #获取账户密码
exp_data = i['resp'] #获取预期响应数据
loginlist.append((indata, exp_data)) # 将传参和响应打包成一个元组放入登录备用列表
# pprint.pprint(loginlist)
return loginlist
if __name__ == '__main__':
getyamldata('../datas/cases.yaml')
pytest执行yaml测试用例
在调用模块只需要改动一条语句,导入方法
from getyamlData import getyamldata
然后将数据参数化由获取excel数据改为getyamldata
即可
即:
@pytest.mark.parametrize('indata, respdata', getyamldata('../datas/cases.yaml'))
其他pytest代码不用改动,尽量保持少的改动。