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