Saya perhatikan selama pengujian integrasi bahwa saya benar-benar bekerja pada kasus penggunaan berulang dengan API yang tenang (atau dalam antarmuka HTTP umum) saya periksa di sana-sini dengan bash + cURL.
Itu mulai terlihat sangat berantakan dan semakin sulit untuk dipertahankan. Mengapa mengirim kekacauan?
Kasus penggunaan umum adalah:
- Periksa apakah URL mengembalikan kode respons http, misalnya 200
- Periksa bahwa jenis konten cocok dengan beberapa MIME yang Anda butuhkan dalam kasus itu
- Periksa apakah konten yang dikembalikan cocok dengan beberapa pola, atau melewati prosedur validasi abstrak
Apa yang saya temukan sejauh ini dan mempertimbangkan opsi yang bisa diterapkan tanpa menciptakan kembali roda, adalah:
- coba dengan PyCurl - dengan harapan itu sepenuhnya mengimplementasikan semua opsi cURL esp. proxying tetapi juga switch lain yang mungkin saya butuhkan
- gunakan unit testng bawaan Python
Maka saya dapat memiliki, misalnya, satu tes unit per layanan yang ingin saya periksa:
import unittest, pycurl
class TestService (unittest.TestCase):
def test_1(self):
self.assertEqual(pycurl.returncode("some_url"), 200)
def test_2(self):
self.assertTrue(pycurl.response("some_url").matches ("xxx") )
def test_3(self):
self.assertTrue (pycurl.ContentType("some_url").equal("xxx"))
if __name__ == '__main__':
unittest.main()
Apakah ini masuk akal atau ada alat yang lebih tinggi (tetapi tidak terlalu rumit untuk mengambil dan mengintegrasikan)?
testing
continuous-deployment
python
curl
Peter Muryshkin
sumber
sumber
Jawaban:
Anda bisa melihat alat-alat seperti Postman yang berfokus pada pengujian REST APIs dengan JavaScript - ia memiliki beberapa fitur bagus tetapi Anda kehilangan penggunaan Python.
Sebagai gantinya, saya sarankan melihat plugin terkait REST untuk pytest , kerangka uji Python yang menyederhanakan kode pengujian Anda, sambil tetap menjalankan tes yang ditulis menggunakan
unittest
.Pytest memiliki sejumlah besar plugin yang menyederhanakan berbagai tugas, termasuk:
Tavern , yang berspesialisasi dalam pengujian API REST dan tampaknya sangat relevan di sini - semacam "tukang pos untuk pengujian unit Python".
pytest-curl-report - saat menguji dengan
requests
perpustakaan, akan mencetakcurl
perintah yang dapat Anda gunakan untuk mereproduksi kesalahan dari shell.Testinfra - berfokus pada pengujian server (misalnya keadaan paket OS, file, proses, dll, biasanya diuji pada server jarak jauh) - sangat disarankan jika Anda juga memerlukan jenis ini misalnya untuk menguji kode yang mungkin.
Jika Anda tidak suka Tavern, Anda tentu saja dapat digunakan
pycurl
denganpytest
, yang membuatnya lebih mudah untuk mendiagnosa apa yang gagal. Contoh ini dari situs pytest-curl-report hanya menggunakan fitur pytest umum:Pytest memungkinkan Anda menulis semua tes dengan sederhana
assert
, dan secara opsional menyertakan pesan yang membantu sebagai bagian dari output. Misalnya, salah satu tes Anda dapat ditulis:sumber