前言
- 本篇来学习pytest内置fixture中的request
request.param
# -*- coding: utf-8 -*- # @Time : 2022/3/26 # @Author : 大海 import os import pytest # 测试数据 test_data = ["user1", "user2"] @pytest.fixture(params=test_data) def register_users(request): # 获取当前的测试数据 user = request.param print("\n拿着这个账号去注册:%s" % user) result = "success" return user, result def test_register(register_users): user, result = register_users print("在测试用例里面里面获取到当前测试数据:%s" % user) print(result) assert result == "success" if __name__ == '__main__': os.system('pytest -s -v test_61.py')
request.config
- 获取测试的配置文件参数
- 在 conftest.py 写一个 hook函数, pytest_addoption 的作用是用于添加命令行参数,request.config 用于读取测试的配置数据
# -*- coding: utf-8 -*- # @Time : 2022/4/1 # @Author : 大海 import pytest def pytest_addoption(parser): parser.addoption( "--cmdopt", action="store", default="type1", help="my option: type1 or type2" ) @pytest.fixture def cmdopt(request): return request.config.getoption("--cmdopt")
- 测试用例
# -*- coding: utf-8 -*- # @Time : 2022/4/1 # @Author : 大海 import os # 方式1 使用request.config def test_answer_1(request): kind = request.config.getoption("--cmdopt") print("获取到命令行参数:%s" % kind) # 方式2 使用fixture def test_answer_2(cmdopt): print("获取到命令行参数:%s" % cmdopt) if __name__ == '__main__': os.system('pytest -s -v test_62.py')
request.module
- fixture 函数可以通过接受 request 对象来反向获取请求中的测试函数、类或模块上下文
- 在 conftest.py 编写如下代码
# -*- coding: utf-8 -*- # @Time : 2022/4/1 # @Author : 大海 @pytest.fixture(scope="module") def smtp(request): server = getattr(request.module, "smtpserver", "smtp.qq.com") print("fixture 获取到的server :%s" %server) smtp = smtplib.SMTP(server, 587, timeout=5) yield smtp print("完成 %s (%s)" % (smtp, server)) smtp.close()
- 测试用例
# -*- coding: utf-8 -*- # @Time : 2022/4/1 # @Author : 大海 import os smtpserver = "mail.python.org" def test_show(smtp): print("case show") if __name__ == '__main__': os.system('pytest -s -v test_63.py')
request的其他成员对象
- 在 conftest.py 编写如下代码
# -*- coding: utf-8 -*- # @Time : 2022/4/1 # @Author : 大海 @pytest.fixture(autouse=True) def print_request(request): print("\n=======================request start=================================") print(request.module) print(request.function) print(request.cls) print(request.fspath) print(request.fixturenames) print(request.fixturename) print(request.scope) print("\n=======================request end=================================")