Python全功能测试框架pytest

本文介绍了Python全功能测试框架pytest的使用,包括快速入门、测试调用和使用方法。pytest以其简单灵活、支持参数化等特点,适用于单元测试、功能测试及自动化测试。文章详细讲解了pytest的安装、第一个测试的创建、断言方法、分组测试、临时目录的使用,以及如何通过命令行和代码调用测试。此外,还探讨了pytest的断言、固定装置、标记测试等功能,是Python测试的重要工具。
摘要由CSDN通过智能技术生成

PyTest

一、 快速开始

1、 介绍

pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:

  • 简单灵活,容易上手
  • 支持参数化
  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
  • pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等
  • 测试用例的skip和xfail处理
  • 可以很好的和jenkins集成
  • report框架----allure 也支持了pytest

官方文档位置:https://docs.pytest.org/en/7.1.x/

2、 安装

这里使用的是poetry来进行安装的,poetry使用方法

poetry add pytest  # 添加pytest
poetry add pytest-html  # 添加 html 测试报告生成
pytest --version  # 检测是否安装成功

3、 第一个测试

创建一个test_*.py或者*_test..py的文件,运行的时候,pytest可以自动检测这些测试文件:

# content of test_sample.py
def func(x):
    return x + 1

def test_answer():
    assert func(3) == 5

你可以使用 assert 验证测试期望的声明。皮特试验 Advanced assertion introspection 将智能地报告断言表达式的中间值,以便避免使用多个名称 of JUnit legacy methods .

然后,我们就使用,pytest提供的命令开始进行测试:

pytest tests --html report.html  # --html 指定html输出的位置,tests是存放测试文件的文件夹

pytest 将运行窗体测试的所有文件_ *.py or * _当前目录及其子目录中的test.py

运行结果:

4、 断言引发异常

我们使用 raises 助手来断言某些代码引发异常:

# content of test_sysexit.py
import pytest


def f():
    raise SystemExit(1)


def test_mytest():
    with pytest.raises(SystemExit):
        f()
        
# 运行测试
# pytest -q

以“安静”报告模式执行测试功能: 它不会显示其为程序的异常,测试正常通过。

pytest中的-q参数代表保持输出简短 ,只输出程序异常的日志,其余的不输出。

5、 分组测试

一旦开发了多个测试,您可能需要将它们分组到一个类中。pytest使创建包含多个测试的类变得很容易:

# content of test_class.py
class TestClass:
    def test_one(self):
        x = "this"
        assert "h" in x

    def test_two(self):
        x = "hello"
        assert hasattr(x, "check")

pytest 发现以下所有测试 Conventions for Python test discovery ,所以它发现 test_ 前缀函数。没有必要对任何东西进行子类化,但是要确保在类前面加上 Test 否则将跳过该类。我们只需传递其文件名即可运行该模块:

pytest -q test_class.py

第一次测试通过,第二次失败。您可以很容易地看到断言中的中间值,以帮助您理解失败的原因。

将测试分组在类中是有益的,原因如下:

  • 试验机构
  • 仅在该特定类中共享测试夹具
  • 在类级别应用标记并将其隐式应用于所有测试

在类中对测试分组时需要注意的是,每个测试都有一个唯一的类实例。让每个测试共享同一个类实例将非常不利于测试隔离,并且会导致不良的测试实践。概述如下:

# content of test_class_demo.py
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  
  • 在类级别添加的属性是类属性,因此它们将在测试之间共享

6、 添加临时目录

pytest提供内置固定装置/函数参数来请求任意资源,例如唯一的临时目录:

# content of test_tmp_path.py
def test_needsfiles(tmp_path):
    print(tmp_path)
    assert 0
# pytest -q test_tmp_path.py # 运行

列出名字 tmpdir 在测试函数签名和 pytest 将在执行测试函数调用之前查找并调用fixture工厂以创建资源。

使用pytest --fixtures命令查看有哪些fi

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveKenny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值