pytest + yaml 框架 -7.用例分层机制

news2024/11/27 16:49:54

前言

当我们测试流程类的接口,需反复去调用同一个接口,就会想到复用API,在代码里面可以写成函数去调用。
那么在yaml 文件中,我们可以把单个API写到一个yaml 文件,测试用例去调用导入API。

pip 安装插件

pip install pytest-yaml-yoyo

用例分层功能在 v1.0.5 版本上实现

用例分层

我这里只分2层:API 层 和 Test case 用例层

  • API 层: 描述接口request请求,可以带上validate 基本的校验
  • Test case 用例层: 用例层多个步骤按顺序引用API

API 层示例

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]

如果有需要用到变量,比如登录用户名在不同用例中会用到不同的账号,那么可以使用变量 ${username}
需注意的是,API 层不支持单独运行,因为它只是用例的一个部分,不能当成用例去执行,用例执行需使用 test_*.yml 命名

TestCase 层

用例层通过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"


teststeps:
-
    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

关于变量

API 层可以引用变量,引用变量的值都是从用例目录的variables 加载的变量,目前只支持config 设置用例全局变量

config:
    name: login case
    base_url: http://127.0.0.0:1
    variables:
        username: "test123"
        password: "123456"

我们可以理解为API是用例的一个步骤,是用例的一部分,导入过去相当于复制request 请求到用例步骤里面。

关于校验

在API 层可以写一些基础的校验,比如校验状态码,我们一般不在API层写业务逻辑校验。
比如登录的用例,期望结果可以是登录成功,也可以是登录失败,那么业务逻辑的校验,应该在用例层去校验

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

如果API 层和用例层都有validate 校验,最后会合并到一起校验。
完整的教程已上传到gitee https://gitee.com/yoyoketang/pytest-yaml-yoyo上,如果觉得对你有帮助,可以给个 star

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子产品设计的流程有哪些

电子产品设计过程是指导工业外观设计的具体环节,主要包括产品市场需求分析、产品设计、产品原型设计、生产测试设计、大规模生产等方法和步骤。 一、电子产品设计流程是什么? 1.产品市场需求分析是电子产品设计成功的第一步,也是非常重要的一步。开发者…

JavaSE(数组)

1. 数组 数组创建及初始化 总结: 三种写法包括了动态初始化和静态初始化,其中省略格式不能再省略(拆分);没有初始化时(默认值为基类类型对应的默认值)其中引用类型的默认值为null 三种写法 1…

RK3288-8.1-添加一个人体感应的开关-pir_pin_status

收到一个人体感应的需求,在设置添加一个开关 第一步,确定人体感应接口的GPIO 可知GPIO7_B5为对应GPIO 第二步,注册对应DTS 然后去驱动内注册对应的节点 很基础的东西,就不多说了,省略一万字......................(得到节点) cat sys/devices/platform/attr/pir_pin_status …

CAD尺寸标注不显示数值

在创建一个新的CAD图纸后,使用CAD尺寸标注会看见只有一条直线而没有数字显示,这是为什么呢?实际上是存在数值的,只是默认的数值很小,如果图形尺寸过大就看不清楚需要放大才能看见,就需要调整CAD尺寸标注的格…

RSS Can:借助 V8 让 Golang 应用具备动态化能力(二)

继续聊聊之前做过的一个小东西的踩坑历程,如果你也想高效获取信息,或许这个系列的内容会对你有用。 写在前面 在上一篇文章《RSS Can:使用 Golang 实现更好的 RSS Hub 服务(一)》里,我们简单介绍了使用 G…

数字孪生技术在智慧园区领域的实践

随着云计算、物联网、大数据、人工智能、5G 等为代表的技术迅速发展和 深入应用,“智慧园区”建设已成为全球园区发展的新趋势。近年来,党中央 和国务院更加注重智慧园区的建设与发展,相继出台了多项政策推动智慧园区的建设,智慧园…

数据镜像软件

什么是数据镜像 数据镜像是复制已传输到 USB 设备或在 USB 设备中修改的文件内容的过程。创建镜像副本后,可以在受密码保护的网络共享中维护这些副本。此共享文件夹最好保存在远程位置,以节省本地计算机上的空间。这样,只有管理员或受信任的…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java基于疫情防控下社区管理平台my3tu

