0Pricing
AI Agents · Ders

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']) >= 1

Sı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 test

Yalı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 tokens

CI'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
  • yield fixture'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.integration kullanı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-cov ile ö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

  1. Aracıları Sınamak Neden Farklıdır
  2. Sınamalarda LLM Çağrılarını Taklit Etme
  3. Doğrulama Tabanlı Aracı Sınaması
  4. Aracı İş Akışları İçin Tümleştirme Sınamaları
← AI Agents Sayfasına Dön