Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk mengejek Permintaan dan Respons HTTP dalam Senario Ujian Python?

Bagaimana untuk mengejek Permintaan dan Respons HTTP dalam Senario Ujian Python?

Susan Sarandon
Susan Sarandonasal
2024-10-20 19:44:02361semak imbas

How to Mock HTTP Requests and Responses in Python Testing Scenarios?

Permintaan dan Respons Mengejek untuk Ujian Python

Dalam ujian Python, modul dan fungsinya menjadi perlu untuk mengawal aliran pelaksanaan dan mengesahkan senario tertentu. Antaranya, mengejek modul permintaan biasanya digunakan untuk menguji fungsi atau kaedah yang bergantung pada permintaan HTTP.

Pertimbangkan fail views.py dengan kod berikut:

<code class="python">def myview(request):
    res1 = requests.get('aurl')
    res2 = request.get('burl')
    res3 = request.get('curl')</code>

Untuk mengejek ini tingkah laku, anda boleh menggunakan pakej olok-olok Python. Begini cara anda boleh mencapainya langkah demi langkah:

Langkah 1: Tentukan Gelagat Olok-olok

Untuk mengejek modul permintaan, tentukan fungsi yang akan menggantikan requests.get (). Dalam fungsi ini, anda boleh menentukan respons yang diingini untuk setiap URL.

<code class="python">def mocked_requests_get(*args, **kwargs):
    class MockResponse:
        def __init__(self, json_data, status_code):
            self.json_data = json_data
            self.status_code = status_code

        def json(self):
            return self.json_data

    if args[0] == 'aurl':
        return MockResponse({'a': 'a'}, 200)
    elif args[0] == 'burl':
        return MockResponse({'b': 'b'}, 200)
    elif args[0] == 'curl':
        return MockResponse({'c': 'c'}, 200)

    return MockResponse(None, 404)</code>

Langkah 2: Tampal Modul Permintaan

Dalam kes ujian anda, gunakan mock .patch() penghias untuk menggantikan modul permintaan sebenar dengan fungsi olok-olok anda.

<code class="python">@mock.patch('requests.get', side_effect=mocked_requests_get)
def test_myview(self, mock_get):
    # Call the function you want to test
    myview(None)
    # Assertions for expected responses
    ...</code>

Langkah 3: Sahkan Penegasan

Dalam fungsi ujian anda, anda boleh menggunakan penegasan untuk mengesahkan bahawa respons yang dijangkakan dikembalikan.

<code class="python">self.assertEqual(mock_get.call_args_list[0][0][0], 'aurl')
self.assertEqual(mock_get.call_args_list[1][0][0], 'burl')
self.assertEqual(mock_get.call_args_list[2][0][0], 'curl')</code>

Dengan mengikut langkah ini, anda boleh mengejek permintaan HTTP dengan berkesan dan mengawal respons dalam senario ujian Python anda. Ini membolehkan anda mengasingkan dan menguji kefungsian tertentu sambil memastikan kebergantungan luaran tidak mengganggu keputusan anda.

Atas ialah kandungan terperinci Bagaimana untuk mengejek Permintaan dan Respons HTTP dalam Senario Ujian Python?. 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