Reputation:
I'd like to create a session with specific user email and password, for that I need to pass these two pieces of information to a pytest fixture as arguments.
My attempt to do so:
from pytest import fixture
from api_methods import ApiMethods
@fixture(scope="session")
def user_session():
def _update_credentials(email, password):
user_credentials = {
"email": email,
"password": password
}
return user_credentials
session = ApiMethods()
session.get_authorized(_update_credentials)
return session
The problem is that _update_credentials returns a function object instead of JSON, which raises TypeError: Object of type function is not JSON serializable
What sould I do to provide email and password to this fixture correctly? Help me, please :)
Upvotes: 0
Views: 2774
Reputation: 433
What it seems you're trying to do is to use the factory as fixture pattern like this:
from pytest import fixture
from api_methods import ApiMethods
@fixture(scope="session")
def update_credentials():
def _update_credentials(email, password):
user_credentials = {
"email": email,
"password": password
}
return user_credentials
return _update_credentials
@fixture(scope="session")
def user_session(update_credentials):
user_credentials = update_credentials("email1", "password1")
session = ApiMethods()
session.get_authorized(user_credentials)
return session
But it seems you could just do this instead:
from pytest import fixture
from api_methods import ApiMethods
@fixture(scope="session")
def user_session():
user_credentials = {
"email": email,
"password": password
}
session = ApiMethods()
session.get_authorized(user_credentials)
return session
Upvotes: 2