Verbeter mijn Cursor-integratie voor geautomatiseerde tests
description
Met deze prompt leer je hoe je Cursor effectief kunt inzetten voor het automatiseren van tests, wat de kwaliteit en stabiliteit van je software verbetert. Het helpt je testcode te schrijven en onderhouden met minder fouten en meer snelheid dan traditionele methoden, waardoor je ontwikkelproces betrouwbaarder en efficiënter wordt.
prompt
Help me bij het opzetten en optimaliseren van geautomatiseerde tests met Cursor. Mijn programmeertaal: <voer je programmeertaal in>. Beschrijf het type tests dat ik wil automatiseren: ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een uitgebreide gids voor het opzetten en optimaliseren van geautomatiseerde unit tests voor jouw API met behulp van Cursor in Python:
1. Opzetten van je testomgeving
- Installeer Cursor: Zorg dat je Cursor correct hebt geïnstalleerd in je Python-omgeving, bijvoorbeeld via pip:
```bash
pip install cursor
```
- Organiseer je tests: Plaats je unit tests in een aparte map, bijvoorbeeld `tests/`, en noem je testbestanden bijvoorbeeld `test_api.py`.
2. Schrijven van effectieve unit tests
- Mock externe afhankelijkheden: Gebruik mocking (bijvoorbeeld met `unittest.mock`) om API-aanroepen of database-interacties te simuleren, zodat tests snel en betrouwbaar blijven.
- Test individuele functies: Richt je op het testen van kleine, geïsoleerde functies of methoden van je API.
- Gebruik duidelijke asserts: Controleer op verwachte outputs, uitzonderingen, en randgevallen.
3. Integratie van Cursor voor testautomatisering
- Testdata beheren: Gebruik Cursor om testgegevens eenvoudig te laden en te verwijderen, wat herhaalbaarheid en consistentie bevordert.
- Automatiseren van testuitvoering: Integreer Cursor met je CI/CD-pijplijn zodat tests automatisch worden uitgevoerd bij elke commit.
- Verbeter testefficiëntie: Gebruik Cursor’s functies voor batchverwerking en data-validatie om tests snel uit te voeren.
4. Best practices voor onderhoud en optimalisatie
- Automatiseer setup en teardown: Gebruik bijvoorbeeld `setUp` en `tearDown` methoden in je testklassen om testdata automatisch te creëren en te verwijderen via Cursor.
- Organiseer tests modulair: Groepeer tests op functionaliteit en documenteer duidelijk.
- Houd tests klein en specifiek: Zorg dat elke test één aspect van je API verifieert.
- Documenteer testcases: Beschrijf wat elke test controleert en waarom.
5. Aanbevelingen voor betrouwbaarheid en efficiëntie
- Voer tests parallel uit: Maak gebruik van testparallelisatie om tijd te besparen.
- Gebruik fixtures en mocks: Minimaliseer afhankelijkheden en voorkomen flaky tests.
- Monitor testresultaten: Log en analyseer testuitkomsten regelmatig om problemen snel te identificeren.
- Automatiseer regressietests: Zorg dat bij elke wijziging alle tests automatisch draaien en rapporteren.
6. Voorbeeldcode
Hier is een basisvoorbeeld van een Python test met Cursor:
```python
import unittest
from unittest.mock import patch
import cursor
class TestApi(unittest.TestCase):
@classmethod
def setUpClass(cls):
# Initialiseer Cursor verbinding
cls.cursor = cursor.Cursor()
def setUp(self):
# Voeg testdata toe
self.test_data_id = self.cursor.insert('api_data', {'key': 'value'})
def tearDown(self):
# Verwijder testdata
self.cursor.delete('api_data', {'id': self.test_data_id})
def test_api_response(self):
# Hier test je je API-logica
response = jouw_api_functie()
self.assertEqual(response.status_code, 200)
@patch('jouw_module.external_service')
def test_api_met_mock(self, mock_service):
mock_service.return_value = {'result': 'succes'}
response = jouw_api_functie()
self.assertIn('succes', response.json())
if __name__ == '__main__':
unittest.main()
```
Kort samengevat:
- Gebruik Cursor voor betrouwbare testdata management.
- Schrijf kleine, gerichte tests met mocks waar nodig.
- Automatiseer en integreer tests in je ontwikkelproces voor maximale efficiëntie.
- Onderhoud je tests actief en documenteer ze duidelijk.
Wil je meer specifieke voorbeelden of begeleiding bij het instellen van je CI/CD pipeline?
provider: deepseek
model: deepseek-chat
Zeker! Hier is een complete handleiding voor het opzetten en optimaliseren van geautomatiseerde API unit tests in Python met Cursor:
## 🚀 Test Framework Setup
### Aanbevolen Tools
```python
# requirements-test.txt
pytest==7.4.0
pytest-cov==4.1.0
requests==2.31.0
fastapi-testclient==0.4.0 # Als je FastAPI gebruikt
flask-testing==0.8.1 # Als je Flask gebruikt
factory-boy==3.3.0
faker==19.0.0
httmock==1.4.0
```
## 📝 Test Structuur & Organisatie
### Projectstructuur
```
project/
├── src/
│ └── api/
├── tests/
│ ├── unit/
│ │ ├── test_routes/
│ │ ├── test_models/
│ │ └── test_services/
│ ├── conftest.py
│ └── factories/
├── pytest.ini
└── requirements-test.txt
```
## 🧪 Effectieve Test Patterns
### 1. Basis Unit Test Structuur
```python
# tests/unit/test_user_routes.py
import pytest
from unittest.mock import Mock, patch
from src.api.routes.users import UserRouter
class TestUserRoutes:
@pytest.fixture
def mock_user_service(self):
return Mock()
@pytest.fixture
def router(self, mock_user_service):
return UserRouter(user_service=mock_user_service)
def test_get_user_success(self, router, mock_user_service):
# Arrange
user_id = 1
expected_user = {"id": user_id, "name": "Test User"}
mock_user_service.get_user.return_value = expected_user
# Act
result = router.get_user(user_id)
# Assert
assert result == expected_user
mock_user_service.get_user.assert_called_once_with(user_id)
```
### 2. Gebruik van Factories voor Test Data
```python
# tests/factories/user_factory.py
import factory
from faker import Faker
fake = Faker()
class UserFactory(factory.Factory):
class Meta:
model = dict
id = factory.Sequence(lambda n: n + 1)
name = factory.LazyFunction(lambda: fake.name())
email = factory.LazyFunction(lambda: fake.email())
is_active = True
# Gebruik in tests
def test_create_user(self):
user_data = UserFactory.build()
# Test logica met consistente test data
```
## 🔧 Cursor Optimalisaties
### 1. AI-gestuurde Test Generatie
Gebruik Cursor's AI-capaciteiten:
- **Chat commando**: "Generate unit tests for this UserService class"
- **Code acties**: Selecteer code → Ctrl+L → "Create tests for this function"
### 2. Snelkoppelingen voor Test Onderhoud
```python
# Gebruik Cursor's refactoring tools voor:
# - Test method extraction
# - Fixture consolidation
# - Mock pattern standardization
```
### 3. Test Templates in Cursor
Maak code snippets voor veelvoorkomende test patronen:
```python
# @snippet api_unit_test_template
def test_{method_name}_{scenario}(self):
# Arrange
{setup_code}
# Act
{action_code}
# Assert
{assertions}
```
## 🛠️ Test Configuratie & Setup
### pytest.ini Configuratie
```ini
[pytest]
testpaths = tests
python_files = test_*.py
python_classes = Test*
python_functions = test_*
addopts =
-v
--cov=src
--cov-report=html
--cov-report=term-missing
--strict-markers
markers =
slow: slow running tests
integration: integration tests
```
### conftest.py voor Shared Fixtures
```python
# tests/conftest.py
import pytest
from unittest.mock import Mock
from src.api.app import create_app
@pytest.fixture
def test_client():
app = create_app()
with app.test_client() as client:
yield client
@pytest.fixture
def mock_db_session():
with patch('src.api.database.get_session') as mock:
yield mock
```
## 📊 Test Metrics & Quality
### Coverage Tracking
```python
# .coveragerc
[run]
source = src
omit =
*/migrations/*
*/__pycache__/*
*/tests/*
[report]
exclude_lines =
pragma: no cover
def __repr__
raise AssertionError
raise NotImplementedError
```
## 🔄 CI/CD Integratie
### GitHub Actions Voorbeeld
```yaml
# .github/workflows/test.yml
name: Run Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install -r requirements-test.txt
- name: Run tests
run: pytest --cov-report=xml
- name: Upload coverage
uses: codecov/codecov-action@v3
```
## 💡 Best Practices voor Onderhoud
### 1. Test Naming Conventies
```python
# Goed
def test_create_user_with_valid_data_returns_201()
def test_get_user_with_invalid_id_returns_404()
# Vermijd
def test_user_creation() # Te vaag
```
### 2. Mock Strategieën
```python
class TestPaymentService:
def test_process_payment_success(self):
with patch('src.api.services.payment_gateway.charge') as mock_charge:
mock_charge.return_value = {"status": "success"}
result = self.payment_service.process_payment(amount=100)
assert result["success"] is True
mock_charge.assert_called_once_with(100)
```
### 3. Parameterized Testing
```python
@pytest.mark.parametrize("user_input,expected_status", [
({"name": "John", "email": "john@test.com"}, 201),
({"name": "", "email": "john@test.com"}, 400),
({"name": "John", "email": "invalid-email"}, 400),
])
def test_create_user_validation(self, user_input, expected_status):
response = self.client.post("/users", json=user_input)
assert response.status_code == expected_status
```
## 🎯 Cursor-specifieke Tips
1. **Gebruik Cursor's Agent Mode** voor complexe test refactoring
2. **Maak custom commands** voor vaak uitgevoerde test operaties
3. **Leverage codebase awareness** voor het vinden van afhankelijkheden
4. **Gebruik de chat voor test strategie vragen** zoals "Hoe test ik deze async endpoint?"
## 📈 Monitoring & Optimalisatie
### Test Performance Tracking
```python
# Voeg toe aan conftest.py
def pytest_terminal_summary(terminalreporter, exitstatus, config):
duration = terminalreporter.stats.get('total duration', 0)
print(f"\nTest execution time: {duration:.2f}s")
```
Deze aanpak zorgt voor:
- **Snellere ontwikkeling** met AI-ondersteuning
- **Betere test coverage** door gestructureerde patterns
- **Eenvoudiger onderhoud** met consistente conventies
- **Betrouwbaardere tests** door isolatie en mocking
Start met de basisstructuur en breid geleidelijk uit op basis van je specifieke API-behoeften!