python – 禁用某些测试的自动测试执行,除非明确请求这些测试
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 禁用某些测试的自动测试执行,除非明确请求这些测试,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3131字,纯文字阅读大概需要5分钟。
内容图文
我有一些非常慢的测试和许多短的单元测试.我希望能够只使用简单的nosetests命令运行短单元测试,如果我决定是时候运行慢速测试,那么就能够明确地调用它们.
我希望能做什么:
>运行unittests但不是慢速测试
$nosetests
没有使用特殊命令 – 任何只是出于好奇而进入测试的人都会在几秒钟内得到满足.
>明确请求慢速测试:
$nosetests --somehow-magicaly-invoke-slow-tests
没有歧义 – 我想要慢速测试(或者单元测试和慢速测试 – 这没关系)
我试过了什么:
我尝试使用nose.plugins.attrib:
from nose.plugins.attrib import attr
import time
@attr('slow')
def test_slow_one():
time.sleep(5)
def test_unittest():
assert True
但它实际上几乎与我想要完成的相反 – 我必须指定额外的命令行参数以不运行慢速测试.命令是:
运行unittests但不是慢速测试
$nosetests -v -a '!slow'
test_a.test_unittest ... ok
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
明确请求慢速测试:
$nosetests -v -a 'slow'
test_a.test_slow_one ... ok
----------------------------------------------------------------------
Ran 1 test in 5.005s
OK
更糟糕的是,当有人跑步时
$nosetests -v
test_a.test_slow_one ... ok
test_a.test_unittest ... ok
----------------------------------------------------------------------
Ran 2 tests in 5.007s
OK
将运行所有测试,包括慢速测试.
问题:
有没有办法禁用某些测试,因此不会使用普通的nosetests命令调用它们,但是可以使用一些额外的命令行参数运行它们?
目前的“解决方案”:
我只是将所有慢速测试移动到单独的文件中并命名文件check _ * .py而不是test _ * .py so nosetests将不会接收它们.当我想运行慢速测试时,我只需指定check _ *.py文件的完整路径,例如:
$nosetests test/check_foo.py test/check_bar.py [...]
这不是很优雅.
解决方法:
您可以轻松使用unittest.skipUnless()来实现这一效果.
跳过单个测试
只需decorate您想要有条件地跳过的测试用例的方法
@unittest.skipUnless(condition, reason)
例如,您可以检查您在自动CI环境中未设置的环境变量SLOW_TESTS,但是设置是否以及何时在本地运行慢速测试:
import os
import time
import unittest
SLOW_TESTS = os.environ.get('SLOW_TESTS', False)
class TestFoo(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
@unittest.skipUnless(SLOW_TESTS, "slow test")
def test_something_slow(self):
time.sleep(5)
self.assertTrue(True)
常规运行的输出:
$nosetests -v
test_something_slow (test_foo.TestFoo) ... SKIP: slow test
test_upper (test_foo.TestFoo) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.002s
OK (SKIP=1)
设置环境变量时的输出:
$SLOW_TESTS=1 nosetests -v
test_something_slow (test_foo.TestFoo) ... ok
test_upper (test_foo.TestFoo) ... ok
----------------------------------------------------------------------
Ran 2 tests in 5.003s
OK
(注意,Nose testrunner仍然说Ran 2测试,即使它跳过了一个.跳过的测试在最后用(SKIP = n)和测试结果用SKIP或S表示非详细模式).
当然,您可以使用您在CI设置中设置的环境变量(如FAST_TESTS)使用skipIf()来反转行为.
跳过整个TestCase
如果你想跳过TestCase中你知道速度慢或设置繁重的所有测试,那么明确调用TestCase.skipTest()会更方便(如果需要更细粒度的控制,你也可以从单个测试中做到这一点):
class TestFoo(unittest.TestCase):
def setUp(self):
if not SLOW_TESTS:
self.skipTest("slow test")
# some expensive setup
有关跳过测试的更多详细信息,请参见Skipping tests and expected failures.
内容总结
以上是互联网集市为您收集整理的python – 禁用某些测试的自动测试执行,除非明确请求这些测试全部内容,希望文章能够帮你解决python – 禁用某些测试的自动测试执行,除非明确请求这些测试所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。