首页 > 其他分享 > pytest + yaml 框架 -53.yaml 用例规范与全部关键字总结

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

时间:2023-08-19 09:02:28浏览次数:32  
标签:name 用例 53 yaml xx dict str

前言

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 文件中可以支持多个用例, 用例可以是一个步骤也可以是多个步骤。

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 示例

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 文件所在的目录为项目根目录。
比如我的项目结构是这样的

├─api
   └─ login.yml
├─testcase
   └─ test_login.yml
└─conftest.py
└─pytest.ini

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

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 运行

pytest testcase

标签:name,用例,53,yaml,xx,dict,str
From: https://www.cnblogs.com/yoyoketang/p/17642018.html

相关文章

  • Educational Codeforces Round 153 (Rated for Div. 2)
    EducationalCodeforcesRound153(RatedforDiv.2)这次的div2有点难度,当时b题思路对了,但是没有写好A题传送门A题意:给你一个只包含'('和')'的字符串,要求你将他的长度扩大一倍,并且使得所有括号匹配且组成的序列当中不能存在原序列的子序列A思路:这道题一开始写的时候没有注......
  • [LeetCode][53]maximum-subarray
    ContentGivenanintegerarraynums,findthesubarraywiththelargestsum,andreturnitssum. Example1:Input:nums=[-2,1,-3,4,-1,2,1,-5,4]Output:6Explanation:Thesubarray[4,-1,2,1]hasthelargestsum6.Example2:Input:nums=[1]Output:......
  • LeetCode[53]MaximumSubarray
    ContentGivenanintegerarraynums,findthesubarraywiththelargestsum,andreturnitssum. Example1:Input:nums=[-2,1,-3,4,-1,2,1,-5,4]Output:6Explanation:Thesubarray[4,-1,2,1]hasthelargestsum6.Example2:Input:nums=[1]Output:......
  • [53]Maximum Subarray
    ContentGivenanintegerarraynums,findthesubarraywiththelargestsum,andreturnitssum.Example1:Input:nums=[-2,1,-3,4,-1,2,1,-5,4]Output:6Explanation:Thesubarray[4,-1,2,1]hasthelargestsum6.Example2:Input:nums=[1]Output:1......
  • json和yaml语法转换
    yaml格式vim0224.yaml-"0224":老师:于超学生们:-黄彦:-年龄:23地址:深圳陈亮亮:-年龄:24地址:广州罗兴林:-年龄:24地址:贵州字典的形式:"key":"value",转化为json类型去看,{"key":value},大括号{}保存字典纯变......
  • open 一般的文件和yaml文件的区别
    一般的文件 读取的包含换行符 是数组格式#opendefget_yaml(file_path):withopen(file_path,encoding='utf-8')asfo:print(fo.readlines())if__name__=='__main__':get_yaml('../configs/evn.yaml')'''......
  • VTK 实例53:网格平滑
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkSmartPointer.h>6#include<vtkPolyDataReader.h>7#include<vtkPolyData.h>8#include<vt......
  • hdu 5365
    LCPArrayTimeLimit:4000/2000MS(Java/Others)    MemoryLimit:131072/131072K(Java/Others)TotalSubmission(s):1223    AcceptedSubmission(s):338ProblemDescriptions=s1s2...sn,let suffi=sisi+1...sn bethesuffixstartwith......
  • HDU 5313
    TheshortestproblemTimeLimit:3000/1500MS(Java/Others)  MemoryLimit:65536/65536K (Java/Others)TotalSubmission(s):1484  AcceptedSubmission(s):686ProblemDescriptionInthisproblem,weshouldsolveaninterestinggame.Atfirst,we hav......
  • HDU 5364
    DistributionmoneyTimeLimit:2000/1000MS(Java/Others)  MemoryLimit:65536/65536K(Java/Others)TotalSubmission(s):310  AcceptedSubmission(s):186ProblemDescriptionAFAwanttodistributionhermoneytosomebody.Shedividehermoneyintons......