#conftest.py
import os
import pytest
def pytest_addoption(parser):
"""利用钩子函数添加命令行参数"""
parser.addoption(
"--envhost",
# action="append", #如果是append,则default必须为列表类型
action='store', # 如果是store,则default可以为任何类型
# default=["http:localhost:8000"],
default="127.0.0.1:8000", # 命令行没有传入则取default,传入了则以传入的为准
help="test case host address"
)
@pytest.fixture(scope="session", autouse=True)
def env_host(request):
"""获取命令行参数,并添加到会话的环境变量中"""
print("request.config:", type(request.config))
# os.environ["host_address"] = request.config.getoption("--envhost")[0]
os.environ["host_address"] = request.config.getoption("--envhost")
print("当前的执行环境:%s" % os.environ["host_address"])
在和conftest.py同一个包下的py文件中执行如下测试用例:
import os
def test_option():
url = os.environ["host_address"]+ "/api/login"
print(url)
命令行中执行:pytest --envhost="localhost:8000" -sv
执行结果如下,获取到了传入的参数:
注意:
- 只能通过命令行调用pytest才能生效
- 只有和conftest.py在同一个package下的测试用例才能引用该环境变量
- 基于以上两点,可以将conftest.py放到项目根目录下,则整个项目都可以引用该环境变量