4

I have a test. It sends a get request to a list of urls and checks that the response is not 500.

    @pytest.mark.asyncio
    @pytest.mark.parametrize('url_test_list', get_all_url_list(HOST_FOR_TEST))
    async def test_check_status_urls(self, url_test_list):
        returned_status = await get(url_test_list)
        assert returned_status < 500

and this is my "get" function

async def get(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            response_status = response.status
    return response_status

It works, but it is slow. It takes about 3 minutes to complete.

But when I use this test without @parametrize and my "get" function takes the url_list - it runs in about 1 minute. My code in second case:

    @pytest.mark.asyncio
    async def test_check_status_urls(self):
        url_list = make_url_list()
        returned_status = await get(url_list)
        assert all(returned_status) > 500

async def get(urls):
    good_list = []
    async with aiohttp.ClientSession() as session:
        for url in urls:
            async with session.get(url) as response:
                response_status = response.status
                good_list.append(response_status)
    return good_list

I would like to have the best of both worlds here. Is there a way I can have the tests run quickly, but also run as individual units?

PirateNinjas
  • 1,908
  • 1
  • 16
  • 21
Anton
  • 41
  • 2

0 Answers0