如何防止snakemake在测试套件失败后停止? [重复]

问题描述 投票:0回答:2

我正在尝试使用snakemake自动化集成测试(我需要一些文件的输出,所以这似乎是一个很好的工具)。但是,当我需要在 pytest 中运行两个测试套件时,如果任一套件中的单个测试失败,工作流程就会停止。例如我有:

rule run_tests:
    run:
        commands = [
            "pytest test_that_should_fail",
            "pytest test_that_should_succeed"
        ]
        for c in commands:
            shell(c)

我需要后一个测试应该失败的测试输出。有没有办法防止snakemake在运行“pytest test_that_should_fail”后停止?另外,snakemake 停止时没有任何类型的错误消息,只是一个通用的:“规则 run_tests 中的错误:jobid:0”

python pytest snakemake
2个回答
2
投票

你可以这样写:

commands = [
   "pytest test_that_should_fail || true",
   "pytest test_that_should_succeed || true",
]

然后 shell 命令将有退出代码 0,这意味着成功,从而继续执行其他命令。


1
投票

我建议您让 Snakemake 为每个规则实例仅运行一个测试来处理不同的测试。

这可以按如下方式完成(未经测试):

TESTS = ["test_that_should_fail", "test_that_should_succeed"]

rule all:
    input:
        logs = expand("{test}.log", test=TESTS),
        errs = expand("{test}.err", test=TESTS),

rule run_test:
    output:
        log = "{test}.log",
        err = "{test}.err",
    shell:
        """
        pytest {wildcards.test} 1> {output.log} 2> {output.err}
        """

然后,您可以使用snakemake的选项

-k
来确保所有测试都将运行。 但如果需要非零返回代码,那么使用
|| true
可能会更干净(如 另一个答案 中所建议的)。

© www.soinside.com 2019 - 2024. All rights reserved.