В libpq PostgreSQL (на котором основан psycopg2), если вы укажете имя пользователя, но не имя dbname, он автоматически попытается подключиться к базе данных, которая принимает те же слова, что и указанный вами пользователь.
Вы указываете пользователя 'testuser', но не указываете базу данных, поэтому он пытается подключиться к базе данных с именем 'testuser'. Если этого не существует, конечно, соединение не будет установлено.
Вы сказали, что база данных, которая должна существовать, чтобы это работало, - "testdb", но я вижу, что однажды вы указали имя пользователя как "testdb", но затем отредактировал ваш вопрос и изменил его на "testuser". Так что я думаю, что пример, который вы показываете, не тот код, который вы выполняете на самом деле, так как вы выполняли его частичное редактирование после факта.
В своем коде соединения вы должны указать имя dbname, которое вы уже знаете существует.