我正在編寫一些測試,依靠用戶輸入來決定它們是否已通過。使pytest等待用戶輸入
我有這樣的功能:
def viewable(actual_proj):
print("\nCan you see %s projects named:\n"%len(actual_proj))
for i in actual_proj:
print (i+"\n")
return input("(y/n)? : ")
在:
def is_present(pytestconfig, project_not_present = 0):
actual_projects = all_projects.copy()
if (project_not_present!=0):
del_file = all_ini_files[project_not_present-1]
os.rename(del_file, del_file +'_tst')
del actual_projects[project_not_present-1]
capmanager = pytestconfig.pluginmanager.getplugin('capturemanager')
subprocess.Popen('./MultiPRM.exe')
capmanager.suspendcapture(in_=True)
decision = viewable(actual_projects)
capmanager.resumecapture()
if (project_not_present!=0):
os.rename(del_file+'_tst', del_file)
if (decision =='y'):
return True
else:
return False
當我運行命令pytest name_of_test_file.py
它運行良好,並且在每次試驗後停下來獲取用戶輸入。但是,我想用它設置了各種變量和標頭日誌文件(稱爲run_tests.py
)的文件
# start the report
print("Creating test report: " + os.path.abspath(report_filepath))
rep = open(report_filepath, "w")
rep.write(report_header)
rep.write("Test environment: \n");
rep.write(" Username: " + os.environ['USERNAME'] + "\n")
rep.write("Testing started at: " + get_time() + "\n\n")
rep.close()
# get application version
cmd = exe_under_test + " --help >> " + report_filepath
os.system(cmd)
# start the tests
cmd = "pytest >> " + report_filepath
os.system(cmd)
# finalise the report
rep = open(report_filepath, "a+")
rep.write("\nTesting completed at: " + get_time() + "\n\n")
rep.close()
當我這樣運行它,它不會停止或運行任何測試。
如果我可以寫入日誌文件,同時也寫入相同的東西到終端(包括用戶輸入),這將是偉大的。否則,正確調用這個函數的方法也會起作用。
單元測試的要點是它們不需要用戶交互... –
此功能可以被測試的唯一方法就是這樣,因爲它可能是不正確的 –
您真的需要找到一種方法來模擬用戶輸入用於測試目的。如果您在測試過程中依賴用戶輸入,那麼運行測試的其他人可能不會測試與您相同的內容。測試應該是確定性的。 – larsks