pytest + yaml 框架 -53.yaml 用例规范与全部关键字总结

2023-08-22 12:20:30 浏览数 (2)

前言

v1.4.4 版本新增对yaml 用例格式校验,不合法的用例格式不会被执行,避免出现用例格式不合法导致的报错。

全部关键字总结

config 中可用关键字

关键字

可支持类型

功能说明

name

可选 str

没什么用,仅描述当前yaml 用例的名称

base_url

可选 str, 支持格式:http://、https://、ws://、wss://

当前yaml用例公共环境地址

variables

可选 dict

声明当前yaml文件公共变量

fixtures

可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”]

当前yaml文件公共fixtures

parameters

可选,dict or list or 引用外部文件

模块级别参数化

allure

可选,dict 描述用例allure报告

当前yaml文件公共allure描述

mark

可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”]

当前yaml文件每个用例加mark标记

hooks

可选,dict 格式:{"request": ["x"], "response": ["y"]}

当前yaml文件每个用例都加钩子

export

可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”]

变量提升全局,跨yaml文件引用

用例中可使用的关键字

关键字

可支持类型

功能说明

name

可选 str

用例步骤描述,在allure报告中体现

variables

可选 dict

声明当前用例局部变量

fixtures

可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”]

当前用例调用的fixtures

parameters

可选,dict or list or $p{}引用外部文件或外部数据

当前用例级别参数化

allure

可选,dict 描述用例allure报告

当前用例allure报告描述

mark

可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”]

当前用例加mark标记

print

可选,str

打印内容

sleep

可选,int or float

sleep 休眠时间

skip

可选,str

跳过用例,添加描述

skipif

可选,str

表达式为真跳过用例

request

可选,dict

发送http请求参数

api

可选,str

用例分层,引用api层

extract

可选,dict

提取结果

validate

可选, List[dict]

校验结果

export

可选,str or list 支持格式: “xx”, “xx,yy” , [“xxx”, “yyy”]

变量提升全局,跨yaml文件引用

websoket 协议2个关键字

关键字

可支持类型

功能说明

ws

可选 dict

连接服务参数

send

可选 str or dict

发送消息内容

API 层接口描述关键字,只有3个

关键字

可支持类型

功能说明

name

可选 str

用例步骤描述,在allure报告中体现

request

可选,dict

发送http请求参数

validate

可选, List[dict]

校验结果

yaml 用例格式规范

一个yaml 文件中可以支持多个用例, 用例可以是一个步骤也可以是多个步骤。

代码语言:javascript复制
config:
    name: demo

test_1:
    name: 用例1
    print: hello 11111

用例是多个步骤2:
-
    name: get
    request:
        method: GET
        url: http://httpbin.org/get
    validate:
      - eq: [status_code, 200]

-
    name: post
    request:
        method: POST
        url: http://httpbin.org/post
        json:
          username: test
          password: "123456"
    validate:
      - eq: [status_code, 200]

用例分层

API 层只做接口的描述,一般放到项目根目录api目录下

api/login.yaml 示例

代码语言:javascript复制
name: post
request:
    method: POST
    url: http://httpbin.org/post
    json:
        username: ${username}
        password: "123456"
validate:
    - eq: [status_code, 200]

用例层通过api 关键字导入需要的API,导入的路径是相对路径,需根据项目的根目录去导入。 如果执行过程中代码无法识别哪个是项目根目录,最好在项目的根目录下放一个pytest.ini 文件,pytest会以pytest.ini 文件所在的目录为项目根目录。 比如我的项目结构是这样的

代码语言:javascript复制
├─api
   └─ login.yml
├─testcase
   └─ test_login.yml
└─conftest.py
└─pytest.ini

那么不管用例文件test_*.yml在哪个目录,都是以项目根目录去导入API 的yaml文件

代码语言:javascript复制
config:
    name: login case
    base_url: http://127.0.0.0:1
    variables:
        username: "test123"
        password: "123456"

test_case:
-
    name: step login1
    api: api/login.yml
    extract:
        url:  body.url
    validate:
        - eq: [status_code, 200]
        - eq: [ok, true]
-
    name: step login2
    api: api/login.yml

运行用例是在项目根目录去执行 pytest 运行

代码语言:javascript复制
pytest testcase

0 人点赞