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

前言

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

pip 安装插件

pip install pytest-yaml-yoyo

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

用例分层

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

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

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

; 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

Original: https://blog.csdn.net/qq_27371025/article/details/128302312
Author: 上海-悠悠
Title: pytest + yaml 框架 -7.用例分层机制

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/774389/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • matplotlib 中文乱码解决方法

    以Win10为例,其他系统步骤基本相同 1. 找到matplotlib 配置文件: import matplotlib print(matplotlib.matplotlib_fn…

    Python 2023年9月1日
    043
  • python操作mysql数据库

    python操作数据库的过程: 创建连接—获取游标—执行命令—关闭游标—关闭连接 ; python访问mysql 要用pymysql库 pymysql需要安装:pip instal…

    Python 2023年8月1日
    077
  • superset 升级到最新版本 踩到的坑

    superset最近的更新颇为频繁,还增加了对es的支持,必须升级一把。 升级的方法也比较简单,现在测试环境试验,官方的文档有说明: 按照网上提供的 升级教程 升级。 cd ~ 停…

    Python 2023年8月12日
    048
  • redis 定义序列号

    规则 举例 AA20201102NN1234567X# 规则 [产品号2位]+[生成日期8位]+[内部品类号2位]+[序列号7位数字]+[校验码]# 校验码生成规则# a = 产品…

    Python 2023年6月10日
    082
  • 国内访问Github超级慢?那是你没有用我这个脚本。直接起飞。

    导语 之前很多朋友咨询过国内访问Github较慢的问题,然后我一般让他们自己去知乎上找攻略,但今天我才发现网上竟然没有一个一键配置的脚本,一般都需要我们跟着教程一步步地去做才行。这…

    Python 2023年8月3日
    061
  • python matplotlib pyplot方法_Matplotlib.pyplot 常用方法

    2.2、hold属性 hold属性默认为True,允许在一幅图中绘制多个曲线;将hold属性修改为False,每一个plot都会覆盖前面的plot。 但是目前不推荐去动hold这个…

    Python 2023年9月5日
    054
  • one-hot编码

    one-hot编码 什么是one-hot编码 one-hot编码,又称独热编码、一位有效编码。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任…

    Python 2023年8月1日
    074
  • ChatGPT/InstructGPT详解

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月4日
    041
  • 回顾大一|我们要做的是提前准备,而不是提前焦虑

    本文已收录于专栏⭐️ 《沈七杂谈》⭐️ 文章指南: 引言 做出改变 再陷焦虑 找回自己 自我救赎 投资自己 未完待续 完 如果对我的个人经历不感兴趣,可以直接跳转到自我救赎部分,如…

    Python 2023年11月5日
    043
  • Pandas库的使用

    pandas 是基于NumPy 的一种工具,是为了解决数据分析任务而创建的,提供了很多进行数据分析处理的函数。 Series类型数据是一维数组型,除了数据之外还有一组索引。Data…

    Python 2023年8月8日
    048
  • Python库安装之requirements.txt, environment.yml

    目录 1. 前言 2. requirements.txt 2.1 生成和使用命令 2.2 内容 3. environment.yml 3.1 常见问题 4. 总结 4.1 yml …

    Python 2023年8月2日
    063
  • 解锁一个新技能,如何在Python代码中使用表情包…

    通常我们在使用聊天工具聊天时看见的基础表情包是这样的… 【阅读全文】 而在编码过程中,基础表情图是可以使用字符串来识别的。正好python中提供了这个表情包字符串的识别…

    Python 2023年11月9日
    037
  • JS执行机制及ES6

    一、JS执行机制 JS语言有个特点是单线程,即同一时间只能做一件事。单线程就意味着,所有的任务需要排队,前一个任务结束,才会执行后一个任务,可能造成页面渲染不连贯。 为了解决这个问…

    Python 2023年10月12日
    055
  • 手记系列之一 —– 关于微信公众号和小程序的开发流程

    前言 本篇文章主要介绍的调用微信公众号和小程序之后的开发流程,主要以实现步骤为主。 前提准备 已经申请了微信公众号和小程序(由于官方文档写的很详细,这里就不在进行说明了); 微信公…

    Python 2023年10月16日
    077
  • 1896-2021历届奥运会奖牌榜动态排序(Matplotlib图表动画)

    摘 要 在制作动态排序动画之前,我们看一下数据的整理情况: a、对第1)种大部分数据的情况,先爬取下来,输出到excel(1); b、对第2)种小部分数据的情况,也先爬取下来,输出…

    Python 2023年9月2日
    082
  • Python中Matplotlib数据可视化基础

    目录 Matplotlib数据可视化基础 plt.plot()折线图 plt.bar()柱状图 plt.scatter()散点图 pandas自带的绘图工具 plt.pie()饼状…

    Python 2023年9月6日
    054
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球