Pytest макет скрыть ожидаемый пароль

Я тестирую функцию, которая получает логин и пароль из командной строки. Код ниже работает как ожидалось:

# ---------- Function part ----------
import getpass

def my_function():
    login = input('Login: ')
    password = getpass.getpass()

    # example to simulate connection to a identification server
    if login+password == 'foobar':
        return True
    else:
        return False

# ---------- Test part ----------
from unittest.mock import patch

@patch("getpass.getpass")
@patch("builtins.input")
def test_my_function(input, getpass):
    input.return_value = 'foo'
    getpass.return_value = 'bar'
    assert my_function()

Теперь я хотел бы скрыть ожидаемый пароль (bar) чтобы опубликовать тесты в публичном хранилище.

Я думал о кодировании getpass вход, но это приведет к сбою соединения. И все другие решения, которые я могу придумать, раскрывают пароль более или менее четко любому, кто может прочитать код.

Есть ли решение для хранения пароля, чтобы его можно было использовать функцией соединения, и чтобы он не был доступен для чтения всем, кто читает источники?

1 ответ

Решение

Как насчет сделать это оболочкой?

Если вы хотите запустить свой тест, используйте export PASSWORD=bar первый.

В вашем коде прочитайте пароль от os.environ['PASSWORD'],

Другие вопросы по тегам