测试开发之Python自动化 Pytest 之 fixture

news2024/12/23 23:04:11

Pytest 之 fixture

  • unittest 和 nose 都支持 fixture 的,但是 fixture 在 pytest 里使用更灵活。也算是 pytest 的一个闪光点吧
  • 可以理解为一个跟 setup 和 teardown 这种前后置类似的东西。但是比它们要强大、灵活很多

fixtur 当做参数传入

# -*- coding: utf-8 -*-

import pytest

@pytest.fixture()
def login():
    print('登录系统')

# 直接使用函数名做为参数传入
def test_01(login):
    print('测试用例一')

def test_02():
    print('测试用例2')

def test03():
    print('测试用例3')

运行结果

  • 只有 tes_01 调用了 login

  • 遗留问题来了,如果我这里有 10 个方法或更多?是不是都需调用 login 方法?继续看下面的 fixture 参数

    testcase.py::test_01 登录系统 测试用例一 PASSED testcase.py::test_02 测试用例2 PASSED testcase.py::test03 测试用例3 PASSED

fixture 语法

# scope有4个作用范围:function(不填则默认)、class、module、session
fixture(scope='function', params=None, autouse=False, ids=None, name=None)

参数说明

  • scope:即作用域,function"(默认),"class","module","session"四个
  • params:可选参数列表,它将导致多个参数调用 fixture 函数和所有测试使用它。
  • autouse:默认:False,需要用例手动调用该 fixture;如果是 True,所有作用域内的测试用例都会自动调用该 fixture
  • ids:params 测试 ID 的一部分。如果没有将从 params 自动生成.
  • name:默认:装饰器的名称,同一模块的 fixture 相互调用建议写个不同的 name。
  • session 的作用域:是整个测试会话,即开始执行 pytest 到结束测试 scope 参数作用范围控制 fixture 的作用范围:session>module>class>function

autouse

  • 参数置默认为 False,则需要手动去调用装饰器

  • -- coding: utf-8 --

    import pytest

    当前就算定义了装饰器,也不会调用Login

    @pytest.fixture() def login(): print("打开浏览器")

    def test1(): print("test1里的用例")

    def test2(): print("test2里的用例")

调用方式 1

# -*- coding: utf-8 -*-

import pytest

@pytest.fixture()
def login():
    print("打开浏览器")

# 直接传入函数名
def test1(login):
    print("test1里的用例")

def test2(login):
    print("test2里的用例")

调用方式 2

# -*- coding: utf-8 -*-

import pytest

# autouse设为True,就能自动调用login的装饰器
@pytest.fixture(autouse=True)
def login():
    print("打开浏览器")

# 直接传入函数名
def test1():
    print("test1里的用例")

def test2():
    print("test2里的用例")

function

  • function:作用域为函数

  • 所有的方法都调用了 login

    -- coding: utf-8 --

    import pytest

    @pytest.fixture(scope='function', autouse=True) def login(): print('登录系统')

    def test_01(): print('测试用例一')

    def test_02(): print('测试用例2')

    def test03(): print('测试用例3')

运行结果

  • 符合用例名设计的都会调用装饰器

  • login 不符合所以不会调用

    testcase.py::test_01 登录系统 测试用例一 PASSED testcase.py::test_02 登录系统 测试用例2 PASSED testcase.py::test03 登录系统 测试用例3 PASSED

class

  • class:作用域为类

  • 所以 TestCase1 和 TestCase2 这两个类都会执行 login

    -- coding: utf-8 --

    @Time : 2021/1/14 21:05

  • import pytest

    @pytest.fixture(scope='class', autouse=True) def login(): print('登录系统')

    def test_01(): print('这个是类外面的用例')

    class TestCase1: def test_02(self): print('测试用例2') def test03(self): print('测试用例3')

    class TestCase2: def test_04(self): print('测试用例4') def test05(self): print('测试用例5')

运行结果

  • 类里面的方法只会调用一次

  • pytest 机制,因为方法是以 test 开头,所以也会调用

    testcase.py::test_01 登录系统 这个是类外面的用例 PASSED testcase.py::TestCase1::test_02 登录系统 测试用例2 PASSED testcase.py::TestCase1::test03 测试用例3 PASSED testcase.py::TestCase2::test_04 登录系统 测试用例4 PASSED testcase.py::TestCase2::test05 测试用例5 PASSED

module

  • module:在当前.py 脚本里面所有用例开始前只执行一次

  • 只要符合用例的设计要求,不管是类里和外边的都会调用

    -- coding: utf-8 --

    import pytest

    @pytest.fixture(scope='class', autouse=True) def open(): print("打开浏览器,并且打开百度首页")

    def test_s1(): print("用例1:搜索python-1")

    class TestCase(): def test_s2(self): print("用例2:搜索python-2")

