我目前正在使用pytest_addoption
运行我的 API 测试,因此测试应该针对用户在命令行上使用的环境运行。在我的测试文件中,我试图实例化UsersSupport
只上一次课,就通过了env
争论。我的代码:
测试.py
import pytest
# Environments
QA1 = 'https://qa1.company.com'
LOCALHOST = 'https://localhost'
def pytest_addoption(parser):
parser.addoption(
'--env',
action='store',
default='qa1'
)
@pytest.fixture(scope='class')
def env(request):
cmd_option = request.config.getoption('env')
if cmd_option == 'qa1':
chosen_env = QA1
elif cmd_option == 'localhost':
chosen_env = LOCALHOST
else:
raise UnboundLocalError('"--env" command line must use "qa1", "localhost"')
return chosen_env
用户支持.py
import requests
class UsersSupport:
def __init__(self, env):
self.env = env
self.users_endpoint = '/api/v1/users'
def create_user(self, payload):
response = requests.post(
url=f'{self.env}{self.users_endpoint}',
json=payload,
)
return response
post_create_user_test.py
import pytest
from faker import Faker
from projects import UsersSupport
from projects import users_payload
class TestCreateUser:
@pytest.fixture(autouse=True, scope='class')
def setup_class(self, env):
self.users_support = UsersSupport(env)
self.fake = Faker()
self.create_user_payload = users_payload.create_user_payload
def test_create_user(self):
created_user_res = self.users_support.create_user(
payload=self.create_user_payload
).json()
print(created_user_res)
问题
当我跑步时pytest projects/tests/post_create_user_test.py --env qa1
我越来越AttributeError: 'TestCreateUser' object has no attribute 'users_support'
错误,但如果我删除scope
from setup_class
方法,此方法在每个方法上运行,而不是在所有方法上运行。
我怎样才能使用env
固定装置在setup_class
并实例化UsersSupport
在所有方法中使用的类?