Skip to content

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>