让我们使用Pytest进行电子邮件发送测试吧!

概述

让我们使用Django Rest Framework、Docker和MailCatcher来发送电子邮件吧!

 

让我们用Pytest编写一个测试代码来测试我们创建的邮件发送功能。
本次测试中,

    • 件名

 

    • 宛先

 

    送信元

我希望确认这是否正确。

前提

    • フレームワークはDjango Rest Framework

 

    pytest-djangoをインストール済み

编写代码

这次

    • pytest.ini

 

    • conftest.py

 

    test_email.py

进行所需的设置

pytest.ini 的中文释义是 pytest 配置文件。

要在Django中使用Pytest,必须将环境变量DJANGO_SETTINGS_MODULE的值设置为<项目名称>.settings。

raise ImproperlyConfigured(
E   django.core.exceptions.ImproperlyConfigured: 
Requested setting INSTALLED_APPS, but settings are not configured. 
You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

由于项目名称为project,所以在此次中,pytest.ini文件将被放置在项目的根目录下,并按照以下方式进行记录。

[pytest]
DJANGO_SETTINGS_MODULE=project.settings

conftest.py请进行改写。

在使用Django进行Pytest执行时,需要使用测试数据库。

    • テストDBのセットアップ

 

    • fixtureファイルでDBにデータを入れる設定

 

    • ログイン用テスト用ユーザとパスワード

 

    送信元として使うテスト用メールアドレス

将fixture的内容写入conftest.py。
通常情况下,conftest.py应该在应用程序中创建一个tests文件夹,并将其放置在该文件夹下。

import pytest

from django.core.management import call_command

@pytest.fixture(scope='session')
def django_db_setup(django_db_setup, django_db_blocker):
    with django_db_blocker.unblock():
        call_command('loaddata', 'fixture.json')


@pytest.fixture
def management_user(db):
    return ("00000001","test")


@pytest.fixture
def email_data():
    return {
        "email":"test_user_01@test.com",
    }

测试邮件.py

使用django.core.mail.outbox可以查看收到的邮件。

    • 件名

 

    • 宛先

 

    送信元

您可以调查等等事项。

import pytest
from django.core import mail
from rest_framework.test import APIClient


@pytest.mark.django_db()
class TestInviteUser:
    # 今回は該当するエンドポイントへテストを行いたいのでAPIClientを使用します
    client = APIClient()
    url = "/api/users/send_invite_user_mail/"

    def test_management_user_can_send_invite_user_email(self, management_user, email_data):
        self.client.login(username=management_user[0], password=management_user[1])
        response = self.client.post(self.url, email_data, format='json')
        assert response.status_code == 200
        # メールを一通受信したことを確認
        assert len(mail.outbox) == 1
        # メールの件名が正しいことを確認
        assert mail.outbox[0].subject == "ようこそ"
        # メールの送信元が正しいことを確認
        assert mail.outbox[0].from_email == "example@mail.com"
        # 宛先は複数存在するため、toは配列になります
        # 今回はtest_user_01@test.comのみのため、to[0]と指定します
        # メールの送信先が正しいことを確認
        assert mail.outbox[0].to[0] == email_data["email"]

让我们进行测试吧!

执行命令,确认测试已成功通过。

docker-compose exec app poetry run pytest
Test session starts (platform: linux, Python 3.10.9, pytest 7.2.0, pytest-sugar 0.9.6)
django: settings: study.settings (from ini)
rootdir: /code, configfile: pytest.ini
plugins: django-4.5.2, custom-exit-code-0.3.0, sugar-0.9.6, cov-4.0.0
collecting ... 
 application/tests/test_email.py ✓   100% ██████████

Results (2.81s):
       1 passed

介绍这篇文章

我写了下面的文章,如果你愿意的话,请阅读一下。

 

请引用

 

bannerAds