【Python+Django+Pytest】数据库异常pymysql.err.InterfaceError: (0, '') 解决方案


问题背景:

接口自动化测试平台,在执行测试案例之外,还需要做以下五件事情(或步骤):

1.查询用户在数据准备中预置的测试套件层数据初始化相关sql  (setUp_class方法中)

2.查询用户在数据准备中预置的测试案例层数据初始化相关sql    (setUp_method方法中)

3.查询用户在数据准备中预置的测试套件层数据清理相关sql       (tearDown_class方法中)

4.查询用户在数据准备中预置的测试案例层数据清理相关sql       (tearDown_method方法中)

5.全部案例执行结束之后将结果写入t_execution及t_result表      (tearDown_class方法中)

代码修改:

原来的代码是在每个方法中执行查询操作,然后在tearDown_class方法中执行 5.全部案例执行结束之后将结果写入t_execution及t_result表

考虑到性能问题

优化后的代码为:

将1-4中的步骤提前,全部查询出来数据之后,再分别执行setUp_class、setUp_method、tearDown_class、tearDown_method方法

事情5仍然放在tearDown_class中

问题出现:

修改完代码之后,在开发环境验证了一个案例相对比较少,全部执行时间只有10+s的模块,没有出现问题,准备按时上线

结果上线之后,跑了一个案例比较多,全部执行时间有4m多的模块,结果报:pymysql.err.InterfaceError: (0, '')

问题解决:

修改第5步中 执行更新 t_execution及t_result不关闭连接,最后在finally中关闭连接  -->未起作用

将修改之前的代码重新上传至服务器,验证没有问题  -->自己修改的代码有问题

突然意识到将所有查询数据准备sql的代码提前之后,再到将最后的结果更新 到t_execution及t_result之前,数据库的连接有很长一段时间的空闲时间,于是尝试在更新结果之前重新建立连接,修改完代码,并部署到服务器之后 -->验证没有问题

以上为我自己的解决方法,不知道说清楚没有,希望看到文章的你提出宝贵意见

附:别处看到的更专业也更有可能有用的解决方法跟思路

(21条消息) 【Python】数据库异常pymysql.err.InterfaceError: (0, '')解决方案_2021 真实-CSDN博客_pymysql.err.interfaceerror