如何将我的TCP客户端装置从类范围更改为会话范围?

时间:2019-08-29 17:47:44

标签: python pytest

我有一个类范围的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)

如何在每个测试中访问测试客户端?它在class-scope上起作用,但是我无法在session-scope上起作用。如果我没有通过test_client作为参数,那么我会得到一个名称错误,如果我使用self.test_client我会得到一个属性错误。

0 个答案:

没有答案