В идеале, модуль script.py
содержит функцию main()
, который вызывается при вызове script.py
как сценарий, с обычной идиомой
import sys
def main(arg1, arg2, arg3):
print(arg1, arg2, arg3)
return 42
if __name__ == "__main__":
main(*sys.argv[1:])
В этом случае, вы можете просто импортировать функцию main
и сделать тестирование без всяких хлопот подпроцесса:
from script import main as testsubject
assert testsubject(1, 2, 3) == 42
Если script.py
не в поисковой питон пути, возможно, придется добавить его вручную:
import sys
sys.path.append("/path/to/folder/containing/script.py")
from script import main
Существует пакет называется unittest
как часть стандартной библиотеки специально для тестирования таких функций, с читаемой документацией, поэтому я настоятельно рекомендую вам дать, что попробовать.
С uittest
, тест может выглядеть следующим образом:
import unittest
import script
class Test_Script(unittest.TestCase):
def test_return_value(self):
answer = script.main(1, 2, 3)
self.assertEqual(answer, 42)
if __name__ == "__main__":
unittest.main()
Edited добавить:
Если функция не имеет возвращаемого значения и все, что вы хотите знать, бросает ли ваша функция ап исключение, ваша тестовая функция может быть просто написана как-то вроде
def test_runs_without_exception(self):
script.main(1, 2, 3)
Если script.main()
выдает исключение, то unittest
поймает это исключение и напечатает соответствующее сообщение об ошибке.
Если все, что вам нужно сделать, это просто проверить один сценарий, используя unittest
может быть излишним, и вы можете уйти с возможно более простой
import time
import script
try:
sript.main(1, 2, 3)
except Exception as e:
print("An Exception occured!")
with open("script_log.txt", "a") as logfile:
logfile.write(str(time.time()) + "\t" + str(e))
raise e
else:
print("Everything is fine.")
Если у вас есть контроль над script.py
, вы можете для включения в него некоторых объектов каротажа в script.py
. В этом случае вы можете посмотреть в пакет logging
.
Проблема в том, что моя функция ничего не возвращает. Он просто печатает тонны информации. Поэтому мне не нужно проверять равенство; Я хочу быть уверенным, что исключений нет. –
. Развернутый ответ, чтобы включить случай функции без возвращаемого значения. – Jan