Невозможно выполнить операцию: в Pytest проводится другая операцияPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно выполнить операцию: в Pytest проводится другая операция

Сообщение Anonymous »

Я хочу проверить некоторую функцию, которая работает с Asyncpg . Если я запускаю по одному тесту за раз, он работает нормально. Но если я запускаю несколько тестов за раз, все тесты, кроме первого сбоя с ошибкой asyncpg.exceptions._base.interfaceerror: невозможно выполнить операцию: другая операция выполняется .
Тесты:

Код: Выделить всё

@pytest.mark.asyncio
async def test_project_connection(superuser_id, project_id):
data = element_data_random(project_id)

element_id = (await resolve_element_create(data=data, user_id=superuser_id))["id"]
project_elements = (await db_projects_element_ids_get([project_id]))[project_id]

assert element_id in project_elements

@pytest.mark.asyncio
async def test_project_does_not_exist(superuser_id):
data = element_data_random(str(uuid.uuid4()))

with pytest.raises(ObjectWithIdDoesNotExistError):
await resolve_element_create(data=data, user_id=superuser_id)
< /code>
Все функции для работы с DB Использование пула выглядят так: < /p>
async def (*args):
pool = await get_pool()

await pool.execute(...) # or fetch/fetchrow/fetchval
< /code>
Как я получаю пул: < /p>
db_pool = None

async def get_pool():
global db_pool

async def init(con):
await con.set_type_codec('jsonb', encoder=ujson.dumps, decoder=ujson.loads, schema='pg_catalog')
await con.set_type_codec('json', encoder=ujson.dumps, decoder=ujson.loads, schema='pg_catalog')

if not db_pool:
dockerfiles_dir = os.path.join(src_dir, 'dockerfiles')
env_path = os.path.join(dockerfiles_dir, 'dev.env')

try:
# When code and DB inside docker containers
host = 'postgres-docker'
socket.gethostbyname(host)
except socket.error:
# When code on localhost, but DB inside docker container
host = 'localhost'

load_dotenv(dotenv_path=env_path)

db_pool = await asyncpg.create_pool(
database=os.getenv("POSTGRES_DBNAME"),
user=os.getenv("POSTGRES_USER"),
password=os.getenv("POSTGRES_PASSWORD"),
host=host,
init=init
)

return db_pool
Насколько я понимаю под капюшоном, Asynspg создает новое соединение и запускает запрос внутри этого соединения, если вы запускаете запрос через пул. Что дает понять, что каждый запрос должен иметь свое собственное соединение. Однако возникает эта ошибка, которая вызвана, когда одно соединение пытается обрабатывать два запроса одновременно

Подробнее здесь: https://stackoverflow.com/questions/719 ... -in-pytest
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»