httprunner逻辑分析

1、数据驱动实现核心代码分析:参考https://testerhome.com/topics/18875

    def _add_tests(self, testcases):
        """ initialize testcase with Runner() and add to test suite.

        Args:
            testcases (list): testcases list.

        Returns:
            unittest.TestSuite()

        """
        def _add_test(test_runner, test_dict):
            """ add test to testcase.
            """
            def test(self):
                .....

            ......

            return test

        test_suite = unittest.TestSuite()  #初始化testsuite
        for testcase in testcases:
            config = testcase.get("config", {})
            test_runner = runner.Runner(config)
        #使用type动态创建TestSequense类,动态创建类详见httprunner源码文章 TestSequense = type('TestSequense', (unittest.TestCase,), {}) ..... for times_index in range(times): # suppose one testcase should not have more than 9999 steps, # and one step should not run more than 999 times. test_method_name = 'test_{:04}_{:03}'.format(index, times_index)
            #以下两行为TestSequense添加了测试方法名及测试方法实现,test_method及_add_test返回的test方法 test_method = _add_test(test_runner, test_dict) setattr(TestSequense, test_method_name, test_method) loaded_testcase = self.test_loader.loadTestsFromTestCase(TestSequense) setattr(loaded_testcase, "config", config) setattr(loaded_testcase, "teststeps", tests) setattr(loaded_testcase, "runner", test_runner)
       #将测试用例添加到testsuite中 test_suite.addTest(loaded_testcase) return test_suite

 总结:使用type创建一个继承unitest.TestCase的TestSequense,然后使用setattr添加测试方法test_method

2、parser.py用例解析的基本逻辑整理:

 3、validate校验逻辑

 

posted on 2020-03-16 15:38  ChanXM  阅读(338)  评论(0)    收藏  举报

导航