Bagaimana cara mengejek klien api dengan python?

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

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 Anda

Kami 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 berikut

Piton

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()


Menjalankan pengujian unit ini jelas gagal (Benar tidak sama dengan Salah), tetapi kami telah menyiapkan dasar untuk menulis pengujian unit kami sendiri sekarang

Mengejek API Istirahat

Kami 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 kami

Instal pustaka

if __name__ == '__main__':
_4 Python

Kerang

xxxxxxxxxx

1

 

1

import unittest
_1

Uji Respons Halaman Tunggal

Fungsi

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
_3

2

import unittest
_4

3

import unittest
_5

4

 

5

import unittest
_7

6

import unittest
_8

7

import unittest
_9

8

 
0

9

 
1

10

 

11

 
_3

12

 
_4

13

 
5

14

 
_6

15

 
_7


Mari kita lihat lebih dekat apa yang terjadi di sini. Kami telah mendefinisikan respons Jira JSON dalam file

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 diharapkan

Uji Respons yang Dipaginasi

Jira 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()
    5. menunjukkan dari mana hasil halaman harus diambil
  •     unittest.main()
    6. jumlah hasil maksimum yang dikembalikan dalam satu respons
  •     unittest.main()
    7. jumlah keseluruhan hasil

    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 berikut

Piton

xxxxxxxxxx

1

22

 

1

 
_9

2

class MyTestCase(unittest.TestCase):
_0

3

class MyTestCase(unittest.TestCase):
_1

4

 

5

class MyTestCase(unittest.TestCase):
_3

6

class MyTestCase(unittest.TestCase):
_4

7

 

8

import unittest
_7

9

import unittest
_8

10

import unittest
_9

11

 
0

12

    def test_something(self):
0

13

    def test_something(self):
1

14

    def test_something(self):
2

15

 

16

 
_3

17

    def test_something(self):
5

18

    def test_something(self):
6

19

 
5

20

 
_6

21

 

22

        self.assertEqual(True, False)
_0


Tes unit terlihat sangat mirip dengan yang untuk respons satu halaman. Kami mendefinisikan dua respons tiruan kali ini, karena API Jira akan dipanggil dua kali dan kami ingin mengembalikan dua respons berbeda. Variabel

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 lagi

Tes Gagal

Tes unit di atas semuanya lulus. Tetapi apakah mereka gagal ketika ada sesuatu yang salah?

Piton

xxxxxxxxxx

1

 

1

        self.assertEqual(True, False)
_2


dengan

Piton

xxxxxxxxxx

1

 

1

        self.assertEqual(True, False)
_4


Ini akan memastikan bahwa hanya respons dari panggilan API pertama yang akan ditambahkan ke daftar masalah yang dikembalikan, tetapi bukan respons dari panggilan API berikutnya. Jalankan kedua tes lagi.

import unittest
02 lolos, tetapi
import unittest
03 gagal

Kerang

xxxxxxxxxx

1

 

1

        self.assertEqual(True, False)
_6

Uji Banyak URI

Log 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 nyatakan

Piton

x

22

 

1

        self.assertEqual(True, False)
_7

2

        self.assertEqual(True, False)
_8

3

        self.assertEqual(True, False)
_9

4

 

5

 
1

6

 
2

7

 

8

 
_4

9

import unittest
_8

10

import unittest
_9

11

 
0

12

 
1

13

 

14

 
_3

15

 
_1

16

 
_2

17

 
_3

18

 
_4

19

 

20

 
_6

21

 
_7

22

 
_8


Kesimpulan

Tes unit penulisan mutlak diperlukan ketika Anda ingin mengembangkan perangkat lunak secara profesional. Dalam posting ini, kami melihat bagaimana menguji unit Rest API melalui

if __name__ == '__main__':
4 Python library. Kami hanya menggores permukaan dari apa yang ditawarkan perpustakaan ini, tetapi kesan pertama kami sangat bagus

Bagaimana cara membuat API tiruan dengan Python?

Buat API pertama Anda dengan Flask (atau tiruannya menggunakan Mockoon. ) .
Inisialisasi aplikasi Python baru Anda. Untuk membuat API sederhana menggunakan Flask, pertama-tama kita perlu memverifikasi bahwa Python dan pip sudah diinstal dengan menjalankan perintah berikut. .
Buat server web Flask. .
Tambahkan rute API dan kembalikan data JSON. .
Jalankan server web API Anda

Bagaimana cara mengejek panggilan API?

Untuk memalsukan panggilan API dalam suatu fungsi, Anda hanya perlu melakukan 3 langkah ini. .
Impor modul yang ingin Anda tiru ke dalam file pengujian Anda
bersenda gurau. mock() modul
Use . mockResolvedValue() to mock the response..

Bagaimana Anda membuat tiruan untuk API?

Aktifkan tiruan respons .
Pilih API yang Anda buat di Create a test API
Di jendela sebelah kanan, pastikan tab Desain dipilih
Pilih operasi pengujian yang Anda tambahkan
Di jendela pemrosesan masuk, pilih + Tambahkan kebijakan
Pilih respons Mock dari galeri

Bagaimana cara menguji API dengan Python?

Pengujian API dengan Python
Bab 1 - Pengaturan
Bab 2 - Membuat Permintaan HTTP
Bab 3 - Pernyataan Fasih
Bab 4 - Bekerja dengan XML
Bab 5 - Bekerja dengan JSON
Bab 6 - Validasi Skema Respons
Bab 7 - Struktur Refactoring