def test_s3(self):
    print("用例3:搜索python-3")

运行结果

  • 当前文件里的用例都调用了装饰器

  • 如果类名不是为 Test 开头你试试看是否还会调用装饰器?

    testcase.py::test_s1 打开浏览器,并且打开百度首页 用例1:搜索python-1 PASSED testcase.py::TestCase::test_s2 打开浏览器,并且打开百度首页 用例2:搜索python-2 PASSED testcase.py::TestCase::test_s3 用例3:搜索python-3 PASSED

session

  • fixture 为 session 级别是可以跨.py 模块调用的

  • 当我们有多个.py 文件的用例时候,如果多个用例只需调用一次 fixture,那就可以设置为 scope="session",并写到 conftest.py 文件里

  • conftest.py 文件名称是固定的,pytest 会自动识别该文件。放到工程的根目录下,就可以全局调用了

  • 如果放到某个 package 包下,那就只在该 package 内有效

    -- coding: utf-8 --

    conftest文件内容

    import pytest

    @pytest.fixture(scope="session", autouse=True) def login(): print("调用conftest文件的里的方法")

两个用例文件

# -*- coding: utf-8 -*-
# testcase1.py 

import pytest

def test1():
    print("test1里的用例")

def test2():
    print("test2里的用例")

# -*- coding: utf-8 -*-
# testcase1.py  
import pytest
def test3():
    print("test3里的用例")

def test4():
    print("test4里的用例")

运行结果

  • 两个文件只有 testcase 文件的用例调了 conftest 里的方法

    testcase.py::test1 调用conftest文件的里的方法 test1里的用例 PASSED testcase.py::test2 test2里的用例 PASSED testcase1.py::test3 test3里的用例 PASSED testcase1.py::test4 test4里的用例 PASSED

pytest-allure 生成测试报告

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

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

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

相关文章

图像处理实战02-yolov5目标检测

yolov5 YOLOv5 是一种目标检测算法,它是 YOLO (You Only Look Once) 系列算法的最新版本。YOLOv5 采用了一种新的架构,它包括一个基于 CSPNet (Cross Stage Partial Network) 的主干网络以及一系列改进的技巧,如多尺度训练、数据增强、网络混…

互联网行业-镭速文件传输系统方案

互联网行业是一个快速变化和高度竞争的行业,这一行业需要传输大量的数据、代码和文件。在互联网企业的生产和运营过程中,需要传输各种敏感和大型的文件,例如业务报告、数据分析、软件代码等。这些文件需要在不同的部门、不同的地点之间高效地…

微服务springcloud 07 hystrix + turbine 集群聚合监控

01.hystrix dashboard 一次只能监控一个服务实例&#xff0c;使用 turbine 可以汇集监控信息&#xff0c;将聚合后的信息提供给 hystrix dashboard 来集中展示和监控 02.新建 sp10-turbine 项目 03.pom.xml <?xml version"1.0" encoding"UTF-8"?&…

C语言---malloc(0)会产生什么结果,真的是空指针吗?

前言 &#xff08;1&#xff09;几天前在一个交流群中看到有人说&#xff0c;面试问malloc(0)会怎么样是真的恶心。 &#xff08;2&#xff09;这个突然激起了我的好奇心。居然还可以malloc(0)&#xff1f;&#xff01; &#xff08;3&#xff09;经过测试最后&#xff0c;发现…

基于Java学生课外知识学习网站设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

PulsarMQ系列入门篇

文章目录 介绍&#xff1a;部署安装讲解:安装单机版本测试&#xff08;Linux下&#xff09;&#xff1a; 介绍&#xff1a; PulsarMQ 现托管于apache Apache 软件基金会顶级项目&#xff0c;2016年由雅虎公司开源的分布式多租户消息中间件 &#xff0c;是下一代云原生分布式消息…

PaddleOCR #hello paddle: 从普通程序走向机器学习程序 - 初识机器学习

这篇示例向你介绍普通程序跟机器学习程序的区别&#xff0c;并带着你用百度飞桨框架&#xff0c;实现第一个机器学习程序&#xff0c;并初步认识机器学习。 作为一名开发者&#xff0c;你最熟悉的开始学习一门编程语言&#xff0c;或者一个深度学习框架的方式&#xff0c;可能是…

万字长文:大模型训练避坑指南

自 2022 年 11 月底 ChatGPT 发布以来&#xff0c;大模型的热度持续发酵&#xff0c;相信高屋建瓴的讨论大家已经看了很多了。今天我们选择从实用角度&#xff0c;分别就算力、算法、工程、数据和团队等方向讨论了训练一个千亿参数量级的大语言模型和 ChatGPT 需要些什么&#…

