问题背景:
接口自动化测试平台,在执行测试案例之外,还需要做以下五件事情(或步骤):
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之前,数据库的连接有很长一段时间的空闲时间,于是尝试在更新结果之前重新建立连接,修改完代码,并部署到服务器之后 -->验证没有问题
以上为我自己的解决方法,不知道说清楚没有,希望看到文章的你提出宝贵意见
附:别处看到的更专业也更有可能有用的解决方法跟思路