Jenkins • CI/CD
Jenkins Pipeline untuk Playwright Python
Panduan ini menghubungkan dua test Playwright lokal dengan Jenkins. Pipeline tidak melakukan deployment dan tidak membutuhkan akun website. Jalankan pada job latihan dengan workspace khusus karena tahap checkout membersihkan isi workspace job.
Lihat kelas Jenkins CI/CD for QAPanduan Ini Cocok untuk Siapa?
- Pemula yang sudah memahami Python dasar
- Peserta yang ingin latihan dengan hasil terukur
- Praktisi yang sedang merapikan alur automation
Roadmap Belajar Bertahap
-
Langkah 1
Siapkan prasyarat
Cek environment dan file latihan sebelum menjalankan perintah.
-
Langkah 2
Jalankan contoh minimal
Mulai dari satu test agar penyebab kegagalan mudah ditelusuri.
-
Langkah 3
Baca hasil dan coba kegagalan
Ubah ekspektasi untuk memastikan assertion benar-benar bekerja.
-
Langkah 4
Hubungkan ke project
Adaptasi data dan locator, lalu lanjutkan ke panduan terkait.
Siapkan agent sebelum membuat job
Diperlukan Jenkins dengan Pipeline, Git, dan JUnit plugins; satu agent Linux berlabel python-browser; Python dengan venv; Git; serta library OS Chromium. Administrator menyiapkan dependency OS sebelum job berjalan.
Simpan dua file contoh Playwright di tests/web/. Letakkan requirements.txt berisi pytest-playwright dan Jenkinsfile di root repository latihan. Gunakan job Pipeline from SCM atau Multibranch, bukan script lepas tanpa konfigurasi SCM.
- Validasi test lokal terlebih dahulu.
- Agent perlu akses jaringan untuk mengunduh dependency dan browser.
- Sesudah kombinasi versi berhasil, kunci dependency dalam requirements.txt.
Jenkinsfile: checkout, environment, dan test
Label python-browser harus sama dengan label agent yang disiapkan. disableConcurrentBuilds mencegah dua build job ini memakai workspace secara bersamaan. deleteDir menghindari report lama terbaca sebagai hasil build baru.
Pengumpulan report ada di post always. Test yang gagal tidak diubah menjadi sukses. allowEmptyArchive hanya mengizinkan ketiadaan screenshot/trace saat tidak ada kegagalan; report XML tetap wajib.
pipeline {
agent { label 'python-browser' }
options {
skipDefaultCheckout(true)
disableConcurrentBuilds()
timeout(time: 15, unit: 'MINUTES')
}
stages {
stage('Checkout') {
steps {
deleteDir()
checkout scm
}
}
stage('Environment') {
steps {
sh '''
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python -m playwright install chromium
'''
}
}
stage('Test web') {
steps {
sh '.venv/bin/python -m pytest tests/web --browser chromium --junitxml=reports/web.xml --tracing=retain-on-failure --screenshot=only-on-failure'
}
}
}
post {
always {
junit testResults: 'reports/*.xml', allowEmptyResults: false
archiveArtifacts artifacts: 'test-results/**/*', allowEmptyArchive: true
}
}
}
Periksa commit, test result, dan artifact
Setelah job menjalankan branch latihan, cek bahwa commit checkout sesuai harapan, kedua test ditemukan, dan laporan JUnit menunjukkan hasilnya. Ubah satu assertion untuk memastikan build berikutnya gagal dan trace/screenshot dapat ditemukan.
Jika stage Environment gagal, belum ada bukti test dijalankan. Jika No test report files were found muncul, baca log stage sebelumnya; jangan menambahkan allowEmptyResults true hanya untuk menutupi masalah.
Batas pipeline web dan tahap mobile
Pipeline ini hanya menjalankan tests/web, bukan Appium. Untuk Android, gunakan agent terpisah yang mempunyai device dan driver Appium, lalu jalankan tests/mobile dengan environment terpisah.
Satu device tidak boleh dipakai dua sesi yang saling mengganggu. Mulai serial, catat UDID, dan gunakan lock lintas job ketika device dipakai bersama.
Pertanyaan yang Sering Ditanyakan
Kenapa Jenkinsfile memakai .venv/bin/python di setiap command?
Aktivasi shell tidak otomatis bertahan antarlangkah Jenkins. Path eksplisit memastikan interpreter yang dipakai konsisten.
Mengapa report diproses meskipun pytest gagal?
Report kegagalan justru diperlukan untuk diagnosis. post always mengumpulkannya tanpa menyembunyikan exit code pytest.
Referensi dan bahan latihan
Disusun oleh Kelas Otomesyen. Contoh memakai data latihan; sesuaikan dependency, device, dan locator dengan project.
Unduh starter project (.zip)Unduh petunjuk starter project