Suz*_*rts 3 python stdout pytest python-3.x
我有一个代码,我需要检查输入的密码是否为空。如果是,则打印消息并退出脚本。
我正在使用pytest验证此代码并使用固定装置捕获输出capsys。但capsys.readouterr()没有捕获输出。
要测试的代码
def get_password():
password = getpass.getpass('Password required :', stream=None)
if not password:
print("NoPasswordError: Password not provided.Exiting from run")
'''return -1'''
sys.exit(-1)
else:
return password
Run Code Online (Sandbox Code Playgroud)
py测试代码
def test_input_validation_nopass(self,getpass,capsys):
getpass.return_value = ''
get_password()
out, err = capsys.readouterr()
sys.stdout.write(out)
assert re.match('NoPasswordError',out,re.I)
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除sys.exit并放置return,则会捕获输出。目前我收到以下错误:
pytest -q UnitTest.py -k test_input_validation_nopass -rx -rP
F [100%]
=============================================================================== FAILURES ================================================================================
________________________________________________________________ TestClass.test_input_validation_nopass _________________________________________________________________
self = <UnitTest_buildUpgrade.TestClass object at 0x10d179978>, getpass = <MagicMock name='getpass' id='4514617832'>
capsys = <_pytest.capture.CaptureFixture object at 0x10d179a20>
def test_input_validation_nopass(self,getpass,capsys):
getpass.return_value = ''
> get_password()
UnitTest_buildUpgrade.py:78:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
def get_password():
password = getpass.getpass('Password required :', stream=None)
if not password:
print("NoPasswordError: Password not provided .Exiting from run")
'''return -1'''
> sys.exit(-1)
E SystemExit: -1
CitrixADCUpgrade.py:19: SystemExit
------------------------------------------------------------------------- Captured stdout call --------------------------------------------------------------------------
NoPasswordError: Password not providedExiting from run
1 failed, 7 deselected in 0.45s
Run Code Online (Sandbox Code Playgroud)
调用sys.exit将引发SystemExit. 您需要在测试中捕获此异常:
import pytest
def test_input_validation_nopass(getpass, capsys):
getpass.return_value = ''
with pytest.raises(SystemExit):
get_password()
out, err = capsys.readouterr()
assert re.match('NoPasswordError', out, re.I)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |