Pytest mock隐藏预期密码

时间:2018-03-02 09:11:05

标签: python mocking pytest getpass

我正在测试一个从命令行获取登录名和密码的函数。下面的代码按预期工作:

# ---------- 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 个答案:

答案 0 :(得分:2)

如何将它变为shell环境?

如果要运行测试,请先使用export PASSWORD=bar

在您的代码中,从os.environ['PASSWORD']读取密码。