python修改python unittest的运行顺序

正常是一个测试类中按函数名字运行,

下面修改成直接按每个测试方法的代码顺序执行

 

文件 unittest_util.py

 

import time
import unittest
from app.utils.utils_ydf import mixins

skip = unittest.skip


class TestCase(mixins.LoggerMixin, unittest.TestCase):   # 不需要日志的人,可以不继承第一个类。
    @classmethod
    def tearDownClass(cls):
        cls.logger.debug('---------------------------------所有用例完成-----------------------------')    
        time.sleep(200000)


def run(test_class):
    """
    测试用例执行顺序使用函数的所处行数来,即直上至下,不按照默认的函数名字来执行
    :param test_class: 测试用例的类名
    :return:
    """
    func_first_no = lambda f: getattr(test_class, f).__code__.co_firstlineno

    def func_first_no_cmp(funa, funb):
        if func_first_no(funa) > func_first_no(funb):
            return 1
        elif func_first_no(funa) == func_first_no(funb):
            return 0
        else:
            return -1

    loader = unittest.TestLoader()
    loader.sortTestMethodsUsing = func_first_no_cmp
    case1 = loader.loadTestsFromTestCase(test_class)
    suite = unittest.TestSuite([case1, ])
    unittest.TextTestRunner(verbosity=2).run(suite)
    # unittest.main(testLoader=loader, verbosity=2) # 也可以

 

使用方法示例,import 这个文件

class _Test(unittest_util.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.deploy_ydf = HotelFaresDeploy('ydf')  
        cls.deploy_test = HotelFaresDeploy('test')

  

    @unittest_util.skip
    def test_run_all_thread(self):
        """重新运行所有"""
        self.deploy_test.run_pyhton_file(ctrip)
        self.deploy_test.run_pyhton_file(elong)

    # @unittest_util.skip
    def test_query_process_thread(self):
        """查询所有thread名称的进程"""
        self.deploy_test.query_process('_thread')


if __name__ == '__main__':
    unittest_util.run(_Test)

 

这样就是按代码顺序执行了,不需要在函数上加个数字做记号了。

谁写在上面就先执行谁。

 

posted @ 2018-06-26 19:12  北风之神0509  阅读(515)  评论(0编辑  收藏  举报