目录

  • 自动化测试用例选择
  • 测试框架
  • yaml格式简介
  • python 搭建yaml 环境
  • yaml格式语法
  • 基本规则
  • 数据类型
  • 用法
  • 数据格式
  • yaml格式测试用例
  • pytest执行yaml测试用例


继前文pytest框架梳理接口自动化流程使用excel测试用例,本文给出了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

pythonTCP接口自动化测试难点 接口自动化pytest_pytest

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

输出:列表包含字典

pythonTCP接口自动化测试难点 接口自动化pytest_开发语言_02

  • 4、列表套列表
#4、列表套列表
-
  - 张三
  - 19
-
  - 160
  - 65
  - 红色

输出:列表包含列表

pythonTCP接口自动化测试难点 接口自动化pytest_python_03

  • 5、字典套列表
#5、字典套列表
name:
  - zhangsan
  - 旺旺
age:
  - 19
  - 18

输出:字典套列表

pythonTCP接口自动化测试难点 接口自动化pytest_用例_04

  • 6、字典套字典
#6、字典套字典
name:
  zhangsan: 张三
  lisi: 李四
age:
  age1: 10
  age2: 20

输出;

pythonTCP接口自动化测试难点 接口自动化pytest_python_05

  • 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')

输出:分别打印出来

pythonTCP接口自动化测试难点 接口自动化pytest_用例_06

yaml格式测试用例

思路:接口测试一般都是键值对的数据,常规采用列表套字典的格式方便提取:[{},{},{}],列表中每一个元素(也就是字典)就是一条用例。

excel表用例参照

pythonTCP接口自动化测试难点 接口自动化pytest_pytest_07


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代码不用改动,尽量保持少的改动。