问题背景说明:
python3环境
pytest测试框架下
pytest 测试用例 setup_class 方法中会执行数据库delete语句 ,顺利执行后commit()进程卡死
问题代码:
调用方法
class Test_CATS_friend:
def setup_class(self):
print('\n用例开始前执行数据清理操作')
Mysql().delete_uid_all_data('xxxx')
def delete_uid_all_data(self, uid: str):
self.cursor.execute("delete from table where uid=%s LIMIT 1" % uid)
self.cursor.execute("delete from table where uid=%s" % uid)
self.cursor.execute("delete from table where uid=%s" % uid)
numbers_ = self.cursor.rowcount
self.db.commit()
self.log.info(f"{uid},数据删除成功,条数{numbers_}")
问题表现
在执行self.db.commit()代码时,进程卡主,也无报错日志,只能手动终止程序,再次执行结果一样
问题复现
尝试几次后发现,导致问题与调试debug模式有关,在debug打开数据库连接时,未关闭数据库cursor,停止debug,而未将程序执行完毕,正常执行关闭cursor语句
问题解决
代码块中添加超时容错,如果超时则执行cursor.close().然后重新执行程序即可恢复正常
在debug调试时,调试完毕时,让程序执行完整,正常关闭cursor
如有更好的方法或建议,欢迎留言指正~