小编FBi*_*idu的帖子

如何对参数列表中的每个项目运行 pytest 测试

假设我有一个 HTTP URL 列表,例如

endpoints = ["e_1", "e_2", ..., "e_n"]
Run Code Online (Sandbox Code Playgroud)

我想运行n测试,每个端点一个。我怎样才能做到这一点?

一次测试所有端点的简单方法是

def test_urls():
    for e in endpoints:
        r = get(e)
        assert r.status_code < 400
Run Code Online (Sandbox Code Playgroud)

或类似的东西。但正如您所看到的,这是针对所有n端点的一次测试,我希望比这更详细一些。

我尝试过使用类似的固定装置

@fixture
def endpoint():
    for e in endpoints:
        yield e
Run Code Online (Sandbox Code Playgroud)

但是,显然,Pytest 并不真正喜欢固定装置中的“多次产量”并返回yield_fixture function has more than one 'yield'错误

python testing pytest

6
推荐指数
1
解决办法
3530
查看次数

在切片中,为什么我不能反转列表,跳过单个括号中的最后一项?

在Python中,我可以end在切片中设置我想要的内容:

l = [0, 1, 2, 3, 4, 5]
l[:-1] = [0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

我也可以设置我想要的步骤:

l[::-1] = [5, 4, 3, 2, 1, 0]
Run Code Online (Sandbox Code Playgroud)

那么,为什么我不能反转在一次拍摄中跳过最后一项的列表呢?我的意思是为什么会这样:

l[:-1:-1] = []
Run Code Online (Sandbox Code Playgroud)

为了获得预期的结果,使用切片,我必须这样做:

l[:-1][::-1] = [4, 3, 2, 1, 0]
Run Code Online (Sandbox Code Playgroud)

这与字段的优先级有关吗?切片期间动作发生的顺序?

python

4
推荐指数
1
解决办法
81
查看次数

避免重复Django URL

我正在官方网站上制作Django教程,我目前正在为我们正在创建的示例轮询应用程序设置URL.

截至目前,我polls/urls.py看起来像这样:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
    url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'),
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.votes, name='vote')
]
Run Code Online (Sandbox Code Playgroud)

我不禁注意到重复,(?P<question_id>[0-9]+)所以我想知道是否有一种更简单的方法来避免这种情况,除了将其提取为常数之外QUESTION_PATTERN = (?P<question_id>[0-9]+)

python django

2
推荐指数
1
解决办法
85
查看次数

标签 统计

python ×3

django ×1

pytest ×1

testing ×1