我有几个Python文件,每个文件都包含一个Python函数和一个TestCase,类似于下面的文件。我想有一个单独的python脚本,它将执行每个文件并捕获输出。碰巧的是,所有测试都将通过,输出将类似于“x秒内的Ran x测试”,但此输出是stderr,而不是stdout。
我希望能够将每个输出附加到列表中。
从bash shell我可以简单地使用:
$ python combine.py &> result.txt
将输出保存到文件中(不理想,但至少我可以检索的东西),所以我尝试使用:
os.system('python combine.py &> result.txt')
..虽然只是将它打印到终端。
可能有一种更简单的方法,例如直接调用TestCase方法而不是执行整个文件,这实际上可能是更好的解决方案,但我也无法找到一种方法。
最终目标是在多个文件中执行单元测试,并返回它们的列表。例如['Ran 3测试0.3秒','Ran 2测试0.6秒'等等。]
# combine.py
def combine(*args):
result = []
args = list(args)
while len(args):
for arg in args:
try:
result.append(arg.pop(0))
except IndexError:
a = args.index(arg)
args.pop(a)
return result
from unittest import TestCase, main
class CombineTests(TestCase):
def runTest(self):
result = ['a', 1, 'one', 'b', 2, 'two', 'c', 3, 4]
self.assertEquals(combine(['a','b','c'], [1,2,3,4],['one','two']), result)
if __name__ == '__main__': main()
Ran 5 tests in 0.002s
OK
答案 0 :(得分:3)
main
模块的main(module='test_module', exit=False)
方法有两个我认为您会发现有用的选项:
TestProgram
此执行的返回值是import unittest
import datetime
def fnc(a, b):
return a + b
class MyTest(unittest.TestCase):
def test_one(self):
self.assertEqual(fnc(1,1), 2)
start = datetime.datetime.now()
tmp = unittest.main(module = '__main__', exit = False)
end = datetime.datetime.now()
duraction = end - start
print(duration)
类对象。您可以在交互式口译员中运行以下内容。
tmp
可能有一种方法可以将运行时从此处保存的对象中提取到'__main__'
,但我不确定它会是什么。您可以遍历模块,在unittest.main()
的调用中交换 val npmPackageTask = taskKey[File]("npm package task")
lazy val ui = Project(id = "ui", base = file("./ui")).settings(commonSettings).settings(
name := "accounts-ui",
npmPackageTask := {
val processBuilder = Process("npm-build.sh")
val process = processBuilder.run()
if(process.exitValue() != 0)
throw new Error(s"custom task failed with exit value ${process.exitValue()}")
file(".")
},
packageBin in Compile <<= npmPackageTask
).settings(publishSettings)
的值,并捕获运行时间。