pytest-fxa is a plugin for pytest that provides test accounts for Firefox Accounts.
You will need the following prerequisites in order to use pytest-fxa:
- Python 2.7, 3.6, 3.7, PyPy, or PyPy3
To install pytest-fxa:
$ pip install pytest-fxa
To create a Firefox Account for testing, include the fxa_account
fixture
name in your test method signature. This is a tuple with named properties for
the test account's email
and password
. The following example shows how
this could be used with Selenium to sign into a website that uses Firefox
Accounts for authentication:
def test_my_fxa_site(fxa_account, selenium):
selenium.get('https://example.com/')
selenium.find_element(By.ID, 'email').send_keys(fxa_account.email)
selenium.find_element(By.ID, 'password').send_keys(fxa_account.password)
selenium.find_element(By.ID, 'login').click()
The test account will be automatically destroyed when it's no longer needed.
By default all accounts will be created on the 'stage' environment. You can set
the FXA_ENV
environment variable to target 'production' or 'stable'.
If you need to override the environment for a subset of tests, or run tests against multiple environments, you can use the fxa_env
marker:
@pytest.mark.fxa_env('production')
def test_production(fxa_account):
selenium.get('https://example.com/')
selenium.find_element(By.ID, 'email').send_keys(fxa_account.email)
selenium.find_element(By.ID, 'password').send_keys(fxa_account.password)
selenium.find_element(By.ID, 'login').click()
@pytest.mark.fxa_env('stage', 'stable')
def test_stage(fxa_account):
selenium.get('https://elpmaxe.com/')
selenium.find_element(By.ID, 'email').send_keys(fxa_account.email)
selenium.find_element(By.ID, 'password').send_keys(fxa_account.password)
selenium.find_element(By.ID, 'login').click()
Alternatively, you can override the fxa_urls
fixture for full control of
the URLs for your environment:
@pytest.fixture
def fxa_urls():
return {
'authentication': 'https://api-accounts.stage.mozaws.net/v1',
'oauth': 'https://oauth.stage.mozaws.net/v1',
'content': 'https://accounts.stage.mozaws.net/',
'profile': 'https://profile.stage.mozaws.net/v1',
'token': 'https://token.stage.mozaws.net/'}