如何编排测试执行顺序?解决跨文件数据库依赖测试的执行问题
解决跨文件测试用例执行顺序问题的方案
你遇到的核心问题是测试框架默认按文件加载顺序/测试名字母顺序执行,导致跨文件的业务依赖测试无法按预期流程跑。以下是几种无需合并文件的解决办法:
方法一:用测试顺序标记插件
安装pytest-order(替代旧版pytest-ordering),给每个测试用例标记执行优先级:
- 在
test_super_admin.py的create_org上添加标记:import pytest @pytest.mark.order(1) def test_create_org(): # 你的创建组织测试逻辑 - 在
test_org_admin.py的update_org上添加标记:@pytest.mark.order(2) def test_update_org(): # 你的更新组织测试逻辑 - 在
test_super_admin.py的delete_org上添加标记:@pytest.mark.order(3) def test_delete_org(): # 你的删除组织测试逻辑
执行pytest时,框架会严格按标记的数字顺序执行所有测试,不受文件归属影响。
方法二:用依赖管理插件
借助pytest-dependency插件,通过依赖关系间接控制执行顺序:
- 给
create_org标记唯一标识:import pytest @pytest.mark.dependency(name="create_org_finished") def test_create_org(): # 创建组织测试逻辑 - 让
update_org依赖create_org_finished,同时给自己标记标识:@pytest.mark.dependency(depends=["create_org_finished"], name="update_org_finished") def test_update_org(): # 更新组织测试逻辑 - 让
delete_org依赖update_org_finished:@pytest.mark.dependency(depends=["update_org_finished"]) def test_delete_org(): # 删除组织测试逻辑
执行时框架会自动保证依赖顺序,若前置测试失败,后续测试会直接跳过,避免无效执行。
方法三:将前置/后置操作转为Fixture(推荐)
把创建、删除组织的逻辑从测试用例改成pytest的Fixture,用Fixture生命周期管理数据:
- 在项目根目录的
conftest.py中定义一个全局Fixture:import pytest @pytest.fixture(scope="session") def test_org(): # 执行创建组织的逻辑,返回组织实例 org = create_org() yield org # 将组织实例传递给测试用例 # 所有测试完成后执行删除清理 delete_org(org.id) - 改造原有测试用例:
- 删除
test_create_org和test_delete_org这两个测试(Fixture已处理创建与清理) - 在
test_update_org中注入Fixture:def test_update_org(test_org): # 使用test_org中的组织实例执行更新操作 update_org(test_org.id, new_address="新地址")
- 删除
这种方式无需手动指定顺序,框架会自动在依赖该Fixture的测试前执行创建,所有测试结束后执行删除,还能避免测试间的脏数据问题,更符合pytest最佳实践。
内容的提问来源于stack exchange,提问作者horse
相关产品推荐
相关产品推荐

