pytest使用手册

news2024/9/24 9:27:09

1. pytest寻找测试项的具体规则

  • 如果未指定命令行参数,则从pytest命令运行的当前目录开始收集。
  • 如果在命令行参数中指定了目录、文件名则按参数来寻找。
  • 寻找过程会按照目录层层递归,在这些目录中,搜索 test_*.py 或 *_test.py 文件。
  • 从这些文件中,收集如下测试项:
    • test为前缀的函数
    • Test为前缀的类里面的 test为前缀的方法

2. 编写测试用例代码

首先,我们编写的测试用例代码文件, 必须以 test_ 开头,或者以 _test 结尾。比如,我们创建一个 文件名为 test_错误登录.py ,放在目录 autotest\cases\登录下面。其中autotest是我们创建的自动化项目根目录。

class Test_错误密码:

    def test_C001001(self):
        print('\n用例C001001')
        assert 1 == 1
        
    def test_C001002(self):
        print('\n用例C001002')
        assert 2 == 2
        
    def test_C001003(self):
        print('\n用例C001003')
        assert 3 == 2

如果我们把测试用例存放在类中, 则类名必须以 Test 为前缀,类中的测试用例对应的方法必须以 test为前缀。
pytest 中用例的检查点直接用Python的 assert 断言。
assert后面的表达式结果为True ,则表示检查点通过;结果为False ,则表示检查点不通过。

在这里插入图片描述显示找到3个测试项,2个执行通过,1个不通过。
通过的用例 是用一个绿色小点表示, 不通过的用例用一个红色的F表示
并且会在后面显示具体不通过的用例 和不通过的检查点 代码细节。

3. 编写初始化清除(setup、teardown)

对自动化测试框架来说,初始化清除功能至关重要。

  1. 模块级别(setup_module、teardown_module):模块级别的初始化、清除分别在整个模块的测试用例执行前后执行,并且只会执行1次 。它主要是用来为该模块中所有的测试用例做公共的初始化和清除。
  2. 类级别(setup_class、teardown_class):类级别的初始化、清除分别在整个类的测试用例执行前后执行,并且只会执行1次。它主要是用来为该类中的所有测试用例做公共的初始化和清除。
  3. 方法级别(setup_method、teardown_method):方法级别的初始化、清除分别在类的每个测试方法执行前后执行,并且每个用例分别执行1次。它主要是用来为具体的某个测试用例做初始化和清除。
  4. 目录级别:目标级别的初始化、清除就是针对整个目录执行的初始化、清除。它主要是用来为该目录下的所有的测试用例做公共的初始化和清除。

4. 目录级别的初始化清除

4.1 conftest.py文件

我们在需要初始化的目录下面创建一个名为conftest.py的文件,里面内容如下所示:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pytest
@pytest.fixture(scope="session")
def login():
    print("====登录功能,返回账号,token===")
    name = "testyy"
    token = "npoi213bn4"
    yield name, token
    print("====退出登录!!!====")
    
@pytest.fixture(autouse=True)
def get_info(login):
    name, token = login
    print(f"== 每个用例都调用的外层fixture:打印用户token: {token} ==")

pytest在执行 test_i2c.py 文件之前,会先执行 conftest.py 文件中的方法,然后再执行 test_i2c.py 文件。
举例说明:上述代码块中共两个方法:login()、get_info()。并且方法使用pytest.fixture()装饰器来标记,这样在其他函数、模块、类或整个工程调用它时会被激活并优先执行,通常会被用于完成预置处理和重复操作。
conftest.py的作用
首先, conftest.py 的文件名称是固定的, pytest 会自动识别该文件,我们可以理解成一个专门存放 fixture 的配置文件。
一个工程下可以建多个conftest.py文件,一般我们都是在工程根目录下设置conftest文件,这样会起到一个全局的作用。 我们也可以在不同的子目录下放 conftest.py ,这样作用范围只能在该层级的子目录下生效。

4.2 conftest.py 配置注意事项

  • pytest 会默认读取 conftest.py 里面的所有 fixture。
  • conftest.py 文件名称是固定的,不能改动。
  • conftest.py 只对同一个目录下的所有测试用例生效。
  • 不同目录可以有自己的 conftest.py,一个项目中可以有多个 conftest.py。
  • 测试用例文件中不需要手动 import conftest.py,pytest 会自动查找。
  • 用 fixture 实现 teardown 并不是一个独立的函数,而是用 yield 关键字来开启 teardown 操作。

4.3 pytest.fixture()参数介绍

1. scope:

  • 当 pytest.fixture(scope=“session”) 时,作用域是整个测试会话,即开始执行pytest 到结束测试只会执行一次。
  • 当 pytest.fixture(scope=“function”) 时,如果不写参数,默认就是scope=“function”,它的作用范围是每个测试用例来之前运行一次。
  • 当 pytest.fixture(scope=“class”) 时,它的作用范围是每个测试类前执行一次。
  • 当 pytest.fixture(scope=“module”) 时, module 作用是整个 .py 文件都会生效(整个文件只会执行一次),用例调用时,参数写上函数名称就可以。
  • 注:同一个模块里出现多个范围的装饰时,优先实例化范围优先级高的。也就是优先级从大到小:session–>module–->class–->function

2. name:
fixture的重命名。通常来说使用 fixture 的测试函数会将 fixture 的函数名作为参数传递,但是 pytest 也允许将fixture重命名。如果使用了name,那只能将name传入,函数名不再生效。
3. autouse:
默认False。若为True,刚每个测试函数都会自动调用该fixture,无需传入fixture函数名。

4.4 调用fixture的四种方法

1. 函数或类里面方法直接传fixture的函数参数名称@pytest.fixture()
2. 使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例,该方式获取不到fixture标识函数的返回值
3. 叠加usefixtures
4. autouse设置为True,自动调用fixture功能

5. pytest的配置文件

  • pytest.ini:pytest的主配置文件,可以改变pytest的默认行为,有很多可配置的选项。
  • conftest.py:是本地的插件库,其中的fixture将作用于该文件所在的目录以及所有子目录。(上文已介绍)
  • init.py:每个测试子目录都包含该文件时,那么在多个测试目录中可以出现同名测试文件。

下面具体介绍pytest.ini文件:

[pytest]
markers=
        smoke:冒烟测试
        huigui:回归测试
addopts= -m=dailybuild
#指定文件名称
python_files=test_*.py
#指定类名称
python_classes=Test*
#指定方法名称
python_functions=test_*
  • markers:pytest打标签以筛选测试用例,下文会进行详细介绍
  • addopts:指定默认的 pytest 选项。-m=标签:执行被@pytest.mark.标签名标记的用例
  • python_files:指定 pytest 只查找包含指定文件名模式的文件。例如,只查找 test_*.py 文件
  • python_classes:指定 pytest 只查找包含指定类名模式的类。例如,只查找以 Test 开头的类
  • python_functions:指定 pytest 只查找包含指定函数名模式的函数。例如,只查找以 test_ 开头的函数

6. pytest打标签

  1. 在pytest.ini文件中markers这个配置项注册标签
  2. 通过pytest.mark.标签名给单个用例加一条或多条标签
import pytest

class TestClass():
    
    @pytest.mark.smoke
    @pytest.mark.huigui
    def test_one(self):
        assert 1 == 1

    @pytest.mark.smoke
    def test_two(self):
        assert 2 == 2

    def test_three(self):
        assert 3 == 3
  1. pytestmark=[pytest.mark.smoke]给测试类所有的用例添加标签
import pytest

pytestmark = [pytest.mark.huigui]
class TestClass():

    @pytest.mark.smoke
    def test_one(self):
        assert 1 == 1

    @pytest.mark.smoke
    def test_two(self):
        assert 2 == 2

    def test_three(self):
        assert 3 == 3
  1. 执行用例的时候可以通过pytest -m 标签名去筛选用例执行。运行时会收集所有的测试用例的数量,显示未选中和选中的数量,执行选中的测试用例。
    在这里插入图片描述

  2. 扩展:筛选多个标签(and or not)
    pytest -m “not smoke”----------运行除了smoke标签的用例
    pytest -m “smoke or huigui”-----------运行smoke或者huigui的用例

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

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

相关文章

GPT-4变笨引爆舆论!文本代码质量都下降,OpenAI刚刚回应了降本减料质疑

梦晨 克雷西 发自 凹非寺 量子位 | 公众号 QbitAI 大模型天花板GPT-4,它是不是……变笨了? 先是少数用户提出质疑,随后大量网友表示自己也注意到了,还贴出不少证据。 有人反馈,把GPT-4的3小时25条对话额度一口气用完…

PDF怎么转换成WORD?分享这几个方法给大家!

PDF怎么转换成Word?在我们的工作过程中,经常会使用到PDF文件、Word文件等等。而在很多时候,需要根据工作需求,将各种文件进行格式转换,例如将PDF文件转换成Word格式,从而满足我们对文件进行编辑、更改等需求…

learn C++ NO.8——初识模板(函数模板、类模板)

文章目录 引言1.泛型编程1.1.什么是泛型编程? 2.函数模板2.1.什么是函数模板2.2.为什么需要函数模板2.3.函数模板格式2.4.函数模板实现原理2.5.函数模板的实例化 3.类模板3.1.类模板定义格式3.1.1.类模板语法3.1.2.模板类的定义 3.2.模板类的实例化 引言 现在是北京…

Hadoop之Yarn概述

Hadoop之Yarn概述 Yarn是什么Yarn基础架构Yarn工作机制回顾HDFS、YARN、MapReduce三者关系Yarn调度器和调度算法先进先出调度器(FIFO)容量调度器(Capacity Scheduler)公平调度器(Fair Scheduler) Yarn常用命…

SpringBoot整合SpringSession实现分布式登录详情

目录 Session 共享为什么服务器 A 登录后,请求发到服务器 B,不认识该用户?解决方案SpringBoot整合SpringSession实现分布式登录 Session 共享 比如两个域名: aaa.yupi.combbb.yupi.com如果要共享 cookie,可以种一个…

事件机制原理剖析及实际业务应用说明

