PyTest email testing is a framework used for testing email functionality
Send and receive test emails in Python using MailSlurp, with step-by-step instructions for creating accounts, sending and receiving emails.
Send and receive emails in Python from MailSlurp test email accounts.
Add dependencies
To use test email accounts in PyTests first sign up for a free MailSlurp account.
Then install the MailSlurp python library and PyTest with pip
:
pip install mailslurp-client pytest
Or add them to your requirements.txt
:
mailslurp-client==7.0.9
pytest==4.3.1
Configure email client
Next add the MailSlurp client and configure it with your MailSlurp API Key.
import mailslurp_client
configuration = mailslurp_client.Configuration()
configuration.api_key['x-api-key'] = 'YOUR_MAILSLURP_API_KEY'
Common usage
Create test email accounts
We can use MailSlurp to create test inboxes. These have real email addresses.
def test_can_create_email_address():
with mailslurp_client.ApiClient(configuration) as api_client:
# create an inbox using the inbox controller
api_instance = mailslurp_client.InboxControllerApi(api_client)
inbox = api_instance.create_inbox()
# check the id and email_address of the inbox
assert len(inbox.id) > 0
assert "mailslurp.com" in inbox.email_address
Send emails
You can send emails in Python using MailSlurp too:
def test_can_send_email():
with mailslurp_client.ApiClient(configuration) as api_client:
# first create an inbox
api_instance = mailslurp_client.InboxControllerApi(api_client)
inbox = api_instance.create_inbox()
# send email from the inbox
send_email_options = mailslurp_client.SendEmailOptions()
send_email_options.to = [inbox.email_address]
send_email_options.subject = "Hello"
send_email_options.body = """
<h1>MailSlurp supports HTML</h1>
"""
send_email_options.is_html = True
api_instance.send_email(inbox.id, send_email_options=send_email_options)
Receive emails and extract contents
To receive emails in PyTest use MailSlurp's waitFor controllers to receive emails directly in code. This test demonstrates how to send an email then receive its content. In this way we can read emails in Python tests.
def test_can_receive_emails_and_extract_content():
with mailslurp_client.ApiClient(configuration) as api_client:
# create two inboxes for testing
inbox_controller = mailslurp_client.InboxControllerApi(api_client)
inbox_1 = inbox_controller.create_inbox()
inbox_2 = inbox_controller.create_inbox()
# send email from inbox 1 to inbox 2
send_email_options = mailslurp_client.SendEmailOptions()
send_email_options.to = [inbox_2.email_address]
send_email_options.subject = "Hello inbox 2"
send_email_options.body = "Your code is: 123"
inbox_controller.send_email(inbox_1.id, send_email_options=send_email_options)
# receive email for inbox 2
waitfor_controller = mailslurp_client.WaitForControllerApi(api_client)
email = waitfor_controller.wait_for_latest_email(inbox_id=inbox_2.id, timeout=30000, unread_only=True)
assert email.subject == "Hello inbox 2"
# extract content from body
pattern = re.compile('Your code is: ([0-9]{3})')
matches = pattern.match(email.body)
code = matches.group(1)
assert code == "123"
Next steps
MailSlurp is free for personal use. So check out www.mailslurp.com for more.