Teman, kami punya kabar baik untuk Anda. Pertama, matahari akhirnya bersinar di jalan, yang berarti bahwa musim semi mulai sepenuhnya mengambil alih hak-haknya. Berita kedua lebih khusus - pada 20 Maret, pelajaran pertama dimulai di utas baru pada kursus 
"Pengembang Python" , sehubungan dengan ini kami menerbitkan bagian akhir dari artikel "Pengantar Pengujian dengan Python", bagian sebelumnya dapat dibaca di 
sini dan di 
sini .
Menguji dalam Berbagai LingkunganSejauh ini, Anda telah menguji coba untuk satu versi Python menggunakan lingkungan virtual dengan serangkaian dependensi tertentu. Tetapi mungkin selalu ada kebutuhan untuk menguji aplikasi pada beberapa versi Python atau beberapa versi paket. Tox adalah aplikasi yang mengotomatiskan pengujian di berbagai lingkungan.
 Instalasi Tox
Instalasi ToxTox tersedia di PyPl sebagai paket untuk diinstal melalui pip:
$ pip install tox 
Setelah instalasi, Anda dapat melanjutkan untuk mengkonfigurasi Tox.
Menyesuaikan Toks Untuk Ketergantungan AndaTox dikonfigurasi melalui file konfigurasi di direktori proyek. Ini berisi yang berikut:
- Perintah untuk menjalankan untuk menjalankan tes;
- Paket tambahan apa pun yang diperlukan untuk dijalankan;
- Versi target Python dipilih untuk pengujian.
Alih-alih mempelajari sintaks untuk mengonfigurasi Tox, Anda bisa mulai dengan meluncurkan aplikasi mulai cepat.
 $ tox-quickstart 
Alat konfigurasi Tox akan menanyakan pertanyaan dan membuat file yang mirip dengan yang berikut ini di 
tox.ini :
 [tox] envlist = py27, py36 [testenv] deps = commands = python -m unittest discover 
Sebelum memulai Tox, pastikan 
setup.py dengan langkah-langkah instalasi untuk paket ada di folder aplikasi. Jika tidak, gunakan 
panduan pembuatan 
setup.py .
Dan jika proyek Anda tidak dimaksudkan untuk distribusi di PyPl, Anda dapat melewati persyaratan ini dengan menambahkan baris berikut ke file tox.ini di bawah heading 
tox :
 [tox] envlist = py27, py36 skipsdist=True 
Jika Anda tidak membuat setup.py, dan aplikasi memiliki beberapa dependensi pada PyPl, Anda perlu mengklarifikasi mereka di bagian 
testenv . Misalnya, Django akan membutuhkan yang berikut:
 [testenv] deps = django 
Di akhir langkah ini, Anda dapat menjalankan tes.
Sekarang Anda dapat menjalankan Tox, dan itu akan menciptakan dua lingkungan virtual: satu untuk Python 2.7 dan satu untuk Python 3.6. Direktori Tox disebut 
.tox/ . Di dalamnya, Tox akan menjalankan 
-m unittest discover untuk setiap lingkungan virtual.
Anda dapat memulai proses ini dengan memanggil Tox dari baris perintah:
 $ tox 
Tox akan menghasilkan hasil tes untuk setiap lingkungan. Saat Anda memulai Tox untuk pertama kalinya, dibutuhkan waktu untuk membuat lingkungan virtual, tetapi ketika Anda menjalankan Tox untuk kedua kalinya, semuanya akan bekerja lebih cepat.
Hasil Tox sangat sederhana. Lingkungan dibuat untuk setiap versi, dependensi diinstal, dan kemudian perintah uji dijalankan.
Ada beberapa opsi baris perintah tambahan yang perlu diingat.
Menjalankan satu lingkungan, misalnya, Python 3.6:
 $ tox -e py36 
Menciptakan kembali lingkungan virtual ketika dependensi berubah atau 
paket samping rusak:
 $ tox -r 
Menjalankan Tox dengan temuan yang kurang rinci:
 $ tox -q 
Menjalankan Tox dengan lebih banyak keluaran verbose:
 $ tox -v 
Anda dapat membaca lebih lanjut tentang Tox di situs 
dokumentasi Tox .
Otomasi TesSejauh ini, Anda telah melakukan tes secara manual dengan menjalankan perintah. Tetapi ada alat untuk menjalankan tes secara otomatis ketika perubahan dibuat dan mengkomitnya ke repositori dengan sistem kontrol versi, misalnya, Git. Alat otomasi pengujian sering disebut sebagai alat CI / CD, yang berarti "Integrasi Berkelanjutan / Penerapan Berkelanjutan". Mereka dapat menjalankan tes, mengkompilasi dan mempublikasikan aplikasi, dan bahkan menyebarkannya ke produksi.
Travis CI adalah salah satu dari banyak layanan CI yang tersedia.
Travis CI bekerja dengan baik dengan Python, dan sekarang Anda dapat mengotomatiskan pelaksanaan semua tes yang dibuat di cloud! Travis CI gratis untuk proyek sumber terbuka apa pun di GitHub dan GitLab dan tersedia dengan biaya untuk proyek swasta.
Untuk memulai, masuk dan otentikasi menggunakan kredensial GitHub atau GitLab Anda. Kemudian buat file bernama 
.travis.yml dengan konten berikut:
 language: python python: - "2.7" - "3.7" install: - pip install -r requirements.txt script: - python -m unittest discover 