4.17 TCP三次握手 4.18滑动窗口 4.19TCP四次挥手

4.17 TCP三次握手 TCP 是一种面向连接的单播协议&#xff0c;在发送数据前&#xff0c;通信双方必须在彼此间建立一条连接。所谓的“连接”&#xff0c;其实是客户端和服务器的内存里保存的一份关于对方的信息&#xff0c;如 IP 地址、端口号等。 TCP 可以看成是一种字节流&a…

i.MX 91x推出,飞凌嵌入式携手NXP打造更强大、更经济、更安全的解决方案

NXP在COMPUTEX 2023上发布了i.MX 91应用处理器系列&#xff0c;作为i.MX 9系列的入门级产品&#xff0c;i.MX 91x简化了高性价比边缘设备的开发过程&#xff0c;助力构建需要安全性、高性能表现以及Linux支持的可扩展、高可靠性的平台&#xff0c;可满足下一代基于Linux的物联网…

【数据库三】MySQL索引

MySQL索引、事务与存储引擎 1.MySQL索引1.1 索引的概念1.2 索引的作用​1.3 索引的副作用​1.4 创建索引的原则依据​ 2.索引的分类和创建2.1 普通索引2.2 唯一索引2.3 主键索引2.4 组合索引2.5 全文索引 3. 查看索引4.删除索引5. 知识点总结 1.MySQL索引 1.1 索引的概念 索引…

基于html+css的图展示127

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

Unity光照贴图的切换,实现黑夜和白天效果

有这么一个需求&#xff0c;不能使用实时光来进行动态控制光照开关&#xff0c;但是又要实现白天和黑夜的效果&#xff0c;我的场景中有大概十几个点光源和平行光 实现步骤&#xff1a; 一、模型原模原样复制到另一个场景中&#xff08;因为贴图只能存在于当前的场景文件夹&am…

618私藏好物推荐!看这份清单就够了!

又到了一年一度的618&#xff0c;相信大家的购物车已经堆得满满的&#xff0c; 部分人已经选好了自己想要的东西&#xff0c;但也有一部分人还在纠结自己到底应该买什么。今天就给大家分享我的618私藏好物&#xff0c; 如果你想在这个夏天买到自己心仪的好物&#xff0c;建议你…

IIC总线 测温度和湿度

iic.c #include "iic.h"extern void printf(const char* fmt, ...); /** 函数名 &#xff1a; delay_us* 函数功能&#xff1a;延时函数* 函数参数&#xff1a;无* 函数返回值&#xff1a;无* */ void delay_us(void) {unsigned int i 2000;while(i--); } /** 函数…

字符设备驱动的内部实现

1.inode号的功能 &#xff1a;①inode号是文件存在于文件系统的唯一标识1 ②同时也是索引当前文件的inode结构体的索引导 2.文件信息结构体&#xff1a;只要文件存在于文件系统中&#xff0c;那么内核中一定会存在一个struct inode结构体&#xff0c;这个结构体里面存放了文件…

详解Http的Content-Type

目录 1.概述 2.常用类型 2.1.application/x-www-form-urllencoded 2.2.application/json 3.Spring MVC支持的编码 3.1.实验 3.2.适配器 3.3.自定义适配器 1.概述 HTTP&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;超文本传输协议。超文本&#xf…

从redis-trib.rb到集群加减节点实战

redis-trib.rb工具介绍 redis-trib.rb是redis集群管理工具&#xff0c;可以检查集群、创建删除节点、挪key、批量下发实例命令等等。 不是没有redis-trib.rb就没有集群管理了&#xff0c;没有redis-trib.rb照样可以管理集群。redis本身就有集群相关管理命令&#xff0c;redis-…

2021年系统架构设计师考试下午案例分析真题

试题一 阅读以下关于软件架构设计与评估的叙述&#xff0c;在答题纸上回答问题1和问题2。 [说明] 某公司拟开发-套机器学习应用开发平台,支持用户使用浏览器在线进行基于机器学习的智能应用开发活动。 该评台的核心应用场景是用户通过拖拽算法组件灵活定义机器学习流程&#…

“6511”成果显著,联诚发上半年表现企稳高升!

六场巡回演唱会&#xff0c;五大知名展会&#xff0c;一部爆款大电影&#xff0c;一项省级品牌荣誉。 这些关键词&#xff0c;是联诚发&#xff08;LCF&#xff09;在短短六个月内取得的各项成果的总览。 ▲联诚发LCF 公司简介 绿树阴浓夏日长&#xff0c;6月的到来也预示着阶…