Rumah >pembangunan bahagian belakang >Tutorial Python >Pengaturcaraan pelayan Python: ujian lanjutan dengan django-test-plus

Pengaturcaraan pelayan Python: ujian lanjutan dengan django-test-plus

WBOY
WBOYasal
2023-06-18 08:09:591202semak imbas

Python ialah bahasa pengaturcaraan peringkat tinggi yang digunakan secara meluas dalam pelbagai bidang, seperti pembangunan laman web, sains data, pembelajaran mesin, dsb. Antaranya, pembangunan laman web adalah salah satu bidang aplikasi penting Python. Dalam Python, terdapat banyak rangka kerja web yang boleh digunakan untuk membangunkan aplikasi web, antaranya Django adalah yang paling popular.

Django ialah rangka kerja web yang cekap dan mudah digunakan yang menyediakan banyak ciri dan alatan untuk membina aplikasi web dengan cepat. Salah satunya ialah Django-Test-Plus, alat ujian lanjutan untuk aplikasi Django yang memudahkan pembangun menulis dan mengurus ujian. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Django-Test-Plus untuk ujian lanjutan untuk membantu kami membangunkan aplikasi Python dan Django dengan lebih baik.

1. Apakah itu Django-Test-Plus?

Django-Test-Plus ialah alat ujian lanjutan untuk aplikasi Django. Ia menyediakan banyak ciri dan alatan berguna untuk membantu pembangun menulis dan mengurus ujian dengan lebih mudah. Beberapa ciri utama termasuk:

  1. Isi borang dengan medan berbilang pilihan
  2. Tambahkan borang pada set borang bersarang dan ujinya
  3. Pintasan untuk menjana data ujian
  4. Sokongan menguji templat terjemahan berbilang bahasa
  5. Sokongan ujian pemisahan pangkalan data masa dan tarikh
  6. Sokongan TestClient dan rakan ujian LiveServerTestCase
  7. Sokong ujian API JSON
  8. Menyediakan beberapa fungsi tambahan ujian berguna yang lain

2. Bagaimana untuk bermula?

Sebelum menggunakan Django-Test-Plus untuk ujian sambungan, kami perlu memasangnya terlebih dahulu. Ia boleh dipasang dalam baris arahan dengan menjalankan:

pip install django-test-plus

Setelah dipasang, kami boleh menambahkannya pada tetapan INSTALLED_APPS projek Django kami seperti ini:

# settings.py 

INSTALLED_APPS = [
    # 我们的其他应用程序
    # ...
    'test_plus',
]

Sekarang kami Anda sudah bersedia untuk mula menguji sambungan dengan Django-Test-Plus.

3. Bagaimana untuk menggunakan Django-Test-Plus?

Di bawah, kami akan memperkenalkan cara menggunakan beberapa ciri dalam Django-Test-Plus untuk menulis kod ujian.

  1. Isi borang dengan berbilang medan pilihan

Semasa ujian, kita perlu menguji sama ada pengesahan borang adalah betul. Django-Test-Plus menyediakan cara yang mudah untuk menguji borang dengan berbilang medan pilihan. Sebagai contoh, katakan kita mempunyai borang yang dipanggil "ExampleForm" dalam aplikasi kami, yang mempunyai MultiChoiceField dipanggil "warna" yang mengandungi pilihan warna (merah, hijau dan biru). Menggunakan Django-Test-Plus, kita boleh mengisi borang melalui:

from django import forms

class ExampleForm(forms.Form):
    colors = forms.MultipleChoiceField(choices=[
        ('red', '红色'),
        ('green', '绿色'),
        ('blue', '蓝色'),
    ])

class ExampleFormTest(TestCase):
    def test_form_valid(self):
        form_data = {
            'colors': ['red', 'green'],
            # 添加其他表单字段
            # ...
        }
        form = ExampleForm(data=form_data)
        self.assertTrue(form.is_valid())

Ambil perhatian bahawa kita boleh mengisi borang dengan hanya menghantar data daripada MultiChoiceField ke borang. Ini boleh menjadikan kod ujian lebih bersih dan mengurangkan jumlah kod pendua.

  1. Tambahkan borang pada set borang bersarang dan ujinya

Dalam Django, anda boleh menggunakan set borang bersarang untuk mengumpul dan memproses data borang yang kompleks. Semasa ujian, kami perlu menguji sama ada borang ini disahkan dan diproses dengan betul. Menggunakan Django-Test-Plus, kami boleh menambahkan borang dengan mudah pada set borang bersarang dan menguji pengesahan dan pemprosesannya. Sebagai contoh, katakan kita mempunyai borang utama yang dipanggil "ParentForm" dalam aplikasi kami, yang mempunyai InlineFormSet yang dipanggil "kanak-kanak". Dalam contoh ini, kami akan menambah borang anak yang dipanggil "ChildForm" yang akan dikaitkan dengan borang induk. Menggunakan Django-Test-Plus, kami boleh menambah borang pada set borang bersarang melalui:

from django.forms import inlineformset_factory

class ChildForm(forms.Form):
    name = forms.CharField()
    age = forms.IntegerField()

class ParentForm(forms.Form):
    #添加其他表单字段
    #...
    children = inlineformset_factory(
        Parent, Child, form=ChildForm,
        fields=['name', 'age'],
        extra=1,
    )

class ParentFormTest(TestCase):
    def test_form_valid(self):
        form_data = {
            #添加主表单数据
            #...
            'children-TOTAL_FORMS': '1',
            'children-INITIAL_FORMS': '0',
            'children-0-name': 'Alice',
            'children-0-age': '12',
        }
        form = ParentForm(data=form_data)
        self.assertTrue(form.is_valid())