什么是事件? 一个特定的场景发生了一个特定的情况就是一个事件。 事件在设计中的作用 为对象之间解耦。 举例 现有用户中心和消息中心。 目前,有一个用户注册的场景,此场景要求用户注册成功后要给用户发送多渠道欢迎通知(微信、…

(11) XGBoost

文章目录 1 简要介绍2 梯度提升树2.1 提升集成算法:重要参数n_estimators2.2 有放回随机抽样:重要参数subsample2.3 迭代决策树:重要参数 η \eta η 3 XGBoost的智慧3.1 选择弱评估器:重要参数booster3.2 目标函数:重…

SpringCloud_微服务基础day2(Eureka注册中心:服务注册与发现

p6:Eureka简介与依赖导入 前面我们了解了如何对单体应用进行拆分,并且也学习了如何进行服务之间的相互调用,但是存在一个问题,就是虽然服务拆分完成,但是没有一个比较合理的管理机制,如果单纯只是这样编写&#xff0c…

HBase:(三)HBase API

HBase:(一)安装部署_只爱大锅饭的博客-CSDN博客hbase部署安装https://blog.csdn.net/qq_35370485/article/details/130988364?spm1001.2014.3001.5501 1.创建maven项目 2.添加依赖 <dependency><groupId>org.apache.hbase</groupId><artifactId>hba…

【鲁棒】对信息不完整的 DSGE 模型进行鲁棒预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

使用 TiUP 部署 TiDB 7.1.0 集群

使用 TiUP 部署 TiDB 7.1.0 集群 参考官方文档 1. 下载社区版安装包 TiDB 社区版 TiDB 7.1.0 为长期支持版本 (Long-Term Support Releases, LTS)。 TiDB-community-server 软件包 TiDB-community-toolkit 软件包 wget https://download.pingcap.org/tidb-community-ser…

【论文阅读】Attention-based Deep Multiple Instance Learning

misc{Ilse_Tomczak_Welling_2018, title{Attention-based Deep Multiple Instance Learning}, journal{International Conference on Machine Learning}, author{Ilse, Maximilian and Tomczak, JakubM. and Welling, Max}, year{2018}, month{Jul} }1、摘要与引言 本文…

CodeForces..走路的男孩.[简单].[时间间隔]

题目描述&#xff1a; 题目解读&#xff1a; 数学上的遛狗问题。 大意就是需要遛狗&#xff0c;一天至少两次&#xff0c;每次至少120分钟&#xff0c;题中所给的时间轴是从0-1440分钟&#xff0c;表示一整天。 然后它的主人正在不断接收信息&#xff08;在工作&#xff09;…

作用域 (局部作用域和全局作用域) 详细介绍

作用域 (局部作用域和全局作用域) 详细介绍 作用域是当前的执行上下文&#xff0c;值和表达式在其中“可见”或可被访问。 常见的作用域为&#xff1a; 全局作用域&#xff1a;脚本模式运行所有代码的默认作用域 函数作用域&#xff1a;由函数创建的作用域 局部作用域&#xff…

附录1-小程序常用标签

目录 1 view 2 scroll-view 3 swiper与swiper-item 4 text 5 rich-text 6 button 7 image 1 view 相当于html的div 2 scroll-view scroll-view是一个有滚动条的div scroll-y是允许纵向滚动&#xff0c;scroll-x是允许横向滚动 3 swiper与swiper-item swipe…

文盘Rust -- tokio绑定cpu实践 | 京东云技术团队

tokio 是 rust 生态中流行的异步运行时框架。在实际生产中我们如果希望 tokio 应用程序与特定的 cpu core 绑定该怎么处理呢&#xff1f;这次我们来聊聊这个话题。 首先我们先写一段简单的多任务程序。 use tokio::runtime; pub fn main() {let rt runtime::Builder::new_mu…

华为OD机试真题 Java 实现【通信误码】【2022Q4 100分】,附详细解题思路

一、题目描述 信号传播过程中会出现一些误码&#xff0c;不同的数字表示不同的误码ID&#xff0c;取值范围为1~65535&#xff0c;用一个数组记录误码出现的情况。 每个误码出现的次数代表误码频度&#xff0c;请找出记录中包含频度最高误码的最小子数组长度。 二、输入描述 …

Nginx+花生壳实现个人网站

下载Nginx Windows版本&#xff0c;目前稳定版1.24&#xff0c;Mainline的版本是1.25 Nginx下载后是一个zip文件&#xff0c;选择适当的位置解压。 首先修改一下Nginx的配置文件nginx.conf&#xff0c;位于conf目录下面&#xff1a; 配置文件我只修改了访问的端口号&#xff…

文件操作之文件包含全解(31)

文件包含的作用就是将这个文件包含进去之后&#xff0c;会调用指定文件的代码。先将文件包含才能执行里面的一些相关代码&#xff0c;比如所想进行文件的链接&#xff0c;数据库的查询&#xff0c;就可以先包含一个数据库的配置文件&#xff0c; 再去链接的话就享有配置文件的一…

2023年6月北京/广州/深圳CDGA/CDGP数据治理认证招生

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…