You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

核心执行逻辑

  1. A组触发规则

    • 优先执行所有A组用例
    • 若A组所有用例失败,直接标记整个测试套件失败,终止后续所有执行
    • 若A组存在至少1个通过的用例,继续执行B组
  2. B组执行规则

    • 只要A组不全失败,就执行所有B组用例
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:15:44