我有一个类范围的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我会得到一个属性错误。