Automated Test Generation with Large Language Models: From Prompt to pytest Suite

Dalam era pengembangan perangkat lunak modern, menulis unit test tidak lagi menjadi satu-satunya tugas yang menuntut ketelitian. Dengan kemajuan Large Language Models (LLM) seperti GPT‑4, kita kini dapat mengotomatisasi pembuatan test case secara cepat dan akurat. Artikel ini akan memandu Anda, seorang pengembang Python, melalui proses transformasi prompt sederhana menjadi suite pytest lengkap. Fokusnya adalah pada AI Coding, Pemrograman, dan Otomatisasi AI—topik yang sangat relevan bagi komunitas kodeai.my.id.

Pendahuluan

Unit test adalah fondasi kualitas kode. Namun, menulis test case yang mencakup semua skenario seringkali memakan waktu dan rentan terhadap kesalahan manusia. LLM dapat memahami konteks fungsi, parameter, dan perilaku yang diharapkan, lalu menghasilkan kode test yang bersih dan terstruktur. Dengan integrasi ke dalam workflow CI/CD, pengujian otomatis dapat berjalan tanpa intervensi manual.

Kenapa Memilih LLM untuk Generasi Test?

  • Kecepatan: LLM dapat menghasilkan ribuan baris kode dalam hitungan detik.
  • Adaptasi Domain: Model dilatih pada ribuan repositori open‑source, sehingga dapat menyesuaikan gaya penulisan dan konvensi yang berbeda.
  • Pengurangan Beban Manual: Pengembang dapat fokus pada logika bisnis, sementara LLM menangani boilerplate test.
  • Kontinuitas Kualitas: Test yang dihasilkan mengikuti best practice, seperti penggunaan fixtures dan parameterized tests.

Langkah‑Langkah Praktis

1. Persiapkan Lingkungan

  1. Instalasi pytest dan openai library (atau SDK LLM lain).

    pip install pytest openai

  2. Siapkan API key LLM dan simpan di file .env atau variabel lingkungan.
  3. Buat folder tests/ di proyek Anda.

2. Tulis Prompt yang Jelas

Prompt harus mencakup:

  • Deskripsi fungsi target.
  • Parameter dan tipe data.
  • Output yang diharapkan.
  • Boundary conditions dan edge cases.

Contoh prompt:

Write a pytest test suite for the function calculate_discount(price: float, discount: float) -> float that returns the discounted price. Include tests for normal case, zero discount, 100% discount, negative discount, and non‑numeric input handling.

3. Kirim Prompt ke LLM dan Ambil Respons

Berikut contoh kode Python sederhana:

import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.Completion.create( engine="gpt-4", prompt=prompt, max_tokens=800, temperature=0.0 )
test_code = response.choices[0].text.strip()

4. Validasi dan Refactor

Setelah kode test dihasilkan, jalankan pytest --maxfail=1 -q untuk memastikan tidak ada syntax error. Perhatikan apakah test case mencakup semua skenario yang Anda inginkan. Jika perlu, tambahkan assert atau mock secara manual.

5. Integrasi ke CI/CD

Tambahkan langkah berikut ke pipeline GitHub Actions:

name: Run Tests
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: Install dependencies
        run: pip install -r requirements.txt pytest
      - name: Run tests
        run: pytest

Tips & Trik

  • Gunakan Prompt Template: Simpan prompt yang sudah terbukti efektif dan sesuaikan hanya bagian deskripsi fungsi.
  • Periksa Konsistensi Nama: LLM terkadang menggunakan nama variabel yang tidak konsisten dengan kode sumber.
  • Jangan Lupa Mock: Untuk fungsi yang bergantung pada database atau API eksternal, tambahkan mock secara manual.
  • Review Logika Negatif: Pastikan test case juga memeriksa kasus error dan exception.
  • Gunakan Parameterized Tests: LLM dapat menghasilkan @pytest.mark.parametrize untuk mengurangi duplikasi.

Studi Kasus: Fungsi Pembulatan

Misalkan kita memiliki fungsi:

def round_to_nearest(value: float, step: int) -> float:
  return round(value / step) * step

Prompt yang dikirim:

Generate a pytest suite for round_to_nearest that tests rounding up, rounding down, zero step, negative values, and non‑numeric input.

Respons LLM menghasilkan kode berikut:

import pytest

@pytest.mark.parametrize("value, step, expected", [
  (1.2, 0.5, 1.0),
  (1.8, 0.5, 2.0),
  (0, 1, 0),
  (-1.3, 0.5, -1.5)
])
def test_round_to_nearest(value, step, expected):
  assert round_to_nearest(value, step) == expected

💡 Baca Juga & Rekomendasi Jaringan AI Network:

  • Gunakan racikan prompt profesional di SolusiAI.my.id (Rekomendasi Tools & Otomatisasi AI).
  • Pelajari tutorial skrip dan otomatisasi teknis di PromptHack.my.id (Kumpulan AI Prompt & Content Growth).

Post a Comment

Lebih baru Lebih lama