书籍来源:房荔枝 梁丽丽《pytest框架与自动化测试应用》

一边学习一边整理老师的课程内容及实验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:pytest框架进阶自学系列 | 汇总_热爱编程的通信人的博客-CSDN博客

indirect是argnames的子集或者一个布尔值。将指定参数的实参通过request.param重定向到和参数同名的fixture中,以此满足更复杂的场景。默认indirect为False,使用mark.parametrize后的数据。当indirect为True时,使用fixture中的数据。

代码如下:

import pytest

@pytest.fixture()

def max(request):

return request.param - 1

@pytest.fixture()

def min(request):

return request.param + 1

@pytest.mark.parametrize('min, max', [(1,2),(3,4)])

def test_indirect(min, max):

assert min <= max

@pytest.mark.parametrize('min, max', [(1,2),(3,4)], indirect=True)

def test_indirect_indirect(min, max):

assert min >= max

@pytest.mark.parametrize('min, max',[(1,2),(3,4)], indirect=['max'])

def test_indirect_part_indirect(min, max):

assert min == max

D:\SynologyDrive\CodeLearning\WIN\pytest-book\venv\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2022.1.3\plugins\python-ce\helpers\pycharm\_jb_pytest_runner.py" --path D:/SynologyDrive/CodeLearning/WIN/pytest-book/src/chapter-4/test_indirect.py

Testing started at 9:23 ...

Launching pytest with arguments D:/SynologyDrive/CodeLearning/WIN/pytest-book/src/chapter-4/test_indirect.py in D:\SynologyDrive\CodeLearning\WIN\pytest-book\src\chapter-4

============================= test session starts =============================

platform win32 -- Python 3.7.7, pytest-5.4.1, py-1.11.0, pluggy-0.13.1 -- D:\SynologyDrive\CodeLearning\WIN\pytest-book\venv\Scripts\python.exe

cachedir: .pytest_cache

rootdir: D:\SynologyDrive\CodeLearning\WIN\pytest-book

collecting ... collected 6 items

test_indirect.py::test_indirect[1-2] PASSED [ 16%]

test_indirect.py::test_indirect[3-4] PASSED [ 33%]

test_indirect.py::test_indirect_indirect[1-2] PASSED [ 50%]

test_indirect.py::test_indirect_indirect[3-4] PASSED [ 66%]

test_indirect.py::test_indirect_part_indirect[1-2] PASSED [ 83%]

test_indirect.py::test_indirect_part_indirect[3-4] PASSED [100%]

============================== 6 passed in 0.03s ==============================

Process finished with exit code 0

indirect=True,min和max对应的实参重定向到同名的fixture中,min和max使用的是fixture的数据。

indirect=['max'],只将max对应的实参重定向到fixture中,min使用的是后面的数据,max使用的是fixture的数据。

其实这是一种间接参数化的方式,当indirect=True时,允许在将值传递给测试之前使用接收值的fixture对测试进行参数化。

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: