В этой статье я хотел бы показать пару примеров проверок БД с использованием библиотеки pytest и sqlite3.
import sqlite3
import pytest
# Фикстура для подключения к базе данных и создания временной таблицы
@pytest.fixture
def db_connection():
conn = sqlite3.connect(':memory:')
cursor = conn.cursor()
cursor.execute('''CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')
conn.commit()
yield conn
conn.close()
# Тест для проверки количества столбцов в таблице
def test_column_count(db_connection):
cursor = db_connection.cursor()
cursor.execute('PRAGMA table_info(users)')
columns = cursor.fetchall()
assert len(columns) == 3 # мы ожидаем три столбца: id, name, age
# Тест для проверки наличия таблицы в базе данных
def test_table_existence(db_connection):
cursor = db_connection.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='users';")
result = cursor.fetchone()
assert result is not None
# Тест для проверки типа данных в столбце
def test_column_type(db_connection):
cursor = db_connection.cursor()
cursor.execute('PRAGMA table_info(users)')
columns = cursor.fetchall()
for column in columns:
if column[1] == 'name':
assert column[2] == 'TEXT'
elif column[1] == 'age':
assert column[2] == 'INTEGER'
# Тест для проверки наличия значения в таблице
def test_value_existence(db_connection):
cursor = db_connection.cursor()
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 25)")
db_connection.commit()
cursor.execute("SELECT * FROM users WHERE name='Alice'")
result = cursor.fetchone()
assert result is not None
# Тест для проверки наличия значения NULL
def test_null_value(db_connection):
cursor = db_connection.cursor()
cursor.execute("INSERT INTO users (name, age) VALUES (NULL, 30)")
db_connection.commit()
cursor.execute("SELECT * FROM users WHERE name IS NULL")
result = cursor.fetchone()
assert result is not None
# Тест для проверки добавления новой записи
def test_insert_record(db_connection):
cursor = db_connection.cursor()
cursor.execute("INSERT INTO users (name, age) VALUES ('Bob', 30)")
db_connection.commit()
cursor.execute("SELECT * FROM users WHERE name='Bob'")
result = cursor.fetchone()
assert result is not None
# Тест для проверки обновления записи
def test_update_record(db_connection):
cursor = db_connection.cursor()
cursor.execute("INSERT INTO users (name, age) VALUES ('David', 40)")
db_connection.commit()
cursor.execute("UPDATE users SET age=41 WHERE name='David'")
db_connection.commit()
cursor.execute("SELECT age FROM users WHERE name='David'")
result = cursor.fetchone()
assert result[0] == 41
# Тест для проверки удаления записи
def test_delete_record(db_connection):
cursor = db_connection.cursor()
cursor.execute("INSERT INTO users (name, age) VALUES ('Charlie', 35)")
db_connection.commit()
cursor.execute("DELETE FROM users WHERE name='Charlie'")
db_connection.commit()
cursor.execute("SELECT * FROM users WHERE name='Charlie'")
result = cursor.fetchone()
assert result is None