简介:在日常的自动化测试中,尤其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%免费】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!