从运行unittest TestCase到Python变量捕获运行时

时间:2015-10-07 21:39:39

标签: python io-redirection python-unittest

我有几个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()

输出(stderr):

Ran 5 tests in 0.002s

OK

1 个答案:

答案 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) 的值,并捕获运行时间。