Konfigurasi ini memberikan Travis CI petunjuk berikut:
- Menguji Python 2.7 dan 3.7 (Secara opsional, Anda dapat menggantinya dengan yang lain.)
- Menginstal semua paket yang tercantum di requirement.txt (Anda dapat menghapus bagian ini jika Anda tidak memiliki dependensi.)
- Menjalankan python -m unittest temukan untuk menjalankan tes.
Setelah melakukan dan mendorong file ini, Travis CI akan menjalankan perintah ini setiap kali Anda mendorong ke repositori Git jarak jauh Anda. Hasil dapat dilihat di situs web mereka.
Apa selanjutnyaSekarang Anda tahu cara menulis tes, menambahkannya ke proyek Anda, menjalankannya dan bahkan melakukannya secara otomatis, sehingga Anda bisa berkenalan dengan metode-metode canggih, yang bisa berguna ketika perpustakaan tes tumbuh.
Linter Pengantar AplikasiTox dan Travis CI memiliki pengaturan tim pengujian. Dalam tutorial ini, kami menggunakan python -m unittest find sebagai tim uji.
Anda dapat memberikan satu atau lebih perintah di alat ini, yang akan menambah alat baru untuk meningkatkan kualitas aplikasi.
Salah satu aplikasi tersebut adalah linter. Dia akan melihat kode Anda dan meninggalkan komentar. Dengan demikian, ia dapat memberikan saran tentang kesalahan, mengoreksi ruang jejak dan bahkan mengantisipasi bug potensial.
Untuk mempelajari lebih lanjut tentang linter, 
lihat Tutorial Kualitas Kode Python .
Pelapisan pasif dengan serpihan8flake8 adalah linter populer yang meninggalkan komentar tentang gaya kode Anda sesuai dengan spesifikasi 
PEP 8 .
Anda dapat menginstal 
flake8 menggunakan pip:
 $ pip install flake8 
Kemudian Anda dapat menjalankan 
flake8 untuk satu file, folder, atau templat:
 $ flake8 test.py test.py:6:1: E302 expected 2 blank lines, found 1 test.py:23:1: E305 expected 2 blank lines after class or function definition, found 1 test.py:24:20: W292 no newline at end of file 
Anda akan melihat daftar kesalahan dan peringatan dalam kode Anda yang ditemukan oleh 
flake8 .
flake8 dapat dikonfigurasi pada baris perintah atau dalam file konfigurasi proyek. Jika Anda ingin mengabaikan beberapa aturan, misalnya E305, yang ditunjukkan di atas, Anda dapat mengatur ini dalam konfigurasi. 
flake8 akan memeriksa file 
flake8 di folder proyek atau file 
setup.cfg . Jika Anda ingin menggunakan Tox, Anda dapat menambahkan bagian konfigurasi 
tox.ini ke 
tox.ini .
Contoh ini mengabaikan 
direktori .git dan __pycache__ , serta aturan E305. Selain itu, panjang maksimum string meningkat dari 80 karakter menjadi 90. Anda akan menyadari bahwa batas standar 79 karakter per baris tidak cocok untuk tes yang mungkin berisi nama metode panjang, string literal dengan nilai tes dan potongan data panjang lainnya. Biasanya, untuk pengujian, tambah panjang string menjadi 120 karakter:
 [flake8] ignore = E305 exclude = .git,__pycache__ max-line-length = 90 
Atau, Anda dapat memberikan opsi ini di baris perintah:
 $ flake8 --ignore E305 --exclude .git,__pycache__ --max-line-length=90 
Daftar lengkap pengaturan dapat ditemukan di 
Situs Dokumentasi .
Sekarang Anda dapat menambahkan 
flake8 ke pengaturan CI Anda. Untuk Travis CI, akan terlihat seperti ini:
 matrix: include: - python: "2.7" script: "flake8" 
Travis akan membaca konfigurasi di 
.flake8 dan tidak akan dapat menyelesaikan pembangunan jika ada kesalahan serat. Pastikan Anda menambahkan dependensi 
flake8 ke file 
requirements.txt .
Linting Agresif dengan Pemformat Kodeflake8 adalah linter pasif yang hanya merekomendasikan pengeditan, Anda harus memasukkannya sendiri ke dalam kode. Pemformat kode adalah pendekatan yang lebih agresif. Itu mengubah kode secara otomatis sesuai dengan gaya dan tata letak.
black adalah formatter yang sangat tak terhindarkan. Tidak memiliki pengaturan dan sangat teliti. Yang membuatnya menjadi alat yang hebat untuk dimasukkan ke dalam pipa uji Anda.
Harap dicatat: hitam membutuhkan Python versi 3.6 dan lebih tinggi.
Anda dapat menginstal 
black menggunakan pip:
 $ pip install black 
