Esempio n. 1
0
    def test_set_attrs_tags(self):
        class Base(TestCase):
            tags = "base"

        data = [
            {
                "value": "x",
                "__attrs__": {
                    "tags": "foo"
                }
            },
            {
                "value": "x",
                "__attrs__": {
                    "tags": ("fff", "xxx")
                }
            },
        ]

        @datadrive.DataDrive(data)
        class Demo(Base):
            owner = "xxx"
            timeout = 1
            priority = TestCase.EnumPriority.BVT
            status = TestCase.EnumStatus.Design
            tags = "base2"

            def run_test(self):
                pass

        tests = datadrive.load_datadrive_tests(Demo)
        self.assertEqual(len(tests), 2)
        self.assertEqual(tests[0].tags, set(["base", "foo"]))
        self.assertEqual(tests[1].tags, set(["base", "fff", "xxx"]))
Esempio n. 2
0
    def test_set_attrs_doc(self):
        data = [
            {
                "value": "x",
                "__attrs__": {
                    "__doc__": "doc"
                }
            },
            {
                "value": "x",
                "__attrs__": {
                    "xxxx": ("fff", "xxx")
                }
            },
        ]

        @datadrive.DataDrive(data)
        class Demo(TestCase):
            """base"""
            owner = "xxx"
            timeout = 1
            priority = TestCase.EnumPriority.BVT
            status = TestCase.EnumStatus.Design
            tags = "base2"

            def run_test(self):
                pass

        tests = datadrive.load_datadrive_tests(Demo)
        self.assertEqual(len(tests), 2)
        self.assertEqual(tests[0].test_doc, "doc")
        self.assertEqual(tests[1].test_doc, "base")
Esempio n. 3
0
    def debug_run(self):
        '''本地调试测试用例
        '''
        from testbase.runner import TestRunner
        from testbase.loader import TestDataLoader
        from testbase.report import EmptyTestReport, StreamTestReport
        from testbase.testresult import StreamResult
        from testbase import datadrive

        if self.casedata is None:
            testcls = type(self)
            if datadrive.is_datadrive(testcls):  #数据驱动用例
                runner = TestRunner(
                    StreamTestReport(output_testresult=True,
                                     output_summary=True))
                return runner.run(datadrive.load_datadrive_tests(testcls))
            elif settings.DATA_DRIVE:  #项目级的数据驱动
                testdataset = TestDataLoader().load()
                runner = TestRunner(
                    StreamTestReport(output_testresult=True,
                                     output_summary=True))
                return runner.run(
                    [testcls(testdataset[it], str(it)) for it in testdataset])
        runner = TestRunner(EmptyTestReport(lambda tc: StreamResult()))
        return runner.run([self])
Esempio n. 4
0
    def debug_run_one(self, name=None):
        '''本地调试测试用例,给数据驱动的用例使用,只执行一个用例
        
        :param name: 测试数据名称,如果不指定,执行第一个数据的用例
        '''
        from testbase.runner import TestRunner
        from testbase.loader import TestDataLoader
        from testbase.report import EmptyTestReport
        from testbase.testresult import StreamResult
        from testbase import datadrive

        runner = TestRunner(EmptyTestReport(lambda tc: StreamResult()))
        if self.casedata is None:
            testcls = type(self)
            if datadrive.is_datadrive(testcls):  #数据驱动用例
                tests = datadrive.load_datadrive_tests(testcls, name)
                if len(tests) > 1:
                    tests = [random.choice(tests)]
                return runner.run(tests)
            elif settings.DATA_DRIVE:  #项目级的数据驱动
                testdataset = TestDataLoader().load()
                for it in testdataset:
                    if (name is None) or (str(name) == str(it)):
                        return runner.run([testcls(testdataset[it], str(it))])
                else:
                    raise RuntimeError("找不到指定名字的测试数据")
            else:
                raise RuntimeError("非数据驱动用例请使用debug_run接口进行调试执行")
        else:
            runner.run([self])
            return self
Esempio n. 5
0
    def _load_from_class(self,
                         cls,
                         data_key=None,
                         exclude_data_key=None,
                         attrs=None):
        '''加载用例类

        :param cls: Python类
        :type cls: Type
        :returns list - 测试用例对象列表
        '''
        if exclude_data_key is None:
            exclude_data_key = []
        exclude_data_key = [smart_text(i) for i in exclude_data_key]

        tests = []
        if datadrive.is_datadrive(cls) or settings.DATA_DRIVE:
            tests = datadrive.load_datadrive_tests(cls, data_key, attrs)
        else:
            tests = [cls(attrs=attrs)]

        if self._filter:
            final_tests = []
            for it in tests:
                filter_reason = self._filter(it)
                if filter_reason:
                    self._filtered_tests[it] = filter_reason
                else:
                    final_tests.append(it)
            tests = final_tests
        return tests
Esempio n. 6
0
    def _load_from_class(self, cls):
        '''加载用例类
        
        :param cls: Python类 
        :type cls: Type
        :returns list - 测试用例对象列表
        '''
        tests = []
        if datadrive.is_datadrive(cls):
            tests = datadrive.load_datadrive_tests(cls)
        elif settings.DATA_DRIVE:
            tests = [cls(self._dataset[it], str(it)) for it in self._dataset]
        else:
            tests = [cls()]

        if self._filter:
            final_tests = []
            for it in tests:
                filter_reason = self._filter(it)
                if filter_reason:
                    self._filtered_tests[it] = filter_reason
                else:
                    final_tests.append(it)
            tests = final_tests
        return tests
