如何将TCP客户端设备从类范围更改为会话范围?

2024-04-19 06:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类作用域TCP连接,设置如下:

@pytest.fixture(scope="class")
def testclient(request):
    transport = TSocket.TSocket(TEST_HOST, TEST_PORT)
    transport = TTransport.TBufferedTransport(transport)
    transport.open()
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Service.Client(protocol)
    request.cls.client = client
    yield

然后,我可以按每类使用它,如下所示:

@pytest.mark.usefixtures('testclient')
class TestServiceComponent(BaseTest):
    def test_component_A(self):
        params = TestServiceComponent.get_params()
        res = self.client.find_match(params)
        self.assertTrue(res)

    ....

    def test_component_Z(self):
        params = TestServiceComponent.get_params()
        res = self.client.find_match(params)
        self.assertTrue(res)

我想将其转换为会话级设备,因为在x个TCP连接之后,服务器会拒绝额外的请求。此外,它只是效率低下

我无法使用请求对象,因为它不可用于会话范围装置。因此,我尝试做如下工作:

@pytest.fixture(scope="session")
def testclient(request):
    ...

@pytest.mark.usefixtures('testclient')
class TestServiceComponent(BaseTest):
    def test_component_A(self, test_client):
        params = TestServiceComponent.get_params()
        res = client.find_match(params)
        self.assertTrue(res)

    ....

    def test_component_Z(self, test_client):
        params = TestServiceComponent.get_params()
        res = client.find_match(params)
        self.assertTrue(res)

这给了我以下错误:

TypeError: test_component_A() takes exactly 2 arguments (1 given)
...
TypeError: test_component_Z() takes exactly 2 arguments (1 given)

如何在每个测试中访问测试客户端?它在类范围内工作,但我无法使它在会话范围内工作。如果我没有通过test_client作为参数,那么我会得到一个名称错误,如果我使用self.test_client,那么我会得到一个属性错误


Tags: testselfclientgetpytestdefmatchres