Pengujian Integrasi untuk Pipeline Agen
Pengujian dari awal hingga akhir terhadap layanan nyata dalam lingkungan pengujian terisolasi.
Pengujian Integrasi untuk Pipeline Agen adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Apa Itu Pengujian Integrasi untuk Agen?
Pengujian unit memeriksa komponen individual secara terpisah. Pengujian integrasi memeriksa apakah beberapa komponen bekerja sama dengan benar dalam lingkungan nyata atau yang mendekati nyata.
Untuk agen, ini berarti menjalankan seluruh alur kerja — panggilan LLM, eksekusi alat, dan penyimpanan data — terhadap layanan nyata atau layanan dalam lingkungan terisolasi.
Struktur Pengujian Ujung ke Ujung
Pengujian agen ujung ke ujung mengirimkan kueri nyata melalui seluruh alur kerja dan memvalidasi hasil akhirnya. Jalankan pengujian ini dalam lingkungan terisolasi — jangan pernah mengarahkannya ke basis data produksi atau data pengguna aktif.
import pytest
# Mark as integration test — skipped in fast unit test runs
@pytest.mark.integration
def test_research_agent_full_pipeline():
from myagent import ResearchAgent
agent = ResearchAgent(
openai_api_key='YOUR_TEST_KEY',
search_api_key='YOUR_TEST_KEY'
)
result = agent.run('What is the population of Tokyo?')
# Structural assertions — not exact string matching
assert isinstance(result, dict)
assert result['status'] == 'completed'
assert 'tokyo' in result['answer'].lower() or 'japan' in result['answer'].lower()
assert len(result['sources']) >= 1Isolasi Data Pengujian
Pengujian integrasi tidak boleh mengotori data bersama. Gunakan basis data pengujian khusus, ruang nama yang terisolasi, atau data sementara yang dibersihkan setelah pengujian. Jangan pernah menulis data pengujian ke tabel produksi.
import os
import pytest
# Use a separate test database URL
@pytest.fixture(scope='session')
def test_db():
test_db_url = os.environ.get(
'TEST_DATABASE_URL',
'postgresql://localhost/myagent_test' # separate test DB
)
# Set up test schema
from myagent.database import create_tables
create_tables(test_db_url)
yield test_db_url
# Tear down after all tests in the session
from myagent.database import drop_tables
drop_tables(test_db_url)Pembersihan Setelah Setiap Pengujian
Setiap pengujian integrasi harus membersihkan data apa pun yang dibuatnya. Gunakan pola fixture yield pytest: lakukan penyiapan sebelum yield, lalu pembersihan setelahnya. Dengan demikian, pengujian tetap independen dan dapat dijalankan dalam urutan apa pun.
import pytest
@pytest.fixture
def clean_agent_memory(test_db):
# No setup needed — DB starts empty
yield
# Cleanup: delete any records created during this test
from myagent.database import clear_conversation_history
clear_conversation_history(test_db)
@pytest.mark.integration
def test_agent_stores_conversation(clean_agent_memory, test_db):
from myagent import Agent
agent = Agent(db_url=test_db)
agent.run('Remember that my name is Alex')
history = agent.get_history()
assert len(history) > 0
assert any('Alex' in str(msg) for msg in history)
# clean_agent_memory fixture deletes these after the testLayanan Terisolasi: Kunci API Pengujian
Gunakan kunci API pengujian khusus dengan izin dan kuota terbatas untuk pengujian integrasi. Jangan pernah menggunakan kunci produksi dalam CI. Simpan kunci pengujian sebagai variabel lingkungan CI, bukan di dalam kode.
import os
import pytest
# Skip integration tests if test keys are not configured
def requires_integration_keys():
return pytest.mark.skipif(
not os.environ.get('OPENAI_TEST_KEY'),
reason='Integration test keys not configured'
)
@requires_integration_keys()
@pytest.mark.integration
def test_live_weather_tool():
from myagent.tools import get_weather
result = get_weather(city='London', unit='celsius')
assert result['success'] is True
assert 'temperature' in result
assert isinstance(result['temperature'], (int, float))Menggunakan Docker untuk Basis Data Terisolasi
Untuk pengujian integrasi yang memerlukan basis data nyata, jalankan kontainer Docker selama sesi pengujian. Dengan demikian, Anda selalu mendapatkan basis data yang bersih dan terisolasi serta menghindari konflik dengan basis data pengembangan.
# conftest.py — docker-based test database
import subprocess
import pytest
@pytest.fixture(scope='session')
def docker_postgres():
container_id = subprocess.check_output([
'docker', 'run', '-d',
'-e', 'POSTGRES_PASSWORD=test',
'-e', 'POSTGRES_DB=agent_test',
'-p', '5434:5432', # use non-standard port to avoid conflicts
'postgres:15'
]).decode().strip()
import time
time.sleep(2) # wait for Postgres to start
yield 'postgresql://postgres:test@localhost:5434/agent_test'
subprocess.run(['docker', 'stop', container_id])
subprocess.run(['docker', 'rm', container_id])Konfigurasi Pengujian Khusus Lingkungan
Pengujian integrasi memerlukan konfigurasi yang berbeda untuk lingkungan lokal, CI, dan staging. Gunakan variabel lingkungan serta pembantu konfigurasi untuk memilih pengaturan yang tepat secara otomatis.
import os
def get_test_config() -> dict:
env = os.environ.get('TEST_ENV', 'local')
configs = {
'local': {
'db_url': 'postgresql://localhost/agent_test',
'openai_key': os.environ.get('OPENAI_TEST_KEY', ''),
'use_real_llm': False # use mocks locally
},
'ci': {
'db_url': os.environ.get('CI_DATABASE_URL', ''),
'openai_key': os.environ.get('CI_OPENAI_KEY', ''),
'use_real_llm': True # use real LLM in CI integration tests
},
'staging': {
'db_url': os.environ.get('STAGING_DATABASE_URL', ''),
'openai_key': os.environ.get('STAGING_OPENAI_KEY', ''),
'use_real_llm': True
}
}
return configs[env]
config = get_test_config()
print(f"TEST_ENV not set -> using '{os.environ.get('TEST_ENV', 'local')}' config")
print(f"DB URL : {config['db_url']}")
print(f"Use real LLM : {config['use_real_llm']}")
Penanda pytest untuk Memilih Pengujian
Gunakan penanda pytest khusus untuk mengategorikan pengujian dan hanya menjalankan subset yang relevan. Konfigurasikan penanda dalam pytest.ini dan gunakan -m pada baris perintah untuk memilihnya.
# pytest.ini
# [pytest]
# markers =
# unit: Fast unit tests with mocked dependencies
# integration: Slower tests with real or sandboxed services
# expensive: Tests that make real LLM calls and cost money
# Run only unit tests (fast CI check):
# pytest -m unit
# Run only integration tests:
# pytest -m integration
# Run everything except expensive tests:
# pytest -m 'not expensive'
# In test files:
import pytest
@pytest.mark.unit
def test_tool_format():
pass # fast, no external calls
@pytest.mark.integration
@pytest.mark.expensive
def test_with_real_llm():
pass # slow, costs tokensMenjalankan Pengujian Integrasi dalam CI
Konfigurasikan alur kerja CI Anda (GitHub Actions, GitLab CI) untuk menjalankan pengujian unit pada setiap push dan pengujian integrasi sesuai jadwal atau sebelum rilis. Cara ini menyeimbangkan kecepatan dan cakupan.
# .github/workflows/test.yml (abbreviated)
# name: Tests
# on:
# push:
# branches: [main, develop]
# schedule:
# - cron: '0 2 * * *' # nightly integration tests
#
# jobs:
# unit-tests:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v3
# - run: pip install -r requirements.txt
# - run: pytest -m unit --tb=short
#
# integration-tests:
# if: github.event_name == 'schedule'
# env:
# CI_OPENAI_KEY: ${{ secrets.CI_OPENAI_KEY }}
# CI_DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
# steps:
# - run: pytest -m integration --tb=long
print('Unit tests on every push, integration tests nightly')Mengukur Cakupan Pengujian untuk Agen
Gunakan pytest-cov untuk mengukur baris kode agen Anda yang tercakup oleh pengujian. Usahakan cakupan yang tinggi pada fungsi alat dan logika orkestrasi agen, meskipun panggilan LLM dibuat tiruannya.
# Install: pip install pytest-cov
# Run tests with coverage report:
# pytest --cov=myagent --cov-report=html -m unit
# This generates an HTML report showing which lines are untested
# Uncovered lines in the agent loop are high-risk areas
# Example coverage config in pyproject.toml:
# [tool.coverage.run]
# omit = ["tests/*", "scripts/*"]
#
# [tool.coverage.report]
# fail_under = 80 # fail if coverage drops below 80%
print('Coverage reports highlight untested code paths in your agent')Ringkasan Praktik Terbaik Pengujian Integrasi
Aturan utama untuk pengujian integrasi agen yang andal:
- Selalu gunakan basis data pengujian terpisah — jangan pernah gunakan basis data produksi
- Bersihkan data pengujian setelah setiap pengujian dengan fixture
yield - Gunakan kunci API pengujian khusus dengan kuota terbatas
- Gunakan penanda pytest untuk memisahkan pengujian unit yang cepat dari pengujian integrasi yang lambat
- Jalankan pengujian unit pada setiap push dan pengujian integrasi sesuai jadwal
- Gunakan Docker untuk lingkungan basis data yang bersih dan dapat dibuang
Uji Pemahaman: Pengujian Integrasi
Uji pemahaman Anda tentang pengujian integrasi untuk alur kerja agen.
Ringkasan: Pengujian Integrasi untuk Alur Kerja Agen
Sekarang Anda memiliki pengetahuan untuk membangun rangkaian pengujian integrasi yang lengkap dan andal:
- Gunakan
@pytest.mark.integrationuntuk memisahkan pengujian lambat dari pengujian unit yang cepat - Isolasi data pengujian dengan basis data khusus dan fixture pembersihan
- Gunakan Docker atau layanan dalam lingkungan terisolasi untuk menyediakan lingkungan yang bersih
- Konfigurasikan kunci API khusus pengujian melalui variabel lingkungan
- Jalankan pengujian unit pada setiap commit dan pengujian integrasi setiap malam dalam CI
- Ukur cakupan dengan
pytest-covuntuk menemukan jalur yang belum diuji
Piramida pengujian yang tertata baik menjaga keandalan agen seiring perkembangannya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengujian Integrasi untuk Pipeline Agen” gratis?
Ya — teks lengkap “Pengujian Integrasi untuk Pipeline Agen” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengujian Integrasi untuk Pipeline Agen”?
Pengujian dari awal hingga akhir terhadap layanan nyata dalam lingkungan pengujian terisolasi. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pengujian Integrasi untuk Pipeline Agen” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?
Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengapa Pengujian Agen Berbeda
- Meniru Panggilan LLM dalam Pengujian
- Pengujian Agen Berbasis Assertion
- Pengujian Integrasi untuk Pipeline Agen