我如何确定unittest方法的顺序?字母或数字前缀是否正确?
class TestFoo(TestCase):
def test_1(self):
...
def test_2(self):
...
Run Code Online (Sandbox Code Playgroud)
要么
class TestFoo(TestCase):
def test_a(self):
...
def test_b(self):
...
Run Code Online (Sandbox Code Playgroud) 我有两个测试用例(两个不同的文件),我想在测试套件中一起运行.我可以通过"正常"运行python来运行测试但是当我选择运行python-unit测试时它会说0个测试运行.现在我只想尝试至少进行一次测试才能正确运行.
import usertest
import configtest # first test
import unittest # second test
testSuite = unittest.TestSuite()
testResult = unittest.TestResult()
confTest = configtest.ConfigTestCase()
testSuite.addTest(configtest.suite())
test = testSuite.run(testResult)
print testResult.testsRun # prints 1 if run "normally"
Run Code Online (Sandbox Code Playgroud)
这是我的测试用例设置的一个例子
class ConfigTestCase(unittest.TestCase):
def setUp(self):
##set up code
def runTest(self):
#runs test
def suite():
"""
Gather all the tests from this module in a test suite.
"""
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(ConfigTestCase))
return test_suite
if __name__ == "__main__":
#So you can run tests from this module individually. …Run Code Online (Sandbox Code Playgroud) python unit-testing regression-testing test-suite python-unittest
我正在寻找类似的问题,我无法找到问题的答案.
我在一个派生自unittest.TestCase的python类中编写了测试
class TestEffortFormula(unittest.TestCase)
Run Code Online (Sandbox Code Playgroud)
我需要给一个为了测试(请不要不告诉我,我不应该依赖测试的顺序,我只是做).
在我需要命令测试之前,我用来运行测试的命令是:
unittest.main(testRunner=TeamcityTestRunner())
Run Code Online (Sandbox Code Playgroud)
然后我想让订单消失,所以我尝试了以下内容:
loader = unittest.TestLoader()
loader.sortTestMethodsUsing(None)
loader.loadTestsFromTestCase(TestEffortFormula)
suite = loader.suiteClass()
Run Code Online (Sandbox Code Playgroud)
但从这里我不知道如何运行测试,特别是testRunner=TeamcityTestRunner()
像以前一样.
感谢您的帮助
我完全意识到单元测试的顺序应该无关紧要。但是这些单元测试与实际单元测试一样多用于教学,所以我希望测试输出与测试用例源代码相匹配。
我看到有一种方法可以通过sortTestMethodsUsing在测试加载器上设置属性来设置排序顺序。默认值是cmp()对名称进行词法比较的简单调用。因此,我尝试编写一个cmp-like 函数,该函数将采用两个名称,找到它们的声明行号并返回它们的 -cmp()等效项:
import unittest
class TestCaseB(unittest.TestCase):
def test(self):
print("running test case B")
class TestCaseA(unittest.TestCase):
def test(self):
print("running test case A")
import inspect
def get_decl_line_no(cls_name):
cls = globals()[cls_name]
return inspect.getsourcelines(cls)[1]
def sgn(x):
return -1 if x < 0 else 1 if x > 0 else 0
def cmp_class_names_by_decl_order(cls_a, cls_b):
a = get_decl_line_no(cls_a)
b = get_decl_line_no(cls_b)
return sgn(a - b)
unittest.defaultTestLoader.sortTestMethodsUsing = cmp_class_names_by_decl_order
unittest.main()
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到这个输出:
running test case A
.running test case …Run Code Online (Sandbox Code Playgroud) 我需要为我的测试设置执行顺序,因为我需要在其他测试之前验证一些数据.可以订单吗?
class OneTestCase(unittest.TestCase):
def setUp(self):
# something to do
def test_login (self):
# first test
pass
def test_other (self):
# any order after test_login
def test_othermore (self):
# any order after test_login
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
谢谢