当前位置: 首页 > news >正文

pytest-yaml-sanmu(七):使用fixture返回值

图片

fixture 是 pytest 中非常重要的功能,大部分项目都可能会用到 fixture。

pytest 的内置标记 usefixtures 可以帮助用例自动的使用 fixture

1. 创建 fixture

pytest 中的 fixtures 大致有两个用途

  1. 在用例执行之前、执行之后,自动的执行

  2. 通过 fixture 为用例提供数据

@pytest.fixture()def print_msg():    print('用例开始执行') #  yeild 之前为前置    yield
    print('用例执行结束')#  yeild 之后为前置@pytest.fixturedef base_url():    yield 'https://www.baidu.com' #  yeild 指定返回值

当然了,也可以同时实现两种用途

@pytest.fixturedef base_url():    print('用例开始执行') #  yeild 之前为前置    yield 'https://www.baidu.com' #  yeild 指定返回值    print('用例执行结束')#  yeild 之后为前置

2. 请求 fixture

用例如果需要使用 fixture,可以通过标记 usefixtures 来进行请求。

注意标记名是 s 结尾,表明允许同时请求多个 fixture:​​​​​​​

test_name: 请求fixturemark:  - usefixtures:      - print_msg      - base_urlsteps:  - request:      method: get      url: http://baidu.com

执行结果如下:

图片

图 1. 请求 fixture 执行前后置操作

3. 使用 fixture 返回值

在 fixture 的第二个用途中,会为用例提供数据。

那么用例该如何获取和使用这个数据呢?一共有两种方式

第一种方式,

如果该数据是字符串或数字,可以直接写入 yaml 中使用的,可采用【参数变量】的方式进行使用​​​​​​​

test_name: fixture返回值mark:  - usefixtures:      - print_msg      - base_urlsteps:  - request:      method: get      url: ${base_url}/abc.html

执行结果如下:

图片

图 2. 使用 fixture 返回值

有结果可知,用例使用来 fixture 的返回值来决定服务器地址

第二种方式,

如果 fixture 返回值是一个对象,不能直接作为 yaml 内容,可在 hook 中更灵活的使用

首先创建 fixture:​​​​​​​

@pytest.fixture()def driver():    obj = webdriver.Chrome()    yield obj

接着在 yaml 中请求 fixture:​​​​​​​

test_name: 在hook中使用fixturemark:  - usefixtures:      - driversteps:  - request:      method: get      url: /abc.html

最后在 hook 中指定 fixture 返回值使用方式​​​​​​​

def pytest_yaml_run_step(item):    step = item.current_step    request = step.get('request')        fixture_client = item.usefixtures.get('client') # 获取usefixtures中的fixture        if fixture_client:        fixture_client.request(**request) # 使用fixture发送请求        return

第二种方法为用例的执行方式提供更多的灵活和扩展性,适合对 pytest 比较熟悉之后使用。

4. 参数化 fixture

pytest 的 fixture 也可以参数化,其效果和 mark.parametrize 相似,都会生成更多的用例来执行。

唯一的区别是:

  • mark.parametrize 的参数值由用例提供,写在 yaml 中

  • fixture 参数化的参数值由 fixture 提供,写在 python 中

下面是一个参数化的 fixture​​​​​​​

@pytest.fixture(params=['a', 'b', 'c'])def name(request):    return request.param

其返回值不是固定的,而是依次将 abc 作为返回值,这使得请求该 fixture 的用例也湖执行 3 次。

test_name: fixture返回值mark:  - usefixtures:      - namesteps:  - request:      method: get      url: https://www.baidu.com/?o=${name}

执行结果如下:

图片

图 3. 使用参数化 fixture

能看到这里说明是真爱,关注一下吧

http://www.lryc.cn/news/391781.html

相关文章:

  • 2024最全软件测试面试八股文(答案+文档+视频讲解)
  • EasyBoss ERP移动端上线数据分析模块,随时查Shopee/TikTok本土店数据
  • 机器学习与AI大数据的融合:开启智能新时代
  • 视频监控业务平台LntonCVS国标视频综合管理平台功能及技术优势
  • Python面试宝典第6题:有效的括号
  • Windows上使用Navicat连接ubuntu上的mysql8报错:10061和1130
  • Feign远程调用,请求头丢失情况
  • Windows 11 安装 安卓子系统 (WSA)
  • CD4017 – 带解码输出的十进制计数器
  • Spring Boot 文件上传和下载指南:从基础到进阶
  • Windows Server 2019部署网络负载均衡NLB服务的详细操作步骤
  • Java增加线程后kafka仍然消费很慢
  • 分布式事务实现技术及考虑点
  • JavaScript中闭包的理解
  • 传统IO和NIO文件拷贝过程
  • 算法思想总结:优先级队列
  • 《米小圈日记魔法》边看边学,轻松掌握写日记的魔法!
  • 鸿蒙应用实践:利用扣子API开发起床文案生成器
  • 二手物品交易小程序的设计
  • 基于Spring Boot的高校智慧采购系统
  • 数字流的秩
  • 【mybatis】mybatis-plus中Wrapper(条件构造器)简介_常用方法及说明
  • IT专业入门:高考假期预习指南
  • 推动高效能:东芝TB67H301FTG全桥直流电机驱动IC
  • Matplotlib 中文显示
  • 【LeetCode:841. 钥匙和房间 + DFS】
  • 1)并发事务的问题
  • Python缓存利器:cachetools库详解
  • 【Python实战因果推断】20_线性回归的不合理效果10
  • 在Ubuntu 16.04上安装和配置ownCloud的方法