Как запретить Pytest печатать локальные переменные во время теста - PullRequest
2 голосов
/ 27 мая 2019

Я выполняю простой скрипт тестирования с pytest.Я проверяю, удалось ли создать соединение с базой данных.Функция, которая создает соединение с базой данных, требует имени пользователя и пароля.Во время тестирования pytest распечатывает имя пользователя и пароль.Очевидно, я не хочу, чтобы пароли выводились на консоль!Как я могу предотвратить это?

Я пробовал несколько решений, включая использование contextlib и пользовательских NullWriters, которые подавляют stderr и / или stdout (например, здесь https://stackoverflow.com/a/1810086). Однако, похоже, что ни один из них не имеет никакого эффекта.

Это тестовая функция:

def test_make_db2_connection():

    # get username and password from the environmental variables
    username = os.environ['username']
    password = 'my_password' # would be: os.environ['pwd']

    # create a connection with the database
    connection = make_db2_connection(username, password)

    # assert if the connection exists
    assert connection, "Connection wasn't created." 

См. Вывод pytest ниже. Как вы можете видеть, мое имя пользователя и (тестирующий) пароль напечатаны. Это то, что я хочу предотвратить.

============================================================================================================ FAILURES ============================================================================================================
____________________________________________________________________________________________________ test_make_db2_connection ____________________________________________________________________________________________________

    def test_make_db2_connection():

        # get username and password from the environmental variables
        username = os.environ['username']
        password = 'my_password' # would be: os.environ['pwd']

        # create a connection with the database
>       connection = make_db2_connection(username, password)

test_file.py:16:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

username = 'E001703', password = 'my_password'

    def make_db2_connection(username, password):
        """Creates a connection with the database"""

        dbalias = os.environ['dbalias']
>       connection = connect(dbalias, username, password)
 SQLCODE=-30082on: [IBM][CLI Driver] SQL30082N  Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID").  SQLSTATE=08001

=================================================================================================== 1 failed in 14.19 seconds ====================================================================================================

1 Ответ

0 голосов
/ 28 мая 2019

Решено @hoefling! Смотрите комментарии ниже исходного вопроса.

Решение было использовать __tracebackhide__ = True. Недостатком этого решения является то, что вам нужно изменить исходную тестируемую функцию, а не сам скрипт тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...