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 QA

Panduan 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

  1. Langkah 1

    Siapkan prasyarat

    Cek environment dan file latihan sebelum menjalankan perintah.

  2. Langkah 2

    Jalankan contoh minimal

    Mulai dari satu test agar penyebab kegagalan mudah ditelusuri.

  3. Langkah 3

    Baca hasil dan coba kegagalan

    Ubah ekspektasi untuk memastikan assertion benar-benar bekerja.

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

Jenkinsfile · groovy · Unduh file
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

Lanjutkan ke Panduan Terkait

Lihat kelas Jenkins CI/CD for QA