MariaDB Container Testing
Why MariaDB?
β MariaDB is a drop-in replacement for MySQL with open-source community support, making it perfect for containerized tests in CI/CD.
β Test Cases Implemented
β Test Case 1 β Check MariaDB Version
Verifies the container is running and accessible.
result = conn.execute(text("SELECT VERSION();")).fetchone()
assert "MariaDB" in result[0]
β Test Case 2 β Insert and Query
Tests simple INSERT and SELECT functionality.
conn.execute(text("INSERT INTO users (name) VALUES ('Alice');"))
result = conn.execute(text("SELECT name FROM users;")).fetchone()
assert result[0] == "Alice"
β Test Case 3 β Insert Multiple Rows
Inserts multiple rows and confirms row count.
conn.execute(text("INSERT INTO users (name) VALUES ('Bob'), ('Charlie');"))
result = conn.execute(text("SELECT COUNT(*) FROM users;")).fetchone()
assert result[0] == 3
β Test Case 4 β Primary Key Constraint
Tests primary key uniqueness.
conn.execute(text("INSERT INTO users (id, name) VALUES (1, 'David');"))
with pytest.raises(Exception):
conn.execute(text("INSERT INTO users (id, name) VALUES (1, 'Eve');"))
β Test Case 5 β Truncate Table
Clears data and verifies the table is empty.
conn.execute(text("TRUNCATE TABLE users;"))
result = conn.execute(text("SELECT COUNT(*) FROM users;")).fetchone()
assert result[0] == 0
β How to Run the Tests
Run:
pytest -v testcontainers/test_mariadb_container.py
β Expected:
5 passed in X.XXs
β Useful Commands
- Check running containers:
bash
docker ps
- Inspect logs for the MariaDB container:
bash
docker logs <container_id>
π§ͺ Chaos Testing Scenarios
β Scenario 1: MySQL vs MariaDB Compatibility
def test_mariadb_mysql_compatibility():
"""Test that our app works with both MySQL and MariaDB"""
with MariaDbContainer("mariadb:10.6") as mariadb:
conn = create_connection(mariadb.get_connection_url())
# Test MariaDB-specific features
result = conn.execute(text("SELECT @@version_comment;")).fetchone()
assert "MariaDB" in result[0]
β Scenario 2: Character Set Issues
def test_mariadb_character_set():
"""Test that our app handles MariaDB character set differences"""
with MariaDbContainer("mariadb:10.6") as mariadb:
conn = create_connection(mariadb.get_connection_url())
# Test UTF-8 support
conn.execute(text("INSERT INTO users (name) VALUES ('JosΓ©');"))
result = conn.execute(text("SELECT name FROM users WHERE name = 'JosΓ©';")).fetchone()
assert result[0] == "JosΓ©"
π Monitoring & Reporting
β Generate HTML Report
pytest testcontainers/test_mariadb_container.py --html=reports/mariadb-test-report.html --self-contained-html
β View Container Logs
# Get container ID
docker ps | grep mariadb
# View logs
docker logs <container_id>