我的 Python 代码中的 pytest 夹具存在问题。夹具应该在清理测试数据后打印一条消息,但该消息没有被打印。我已经检查了代码和与数据库的连接,但我不明白为什么它不起作用。
我正在使用 pytest 来测试与 mysql 数据库交互的 Python 应用程序。我创建了一个夹具来设置和清理数据库中的测试数据。
打印了拆卸但不起作用(f“清理 cab_user_id:{cab_user_id}”)
@pytest.fixture
def setup_data_register_new_user(db_connection):
def _setup_data(cab_user_id):
cursor = db_connection.cursor()
random_mobile = f"+9{random.randint(1000000000, 9999999999)}"
random_cab_user_id = str(random.randint(1000000000, 9999999999))"
cursor.execute("""
UPDATE tbl_user
SET mobile = %s, cab_user_id = %s
WHERE cab_user_id = %s
""", (random_mobile, random_cab_user_id, cab_user_id))
db_connection.commit()
# return cab_user_id
yield _setup_data
print("teardown")
def _cleanup_data(cab_user_id):
print(f"Cleaning up for cab_user_id: {cab_user_id}")
cursor = db_connection.cursor()
cursor.execute("""
select * FROM tbl_user
WHERE cab_user_id = %s
""", (cab_user_id,))
result = cursor.fetchall()
print("************************", result)
_cleanup_data(cab_user_id)
最后一行的
_cleanup_data(cab_user_id)
调用不应位于 _cleanup_data
函数内。事实上,清理代码根本不需要位于其自己的函数内部,可以直接放在固定装置中的yield语句之后。