我运行py.test用夹具在conftest文件。您可以在下面看到代码(一切正常):
example_test.py
import pytest
@pytest.fixture
def platform():
return "ios"
@pytest.mark.skipif("platform == 'ios'")
def test_ios(platform):
if platform != 'ios':
raise Exception('not ios')
def test_android_external(platform_external):
if platform_external != 'android':
raise Exception('not android')
conftest.py
import pytest
@pytest.fixture
def platform_external():
return "android"
现在,我希望能够跳过一些不适用于当前测试运行的测试。在我的示例中,我正在运行针对 iOS 或 Android的
测试(这仅出于演示目的,可以是任何其他表达式)。
不幸的是,我在声明中无法理解(我的 外部 定义的 夹具* )。当我运行以下代码时,会收到以下异常:。我不知道这是否是 py.test
错误,因为 本地 定义的夹具正在工作。platform_external``skipif``NameError: name 'platform_external' is not defined
* __
例如 example_test.py的* 附加组件 *
@pytest.mark.skipif("platform_external == 'android'")
def test_android(platform_external):
"""This test will fail as 'platform_external' is not available in the decorator.
It is only available for the function parameter."""
if platform_external != 'android':
raise Exception('not android')
所以我想我将只创建自己的 装饰器 ,以确保它不会接收灯具作为参数:
from functools import wraps
def platform_custom_decorator(func):
@wraps(func)
def func_wrapper(*args, **kwargs):
return func(*args, **kwargs)
return func_wrapper
@platform_custom_decorator
def test_android_2(platform_external):
"""This test will also fail as 'platform_external' will not be given to the
decorator."""
if platform_external != 'android':
raise Exception('not android')
如何在 conftest* 文件中定义 固定装置 并使用它(有条件地) 跳过测试 ? ***
似乎py.test在评估的表达式时不使用测试装置skipif
。以您的示例为例,test_ios
它实际上是成功的,因为它会将模块名称空间中找到的
函数
platform
与"ios"
字符串进行比较,该字符串求值False
后将执行测试并成功。如果pytest如您期望的那样插入夹具进行评估,则应该跳过该测试。
解决您的问题(但不是解决您的问题)的方法是实施一种夹具,以检查测试中的标记,并相应地跳过它们:
# conftest.py
import pytest
@pytest.fixture
def platform():
return "ios"
@pytest.fixture(autouse=True)
def skip_by_platform(request, platform):
if request.node.get_closest_marker('skip_platform'):
if request.node.get_closest_marker('skip_platform').args[0] == platform:
pytest.skip('skipped on this platform: {}'.format(platform))
关键是autouse
参数,它将使该夹具被所有测试自动包括在内。然后,您的测试可以像这样标记要跳过的平台:
@pytest.mark.skip_platform('ios')
def test_ios(platform, request):
assert 0, 'should be skipped'
希望有帮助!
问题内容: 是否可以像使用文本一样使用CSS为外部.svg设置样式?我想念什么?我的标记和CSS看起来像这样: 问题答案: 如果像引用标签一样通过引用外部文件来包含svg图像,则svg图像中的元素将不包含在主文档DOM树中。他们组成了自己的树。因此,外部图像中的元素无法通过主文档中的CSS选择器进行匹配。 您可以像大多数其他元素一样设置元素的样式,例如为其设置边框。但是您不能(至少这样)访问外部图
问题内容: 我有几个SVG图形,我想通过我的外部样式表修改颜色,而不是直接在每个SVG文件中修改。我不是将图形插入行中,而是将它们存储在我的图像文件夹中并指向它们。 我以这种方式实现了它们,以使工具提示能够正常工作,并且我还将每个工具提示都包装在标签中以允许链接。 这是SVG图形的代码: 我将以下内容放入我的外部CSS文件(main.css)中: 但是,它对图形没有影响。我还尝试了.socIcon
问题内容: 我有以下两个javascript函数: 1 2 我想将它们放在外部“ .js”文件中 1 2 调用这些函数的正确语法是什么? 问题答案: 像这样的代码 希望对您有帮助。…谢谢
我正在用AS3为Android制作一个Flash游戏。我想让用户知道,他通过让设备振动一秒钟来按下一个按钮。有人能给我解释一下我怎么能做到这一点吗?我需要导入特定的类吗?代码应该是什么样子? 提前感谢!
问题内容: 我已经在网络上寻找解决方案,但是还没有找到解决方案。我需要从iPhone访问我的Laravel 5应用程序,但是我正在开发中,所以我不想在网络服务器上发布我的应用程序。 如果您有链接可访问,那么您可以确保它起作用,这对我来说是完美的。 谢谢! 问题答案: 如果由于某些特殊原因不打算使用Apache或nginx且 仅出于开发目的 ,则可以使用PHP内置服务器和提供服务。到目前为止,这是最
问题内容: 我想从文件中推断出字段名称。文档说: “如果省略fieldnames参数,则csvfile第一行中的值将用作字段名。” ,但在我的情况下,第一行包含标题,第二行包含名称。 我无法按照Python 3.2的要求在csv.DictReader中跳过一行, 因为在初始化读取器时发生了字段名分配(否则我做错了)。 csvfile(从Excel 2010导出,原始源): 我的代码: 当前结果: