简介:在日常的自动化测试中,尤其shell脚本,在针对需要多个程序运行,shell脚本顺序执行过程可能会有中间环节会运行失败,抛出异常停止运行并报错,然而shell的其他下方语句仍然会继续往下执行,有时需要规避这类问题,使得出错后就退出后面的执行。

案例目录结构:

.├── [Feb7 00:47]do.py├── [Feb7 00:47]main.py└── [Feb7 00:49]run.sh

案例脚本1:do.py

# -*- coding: utf-8 -*-# time: 2023/2/7 0:46# file: do.py# 公众号: 伤心的辣条def do():print("Demo B start.")print("Demo B finish.")if __name__ == '__main__':do()

案例脚本2:main.py

# -*- coding: utf-8 -*-# time: 2023/02/07 11:26# file: main.py# 公众号: 伤心的辣条def show():print("Demo A start.")raise BaseException("some reason, just like timeout.")print("Demo A finish.")if __name__ == '__main__':show()

案例脚本3:run.sh

#!/bin/bashpython3 main.pypython3 do.py

常规情况下运行:bash run.sh

执行结果:可以看到执行main.py后,哪怕遇到报错,程序非正常退出,依然执行了do.py,这不符合我们的需求。

Demo A start.Traceback (most recent call last):File "main.py", line 14, in show()File "main.py", line 9, in showraise BaseException("some reason, just like timeout.")BaseException: some reason, just like timeout.Demo B start.Demo B finish.

方案1:增加set -e,推荐

#!/bin/bashset -epython3 main.pypython3 do.py

方案2:增加set -o errexit

#!/bin/bashset -o errexitpython3 main.pypython3 do.py

方案3:逻辑与。&&连接的命令会按照顺序从前向后执行

#!/bin/bashpython3 main.py &&python3 do.py

运行结果:改造后,只运行main.py,而不会进行往下运行do.py

Demo A start.Traceback (most recent call last):File "main.py", line 14, in show()File "main.py", line 9, in showraise BaseException("some reason, just like timeout.")BaseException: some reason, just like timeout.

最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!