使用异常参数列表测试python函数
我对测试一无所知,所以需要你的帮助 获取了一个python函数,该函数正在不断更改。 还有一个参数列表,这个函数应该处理,没有例外。 所以问题是——如何对此进行正确的简单测试 我需要像这样的东西使用异常参数列表测试python函数,python,testing,Python,Testing,我对测试一无所知,所以需要你的帮助 获取了一个python函数,该函数正在不断更改。 还有一个参数列表,这个函数应该处理,没有例外。 所以问题是——如何对此进行正确的简单测试 我需要像这样的东西 for arg in args: cmd = 'python script.py %s' % arg p = subprocess.Popen(cmd, shell = True, stdout = subprocess.PIPE, stderr = subproces
for arg in args:
cmd = 'python script.py %s' % arg
p = subprocess.Popen(cmd, shell = True,
stdout = subprocess.PIPE, stderr = subprocess.PIPE)
output, err = p.communicate()
if err:
print arg
print err
def test_runs_without_exception(self):
script.main(1, 2, 3)
用这样的自编脚本可以吗?或者有什么特殊的模块吗
或者最好的处理方法是什么?理想情况下,模块
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
不在python搜索路径中,您可能需要手动添加它:
import sys
sys.path.append("/path/to/folder/containing/script.py")
from script import main
作为标准库的一部分,有一个名为unittest
的包,专门用于测试此类函数,并且有一个可读的文档,因此我强烈建议您尝试一下
使用UITest
,测试可能如下所示:
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()
编辑以添加:
如果您的函数没有返回值,并且您只想知道函数是否抛出异常,那么您的测试函数可以简单地编写为
for arg in args:
cmd = 'python script.py %s' % arg
p = subprocess.Popen(cmd, shell = True,
stdout = subprocess.PIPE, stderr = subprocess.PIPE)
output, err = p.communicate()
if err:
print arg
print err
def test_runs_without_exception(self):
script.main(1, 2, 3)
如果script.main()
如果您只想简单地测试一个脚本,那么使用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
中包含一些日志记录功能。在这种情况下,您可能需要查看包日志记录,问题是我的函数不返回任何内容。它只是打印了大量的信息。所以我不需要检查平等性;我想确保没有例外扩展了答案以包括没有返回值的函数的情况。