Aracı İş Akışları İçin Tümleştirme Sınamaları
Yalıtılmış sınama ortamlarında gerçek hizmetlere karşı uçtan uca sınamalar çalıştırma.
Aracı İş Akışları İçin Tümleştirme Sınamaları, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.
Aracılar İçin Tümleştirme Sınamaları Nedir?
Birim sınamaları tek tek bileşenleri yalıtılmış olarak denetler. Tümleştirme sınamaları, birden çok bileşenin gerçek veya gerçeğe yakın bir ortamda birlikte doğru çalışıp çalışmadığını denetler.
Aracılar açısından bu, tüm işlem hattının — LLM çağrıları, araç yürütme ve veri depolama — gerçek veya korumalı hizmetlere karşı çalıştırılması anlamına gelir.
Uçtan Uca Sınama Yapısı
Uçtan uca aracı sınaması, gerçek bir sorguyu tüm işlem hattından geçirir ve nihai sonucu doğrular. Bu sınamaları yalıtılmış bir ortamda çalıştırın — üretim veritabanınıza veya canlı kullanıcı verilerine karşı asla çalıştırmayın.
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']) >= 1Sınama Verilerini Yalıtma
Tümleştirme sınamaları paylaşılan verileri kirletmemelidir. Özel sınama veritabanları, yalıtılmış ad alanları veya sınamadan sonra temizlenen geçici veriler kullanın. Sınama verilerini asla üretim tablolarına yazmayın.
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)Her Sınamadan Sonra Temizleme
Her tümleştirme sınaması oluşturduğu tüm verileri temizlemelidir. pytest'in yield fixture kalıbını kullanın: kurulumu yield öncesinde yapın, temizliği sonrasında gerçekleştirin. Bu, sınamaların birbirinden bağımsız olmasını ve herhangi bir sırayla çalışabilmesini sağlar.
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 testYalıtılmış Hizmetler: Sınama API Anahtarları
Tümleştirme sınamalarında sınırlı izinlere ve kotalara sahip özel sınama API anahtarları kullanın. CI ortamında asla üretim anahtarlarını kullanmayın. Sınama anahtarlarını kodda değil, CI ortam değişkenleri olarak saklayın.
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))Yalıtılmış Veritabanları için Docker Kullanımı
Gerçek bir veritabanı gerektiren tümleştirme sınamalarında sınama oturumu için bir Docker kapsayıcısı başlatın. Bu, her seferinde temiz ve yalıtılmış bir veritabanını garanti eder ve geliştirme veritabanınızla çakışmaları önler.
# 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])Ortama Özel Sınama Yapılandırmaları
Tümleştirme sınamaları yerel, CI ve hazırlık ortamları için farklı yapılandırmalar gerektirir. Doğru ayarları otomatik olarak seçmek için ortam değişkenlerini ve bir yapılandırma yardımcısını kullanın.
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']}")
Sınama Seçimi için pytest İşaretçileri
Sınamaları kategorilere ayırmak ve yalnızca ilgili alt kümeyi çalıştırmak için özel pytest işaretçileri kullanın. İşaretçileri pytest.ini dosyasında yapılandırın ve bunları seçmek için komut satırında -m kullanın.
# 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 tokensCI'da Tümleştirme Sınamalarını Çalıştırma
CI işlem hattınızı (GitHub Actions, GitLab CI), birim sınamalarını her gönderimde ve tümleştirme sınamalarını belirli bir zamanlamaya göre veya sürümler yayımlanmadan önce çalıştıracak şekilde yapılandırın. Bu, hız ile kapsam arasında denge kurar.
# .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')Aracılar için Sınama Kapsamını Ölçme
Aracı kodunuzdaki hangi satırların sınamalar tarafından kapsandığını ölçmek için pytest-cov kullanın. LLM çağrıları sahte nesnelerle değiştirilmiş olsa bile araç işlevleri ve aracı düzenleme mantığı için yüksek kapsam hedefleyin.
# 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')Tümleştirme Sınaması En İyi Uygulamalarının Özeti
Güvenilir aracı tümleştirme sınamaları için temel kurallar:
- Her zaman ayrı sınama veritabanları kullanın — üretim veritabanını asla kullanmayın
yieldfixture'larıyla her sınamadan sonra sınama verilerini temizleyin- Sınırlı kotalara sahip özel sınama API anahtarları kullanın
- Hızlı birim sınamalarını yavaş tümleştirme sınamalarından ayırmak için pytest işaretçilerini kullanın
- Birim sınamalarını her gönderimde, tümleştirme sınamalarını ise belirli bir zamanlamaya göre çalıştırın
- Geçici ve temiz veritabanı ortamları için Docker kullanın
Bilgi Denetimi: Tümleştirme Sınamaları
Aracı işlem hatırlarının tümleştirme sınamasını anlayıp anlamadığınızı sınayın.
Özet: Aracı İşlem Hatları için Tümleştirme Sınamaları
Artık eksiksiz ve güvenilir bir tümleştirme sınaması paketi oluşturmak için gereken bilgilere sahipsiniz:
- Yavaş sınamaları hızlı birim sınamalarından ayırmak için
@pytest.mark.integrationkullanın - Özel veritabanları ve temizlik fixture'larıyla sınama verilerini yalıtın
- Temiz ortamlar için Docker veya yalıtılmış hizmetler kullanın
- Sınamaya özel API anahtarlarını ortam değişkenleri aracılığıyla yapılandırın
- Birim sınamalarını her gönderimde, tümleştirme sınamalarını CI'da her gece çalıştırın
- Sınanmamış yolları bulmak için kapsamı
pytest-covile ölçün
İyi düzenlenmiş bir sınama piramidi, aracınız geliştikçe güvenilir kalmasını sağlar.
Sıkça Sorulan Sorular
“Aracı İş Akışları İçin Tümleştirme Sınamaları” dersi ücretsiz mi?
Evet — “Aracı İş Akışları İçin Tümleştirme Sınamaları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.
“Aracı İş Akışları İçin Tümleştirme Sınamaları” dersinde ne öğreneceğim?
Yalıtılmış sınama ortamlarında gerçek hizmetlere karşı uçtan uca sınamalar çalıştırma. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Agents öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Aracı İş Akışları İçin Tümleştirme Sınamaları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Aracıları Sınamak Neden Farklıdır
- Sınamalarda LLM Çağrılarını Taklit Etme
- Doğrulama Tabanlı Aracı Sınaması
- Aracı İş Akışları İçin Tümleştirme Sınamaları