Dengan menambahkan borang pada set borang bersarang, kami boleh menguji aplikasi dengan data borang yang kompleks dengan lebih mudah.

  1. Pintasan untuk menjana data ujian

Semasa proses ujian, kami perlu menjana data ujian dengan kerap. Menggunakan Django-Test-Plus, kita boleh menggunakan penjana pantas untuk menjana data ujian. Sebagai contoh, katakan kita mempunyai model yang dipanggil "ExampleModel" yang mempunyai CharField yang dipanggil "nama". Kita boleh menggunakan penjana pantas dalam Django-Test-Plus untuk menjana data ujian:

from test_plus import TestCase

from myapp.models import ExampleModel

class ExampleModelTest(TestCase):
    def setUp(self):
        self.example = self.make(ExampleModel, name='example')

    def test_model(self):
        self.assertEqual(self.example.name, 'example')

Ambil perhatian bahawa kami menggunakan kaedah make untuk menjana objek model contoh dan menghantar nilai nama kepadanya. Ini memudahkan untuk menjana data ujian, menghasilkan kod ujian yang lebih bersih.

  1. Sokongan menguji templat terjemahan berbilang bahasa

Dalam Django, anda boleh menggunakan templat terjemahan berbilang bahasa untuk menyokong berbilang bahasa. Semasa proses ujian, kami perlu menguji sama ada templat terjemahan berbilang bahasa adalah betul. Menggunakan Django-Test-Plus, kami boleh menguji templat terjemahan berbilang bahasa dengan mudah. Sebagai contoh, katakan kami mempunyai templat terjemahan dalam aplikasi kami yang mengandungi rentetan bernama "contoh". Kami boleh menggunakan Django-Test-Plus untuk menguji sama ada ia telah diterjemahkan dengan betul:

from django.test import override_settings

class ExampleTemplateTest(TestCase):
    @override_settings(LANGUAGE_CODE='en')
    def test_example_template_en(self):
        response = self.client.get(reverse('example'))
        self.assertContains(response, 'example')

    @override_settings(LANGUAGE_CODE='zh_cn')
    def test_example_template_zh_cn(self):
        response = self.client.get(reverse('example'))
        self.assertContains(response, '例子')

Ambil perhatian bahawa semasa ujian kami menggunakan override_settings untuk mengubah suai kod bahasa dan bertukar antara dua bahasa. Ini membolehkan kami menguji templat terjemahan berbilang bahasa dengan lebih bebas.

  1. 支持TestClient和LiveServerTestCase的测试伴侣

在Django中,可以使用TestClient和LiveServerTestCase来测试Web应用程序。Django-Test-Plus提供了与这些测试工具一起使用的测试伴侣,以使测试更轻松。例如,假设我们有一个名为“ExampleView”的视图,我们想测试它是否正确或者如何处理HTTP GET请求。我们可以使用Django-Test-Plus中的测试伴侣来测试:

from test_plus import APITestCase

from myapp.views import ExampleView

class ExampleViewTest(APITestCase):
    def setUp(self):
        self.view = ExampleView.as_view()

    def test_view(self):
        response = self.get('myapp:example')
        self.assertEqual(response.status_code, 200)

通过使用测试伴侣,我们可以更方便地使用TestClient和LiveServerTestCase来测试Web应用程序。

  1. 支持JSON API测试

在Django中,可以使用Django Rest Framework(DRF)来构建JSON API。在测试过程中,我们需要测试这些API的验证和处理。使用Django-Test-Plus,我们可以轻松地测试JSON API。例如,假设我们有一个名为“ExampleAPIView”的视图,它使用DRF构建了JSON API。我们可以使用Django-Test-Plus来测试它是否正确或者如何处理HTTP GET请求:

from test_plus import APITestCase

from myapp.views import ExampleAPIView

class ExampleAPIViewTest(APITestCase):
    def setUp(self):
        self.view = ExampleAPIView.as_view()

    def test_view(self):
        response = self.get('myapp:example_api')
        self.assertEqual(response.status_code, 200)

通过使用Django-Test-Plus,我们可以更轻松地使用DRF测试JSON API,并使测试代码更加简洁。

  1. 提供了一些其他有用的测试辅助函数

除了上述功能外,Django-Test-Plus还提供了许多其他有用的测试辅助函数。如下所示:

  1. assert_contains:断言响应包含指定的内容
  2. assert_not_contains:断言响应不包含指定内容
  3. assert_redirects:断言响应为重定向
  4. assert_template_used:断言视图使用了指定的模板
  5. assert_form_error:测试表单验证错误
  6. assert_messages_contains:测试消息中包含指定内容
  7. assert_messages_not_contains:测试消息中不包含指定内容
  8. assert_select_related:测试查询结果中是否使用了select_related

通过使用这些其他有用的测试辅助函数,我们可以更轻松地编写测试代码,并使测试代码更加简洁。

四、总结

在本文中,我们介绍了Django-Test-Plus,它是一个用于Django应用程序的扩展测试工具。我们详细介绍了它的功能和用法,并给出了一些示例代码。通过使用Django-Test-Plus,我们可以更轻松地编写和管理测试,并使测试代码更加简洁。如果您正在开发Python和Django应用程序,并想要更好地进行测试,那么我建议您尝试使用Django-Test-Plus。

Atas ialah kandungan terperinci Pengaturcaraan pelayan Python: ujian lanjutan dengan django-test-plus. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn