测试助手

Falcon应用程序和Falcon本身的功能测试框架。

Falcon的测试模块包含各种测试类和实用功能,以支持基于Falcon的应用程序和Falcon框架本身的功能测试。

测试框架支持UnitTest和Pytest::

# -----------------------------------------------------------------
# unittest
# -----------------------------------------------------------------

from falcon import testing
import myapp


class MyTestCase(testing.TestCase):
    def setUp(self):
        super(MyTestCase, self).setUp()

        # Assume the hypothetical `myapp` package has a
        # function called `create()` to initialize and
        # return a `falcon.API` instance.
        self.app = myapp.create()


class TestMyApp(MyTestCase):
    def test_get_message(self):
        doc = {u'message': u'Hello world!'}

        result = self.simulate_get('/messages/42')
        self.assertEqual(result.json, doc)


# -----------------------------------------------------------------
# pytest
# -----------------------------------------------------------------

from falcon import testing
import pytest

import myapp


# Depending on your testing strategy and how your application
# manages state, you may be able to broaden the fixture scope
# beyond the default 'function' scope used in this example.

@pytest.fixture()
def client():
    # Assume the hypothetical `myapp` package has a function called
    # `create()` to initialize and return a `falcon.API` instance.
    return testing.TestClient(myapp.create())


def test_get_message(client):
    doc = {u'message': u'Hello world!'}

    result = client.simulate_get('/messages/42')
    assert result.json == doc

模拟请求

主界面

class falcon.testing.TestClient(app, headers=None)[源代码]

模拟对wsgi应用程序的请求。

此类为Falcon的 simulate_* 测试功能。它允许您替换此:

simulate_get(app, '/messages')
simulate_head(app, '/messages')

用这个:

client = TestClient(app)
client.simulate_get('/messages')
client.simulate_head('/messages')

注解

所有方法都调用 self.simulate_request() 以便通过子类覆盖请求准备。

参数

app (callable) -- 模拟请求时指向的wsgi应用程序

关键字参数

headers (dict) -- 在每个请求上设置的默认头(默认 None )。可以通过将相同头的值传递给 simulate_*() 方法。

simulate_delete(path='/', **kwargs)[源代码]

模拟对wsgi应用程序的删除请求。

