pytest | 框架的简单使用

这里写目录标题

pytest框架的使用示例

pytest将运行当前目录及其子目录中test_*.py*_test.py 形式的所有 文件

文件内的函数名称 可以test* 或者test_* 开头

单个文件测试方法

  • 运行方式- terminal

    pytest 不指定任何参数表示将执行当前目录下的所有test_文件 如上述pytest目录下的三个测试函数

F 代表测试失败,点 (.) 代表测试成功。

-q 选项会让 pytest 以"quiet"模式运行,这意味着它将减少输出的日志信息,只显示测试结果的摘要。

pytest 命令将执行所有格式的文件*test_*要么_test**在当前目录和子目录中

  • 指定文件运行

pytest test_xx.py

  • 指定类实例名称运行

pytest -k TestClassDemoInstance -q

python 复制代码
class TestClassDemoInstance:
    value = 0
    def test_one(self):
        self.value = 1
        assert self.value == 1

    def test_two(self):
        assert self.value == 1

以下是命令 pytest -k TestClassDemoInstance -q 的详细解释:

  • pytest:这是调用Python测试框架的命令。
  • -k TestClassDemoInstance:这个参数告诉 pytest 只运行测试名称包含 TestClassDemoInstance 的测试用例。【表示要在测试名称中搜索的子字符串】这可以是完整的测试函数名,也可以是类名或部分名称。
  • -q:这是 pytest 的一个命令行选项,表示"quiet",即减少控制台输出。
  • TestClassDemoInstance:这是你想要运行的测试类或测试函数名称的一部分。

执行这个命令后,pytest 会搜索所有测试文件,查找名称中包含 TestClassDemoInstance 的测试用例,并只运行这些测试。【截至目前运行的测试文件,只有一个文件含有TestClassDemoInstance 实例】测试结果将以简洁的格式输出,通常只包含测试的总数和失败的测试数量。

  • 查看详细的运行信息

pytest -v test_square.py

python 复制代码
import math

def test_sqrt():
   num = 25
   assert math.sqrt(num) == 5

def testsquare():
   num = 7
   assert 7*7 == 40

def tesequality():
   assert 10 == 11

执行测试套件的子集

Pytest 提供了两种方法来运行测试套件的子集:

  • 根据测试名称的子字符串匹配选择要运行的测试。
  • 根据应用的标记选择要运行的测试组

测试名称的子字符串

  • 测试文件所在目录内容下的文件

测试函数中只包含great字样的两个测试的文件内容如下 :

python 复制代码
# test_square.py文件
import math

def test_sqrt():
   num = 25
   assert math.sqrt(num) == 5

def testsquare():
   num = 7
   assert 7*7 == 40

def tesequality():
   assert 10 == 11

def test_greater_num():
   num = 100
   assert num == 100
    
# test_compare.py文件
def test_greater():
   num = 100
   assert num > 100
def test_greater_equal():
   num = 100
   assert num >= 100
def test_less():
   num = 100
   assert num < 200
  • 执行测试

1 failed, 2 passed, 11 deselected in 0.12s 在结果中,我们可以看到 11 个测试被取消选择。这是因为那些测试名称不包含单词great在他们之中

根据应用的标记进行选择

类似于装饰器的作用,使用的方式如下

python 复制代码
@pytest.mark.<markername>
  • 执行
python 复制代码
pytest -m <markername> -v
python 复制代码
import pytest

@pytest.mark.great
def test_greater():
   num = 100
   assert num > 100

@pytest.mark.great
def test_greater_equal():
   num = 100
   assert num >= 100


@pytest.mark.others
def test_less():
   num = 100
   assert num < 200

其他常见的测试命令

  • 安装 pytest...
  • 识别测试文件和测试功能。
  • 使用 pytest -v 执行所有测试文件。
  • 使用 pytest -v 执行特定文件。
  • 通过匹配 pytest -k -v 的子字符串执行测试。
  • 基于标记 pytest -m <marker_name> -v 执行测试。
  • 使用 @pytest.fixture 创建夹具。
  • conftest.py 允许从多个文件访问固定装置。
  • 使用 @pytest.mark.parametrize 参数化测试。
  • 使用 @pytest.mark.xfail 进行 Xfailing 测试。
  • 使用 @pytest.mark.skip 跳过测试。
  • 使用 pytest --maxfail = 在 n 次失败时停止测试执行。
  • 使用 pytest -n 并行运行测试。
    使用 @pytest.mark.parametrize 参数化测试。
  • 使用 @pytest.mark.xfail 进行 Xfailing 测试。
  • 使用 @pytest.mark.skip 跳过测试。
  • 使用 pytest --maxfail = 在 n 次失败时停止测试执行。
  • 使用 pytest -n 并行运行测试。
  • 使用 pytest -v --junitxml = "result.xml" 生成结果 xml。
相关推荐
七夜zippoe8 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6489 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满9 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠9 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey90310 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技11 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀11 小时前
Linux环境变量
linux·运维·服务器
zzzsde11 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º13 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~13 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化