Beberapa posting yang lalu, kami menerbitkan blog tentang cara menggunakan Jira API. Kami tidak menulis pengujian unit apa pun untuk aplikasi yang kami tulis, dan itulah yang akan kami lakukan sekarang. Lebih khusus lagi, kami akan fokus pada bagaimana kami dapat menguji unit REST API Show
Mengapa Tes Unit Lagi pula?Fokus utama kami saat menulis perangkat lunak adalah membuat fitur baru dan memperbaiki bug. Tentu saja, kami perlu menguji apa yang kami buat, tetapi kami mendapatkan momen paling menyenangkan saat fitur yang baru kami kembangkan berfungsi. Langkah selanjutnya adalah menulis tes unit… Tapi, kita sudah tahu ini berfungsi, jadi mengapa menghabiskan begitu banyak usaha untuk itu? . Namun apa yang terjadi jika kita perlu memperluas fitur yang kita buat dengan beberapa fungsi baru? Bagaimana kami akan memastikan bahwa kami tidak merusak fitur aslinya? . Pengujian unit akan memberi kami keyakinan bahwa kami tidak merusak apa pun saat kami mengubah beberapa kode (dengan asumsi pengujian unit ditulis dengan baik dan memberikan cakupan kode yang cukup). Oleh karena itu, menjalankan pengujian unit sebagai bagian dari saluran CI/CD Anda juga merupakan praktik umum. Jika Anda tidak suka menulis pengujian unit setelah mengembangkan fitur baru, Anda juga dapat mempertimbangkan untuk menulis pengujian unit Anda terlebih dahulu, membiarkannya gagal, dan ketika Anda mengimplementasikan kode Anda, pengujian unit akan lulus (TDD. Pengembangan Berbasis Tes). Dengan cara ini, ketika Anda telah mencapai momen kegembiraan tertinggi Anda (Berhasil. ), Anda juga lulus tes unit (Semua tes unit lulus. ). Itu menggandakan momen kegembiraan Anda ;-) Buat Tes Unit Pertama AndaKami akan membangun berdasarkan sumber pembuat laporan waktu Jira. Kami menggunakan Python 3. 7 dan PyCharm sebagai IDE. Pertama, mari buat direktori _9 dan klik kanan direktori di PyCharm. Pilih if __name__ == '__main__': 0 dan if __name__ == '__main__': 1. Ini membuat file default berikutPiton xxxxxxxxxx 1
1 import unittest _2 3 class MyTestCase(unittest.TestCase): _4 def test_something(self): 5 self.assertEqual(True, False) _6 7 8 if __name__ == '__main__': _9 unittest.main()
Mengejek API IstirahatKami ingin menguji unit fungsi if __name__ == '__main__': _2 dan ini memberi kami tantangan pertama. fungsi if __name__ == '__main__': _2 berisi panggilan ke Jira Rest API. Kami tidak ingin pengujian unit kami bergantung pada layanan pihak ketiga, dan oleh karena itu, kami memerlukan cara untuk mengolok-olok Rest API. Ada beberapa opsi untuk memalsukan REST API, tetapi kami akan menggunakan pustaka request-mock Python, yang sesuai dengan kebutuhan kamiInstal pustaka if __name__ == '__main__': _4 PythonKerang xxxxxxxxxx 1
1 import unittest _1Uji Respons Halaman TunggalFungsi if __name__ == '__main__': 2 akan meminta masalah yang diperbarui dalam jangka waktu tertentu. Dalam pengujian unit kami, kami akan memverifikasi perilaku ketika satu halaman dengan hasil diambil (Rest API mendukung paginasi, tetapi itu adalah sesuatu untuk pengujian unit berikutnya)Piton xxxxxxxxxx 1 15
1 import unittest _32 import unittest _43 import unittest _54 5 import unittest _76 import unittest _87 import unittest _98 09 110 11 _312 _413 514 _615 _7
if __name__ == '__main__': 6. Pada baris 2 dan 3, kita membaca isi file menjadi variabel if __name__ == '__main__': 7. Pada baris 5, kita mendefinisikan hasil yang diharapkan dengan variabel if __name__ == '__main__': 8 ketika fungsi if __name__ == '__main__': 2 kembali. Pada baris 11 sampai 13, keajaiban terjadi. Kami mendaftarkan URI yang kami panggil dari dalam fungsi if __name__ == '__main__': 2 dengan unittest.main() 1 yang kami tentukan. Parameter ketiga dari unittest.main() _2 mendefinisikan respons, yang harus dikembalikan dari panggilan API tiruan. Pada baris 15, kami memanggil fungsi if __name__ == '__main__': _2, dan pada akhirnya, kami memverifikasi apakah responsnya sama dengan hasil yang diharapkanUji Respons yang DipaginasiJira API mendukung paginasi. Kami menambahkan beberapa fungsionalitas ke fungsi if __name__ == '__main__': _2 untuk menangani respons dengan halaman. Respons JSON berisi tiga bidang untuk ini
unittest.main() _6 untuk mengambil masalah, pada saat penulisan, 50. Jika kami ingin menguji ini dengan server Jira asli, kami harus membuat setidaknya 51 masalah. Tetapi untuk menguji dengan pengujian unit kami, kami dapat dengan mudah mengubah respons agar bidang unittest.main() 6 mengembalikan 2 misalnya, yang membuatnya jauh lebih mudah untuk diuji. Pengujian unit paginasi kami terlihat sebagai berikutPiton xxxxxxxxxx 1 22
1 _92 class MyTestCase(unittest.TestCase): _03 class MyTestCase(unittest.TestCase): _14 5 class MyTestCase(unittest.TestCase): _36 class MyTestCase(unittest.TestCase): _47 8 import unittest _79 import unittest _810 import unittest _911 012 def test_something(self): 013 def test_something(self): 114 def test_something(self): 215 16 _317 def test_something(self): 518 def test_something(self): 619 520 _621 22 self.assertEqual(True, False) _0
if __name__ == '__main__': 8 berisi hasil gabungan dari kedua panggilan API. Perbedaan yang nyata dapat dilihat pada baris 17. Alih-alih mendefinisikan respons pura-pura tunggal, kami sekarang mendefinisikan daftar respons pura-pura. Saat API dipanggil lebih dari respons yang ditentukan, respons tiruan yang ditentukan terakhir dikembalikan lagiTes GagalTes unit di atas semuanya lulus. Tetapi apakah mereka gagal ketika ada sesuatu yang salah? Piton xxxxxxxxxx 1
1 self.assertEqual(True, False) _2
Piton xxxxxxxxxx 1
1 self.assertEqual(True, False) _4
import unittest 02 lolos, tetapi import unittest 03 gagalKerang xxxxxxxxxx 1
1 self.assertEqual(True, False) _6Uji Banyak URILog kerja Jira harus diambil per masalah. Kami perlu mendaftarkan lebih dari satu URI dengan respons berbeda untuk setiap masalah. Respon dari fungsi import unittest _04 mengembalikan daftar objek import unittest 05 yang dapat kita nyatakanPiton x 22
1 self.assertEqual(True, False) _72 self.assertEqual(True, False) _83 self.assertEqual(True, False) _94 5 16 27 8 _49 import unittest _810 import unittest _911 012 113 14 _315 _116 _217 _318 _419 20 _621 _722 _8
|