首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pytest夹具-带有unittest TestCase的httpserver

Pytest夹具-带有unittest TestCase的httpserver
EN

Stack Overflow用户
提问于 2022-08-30 12:29:11
回答 1查看 41关注 0票数 0

我已经用Python编写了api客户端-我应该为它编写测试。我致力于使用pytest和unittest作为核心工具。为了模拟http服务器,我选择pytest-httpserver。我的测试被组织成类和方法,而不是简单的函数。

这是我的简单测试:

代码语言:javascript
复制
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/"), {})

我得到了很多线索:

代码语言:javascript
复制
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的固定设备?

EN

回答 1

Stack Overflow用户

发布于 2022-08-30 13:31:13

好吧,我很肯定它可以在很多方面实现。但我只找到了一个:

代码语言:javascript
复制
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/"), {})

怎么一回事?

  1. --我正在创建我的夹具my_httpserver --它使用了两个内置的固定装置: request和httpserver。请求是核心pytest的工具--它是某种关联机制--我正在使用它将httpserver绑定到我的TestCase。Httpserver是pytest-httpserver用于管理httpserver.
  2. I'm的补丁,它告诉我的类将使用这个工具,@pytest.mark.usefixtures.
  3. httpserver在self.httpserver字段中是可见的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73542475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档