Pytest测试实战第1至4章

Pytest测试实战

一、使用约束

在执行pytest命令时,会自动从当前目录及子目录中寻找符合以下约束的测试函数来执行。可以在pytest.ini中修改测试目录、测试模块、测试类、测试方法扫描进行默认修改。

  1. 在单测文件中,所有测试类以Test开头,并且不能带’init’方法

  2. 在单测类中,可以包含一个或者多个以’test_'开头的函数

二、常用命令

  1. pytest -v test_xxx.py —> -v参数可以得到更完整的前后对比信息。
  2. pytest -collect-only test_xxx.py —> 用来显示给定配置下会有哪些测试用例被运行。也可以用**’–co’**参数。
  3. pytest -k “add or passing” --co —> 使表达式指定特定的测试用例运行。
  4. pytest -m test_xxx.py —> 该选项用于运行做过标记的用例。标记使用装饰器:@pytest.mark
  5. pytest -x test_xxx.py —> 用于断言失败或者触发了异常时立即停止整个会话。方便调试。
  6. pytest –maxfail=1 test_xxx.py —> 指定失败几次后停止,num等于1时相当于-x。
  7. pytest -s test_xxx.py —> 允许测试时输出任何符合标准的输出流信息,例如print。
  8. pytest -lf test_xxx.py —> 用于重新运行之前失败的用例,如果没有任何失败,则全部重跑。
  9. pytest -ff test_xxx.py —> 先运行失败的用例再运行其他的。
  10. pytest -q test_xxx.py —> 与 -v 相反,安静模式,只显示关键的信息。
  11. pytest -l test_xxx.py —> 用来失败时显示局部变量。
  12. pytest –duration test_xxx.py —> 用来显示哪个阶段占用时间最长。
  13. pytest --setup-show test_xxx.py —> 用来查看fixture的执行过程。

三、标记操作

  1. @pytest.mark.skip(reason=’’) —> 跳过一些不想执行的测试用例。

  2. @pytest.mark.skipif(version==5, reason=’’) —> 满足某个条件时跳过一些不想执行的测试用例。

  3. @pytest.mark.xfail() —> 用来标记一些预计原本就不会执行通过的测试用例,如果预计失败运行失败,显示x,预计失败运行成功,显示X。

  4. @pytest.mark.parametrize(“name”, [“Jone”, “Mark”]) —> 用来参数化测试

    @pytest.mark.parametrize("name, age", [("Mark", 18), ("Joe", 20)])
    def test_user_name(name, age):
        assert name == "Joe" and age == 20
    
  5. @pytest.mark.usefixtures(‘fixture1’, ‘fixture2’) 标记测试函数或者类。使用usefixtures需要在参数列表中指定一个或者多个fixture字符串。非常适合测试类。

四、组织测试用例合集

  1. 执行某个目录下的单元测试:cd path && pytest
  2. 执行单个文件:pytest test_xx.py
  3. 执行单个测试类:pytest test_xx.py::TestClass
  4. 执行某个测试类中的某个用例:pytest test_xx.py::TestClass::test_class_01

五、fixture

fixture是在测试函数运行前后,由pytest执行的外壳函数。fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源等。

**@pytest.fixture()**用于指定函数是一个fixture。如果测试函数的参数列表中包含fixture名,那么会被pytest检测到,并在函数运行之前运行该fixture。fixture可以完成任务,也可以返回数据给测试函数。

"""使用fixture执行配置及销毁逻辑"""

import pytest

@pytest.fixture()
def some_data():
    """Return answer to ultimate question"""
    return 42


def test_some_data(some_data):
    """User fixture return value i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值