Kāpēc sausie testi ir labāki par Postman izmantošanu?
sobes.tech AI
Atbilde no AI
Mok- tests ļauj izolēt testējamo komponentu, nepaļaujoties uz ārējo pakalpojumu pieejamību vai darbības spēju. Tas nodrošina testu stabilitāti un atkārtojamību, paātrina testu scenāriju izpildi un vienkāršo tieši ar testējamo loģiku saistīto kļūdu identificēšanu.
Postman, pat izmantojot mokus, testē ar ārējām atkarībām saistīto mijiedarbību pieprasījuma/atbildes līmenī, nevis tieši iekļauj mokus testēšanas kodā vai komponentā. Tas ir mazāk detalizēti un sarežģītāk automatizēt CI/CD cauruļvados.
Mok- testēšanas priekšrocības salīdzinājumā ar Postman automatizētā testēšanā:
- Izolācija: Tiek testēts tikai kods, nevis ārējo sistēmu integrācija.
- Stabilitāte: Testi nekrīt ārējo pakalpojumu problēmu dēļ.
- Ātrums: Ātra testu izpilde bez gaidīšanas uz reālo pakalpojumu atbildēm.
- Detalizētība: Iespēja mokēt atsevišķas metodes vai funkcijas kodā.
- Automatizācija: Viegli integrēt vienības un integrācijas testos, kas tiek automātiski palaisti.
- Gadījumu testēšana: Viegli imitēt dažādus atbildes scenārijus (kļūdas, aizkaves, nestandarta dati).
Piemērs, izmantojot mokus Java (Mockito):
// Izveidojam mokus atkarībai
ExternalService mockService = mock(ExternalService.class);
// Konfigurējam moku uzvedību noteiktas metodes izsaukumā
when(mockService.getData(anyString())).thenReturn("mocēti dati");
// Testējam komponentu, izmantojot moku
Processor processor = new Processor(mockService);
String result = processor.process("ievade");
// Pārbaudām rezultātu
assertEquals("apstrādāti mocēti dati", result);
// Pārbaudām, vai tika izsaukta moku metode
verify(mockService).getData("ievade");
Piemērs, izmantojot mokus Python (unittest.mock):
# mock_example.py
def get_data_from_external_service(id):
# Imita ārējā pakalpojuma izsaukumu
pass
def process_data(id):
data = get_data_from_external_service(id)
return f"apstrādāti {data}"
# test_mock_example.py
import unittest
from unittest.mock import patch
from . mock_example import process_data
class TestProcessData(unittest.TestCase):
@patch('mock_example.get_data_from_external_service')
def test_process_data_with_mock(self, mock_get_data):
# Konfigurējam moku atgriežamo vērtību
mock_get_data.return_value = "mocēti dati"
# Izsaucam testējamo funkciju, kas izmanto moku
result = process_data("kods_id")
# Pārbaudām rezultātu
self.assertEqual(result, "apstrādāti mocēti dati")
# Pārbaudām, vai moks tika izsaukts ar sagaidāmo argumentu
mock_get_data.assert_called_once_with("kods_id")
if __name__ == '__main__':
unittest.main()
Postman ir piemērotāks API manuālai testēšanai, pētījumu testēšanai vai demonstrācijas pieprasījumu veidošanai. Automatizētai testēšanai CI/CD ietvaros, kodu līmeņa mok- testēšana ir vēlams.