使用 AirTest 框架处理用例执行结果及失败问题
一、如何判断每条自动化用例的执行结果?
AirTest 框架通过以下机制判断单条用例的执行状态:
- 断言机制标记结果
python
from airtest.core.api import *
auto_setup(__file__)
# 打开应用
start_app("com.example.app")
# 断言目标元素存在
assert_exists(Template(r"tpl1620000000000.png"), "目标元素不存在,用例失败")
-
- 提供assert_exists、assert_not_exists、assert_equal等断言方法
-
- 断言成功:用例继续执行
-
- 断言失败:抛出AssertionError异常,标记用例失败
- 日志与报告记录
-
- 执行过程中生成详细操作日志
-
- 通过simple_report()或logtohtml()生成 HTML 报告
-
- 报告中逐条展示用例状态(成功 / 失败)及失败原因
二、单条用例失败对整体流程的影响
默认情况下,单条用例执行失败会导致整个自动化过程中断,原因是:
- Python 脚本遇到未捕获的异常会终止运行
- 断言失败会抛出AssertionError异常
- 元素未找到等操作错误也会抛出异常
三、解决单条用例失败导致整体中断的方案
通过异常捕获机制隔离单条用例的失败,保证后续用例继续执行:
python
from airtest.core.api import *
from airtest.report.report import simple_report
import traceback
# 定义用例函数
def test_case1():
start_app("com.example.app")
assert_exists(Template(r"tpl1.png"), "用例1:元素1不存在")
def test_case2():
start_app("com.example.app")
assert_exists(Template(r"tpl2.png"), "用例2:元素2不存在")
# 执行用例并处理异常
if __name__ == "__main__":
auto_setup(__file__, logdir=True)
cases = [test_case1, test_case2]
results = []
for case in cases:
case_name = case.__name__
try:
case() # 执行用例
results.append(f"{case_name}: 成功")
except Exception as e:
# 捕获异常并记录
error_info = traceback.format_exc()
results.append(f"{case_name}: 失败,原因:{error_info}")
continue # 继续执行下一条用例
# 生成报告
simple_report(__file__, logpath=True, output="report.html")
# 打印结果
for res in results:
print(res)
四、最佳实践总结
- 用例组织
-
- 将每条用例封装为独立函数
-
- 建立用例集合,便于批量执行
- 结果管理
-
- 结合 HTML 报告查看详细执行结果
-
- 记录失败用例的截图和堆栈信息
- 异常处理
-
- 统一使用try-except捕获异常
-
- 详细记录失败原因,便于问题定位
- 框架集成
-
- 可与 pytest 等测试框架结合使用
-
- 实现更强大的用例管理和报告功能