简介: 在日常的自动化测试中,尤其shell脚本,在针对需要多个程序运行,shell脚本顺序执行过程可能会有中间环节会运行失败,抛出异常停止运行并报错,然而shell的其他下方语句仍然会继续往下执行,有时需要规避这类问题,使得出错后就退出后面的执行。
案例目录结构:
-
.
-
├── [Feb 7 00:47] do.py
-
├── [Feb 7 00:47] main.py
-
└── [Feb 7 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/bash
-
python3 main.py
-
python3 do.py
常规情况下运行: bash run.sh
执行结果: 可以看到执行main.py后,哪怕遇到报错,程序非正常退出,依然执行了do.py,这不符合我们的需求。
-
Demo A start.
-
Traceback (most recent call last):
-
File "main.py", line 14, in <module>
-
show()
-
File "main.py", line 9, in show
-
raise BaseException("some reason, just like timeout.")
-
BaseException: some reason, just like timeout.
-
Demo B start.
-
Demo B finish.
方案1: 增加set -e,推荐
-
#!/bin/bash
-
set -e
-
python3 main.py
-
python3 do.py
方案2: 增加set -o errexit
-
#!/bin/bash
-
set -o errexit
-
python3 main.py
-
python3 do.py
方案3: 逻辑与。&&连接的命令会按照顺序从前向后执行
-
#!/bin/bash
-
python3 main.py &&
-
python3 do.py
运行结果:改造后,只运行main.py,而不会进行往下运行do.py
-
Demo A start.
-
Traceback (most recent call last):
-
File "main.py", line 14, in <module>
-
show()
-
File "main.py", line 9, in show
-
raise BaseException("some reason, just like timeout.")
-
BaseException: some reason, just like timeout.
行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!