Skip to main content

通过请求检查远程呼叫

项目描述

构建状态 派皮

通过请求模块检查远程调用的工具。

找出您的代码正在调用的外部 API。

可选:
  • 查找通话地点。

  • 捕获响应和响应状态代码。

  • 按域过滤

  • 作为并行测试的服务器运行

2.x 注释:
  • 现在模拟请求的 HTTPAdapter 类的send()方法。

  • 现在监视请求而不是MonitorRequests

安装

pip install monitor-requests

用法

import unittest
import monitor_requests
from example import example_method

class ExampleTestCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.monitor = monitor_requests.Monitor()

    @classmethod
    def tearDownClass(cls):
        print('External calls for example:')
        # Optionally pass tracebacks=False to skip outputing tracebacks
        # Report will call .stop() by default.
        cls.monitor.report(tracebacks=False)

    def test_example_method(self):
        result = example_method()
        self.assertEqual(result.status_code, 200)

if __name__ == 'main':
    unittest.main()

要过滤捕获的域:

# Only capture facebook and google requests:
monitor = monitor_requests.Monitor(
    domains=['facebook\.com', 'google\.com']
)

要在 django 测试运行程序中进行设置:(如果以串行方式运行测试,这仅在套件级别有效。根据您的设置,您可能需要使用 –parallel=1 运行)。或者,还有关于如何使用Server Moder将数据异步推送到包含的tornado数据服务器的说明。

def run_suite(self, suite, **kwargs):
    monitor = monitor_requests.Monitor()
    test_result = super(ReelioTestRunner, self).run_suite(suite, **kwargs)
    monitor.report()
    return test_result

要在 py.test 会话夹具内进行设置:

@pytest.fixture(scope='session')
def session_fixture():
    monitor = monitor_requests.Monitor()
    yield
    monitor.report()

要写入文件:

@classmethod
def tearDownClass(cls):
    with open('output.txt', 'w') as f:
        cls.monitor.report(output=f)

对输出进行更精细的调整控制:

  • 使用debug=True显示 url、响应和回溯。

  • 使用urls=True来显示 url。

  • 使用tracebacks=Truerespones=True显示回溯或响应(也会显示 url,因为回溯和响应都由 url 组织)。

*服务器模式*

如果你想为整个并行运行的测试套件激活 monitor_requests,你可以运行包含的tornado服务器来持久化请求数据:

monitor_requests_server --port=9003
def run_suite(self, suite, **kwargs):
    # Make sure to turn off mocking at the suit or session level.
    monitor = monitor_requests.Monitor(server_port=9003, mocking=False)
    test_result = super(ReelioTestRunner, self).run_suite(suite, **kwargs)
    monitor.report()
    return test_result

您将需要在您的 TestCase 类中进行额外的调用:

class ExampleTestCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        # Same port, and same domain filtering if applicable.
        cls.monitor = monitor_requests.Monitor(server_port=9003)

    @classmethod
    def tearDownClass(cls):
        # Make sure to stop the mocking in the tear down.
        cls.monitor.stop()

请注意,这里没有 tearDownClass 也没有调用 stop() 或 report()。这只发生在会话级别。

示例输出

使用debug=True

__________URLS__________

__________URL________
URL:      http://facebook.com?param=test
Methods:  GET
Requests: 1
______Tracebacks_____
File "example.py", line 22, in <module>
    run()
  File "example.py", line 18, in run
    get_function_fb()
  File "example.py", line 12, in get_function_fb
    return requests.get('http://facebook.com?param=test')
_______Responses______
<StatusCode>200</StatusCode>
<Content><!DOCTYPE html>
<html lang="en" id="facebook" class="no_js">Etc/Etc</html></Content>

__________URL________
URL:      http://google.com
Methods:  GET
Requests: 1
______Tracebacks_____
File "example.py", line 22, in <module>
    run()
  File "example.py", line 17, in run
    get_function()
  File "example.py", line 7, in get_function
    return requests.get('http://google.com')
_______Responses______
<StatusCode>200</StatusCode>
<Content><!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en">Etc/Etc</html></Content>

___________Analysis__________

Total Requests: 2
Time (Seconds): 1.16714
URL Count:      2
Domain Count:   2
Domains:        facebook.com, google.com

使用debug=False

___________Analysis__________

Total Requests: 2
Time (Seconds): 1.08454
URL Count:      2
Domain Count:   2
Domains:        facebook.com, google.com

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置分布

monitor_requests-2.1.1-py2.py3-none-any.whl (9.9 kB 查看哈希

已上传 py2 py3