如何在Selenium Java中以串并行模式自动化依赖测试用例并实现指定逻辑
依赖测试用例执行逻辑实现方案
测试用例分组梳理
- A组:A1、A2、A3、A4、A5、A6、A7
- B组:B1、B2、B3、B4、B5、B6、B7
- C组:C
- D组:D
- E组:E
- F组:F
核心执行逻辑
A组触发规则
- 优先执行所有A组用例
- 若A组所有用例失败,直接标记整个测试套件失败,终止后续所有执行
- 若A组存在至少1个通过的用例,继续执行B组
B组执行规则
- 只要A组不全失败,就执行所有B组用例
C/D/E/F组执行规则
- 依次执行C组、D组用例
- 无论C、D组结果如何,强制执行E组
- 只有E组用例通过时,才执行F组
基于Pytest的代码实现
步骤1:给测试用例打分组标记
import pytest # A组用例示例 @pytest.mark.group_a def test_a1(): assert False # 模拟失败用例 @pytest.mark.group_a def test_a2(): assert True # 模拟通过用例 # 补充A3-A7用例,格式同上 # B组用例示例 @pytest.mark.group_b def test_b1(): assert True # 补充B2-B7用例,格式同上 # C/D/E/F组用例 @pytest.mark.group_c def test_c(): assert False @pytest.mark.group_d def test_d(): assert False @pytest.mark.group_e def test_e(): assert True @pytest.mark.group_f def test_f(): assert True
步骤2:用钩子函数控制执行流程
def pytest_sessionstart(session): # 初始化分组结果统计容器 session.test_results = { "group_a": {"passed": 0, "total": 0}, "group_c": {"passed": 0}, "group_d": {"passed": 0}, "group_e": {"passed": 0} } @pytest.hookimpl(tryfirst=True, hookwrapper=True) def pytest_runtest_makereport(item, call): outcome = yield report = outcome.get_result() # 实时统计各组用例通过数 if "group_a" in item.keywords: session = item.session session.test_results["group_a"]["total"] += 1 if report.passed: session.test_results["group_a"]["passed"] += 1 elif "group_c" in item.keywords and report.passed: item.session.test_results["group_c"]["passed"] += 1 elif "group_d" in item.keywords and report.passed: item.session.test_results["group_d"]["passed"] += 1 elif "group_e" in item.keywords and report.passed: item.session.test_results["group_e"]["passed"] += 1 def pytest_collection_modifyitems(session, config, items): # 按分组筛选用例 group_a = [item for item in items if "group_a" in item.keywords] group_b = [item for item in items if "group_b" in item.keywords] group_c = [item for item in items if "group_c" in item.keywords] group_d = [item for item in items if "group_d" in item.keywords] group_e = [item for item in items if "group_e" in item.keywords] group_f = [item for item in items if "group_f" in item.keywords] # 清空原用例列表,按自定义逻辑重构执行顺序 items.clear() items.extend(group_a) # 定义后续用例添加逻辑,在A组执行完成后触发 def add_subsequent_cases(): a_stats = session.test_results["group_a"] if a_stats["passed"] == 0: # A组全失败,标记套件失败,终止后续执行 session.exitstatus = pytest.ExitCode.TESTS_FAILED return # 添加B组用例 items.extend(group_b) # 添加C、D组用例 items.extend(group_c) items.extend(group_d) # 强制添加E组用例,不受C、D结果影响 items.extend(group_e) # 用会话级fixture触发后续用例添加 @pytest.fixture(scope="session", autouse=True) def trigger_after_a(): yield add_subsequent_cases() # 控制F组依赖E组:仅E组通过才执行F组 for f_item in group_f: f_item.add_marker(pytest.mark.dependency(depends=["test_e"]))
步骤3:环境依赖
需要安装pytest-dependency插件来实现F组对E组的依赖控制:
pip install pytest-dependency
关键逻辑说明
- A组全失败时,通过设置
session.exitstatus直接终止整个测试会话 - E组的强制执行通过直接将其加入用例列表实现,跳过任何前置判断
- F组的依赖控制借助
pytest-dependency插件,仅当依赖的test_e通过时才会执行
内容的提问来源于stack exchange,提问作者harshal s
相关产品推荐
相关产品推荐

