【问题标题】:Python pytest cases for async and await method用于 async 和 await 方法的 Python pytest 案例
【发布时间】:2023-03-16 01:40:02
【问题描述】:

我正在尝试为以下异步、等待方法编写 pytest,但我无处可去。

   class UserDb(object):
    async def add_user_info(self,userInfo):
      return await self.post_route(route='users',json=userInfo)

    async def post_route(self,route=None,json=None,params=None):
      uri = self.uri + route if route else self.uri      
      async with self.client.post(uri,json=json,params=params) as resp:            
      assert resp.status == 200
      return await resp.json()

有人可以帮我解决这个问题吗? TIA

【问题讨论】:

  • 你在用aiohttp吗?
  • @Juggernaut :是的,我正在使用 aiohttp。

标签: python python-3.x async-await pytest aiohttp


【解决方案1】:

pip install pytest-aiohttp,然后像这样创建一个fixture

from pytest import fixture

def make_app():
    app = Application()
    # Config your app here
    return app

@fixture
def test_fixture(loop, test_client):
    """Test fixture to be used in test cases"""
    app = make_app()
    return loop.run_until_complete(test_client(app))

现在写你的测试

f = test_fixture

async def test_add_user_info(f):
    resp = await f.get('/')
    assert resp.status == 200
    assert await resp.json() == {'some_key': 'some_value'}

我还注意到您的 add_user_info 协程没有返回任何内容。 更多信息是here

【讨论】:

  • 我是 pytest 的初学者。你能给我更多关于配置应用程序和测试装置的信息吗?
  • 配置是可选的。它包括添加中间件,如会话管理或数据库配置管理。只需创建您的测试用例并使用test_fixture 作为您的测试用例的参数。就像我在答案中提出的那样。并在终端中运行py.test test_module.py
  • 知道了。非常感谢:)
猜你喜欢
  • 2020-03-26
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 2016-01-21
  • 2016-05-15
相关资源
最近更新 更多