栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python-除非指定,否则使用pytest跳过测试

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-除非指定,否则使用pytest跳过测试

有两种方法可以解决此问题,但我将介绍在Python基准中见过的两种常见方法。

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

不确定项目的布局是什么样,但是您可以执行以下操作(仅测试目录很重要,其余只是一个玩具示例布局):

README.mdsetup.pyrequirements.txttest/    unit/        test_something.py        test_something_else.py    integration/        test_optional.pyapplication/    __init__.py    some_module.py

然后,当你调用pytest,你调用它这样做

pytest test/unit
,如果你想运行 只是
单元测试(即只
test_something*.py
文件),或者
pytest test/integration
如果你想运行 只是
集成测试(即只
test_optional.py
),或者
pytest test
如果你想运行 的所有
的测试。因此,默认情况下,您可以运行
pytest test/unit

我建议将这些调用包装在某种脚本中。我更喜欢,

make
因为它对于这种类型的包装功能强大。然后,您可以说
maketest
它只运行您的默认(快速)测试套件或
make test_all
,它将运行所有测试(可能很慢,也可能不会很慢)。

您可以使用以下示例Makefile进行包装:

.PHONY: all clean install test test_int test_all uninstallall: installclean:    rm -rf build    rm -rf dist    rm -rf *.egg-infoinstall:    python setup.py installtest: install    pytest -v -s test/unittest_int: install    pytest -v -s test/integrationtest_all: install    pytest -v -s testuninstall:    pip uninstall app_name

2)使用

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

我不太喜欢这种解决方案,这让我感到有些无所适从(很难确定在任何一次给定

pytest
运行中正在运行哪组测试)。但是,您可以做的是定义一个环境变量,然后将该环境变量连接到模块中以检测是否要运行所有测试。环境变量取决于shell,但是我假装您有一个bash环境,因为它是流行的shell。

您可以

export TEST_LEVEL="unit"
只进行快速的单元测试(因此这是默认设置),也可以
exportTEST_LEVEL="all"
进行所有测试。然后,在测试文件中,您可以执行以下操作:

import os...@pytest.mark.skipif(os.environ["TEST_LEVEL"] == "unit")def test_scrape_website():  ...

注意: 将测试级别命名为“单位”和“集成”无关。您可以随意命名。您也可以具有许多级别(例如每晚测试或性能测试)。

另外,我认为选项1是最好的选择,因为它不仅清楚地允许测试的分离,而且还可以为测试的含义和表示增加语义和清晰度。但是软件中没有“一刀切”的解决方案,您必须根据自己的具体情况来决定采用哪种方法。

HTH!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/662334.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号