我已经用Python编写了api客户端-我应该为它编写测试。我致力于使用pytest和unittest作为核心工具。为了模拟http服务器,我选择pytest-httpserver。我的测试被组织成类和方法,而不是简单的函数。
这是我的简单测试:
from pytest_httpserver import HTTPServer
import requests
import unittest
import pytest
from urllib.parse import urlencode
FAKE_SERVER = "localhost"
FAKE_PORT = 8888
@pytest.fixture(scope="class")
def httpserver_listen_address(request):
request.cls.httpserver = HTTPServer(FAKE_SERVER, FAKE_PORT)
@pytest.mark.usefixtures("httpserver_listen_address")
class LoginTestCase(unittest.TestCase):
def test_check_auth_url(self):
auth_url = f'http://{FAKE_SERVER}:{FAKE_PORT}/auth-token/'
self.httpserver\
.expect_request("/auth-token/", method="POST", data=urlencode({}))\
.respond_with_json({"test": "test"})
requests.post(self.httpserver.url_for("/auth-token/"), {})我得到了很多线索:
E requests.exceptions.ConnectionError: HTTPConnectionPool(
host='localhost', port=8888):
Max retries exceeded with url: /auth-token/ (
Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f055c2c1480>:
Failed to establish a new connection: [Errno 111] Connection refused'))我应该如何为httpserver配置使用TestCases的固定设备?
发布于 2022-08-30 13:31:13
好吧,我很肯定它可以在很多方面实现。但我只找到了一个:
from pytest_httpserver import HTTPServer
import requests
import unittest
import pytest
from urllib.parse import urlencode
FAKE_SERVER = "localhost"
FAKE_PORT = 8888
@pytest.fixture
def my_httpserver(request, httpserver):
request.cls.httpserver = httpserver
@pytest.mark.usefixtures("my_httpserver")
class Login2TestCase(unittest.TestCase):
def test_check_auth_url(self):
auth_url = f'http://{FAKE_SERVER}:{FAKE_PORT}/auth-token/'
self.httpserver\
.expect_request("/auth-token/", method="POST", data=urlencode({}))\
.respond_with_json({"test": "test"})
requests.post(self.httpserver.url_for("/auth-token/"), {})怎么一回事?
my_httpserver --它使用了两个内置的固定装置: request和httpserver。请求是核心pytest的工具--它是某种关联机制--我正在使用它将httpserver绑定到我的TestCase。Httpserver是pytest-httpserver用于管理httpserver.@pytest.mark.usefixtures.https://stackoverflow.com/questions/73542475
复制相似问题