# Performance Testing Suite This directory contains performance tests for the Aniworld API and download system. ## Test Categories ### API Load Testing (`test_api_load.py`) Tests API endpoints under concurrent load to ensure acceptable performance: - **Load Testing**: Concurrent requests to endpoints - **Sustained Load**: Long-running load scenarios - **Concurrency Limits**: Maximum connection handling - **Response Times**: Performance benchmarks **Key Metrics:** - Requests per second (RPS) - Average response time - Success rate under load - Graceful degradation behavior ### Download Stress Testing (`test_download_stress.py`) Tests the download queue and management system under stress: - **Queue Operations**: Concurrent add/remove operations - **Capacity Testing**: Queue behavior at limits - **Memory Usage**: Memory leak detection - **Concurrency**: Multiple simultaneous downloads - **Error Handling**: Recovery from failures **Key Metrics:** - Queue operation success rate - Concurrent download capacity - Memory stability - Error recovery time ## Running Performance Tests ### Run all performance tests: ```bash conda run -n AniWorld python -m pytest tests/performance/ -v -m performance ``` ### Run specific test file: ```bash conda run -n AniWorld python -m pytest tests/performance/test_api_load.py -v ``` ### Run with detailed output: ```bash conda run -n AniWorld python -m pytest tests/performance/ -vv -s ``` ### Run specific test class: ```bash conda run -n AniWorld python -m pytest \ tests/performance/test_api_load.py::TestAPILoadTesting -v ``` ## Performance Benchmarks ### Expected Results **Health Endpoint:** - RPS: ≥ 50 requests/second - Avg Response Time: < 0.1s - Success Rate: ≥ 95% **Anime List Endpoint:** - Avg Response Time: < 1.0s - Success Rate: ≥ 90% **Search Endpoint:** - Avg Response Time: < 2.0s - Success Rate: ≥ 85% **Download Queue:** - Concurrent Additions: Handle 100+ simultaneous adds - Queue Capacity: Support 1000+ queued items - Operation Success Rate: ≥ 90% ## Adding New Performance Tests When adding new performance tests: 1. Mark tests with `@pytest.mark.performance` decorator 2. Use `@pytest.mark.asyncio` for async tests 3. Include clear performance expectations in assertions 4. Document expected metrics in docstrings 5. Use fixtures for setup/teardown Example: ```python @pytest.mark.performance class TestMyFeature: @pytest.mark.asyncio async def test_under_load(self, client): \"\"\"Test feature under load.\"\"\" # Your test implementation metrics = await measure_performance(...) assert metrics["success_rate"] >= 95.0 ``` ## Continuous Performance Monitoring These tests should be run: - Before each release - After significant changes to API or download system - As part of CI/CD pipeline (if resources permit) - Weekly as part of regression testing ## Troubleshooting **Tests timeout:** - Increase timeout in pytest.ini - Check system resources (CPU, memory) - Verify no other heavy processes running **Low success rates:** - Check application logs for errors - Verify database connectivity - Ensure sufficient system resources - Check for rate limiting issues **Inconsistent results:** - Run tests multiple times - Check for background processes - Verify stable network connection - Consider running on dedicated test hardware ## Performance Optimization Tips Based on test results, consider: 1. **Caching**: Add caching for frequently accessed data 2. **Connection Pooling**: Optimize database connections 3. **Async Processing**: Use async/await for I/O operations 4. **Load Balancing**: Distribute load across multiple workers 5. **Rate Limiting**: Implement rate limiting to prevent overload 6. **Query Optimization**: Optimize database queries 7. **Resource Limits**: Set appropriate resource limits ## Integration with CI/CD To include in CI/CD pipeline: ```yaml # Example GitHub Actions workflow - name: Run Performance Tests run: | conda run -n AniWorld python -m pytest \ tests/performance/ \ -v \ -m performance \ --tb=short ``` ## References - [Pytest Documentation](https://docs.pytest.org/) - [HTTPX Async Client](https://www.python-httpx.org/async/) - [Performance Testing Best Practices](https://docs.python.org/3/library/profile.html)