(另见: falcon.testing.simulate_delete()

simulate_get(path='/', **kwargs)[源代码]

模拟对wsgi应用程序的get请求。

(另见: falcon.testing.simulate_get()

simulate_head(path='/', **kwargs)[源代码]

模拟对wsgi应用程序的头请求。

(另见: falcon.testing.simulate_head()

simulate_options(path='/', **kwargs)[源代码]

模拟对wsgi应用程序的选项请求。

(另见: falcon.testing.simulate_options()

simulate_patch(path='/', **kwargs)[源代码]

模拟对wsgi应用程序的修补程序请求。

(另见: falcon.testing.simulate_patch()

simulate_post(path='/', **kwargs)[源代码]

模拟对wsgi应用程序的POST请求。

(另见: falcon.testing.simulate_post()

simulate_put(path='/', **kwargs)[源代码]

模拟对wsgi应用程序的Put请求。

(另见: falcon.testing.simulate_put()

simulate_request(*args, **kwargs)[源代码]

模拟对wsgi应用程序的请求。

包裹 falcon.testing.simulate_request() 直接针对 self.app .相当于:

falcon.testing.simulate_request(self.app, *args, **kwargs)
class falcon.testing.Result(iterable, status, headers)[源代码]

封装模拟wsgi请求的结果。

参数
  • iterable (iterable) -- 根据PEP-3333,生成零个或多个字节的iterable。

  • status (str) -- HTTP状态字符串,包括状态代码和原因字符串

  • headers (list) -- 根据PEP-3333列出(header_name,header_value)元组

status

响应中给定的HTTP状态字符串

类型

STR

status_code

HTTP状态字符串的代码部分

类型

利息

headers

一个不区分大小写的字典,包含响应中的所有头,cookie除外,可以通过 cookies 属性。

注解

当前不支持响应中一个头的多个实例;未指定哪个值将“获胜”并表示为 headers .

类型

CaseInsensitiveDict

cookies

一本字典 falcon.testing.Cookie 按名称从响应中分析的值。

类型

双关语

encoding

响应正文的文本编码,或 None 如果无法确定编码。

类型

STR

content

原始响应主体,或 bytes 如果响应主体为空。

类型

字节

text

类型的解码响应正文 unicode 在python 2.7下,类型为 str 否则。如果内容类型未指定编码,则假定为UTF-8。

类型

STR

json

反序列化JSON主体。将 None 如果主体没有要反序列化的内容。否则,如果响应不是有效的JSON,则会引发错误。

类型

JSON可序列化

class falcon.testing.Cookie(morsel)[源代码]

表示模拟请求返回的cookie。

参数

morsel -- A Morsel 从中派生cookie数据的对象。

name

饼干的名字。

类型

STR

value

cookie的值。

类型

STR

expires

cookie的过期时间戳,或 None 如果未指定。

类型

datetime.datetime

path

限制此cookie的路径前缀,或 None 如果未指定。

类型

STR

domain

限制此cookie的域,或 None 如果未指定。

类型

STR

max_age

cookie的生存时间(秒),或 None 如果未指定。

类型

利息

secure

cookie是否只能通过https从客户端传输。

类型

布尔

http_only

cookie是否只能包含在客户机的未脚本请求中。

类型

布尔

独立方法

falcon.testing.simulate_get(app, path, **kwargs)[源代码]

模拟对wsgi应用程序的get请求。

等同于:

simulate_request(app, 'GET', path, **kwargs)
参数
  • app (callable) -- 要调用的wsgi应用程序

  • path (str) -- 请求的URL路径。我是说…注意:路径可能包含查询字符串。然而,两者都不是 query_string 也不 params 在这种情况下可以指定。

关键字参数
  • params (dict) -- 查询字符串参数的字典,其中每个键都是参数名,并且每个值都是 str 或者可以转换成 str 或此类值的列表。如果A list ,该值将转换为逗号分隔的值字符串(例如,“thing=1,2,3”)。

  • params_csv (bool) -- 设置为 False 通过指定参数的多个实例(例如“thing=1&thing=2&thing=3”),对查询字符串参数中的列表值进行编码。否则,参数将被编码为逗号分隔值(例如,“thing=1,2,3”)。默认为 True .

  • query_string (str) -- 要包含在请求中的原始查询字符串(默认: None )。如果指定,则重写 params .

  • headers (dict) -- 要包含在请求中的附加头(默认: None

  • file_wrapper (callable) -- 可调用,返回一个ITerable,用作 wsgi.file_wrapper 在环境中(默认: None )。这可用于测试高性能文件传输,当 resp.stream 设置为类似文件的对象。

  • protocol -- 用于URL方案的协议(默认:“http”)。

  • host (str) -- 用于完全限定请求URL的主机名部分的字符串(默认为:“falconframework.org”)。

  • remote_addr (str) -- 用作请求的远程IP地址的字符串(默认值:“127.0.0.1”)。

  • extras (dict) -- 要添加到wsgi的其他cgi变量 environ 请求的字典(默认: None

falcon.testing.simulate_head(app, path, **kwargs)[源代码]

模拟对wsgi应用程序的头请求。

等同于:

simulate_request(app, 'HEAD', path, **kwargs)
参数
  • app (callable) -- 要调用的wsgi应用程序

  • path (str) -- 请求的URL路径。我是说…注意:路径可能包含查询字符串。然而,两者都不是 query_string 也不 params 在这种情况下可以指定。

关键字参数
  • params (dict) -- 查询字符串参数的字典,其中每个键都是参数名,并且每个值都是 str 或者可以转换成 str 或此类值的列表。如果A list ,该值将转换为逗号分隔的值字符串(例如,“thing=1,2,3”)。

  • params_csv (bool) -- 设置为 False 通过指定参数的多个实例(例如“thing=1&thing=2&thing=3”),对查询字符串参数中的列表值进行编码。否则,参数将被编码为逗号分隔值(例如,“thing=1,2,3”)。默认为 True .

  • query_string (str) -- 要包含在请求中的原始查询字符串(默认: None )。如果指定,则重写 params .

  • headers (dict) -- 要包含在请求中的附加头(默认: None

  • protocol -- 用于URL方案的协议(默认:“http”)。

  • host (str) -- 用于完全限定请求URL的主机名部分的字符串(默认为:“falconframework.org”)。

  • remote_addr (str) -- 用作请求的远程IP地址的字符串(默认值:“127.0.0.1”)。

  • extras (dict) -- 要添加到wsgi的其他cgi变量 environ 请求的字典(默认: None

falcon.testing.simulate_post(app, path, **kwargs)[源代码]

模拟对wsgi应用程序的POST请求。

等同于:

simulate_request(app, 'POST', path, **kwargs)
参数
  • app (callable) -- 要调用的wsgi应用程序

  • path (str) -- 请求的URL路径

关键字参数
  • params (dict) -- 查询字符串参数的字典,其中每个键都是参数名,并且每个值都是 str 或者可以转换成 str 或此类值的列表。如果A list ,该值将转换为逗号分隔的值字符串(例如,“thing=1,2,3”)。

  • params_csv (bool) -- 设置为 False 通过指定参数的多个实例(例如“thing=1&thing=2&thing=3”),对查询字符串参数中的列表值进行编码。否则,参数将被编码为逗号分隔值(例如,“thing=1,2,3”)。默认为 True .

  • headers (dict) -- 要包含在请求中的附加头(默认: None

  • body (str) -- 作为请求正文发送的字符串。接受字节字符串和Unicode字符串(默认: None )。如果提供了Unicode字符串,则在请求中将其编码为UTF-8。

  • json (JSON serializable) -- 作为请求主体序列化的JSON文档(默认: None )。如果指定,则重写 body 以及 headers .

  • protocol -- 用于URL方案的协议(默认:“http”)。

  • host (str) -- 用于完全限定请求URL的主机名部分的字符串(默认为:“falconframework.org”)。

  • remote_addr (str) -- 用作请求的远程IP地址的字符串(默认值:“127.0.0.1”)。

  • extras (dict) -- 要添加到wsgi的其他cgi变量 environ 请求的字典(默认: None

falcon.testing.simulate_put(app, path, **kwargs)[源代码]

模拟对wsgi应用程序的Put请求。

等同于:

simulate_request(app, 'PUT', path, **kwargs)
参数
  • app (callable) -- 要调用的wsgi应用程序

  • path (str) -- 请求的URL路径

关键字参数
  • params (dict) -- 查询字符串参数的字典,其中每个键都是参数名,并且每个值都是 str 或者可以转换成 str 或此类值的列表。如果A list ,该值将转换为逗号分隔的值字符串(例如,“thing=1,2,3”)。

  • params_csv (bool) -- 设置为 False 通过指定参数的多个实例(例如“thing=1&thing=2&thing=3”),对查询字符串参数中的列表值进行编码。否则,参数将被编码为逗号分隔值(例如,“thing=1,2,3”)。默认为 True .

  • headers (dict) -- 要包含在请求中的附加头(默认: None

  • body (str) -- 作为请求正文发送的字符串。接受字节字符串和Unicode字符串(默认: None )。如果提供了Unicode字符串,则在请求中将其编码为UTF-8。

  • json (JSON serializable) -- 作为请求主体序列化的JSON文档(默认: None )。如果指定,则重写 body 以及 headers .

  • protocol -- 用于URL方案的协议(默认:“http”)。

  • host (str) -- 用于完全限定请求URL的主机名部分的字符串(默认为:“falconframework.org”)。

  • remote_addr (str) -- 用作请求的远程IP地址的字符串(默认值:“127.0.0.1”)。

  • extras (dict) -- 要添加到wsgi的其他cgi变量 environ 请求的字典(默认: None

falcon.testing.simulate_options(app, path, **kwargs)[源代码]

模拟对wsgi应用程序的选项请求。

等同于:

simulate_request(app, 'OPTIONS', path, **kwargs)
参数
  • app (callable) -- 要调用的wsgi应用程序

  • path (str) -- 请求的URL路径

关键字参数
  • params (dict) -- 查询字符串参数的字典,其中每个键都是参数名,并且每个值都是 str 或者可以转换成 str 或此类值的列表。如果A list ,该值将转换为逗号分隔的值字符串(例如,“thing=1,2,3”)。

  • params_csv (bool) -- 设置为 False 通过指定参数的多个实例(例如“thing=1&thing=2&thing=3”),对查询字符串参数中的列表值进行编码。否则,参数将被编码为逗号分隔值(例如,“thing=1,2,3”)。默认为 True .

  • headers (dict) -- 要包含在请求中的附加头(默认: None

  • protocol -- 用于URL方案的协议(默认:“http”)。

  • host (str) -- 用于完全限定请求URL的主机名部分的字符串(默认为:“falconframework.org”)。

  • remote_addr (str) -- 用作请求的远程IP地址的字符串(默认值:“127.0.0.1”)。

  • extras (dict) -- 要添加到wsgi的其他cgi变量 environ 请求的字典(默认: None

falcon.testing.simulate_patch(app, path, **kwargs)[源代码]

模拟对wsgi应用程序的修补程序请求。

等同于:

simulate_request(app, 'PATCH', path, **kwargs)
参数
  • app (callable) -- 要调用的wsgi应用程序

  • path (str) -- 请求的URL路径

关键字参数
  • params (dict) -- 查询字符串参数的字典,其中每个键都是参数名,并且每个值都是 str 或者可以转换成 str 或此类值的列表。如果A list ,该值将转换为逗号分隔的值字符串(例如,“thing=1,2,3”)。

  • params_csv (bool) -- 设置为 False 通过指定参数的多个实例(例如“thing=1&thing=2&thing=3”),对查询字符串参数中的列表值进行编码。否则,参数将被编码为逗号分隔值(例如,“thing=1,2,3”)。默认为 True .

  • headers (dict) -- 要包含在请求中的附加头(默认: None

  • body (str) -- 作为请求正文发送的字符串。接受字节字符串和Unicode字符串(默认: None )。如果提供了Unicode字符串,则在请求中将其编码为UTF-8。

  • json (JSON serializable) -- 作为请求主体序列化的JSON文档(默认: None )。如果指定,则重写 body 以及 headers .

  • protocol -- 用于URL方案的协议(默认:“http”)。

  • host (str) -- 用于完全限定请求URL的主机名部分的字符串(默认为:“falconframework.org”)。

  • remote_addr (str) -- 用作请求的远程IP地址的字符串(默认值:“127.0.0.1”)。

  • extras (dict) -- 要添加到wsgi的其他cgi变量 environ 请求的字典(默认: None

falcon.testing.simulate_delete(app, path, **kwargs)[源代码]

模拟对wsgi应用程序的删除请求。

等同于:

simulate_request(app, 'DELETE', path, **kwargs)
参数
  • app (callable) -- 要调用的wsgi应用程序

  • path (str) -- 请求的URL路径

关键字参数
  • params (dict) -- 查询字符串参数的字典,其中每个键都是参数名,并且每个值都是 str 或者可以转换成 str 或此类值的列表。如果A list ,该值将转换为逗号分隔的值字符串(例如,“thing=1,2,3”)。

  • params_csv (bool) -- 设置为 False 通过指定参数的多个实例(例如“thing=1&thing=2&thing=3”),对查询字符串参数中的列表值进行编码。否则,参数将被编码为逗号分隔值(例如,“thing=1,2,3”)。默认为 True .

  • headers (dict) -- 要包含在请求中的附加头(默认: None

  • protocol -- 用于URL方案的协议(默认:“http”)。

  • host (str) -- 用于完全限定请求URL的主机名部分的字符串(默认为:“falconframework.org”)。

  • remote_addr (str) -- 用作请求的远程IP地址的字符串(默认值:“127.0.0.1”)。

  • extras (dict) -- 要添加到wsgi的其他cgi变量 environ 请求的字典(默认: None

falcon.testing.simulate_request(app, method='GET', path='/', query_string=None, headers=None, body=None, json=None, file_wrapper=None, wsgierrors=None, params=None, params_csv=True, protocol='http', host='falconframework.org', remote_addr=None, extras=None)[源代码]

模拟对wsgi应用程序的请求。

对wsgi应用程序执行请求。使用 wsgiref.validate 以确保响应是有效的wsgi。

关键字参数
  • app (callable) -- 要调用的wsgi应用程序

  • method (str) -- 要在请求中使用的HTTP方法(默认值:“get”)

  • path (str) -- 请求的URL路径(默认:“/”。我是说…注意:路径可能包含查询字符串。然而,两者都不是 query_string 也不 params 在这种情况下可以指定。

  • protocol -- 用于URL方案的协议(默认:“http”)。

  • params (dict) -- 查询字符串参数的字典,其中每个键都是参数名,并且每个值都是 str 或者可以转换成 str 或此类值的列表。如果A list ,该值将转换为逗号分隔的值字符串(例如,“thing=1,2,3”)。

  • params_csv (bool) -- 设置为 False 通过指定参数的多个实例(例如“thing=1&thing=2&thing=3”),对查询字符串参数中的列表值进行编码。否则,参数将被编码为逗号分隔值(例如,“thing=1,2,3”)。默认为 True .

  • query_string (str) -- 要包含在请求中的原始查询字符串(默认: None )。如果指定,则重写 params .

  • headers (dict) -- 要包含在请求中的附加头(默认: None

  • body (str) -- 作为请求正文发送的字符串。接受字节字符串和Unicode字符串(默认: None )。如果提供了Unicode字符串,则在请求中将其编码为UTF-8。

  • json (JSON serializable) -- 作为请求主体序列化的JSON文档(默认: None )。如果指定,则重写 body 以及 headers .

  • file_wrapper (callable) -- 可调用,返回一个ITerable,用作 wsgi.file_wrapper 在环境中(默认: None )。这可用于测试高性能文件传输,当 resp.stream 设置为类似文件的对象。

  • host (str) -- 用于完全限定请求URL的主机名部分的字符串(默认为:“falconframework.org”)。

  • remote_addr (str) -- 用作请求的远程IP地址的字符串(默认值:“127.0.0.1”)。

  • wsgierrors (io) -- 要用作的流 wsgi错误 (默认) sys.stderr

  • extras (dict) -- 要添加到wsgi的其他cgi变量 environ 请求的字典(默认: None

返回

请求的结果

返回类型

Result

falcon.testing.capture_responder_args(req, resp, resource, params)[源代码]

用于捕获响应程序参数的钩子之前。

将以下属性添加到挂接响应程序的资源类:

  • captured_req

  • captured_resp

  • captured_kwargs

falcon.testing.set_resp_defaults(req, resp, resource, params)[源代码]

用于设置默认响应属性的前钩子。

低水平Utils

class falcon.testing.StartResponseMock[源代码]

表示wsgi的模拟对象 start_response 可赎回的。

call_count

次数 start_response 被叫来。

类型

利息

status

HTTP状态行,例如“785 TPS封面未附”。

类型

STR

headers

传递给的原始头列表 start_response ,根据PEP-333。

类型

列表

headers_dict

头不区分大小写 dict -像对象,而不是 list .

类型

双关语

falcon.testing.create_environ(path='/', query_string='', protocol='HTTP/1.1', scheme='http', host='falconframework.org', port=None, headers=None, app='', body='', method='GET', wsgierrors=None, file_wrapper=None, remote_addr=None)[源代码]

创建模拟PEP-3333环境 dict 用于模拟wsgi请求。

关键字参数
  • path (str) -- 请求的路径(默认“/”)。

  • query_string (str) -- 要模拟的查询字符串,不带前导“?”(默认为“”)

  • protocol (str) -- 要模拟的HTTP协议(默认为“http/1.1”)。如果设置为“http/1.0”,主机头将不会添加到环境中。

  • scheme (str) -- URL方案,可以是“http”或“https”(默认为“http”)。

  • host (str) -- 请求的主机名(默认为'falconframework.org')

  • port (str) -- 要模拟的TCP端口。默认为给定方案使用的标准端口(即80代表“http”,443代表“https”)。

  • headers (dict) -- 标题作为 dict 或是一个无止境的屈服( key价值tuple

  • app (str) -- 价值 SCRIPT_NAME 环境变量,在PEP-333中描述:“请求URL的“路径”的初始部分,对应于应用程序对象,以便应用程序知道其虚拟“位置”。如果应用程序对应于服务器的“根”,则这可能是空字符串。(默认为“”)

  • body (str) -- 请求的主体(默认为“”)。同时接受字节字符串和Unicode字符串。Unicode字符串在请求中编码为UTF-8。

  • method (str) -- 要使用的HTTP方法(默认为“get”)

  • wsgierrors (io) -- 要用作的流 wsgi错误 (默认) sys.stderr

  • file_wrapper -- 可调用,返回一个ITerable,用作 wsgi.file_wrapper 在环境中。

  • remote_addr (str) -- 请求的远程地址(默认为“127.0.0.1”)。

falcon.testing.closed_wsgi_iterable(iterable)[源代码]

包装ITerable以确保 close() 方法被调用。

将给定的 iterable in an iterator utilizing a for loop as illustrated in the PEP-3333 server/gateway side example .最后,如果Iterable有 close() 方法,它是在异常或Exausting迭代时调用的。

此外,从迭代中产生的第一个字节串(如果有的话)在返回包装的迭代器之前是预取的,以确保wsgi start_response 即使wsgi应用程序是生成器,也会调用函数。

参数

iterable (iterable) -- 根据PEP-3333,生成零个或多个字节的iterable。

返回

一种迭代器,产生与 iterable

返回类型

iterator

其他帮手

测试用例

class falcon.testing.TestCase(methodName='runTest')[源代码]

延伸 unittest 支持WSGi功能测试。

注解

如果可用,使用 testtools 代替 unittest .

这个基类为UnitTest样式的测试用例提供了一些额外的管道,以帮助模拟WSGi调用,而不必启动实际的Web服务器。各种模拟方法的来源 falcon.testing.TestClient .

只需从测试用例类中的此类继承,而不是 unittest.TestCasetesttools.TestCase .

app

模拟请求时目标的wsgi应用程序(默认: falcon.API() )。测试应用程序时,需要将其设置为您自己的 falcon.API . 例如::

from falcon import testing
import myapp


class MyTestCase(testing.TestCase):
    def setUp(self):
        super(MyTestCase, self).setUp()

        # Assume the hypothetical `myapp` package has a
        # function called `create()` to initialize and
        # return a `falcon.API` instance.
        self.app = myapp.create()


class TestMyApp(MyTestCase):
    def test_get_message(self):
        doc = {u'message': u'Hello world!'}

        result = self.simulate_get('/messages/42')
        self.assertEqual(result.json, doc)
类型

对象

setUp()[源代码]

测试夹具在使用前的挂钩方法。

class falcon.testing.SimpleTestResource(status=None, body=None, json=None, headers=None)[源代码]

用于框架组件功能测试的模拟资源。

这个类实现了一个简单的测试资源,可以根据需要对中间件、钩子和Falcon框架本身进行扩展。

只有noop on_get()on_post() 实现了响应程序;当重写这些响应程序或在子类中添加其他响应程序时,可以使用 falcon.testing.capture_responder_args() 钩住以捕获 reqresp帕拉姆 传递给响应程序的参数。响应者也可以用 falcon.testing.set_resp_defaults() 钩住以固定 resp 默认属性 地位body页眉 价值观。

关键字参数
  • status (str) -- 用于响应的默认状态字符串

  • body (str) -- 响应中使用的默认正文字符串

  • json (JSON serializable) -- 用于响应的默认JSON文档。将序列化为字符串并编码为UTF-8。或者 jsonbody 可以指定,但不能同时指定两者。

  • headers (dict) -- 要包含在响应中的附加头的默认集

called

是否捕获请求/响应。

类型

布尔

captured_req

最后一个请求对象传递到响应程序的任何一个方法中。

类型

falcon.Request

captured_resp

最后一个响应对象传递到响应程序方法中的任何一个。

类型

falcon.Response

captured_kwargs

最后一本夸格斯字典 reqresp ,它被传递到响应程序的任何一个方法中。

类型

双关语

功能

falcon.testing.rand_string(min, max)[源代码]

返回随机生成的随机长度的字符串。

参数
  • min (int) -- 返回的最小字符串长度(含)

  • max (int) -- 要返回的最大字符串长度(含)

falcon.testing.redirected(stdout=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>, stderr=<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>)[源代码]

用于临时重定向stdout或stderr的上下文管理器

例如。:

使用重定向(stderr=os.devnull):

falcon.testing.get_encoding_from_headers(headers)[源代码]

从给定的HTTP头Dict返回编码。

参数

headers (dict) -- 从中提取编码的字典。头名称必须是小写,或者dict必须支持不区分大小写的查找。