Kemudian, untuk memulai dari baris perintah, tentukan file atau direktori yang ingin Anda format:
 $ black test.py 
Jaga Kode Tes BersihAnda mungkin memperhatikan bahwa saat menulis tes, Anda akan menyalin dan menempelkan fragmen kode lebih sering daripada saat membuat aplikasi biasa. Dari waktu ke waktu, tes bisa sangat monoton, tetapi ini bukan alasan untuk menjatuhkan kode dalam bentuk yang tidak akurat dan terfragmentasi.
Seiring waktu, 
hutang teknis akan terakumulasi dalam kode pengujian Anda, dan membuat perubahan yang diperlukan untuk perubahan signifikan dalam kode aplikasi dalam pengujian akan berubah menjadi sangat sulit hanya karena strukturnya.
Saat menulis tes, coba ikuti prinsip KERING: Jangan Ulangi Diri Anda.
Perlengkapan uji dan fungsi adalah cara terbaik untuk menulis kode yang mudah dipelihara. Juga, jangan lupa tentang kemudahan membaca. Pertimbangkan untuk menggunakan alat linting seperti 
flake8 ke kode pengujian Anda:
 $ flake8 --max-line-length=120 tests/ 
Pengujian untuk Mendeteksi Penurunan Produktivitas di antara SuntinganAda banyak cara untuk membandingkan kode dalam Python. Perpustakaan standar memiliki modul timeit yang menjadwalkan fungsi beberapa kali dan menunjukkan kepada Anda distribusi. Dalam contoh ini, test () akan dieksekusi 100 kali, dan kemudian output akan diberikan menggunakan print ():
 def test():  
Jika Anda memutuskan untuk menggunakan pytest sebagai pelari uji, periksa plugin pytest-benchmark. Ini menyediakan perlengkapan yang disebut benchmark. Setiap objek yang dipanggil dapat melewati patokan (), ia mem-parsing waktu yang disebut dalam hasil pytest.
Anda dapat menginstal pytest-benchmark dari PyPl menggunakan pip:
 $ pip install pytest-benchmark 
Kemudian Anda bisa menambahkan tes menggunakan fixture dan meneruskan objek yang dipanggil ke eksekusi:
 def test_my_function(benchmark): result = benchmark(test) 
Menjalankan pytest akan memberi Anda hasil patokan:

Anda dapat mempelajari lebih lanjut di 
Situs Dokumentasi .
Pengujian untuk Mengidentifikasi Kesalahan KeamananTes lain yang harus Anda jalankan pada aplikasi Anda adalah memeriksa kesalahan umum dan kerentanan keamanan.
Instal 
bandit dari PyPl menggunakan pip:
 $ pip install bandit 
Kemudian Anda dapat memberikan nama modul aplikasi Anda dengan flag 
-r dan mendapatkan informasi singkat:
 $ bandit -r my_sum [main] INFO profile include tests: None [main] INFO profile exclude tests: None [main] INFO cli include tests: None [main] INFO cli exclude tests: None [main] INFO running on Python 3.5.2 Run started:2018-10-08 00:35:02.669550 Test results: No issues identified. Code scanned: Total lines of code: 5 Total lines skipped ( 
Seperti halnya 
flake8 , 
bandit flag 
bandit dapat dikonfigurasi, dan jika Anda ingin mengabaikannya, Anda dapat menambahkan fragmen berikut ke file 
setup.cfg dengan parameter:
 [bandit] exclude: /test tests: B101,B102,B301 
Informasi lebih lanjut di 
situs web GitHub .
KesimpulanPython telah membuat pengujian tersedia berkat perintah dan pustaka bawaan yang diperlukan untuk memverifikasi operasi aplikasi yang benar. Sangat mudah untuk memulai pengujian dengan Python: Anda bisa menggunakan metode unittest dan menulis metode yang kecil dan mudah dirawat untuk menguji kode.
Saat Anda mempelajari lebih lanjut tentang pengujian dan perluasan aplikasi Anda, pertimbangkan untuk beralih ke salah satu kerangka kerja pengujian seperti pytest untuk mulai menggunakan fitur yang lebih canggih.
Terima kasih sudah membaca. Dapatkan masa depan yang tidak salah lagi dengan Python!
Dan bagi mereka yang telah membaca artikel tersebut, kami memiliki satu lagi berita bagus. Saat ini, Anda bisa mendapatkan kursus 
Pengembang Python dengan diskon 10.000 rubel!
Bagian pertamaBagian kedua