python pytest使用_Python使用pytest跳过测试,除非指定

有两种方法可以处理这个问题,但我将回顾一下在Python基线中看到的两种常见方法。在

1)通过将“可选”测试放在另一个目录中来分离测试。

不确定您的项目布局是什么样子的,但您可以这样做(只有测试目录很重要,其余只是一个玩具示例布局):README.md

setup.py

requirements.txt

test/

unit/

test_something.py

test_something_else.py

integration/

test_optional.py

application/

__init__.py

some_module.py

然后,当您调用pytest时,如果您想运行单元测试(即,只运行pytest test/unit文件),您可以通过执行pytest test/unit来调用它;如果您想运行集成测试(即只运行test_optional.py),则执行pytest test,如果您想运行所有测试,则执行pytest test。所以,默认情况下,您可以运行pytest test/unit。在

我建议用某种脚本包装这些调用。我更喜欢make,因为它对于这种类型的包装非常强大。然后你可以说make test,它只运行默认的(快速)测试套件,或者make test_all,它将运行所有测试(可能慢也可能不慢)。在

可以包装的示例Makefile:

^{pr2}$

2)使用@pytest.mark.skipif修饰符明智地标记测试,但使用环境变量作为触发器

我不太喜欢这个解决方案,我觉得有点随意(很难判断在任何给定的运行中运行的是哪一组测试)。但是,您可以定义一个环境变量,然后将该环境变量绑定到模块中,以检测是否要运行所有测试。环境变量依赖于shell,但是我假设您有一个bash环境,因为这是一个流行的shell。在

您可以对快速单元测试执行export TEST_LEVEL="unit"(因此这是您的默认设置),或者对所有测试执行export TEST_LEVEL="all"。然后,在测试文件中,您可以按如下方式执行最初尝试的操作:import os

...

@pytest.mark.skipif(os.environ["TEST_LEVEL"] == "unit")

def test_scrape_website():

...

注意:将测试级别命名为“unit”和“integration”无关紧要。你想叫什么名字都行。您还可以有许多级别(比如夜间测试或性能测试)。在

另外,我认为选项1是最好的方法,因为它不仅清楚地允许分离测试,而且还可以为测试的含义和表示的内容增加语义和清晰度。但是软件中并没有“一刀切”的地方,你必须根据自己的具体情况来决定你喜欢什么样的方法。在

啊!在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值