【发布时间】:2020-06-09 18:31:20
【问题描述】:
我目前正在使用pytest_addoption 运行我的 API 测试,因此测试应该针对用户在命令行上使用的环境运行。在我的测试文件中,我试图只实例化一次UsersSupport 类,并传递env 参数。我的代码:
conftest.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
users_support.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' 错误,但如果我从setup_class 方法中删除scope,此方法将在每个方法上运行,而不是在所有方法上运行。
如何在setup_class 中使用env 夹具并实例化UsersSupport 类以在所有方法中使用?
【问题讨论】:
-
你不能把
users_support变成一个类变量吗? -
@MrBeanBremen 感谢您的回复。即便如此,我还是得到了
AttributeError -
我在答案中加了一点解释。
标签: python python-3.x pytest