从另一个脚本调用python unittest并导出所有错误消息

TH3*_*339 7 python unit-testing

对不起基本问题.我使用unittest方法在一个脚本中检查我的模型.现在,我的问题是如何从另一个文件调用此脚本并保存测试结果.以下是我的代码示例:

**model_test.py**

import unittest
import model_eq #script has models

class modelOutputTest(unittest.TestCase):
    def setUp(self):
        #####Pre-defined inputs########
        self.dsed_in=[1,2]

        #####Pre-defined outputs########
        self.msed_out=[6,24]

        #####TestCase run variables########
        self.tot_iter=len(self.a_in)

    def testMsed(self):
        for i in range(self.tot_iter):
            fun = model_eq.msed(self.dsed_in[i],self.a_in[i],self.pb_in[i])
            value = self.msed_out[i]
            testFailureMessage = "Test of function name: %s iteration: %i expected: %i != calculated: %i" % ("msed",i,value,fun)
self.assertEqual(round(fun,3),round(self.msed_out[i],3),testFailureMessage)

if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

我想要的下一步是创建另一个名为test_page.py的脚本,该脚本运行单元测试脚本并将结果保存到变量(我需要将结果发布到网页).

test_page.py    

from model_test.py import *
a=modelOutputTest.testMsed()
Run Code Online (Sandbox Code Playgroud)

但是,我收到了以下错误.

Traceback (most recent call last):
  File "D:\Dropbox\AppPest\rice\Rice_unittest.py", line 16, in <module>
    a= RiceOutputTest.testMsed()
TypeError: unbound method testMsed() must be called with RiceOutputTest instance as first argument (got nothing instead)
Run Code Online (Sandbox Code Playgroud)

谁能给我一些建议?谢谢!

感谢Nix的帮助!我的下一个问题是:我需要在一个循环中测试两个给定案例的函数.它发布在这里.

Nix*_*Nix 15

你需要使用一个 test runner

测试运行器测试运行器是一个组件,它协调测试的执行并向用户提供结果.跑步者可以使用图形界面,文本界面,或返回特殊值来指示执行测试的结果.

from unittest.case import TestCase
import unittest
from StringIO import StringIO
class MyTestCase(TestCase):
    def testTrue(self):
        '''
        Always true
        '''
        assert True

    def testFail(self):
        '''
        Always fails
        '''
        assert False

from pprint import pprint
stream = StringIO()
runner = unittest.TextTestRunner(stream=stream)
result = runner.run(unittest.makeSuite(MyTestCase))
print 'Tests run ', result.testsRun
print 'Errors ', result.errors
pprint(result.failures)
stream.seek(0)
print 'Test output\n', stream.read()
Run Code Online (Sandbox Code Playgroud)
>>> Output:  
>>> Tests run  2
>>> Errors  []
>>> [(<__main__.MyTestCase testMethod=testFail>,
>>> 'Traceback (most recent call last):\n  File "leanwx/test.py", line 15, in testFail\n                assert False\nAssertionError\n')]
>>> Test output
>>> F.
>>> ======================================================================
>>> FAIL: testFail (__main__.MyTestCase)
>>> ----------------------------------------------------------------------
>>> Traceback (most recent call last):
>>>   File "leanwx/test.py", line 15, in testFail
>>>     assert False
>>> AssertionError
>>>
>>>----------------------------------------------------------------------
>>>Ran 2 tests in 0.001s
>>>
>>>FAILED (failures=1)
Run Code Online (Sandbox Code Playgroud)