Esempio n. 7
0
    def debug_run_one(self, name=None):
        '''本地调试测试用例,给数据驱动的用例使用,只执行一个用例

        :param name: 测试数据名称,如果不指定,执行第一个数据的用例
        '''
        from testbase import datadrive
        from testbase.runner import TestRunner
        from testbase.report import EmptyTestReport
        from testbase.testresult import StreamResult

        test_cls = type(self)
        if not datadrive.is_datadrive(test_cls) and not settings.DATA_DRIVE:  # non-datadrive
            raise RuntimeError("非数据驱动用例,请使用debug_run进行调试")
        if name:
            tests = datadrive.load_datadrive_tests(test_cls, name)
        else:
            tests = datadrive.load_datadrive_tests(test_cls)
            tests = tests[:1]
        runner = TestRunner(EmptyTestReport(lambda tc: StreamResult()))
        return runner.run(tests)
Esempio n. 8
0
 def test_serialize_testsuite(self):
     from tests.sampletest.hellotest import HelloTest, TimeoutTest
     foo_test = datadrive.load_datadrive_tests(FooTest, 1)[0]
     testsuite = SeqTestSuite([HelloTest(), TimeoutTest(), foo_test])
     data = serialization.dumps(testsuite)
     deserialized_testsuite = serialization.loads(data)
     self.assertEqual(len(deserialized_testsuite), len(testsuite))
     for deserialized_test, test in zip(deserialized_testsuite, testsuite):
         self.assertEqual(type(deserialized_test), type(test))
         for attr in ["owner", "timeout", "priority", "status", "tags", "test_doc"]:
             self.assertEqual(getattr(deserialized_test, attr), getattr(test, attr))
Esempio n. 9
0
 def test_datadrive_serialization(self):
     tests = datadrive.load_datadrive_tests(FooTest, 1)
     self.assertEqual(len(tests), 1)
     test = tests[0]
     deserialized_test = serialization.loads(serialization.dumps(test))
     self.assertEqual(deserialized_test.owner, "bar")
     self.assertEqual(deserialized_test.timeout, 5)
     self.assertEqual(deserialized_test.priority, TestCase.EnumPriority.BVT)
     self.assertEqual(deserialized_test.status, TestCase.EnumStatus.Implement)
     self.assertEqual(deserialized_test.tags, set(["a", "b", "c"]))
     self.assertEqual(deserialized_test.test_doc, "demo")
Esempio n. 10
0
    def debug_run(self):
        '''本地调试测试用例
        '''
        from testbase import datadrive
        from testbase.runner import TestRunner
        from testbase.report import StreamTestReport, EmptyTestReport
        from testbase.testresult import StreamResult

        test_cls = type(self)
        if datadrive.is_datadrive(test_cls) or settings.DATA_DRIVE:  # datadrvie
            if self.casedataname is not None:
                tests = datadrive.load_datadrive_tests(test_cls, self.casedataname)
                report = EmptyTestReport(lambda tc: StreamResult())
            else:
                tests = datadrive.load_datadrive_tests(test_cls)
                report = StreamTestReport(output_testresult=True, output_summary=True)
        else:
            tests = [self]
            report = EmptyTestReport(lambda tc: StreamResult())
        runner = TestRunner(report)
        return runner.run(tests)
Esempio n. 11
0
    def test_load_list_data(self):

        data = ["xxx", 1111]
        @datadrive.DataDrive(data)
        class Demo(TestCase):
            owner = "xxx"
            timeout = 1
            priority = TestCase.EnumPriority.BVT
            status = TestCase.EnumStatus.Design
            def run_test(self):
                pass

        tests = datadrive.load_datadrive_tests(Demo)
        self.assertEqual(len(tests), 2)
        self.assertEqual(tests[0].casedata, data[0])
        self.assertEqual(tests[1].casedata, data[1])
Esempio n. 12
0
    def test_load_dict_data(self):

        data = {
            "x": {"value":"x", "xxx":{"owner": "eeelin"}},
            "y": {"value":2, "xxx":{"priority": TestCase.EnumPriority.Low}}
        }
        @datadrive.DataDrive(data)
        class Demo(TestCase):
            owner = "xxx"
            timeout = 1
            priority = TestCase.EnumPriority.BVT
            status = TestCase.EnumStatus.Design
            def run_test(self):
                pass

        tests = datadrive.load_datadrive_tests(Demo)
        self.assertEqual(len(tests), 2)
        for test in tests:
            self.assertEqual(test.casedata, data[test.casedataname])
Esempio n. 13
0
    def test_set_attrs(self):
        data = [
            {"value":"x", "__attrs__":{"owner": "eeelin"}},
            {"value":2, "__attrs__":{"priority": TestCase.EnumPriority.Low}}
        ]
        @datadrive.DataDrive(data)
        class Demo(TestCase):
            owner = "xxx"
            timeout = 1
            priority = TestCase.EnumPriority.BVT
            status = TestCase.EnumStatus.Design
            def run_test(self):
                pass

        tests = datadrive.load_datadrive_tests(Demo)
        self.assertEqual(len(tests), 2)
        self.assertEqual(tests[0].owner, "eeelin")
        self.assertEqual(tests[0].priority, TestCase.EnumPriority.BVT)
        self.assertEqual(tests[1].owner, "xxx")
        self.assertEqual(tests[1].priority, TestCase.EnumPriority.Low)