pytest简介、安装、快速入门(一)

本文介绍了Python测试框架pytest,包括其特点(如易于使用、强大的断言和插件支持)、快速入门步骤、用例设计规则以及执行命令的详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近复习pytest框架,正好写一下系列文章,文章全程干货,希望能帮助到你,如有错误的地方,欢迎大家指正。

1、pytest简介

Pytest 是一个成熟的全功能 Python 测试框架,它支持单元测试、集成测试以及功能测试。Pytest 的设计目标是简单、易于理解和使用,并且能够支持广泛的测试需求。

以下是 Pytest 的主要特点:

1、易于上手和使用:Pytest 提供了简单的语法和易于使用的 API,使得编写和组织测试用例变得非常容易。
2、强大的断言功能:Pytest 提供了丰富的断言功能,可以方便地对测试结果进行验证,确保代码的正确性。
3、插件支持:Pytest 支持插件,可以方便地扩展其功能。例如,可以通过插件来添加额外的测试报告、日志记录等功能。
4、参数化测试:Pytest 支持参数化测试,可以在同一个测试用例中使用不同的输入数据集进行测试,提高测试覆盖率。
5、异步测试支持:Pytest 可以方便地支持异步测试,使得测试复杂的异步代码变得非常容易。
6、集成能力:Pytest 可以方便地集成其他测试工具和库,如 Doctest、Ned Batchelder’s coverage、Gcov等。
7、灵活的钩子支持:Pytest 支持钩子(hook)机制,可以在测试执行过程中的关键点进行自定义操作,实现更灵活的测试控制。
8、丰富的文档和社区支持:Pytest 有丰富的文档和活跃的社区,可以方便地获取帮助和支持。

官方网址:

http://pytest.org/

GitHub网址:

https://github.com/pytest-dev/pytest

2、快速入门

在命令行输入:

pip install pytest

如果使用官方的源下载慢时,请使用国内的源,以下列列举几个,选一个使用。

清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云:https://mirrors.aliyun.com/pypi/simple/
豆瓣:https://pypi.douban.com/simple/
中科大:https://pypi.mirrors.ustc.edu.cn/simple/
# 临时使用源
eg:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pytest

如果要设置每次都使用对应的源下载包时,需要如下配置:

# https://mirrors.aliyun.com/pypi/simple/  可以更换你需要的源地址,后面下载就使用该源下载
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

#  执行下面命令验证是否更换成功,如果更换成功则返回刚才设置的源地址
pip config get global.index-url

查看当前pytest版本命令:

pytest --version

3、快速入门

3.1、快速入门

创建test_login.py文件,文件中使用函数和类分别写了登录和失败的测试用例,当们执行时,发现一共执行了4条用例,全部成功。

我使用pytest.main([“-s”, “-q”, “test_login.py”])方式在文件中执行用例,也可以在命令行中执行,切换到文件所在目录下输入pytest执行。

# -*- coding: utf-8 -*-
# @Time    : 2023/11/21 14:55
# @Author  : 梗小旭
# @File    : test_login.py

import pytest

def test_login_success():
    print("登录成功。。。")

def test_login_fail():
    print("登录失败。。。。")

class TestLogin:
    def test_login_class_success(self):
        print("类-登录成功。。。")

    def test_login_class_fail(self):
        print("类-登录失败。。。")

if __name__ == '__main__':
    pytest.main(["-s", "-q", "test_login.py"])

执行结果如下:

在这里插入图片描述
总结:
1、通过上述执行用例,我们发现创建的文件、方法级别用例,类、类中的方法都是以test_开头,那是因为在执行pytest时,会查找当前目录下以test_.py开头的文件,py文件中查找以test_*开头的类和方法并执行。
2、如果只想执行某个py文件,在命令行中输入:

pytest test_login.py

3、执行命令时,可以加-q、-s参数来实现对应的功能,每个参数的含义我会单独写一篇文章来介绍,-q是使用该命令后,将显示简单的结果。-s是使用该命令后,将显示测试函数中print()函数输出。

3.2、pytest用例设计规则

设计用例必须按照如下规则写,否则pytest找不到你的用例
①、用例的py文件必须以test_.py或者_test.py格式
②、函数用例用test_开头
③、类用Test开头,类方法用test_开头, 最重要一点,拿你的小本本记下来,用类写用例,类里面不能用__init__方法
④、所有的包Package必须要有__init__文件

下面解释下,为什么类用例不能有__init__方法:
在 pytest 中,类的构造函数(init 方法)不会被自动调用。这是因为 pytest 默认使用 fixture 功能来初始化测试用例,而不是使用类的构造函数。

Fixture 是 pytest 中用于初始化测试用例的一种机制,它可以用于设置测试用例的预置条件和准备工作。在 pytest 中,每个测试用例都是一个独立的函数,因此不需要使用类的构造函数来初始化测试用例的状态。

如果你需要在 pytest 中使用类的构造函数,可以通过在类中定义一个 init 方法来实现。但是需要注意的是,pytest 不会自动调用这个构造函数,你需要手动实例化这个类并传入相应的参数,否则就会收集不到用例。
示例:

class TestLogin:
    def __init__(self):
        print("我是构造函数。。。")

    def test_login_class_success(self):
        print("类-登录成功。。。")

    def test_login_class_fail(self):
        print("类-登录失败。。。")

if __name__ == '__main__':
    pytest.main(["-s", "-q", "test_login.py"])

在这里插入图片描述

3.3、pytest执行用例规则

①、命令行执行:

# 目录下执行所有的用例
pytest
或者
py.test
# 执行单独一个pytest模块
pytest 文件名.py

# 运行某个模块里面的某个类
pytest 文件名.py::类名

# 运行某个模块里面某个类里面的方法
pytest 文件名.py::类名::方法名

# -v打印运行日志信息(详细)
pytest -v 文件名.py

# -q打印运行日志信息(简略)
pytest -q 文件名.py

# -s控制台输出结果
pytest -v -s 文件名.py
# s是带控制台输出结果,也是输出详细运行日志

# -m标记表达式
pytest -m login
将运行用 @pytest.mark.login 装饰器修饰的所有测试

3.2.9、-x用例运行失败则立即停止执行
pytest -x 文件名.py

3.2.10、-k运行包含关键字的用例
pytest -v -k "one" 文件名.py
执行测试用例名称包含 one 的所有用例

3.2.11、-k运行排除关键字的用例
pytest -v -k "not one" 文件名.py
执行测试用例名称不包含 one 的所有用例

3.2.12、-k运行匹配多个关键字的用例
pytest -v -k "one or two" 文件名.py
执行测试用例名称包含 one 或 two 的所有用例

3.2.13、--maxfail=num错误个数达到指定数量停止测试
pytest 文件名.py --maxfail=1
用例运行时允许的最大失败次数,超过则立即停止。

②、代码中运行:

# 使用pytest.main执行命令,命令参数写在list中,"test_login.py"为当前py文件的名称
 pytest.main(["-s", "-q", "test_login.py"])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值