对于即将毕业或者即将做课设的同学而言,由于经验的欠缺,面临的第一个难题就是选题,确定好题目之后便是开题报告,如果选题首先看自己学习那些技术,不同技术适合做不同的产品,比如自己会些简单的Java语言&…

Flutter自定义MultiChildRenderObjectWidget实现圆环布局效果

一、本文主要是学习巩固一下自定义RenderObject这一块内容,用所了解到的知识实现一个圆环布局效果 本篇文章主要参考了恋猫de小郭Flutter 完整开发实战详解(十六、详解自定义布局实战)文章,大家可以先看完这篇文章再来阅读本篇这…

生产制造企业用的ERP系统——流程管理

ERP的含义是企业资源计划,主要是对企业所拥有各种资源进行综合规划和优化管理,用以降低成本,提高效率,增加利润。 作为一个低代码开发平台,百数在办公领域已有10年历史,为企业信息化发展提供丰富的功能模块…

Java如何实现截取字符串

文章目录0 写在前面1 .substring()2 split()正则表达式3 StringUtils.substring()4 写在最后0 写在前面 在实际工作中有一些地方需要用到截取字符串的方法,所以在此记录下截取字符串的几种方法。 .substring() StringUtils.substring() split()正则表达式 1 .subs…

最高月薪15.5K,成大事不在于力量的大小,而在于能坚持多久~

在前几天的世界杯八强赛中,阿根廷通过点球战胜了荷兰,闯入了四强。 说起阿根廷,就不得不提起梅西,这个被众多球迷誉为天才的球王,可实际上,在他的父亲眼中,却从不称自己的儿子为天才&#xff0…

java 课设-超级玛丽游戏

题目: 本程序是针对超级玛丽小游戏的 JAVA 程序,进入游戏后首先用鼠标点击 GUI 窗口,然后开始游 戏,利用方向键来控制的马里奥的移动,同时检测马里奥与场景中的障碍物和敌人的碰撞,并判断马里 奥的可移动性…

.net 移动开发 MAUI

.net 移动开发 MAUI新建一个Hello World运行效果修改一下,做个加法运算吧运行效果创建新的内容页修改xaml内容添加逻辑内容主页面添加一个按钮并且增加路由按钮事件添加路由整体感受第一:WPF第二:小程序所有的页面跳转都是借助路由第三&#…

Win11怎么更改时区?

Win11可以自动检测配置用户的时区来显示正确的时间,如果由于一些特殊原因导致系统时区错误,显示时间也错误的话,这时候要怎么调整呢?下面小编就来教教大家更换Windows 11时区的方法。 方法一:在 Windows 11 上更改时区…

新旧电脑数据如何迁移?电脑数据导入到另一台电脑

新旧电脑数据如何迁移?换电脑是一件好事,换更新版本的电脑,还可以体验新功能。您需要找到将数据传输到新电脑的有效方法。电脑数据导入到另一台电脑,接下来的内容将为大家揭晓答案! 方法1、使用专业的数据传输迁移数据…

[附源码]计算机毕业设计的玉石交易系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis MavenVue等等组成,B/S模式…

cookie 和 session 的区别

1. 前言 cookie 和 session 的区别是什么?这个问题在面试中问到的频率非常高 cookie 和 session 的共同点: 都是用来记录用户访问浏览器时保存的数据,比如:用户的身份信息等 2. cookie 和 session 的工作原理 cookie 工作原理: 浏览器端第…

【自然语言处理】隐马尔科夫模型【Ⅲ】估计问题

有任何的书写错误、排版错误、概念错误等,希望大家包含指正。 由于字数限制,分成六篇博客。 【自然语言处理】隐马尔可夫模型【Ⅰ】马尔可夫模型 【自然语言处理】隐马尔科夫模型【Ⅱ】隐马尔科夫模型概述 【自然语言处理】隐马尔科夫模型【Ⅲ】估计问题…

Rsyslog+MariaDB搭建Rsyslog日志服务器

rsyslog是一个linux系统日志服务的工具,主要用来监控收集系统从开机运行之后所发生的所有日志,包括内核日志,服务日志,应用日志等等;记录的日志全部都写到/var/log下面,常用的有dmsg(内核日志&a…