我正在测试我创建的aiohttp端点。按照文档中给出的一些方法,下面的代码工作正常。但是,我们在哪里传递端点必须测试的{name} arg?
因此,如果假设我的网址为localhost/hello/Alice
,则会打印Hello Alice。现在在测试用例中,我在哪里传递Alice
作为名称?另外,如果我仅允许Alice
和Bob
作为有效名称和其他名称,我的逻辑不支持该怎么办。所以在这种情况下,我需要指定某些名称来查看哪些值有效且无效。
我如何首先传递某些值是我的问题,因为我所做的只是一个占位符,而不是在下面的测试用例中传递任何实际名称。
subapp_routes = web.RouteTableDef()
@subapp_routes.get('/{name}')
async def hello_name(request):
name = request.match_info.get('name')
txt = "Hello {}\n".format(name)
return web.Response(text=txt)
@pytest.fixture
def cli(loop, test_client):
app = web.Application()
app.router.add_get('/', hello)
app.router.add_get('/{name}', hello_name)
return loop.run_until_complete(test_client(app))
async def test_hello(cli):
resp = await cli.get('/{name}')
assert resp.status == 200
text = await resp.text()
assert 'Hello {name}' in text
答案 0 :(得分:1)
简单地说,有两种选择:
resp = await cli.get('/Alice')
url_for
方法生成网址: ...
app.router.add_get('/{name}', hello_name, name='hello-name')
...
async def test_hello(cli):
url = cli.server.app.router['hello-name'].url_for(name='Alice')
resp = await cli.get(url)
assert resp.status == 200
text = await resp.text()
assert 'Hello {name}' in text
很多例子here
答案 1 :(得分:1)
感谢@AndrewSvetlov和@SColvin。我通过你的两个链接和安德鲁的实现提到了我也得到了这个:
@pytest.fixture
def cli(loop, test_client):
app = web.Application()
app.router.add_get(r'/{name}', hello_name)
return loop.run_until_complete(test_client(app))
valid_names = ['Alice', 'Bob']
@pytest.mark.parametrize('name', valid_names)
async def test_hello(name, cli):
resp = await cli.get('/{}'.format(name))
assert resp.status == 200
text = await resp.text()
print(text)
assert 'Hello {}'.format(name) in text