pytest

本文介绍了pytest的安装、测试用例编写规范、执行过程、参数化执行、断言、跳过和重跑失败用例的方法,以及如何使用ini配置文件、fixture、日志、报告和Allure集成。详细讲解了pytest的命令行参数、装饰器、fixture的scope、autouse、params和ids等特性,帮助读者全面掌握pytest的使用。
摘要由CSDN通过智能技术生成

安装

pip install pytest

编写测试用例

文件名必须以”test_”开头或”_test”结尾

类的命名要以”Test”开头,T 必须大写

方法名必须要”test_”开头

pytest 兼容 unittest,以 unittest 的用例编写规范写的用例,pytest 都能够识别出来

def test_s1():
    a = 3
    b = 4
    # 断言
    assert a == b

pytest执行过程

  1. 查询当前目录下的 conftest.py 文件
  2. 查询当前目录下的 pytest.ini 文件
  3. 查询用例目录下的 conftest.py 文件
  4. 查询py文件是否有 初始化,销毁机制代码
  5. 查找用例并执行

断言

允许使用标准的 Python语法 用于验证测试中的 期望值 和 实际值(关键字:assert)

def test_s1():
    a = 3
    b = 4
    # 断言
    assert a == b

def f():
    return 3
  
def test_function():
    assert f() == 4

def test_s1():
    try:
        a = 0
        b = [0, 1, 2]
        # 断言
        assert a in b
    except Exception:
        # 抛出异常
        raise

执行用例

参数

通过 终端 执行测试

不带参数

pytest:会自动读取 当前目录 和 子目录 的所有test_开头的.py文件,运行test_方法或者类

自动查找 yy 目录及子目录 下的测试文件

    1. -v:显示测试的详细参数信息
      1. pytest -v

    1. -s:显示测试执行的输出信息
      1. pytest -s

    1. -n:多线程运行 (前提安装了 pytest-xdist 插件)
      1. pytest -vs -n=几个线程

    1. -k:运行测试用例名称中包含某个字符串的测试用例
      1. pytest -k="用例名称包含的字符串1 or 用例名称包含的字符串2"

在代码中通过pytest.main()方法来执行测试

    1. pytest.main():不带参数 会自动查找 当前目录 和 子目录 的所有test_开头的.py文件,运行test_方法或者类
    2. 注意:一般在 项目 根目录 新建一个py文件来执行

可以传入不同的参数,让运行更加定制化,把参数放在列表中,每个参数就是列表中的一个元素

pytest.main(['../'])               # 运行../目录和子目录下 所有(test_*.py  和 *_test.py)

pytest.main (['../subpath1'])    # 运行../subpath1 目录及子目录下用例

pytest.main (['../subpath1/test_module1.py'])    # 运行指定文件

pytest.main (['../subpath1/test_module1.py::test_m1_1'])  # 运行文件中的指定用例

pytest.main (['../subpath2/test_module2.py::TestM2::test_m2_02'])  # 运行类中的指定用例

pytest.main (['-k','pp'])         # 匹配包含pp的用例(匹配目录名、文件名、类名、用例名)

pytest.main(['-k','spec','../subpath1/test_module1.py'])     # 匹配test_module1.py文件下包含spec的用例

pytest.main(['-k','pp','../subpath2/test_module2.py::TestM2'])   # 匹配TestM2类中包含pp的用例

pytest.main(['-vs']) # 显示测试的详细参数信息和执行的输出信息

pytest.main(['-vs', '-n=几个线程']) # 多线程运行,如 1,2,3。。。

pytest.main(['../','-vs','-k=用例名称包含的字符串1 or 用例名称包含的字符串2']) # 运行测试用例名称中包含某个字符串的测试用例

测试结果符号

符合

含义

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

测试笔记。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值