【pytest】将测试用例内的数据回填给fixtrue 中

【背景】每个测试用例生成对应的log文件,需要将测试脚本名称传给log对象,生成对于的log文件

【分析】

方法一:

使用@pytest.mark.parametrize 的 indirect=True  ,参数1: 执行对应的函数 (fixtrue 中的函数名称)  参数2: 函数对应的参数  

参考:

Pytest系列(10) - fixture 传参数 request的详细使用 - 小菠萝测试笔记 - 博客园 (cnblogs.com)

 

知识点

  • 添加  indirect=True  参数是为了把 login 当成一个函数去执行,而不是一个参数,并且将data当做参数传入函数
  • def test_name(login) ,这里的login是获取fixture返回的值

方法二:

使用 fixtrue 内置的 request 参数,

属性

  • request.fixturename: 注意,这并不是一个标准的 request 属性。通常我们使用 request.fixturenames 来获取一个测试函数或方法所依赖的所有 fixture 名称的元组。
  • request.fixturenames: 一个包含测试函数或方法所依赖的所有 fixture 名称的元组。
  • request.node: 当前正在执行的节点(例如,一个测试函数或类)。这个对象提供了对测试上下文(例如,测试名称、位置等)的访问。
  • request.module: 调用 fixture 或测试函数的模块对象。
  • request.fspath: 包含调用 fixture 或测试函数的文件的路径。
  • request.cls: 如果测试是一个类方法,那么这个属性将是该类的类对象。否则,为 None
  • request.instance: 如果测试是一个实例方法,那么这个属性将是该实例的对象。否则,为 None
  • request.function: 正在执行的测试函数。
  • request.config: 访问 pytest 的配置对象,它允许你查询和修改 pytest 的配置设置。
  • request.session: 整个测试会话的会话对象。
  • request.keywords: 一个字典,包含与当前测试相关的所有关键字标记(markers)。
  • request.param: 如果 fixture 被标记为参数化,这个属性将包含当前参数的值。
  • request.addfinalizer(func): 这是一个方法,但经常作为属性来使用(通过装饰器)。它允许你注册一个在测试结束时调用的清理函数。

方法

  • request.getfixturevalue(argname): 获取指定 fixture 的值。这通常在你需要在 fixture 函数内部访问另一个 fixture 的值时很有用。
  • request.getparam(name): 获取指定参数化参数的当前值。
  • request.cached_setup(...): 这是一个较旧的功能,用于缓存 fixture 的设置值。现在更推荐使用 @pytest.fixture(scope=...) 来控制 fixture 的作用域。
  • request.applymarker(marker): 在当前节点上应用一个标记。

【结果】

使用request.cls()解决

 

posted on 2024-05-13 11:51  彩屏黑白  阅读(5)  评论(0编辑  收藏  举报

导航