def _run_test_thread(worker_id, ctrl_msg_queue, testcase, testreport, resmgr): '''执行测试用例的线程 :param worker_id: 工作者ID :type worker_id: string :param ctrl_msg_queue: 控制进程的消息队列 :type ctrl_msg_queue: multiprocessing.Queue :param testcase: 测试用例 :type testcase: TestCase :param testreport: 测试报告 :type testreport: ITestReport :param resmgr: 资源管理器 :type resmgr: TestResourceManager ''' try: runnner = getattr(testcase, 'case_runner', TestCaseRunner()) testcase.test_resmgr = resmgr result = runnner.run(testcase, testreport.get_testresult_factory()) if isinstance(result, TestResultCollection): _log_collection_result(testreport, result) else: testreport.log_test_result(result.testcase, result) ctrl_msg_queue.put((EnumProcessMsgType.Worker_Idle, worker_id, serialization.dumps(testcase), result.passed)) except: ctrl_msg_queue.put((EnumProcessMsgType.Worker_Error, worker_id, traceback.format_exc()))
def test_normal_serialization(self): from tests.sampletest.hellotest import HelloTest hello = HelloTest() data = serialization.dumps(hello) deserialized_case = serialization.loads(data) self.assertEqual(type(deserialized_case), HelloTest) for attr in ["owner", "timeout", "priority", "status", "tags", "test_doc"]: self.assertEqual(getattr(deserialized_case, attr), getattr(hello, attr))
def run_testcase(self, testcase ): '''分配一个测试用例 :param testcase: 要执行的测试用例 :type testcase: TestCase ''' self.send_message((EnumProcessMsgType.Worker_RunTest, serialization.dumps(testcase))) self._testcase = testcase
def run_testcase(self, testcase): '''分配一个测试用例 :param testcase: 要执行的测试用例 :type testcase: TestCase ''' self.send_message( (EnumProcessMsgType.Worker_RunTest, serialization.dumps(testcase))) self._testcase = testcase
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))
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")
def log_test_result(self, testcase, testresult ): '''记录一个测试结果 :param testcase: 测试用例 :type testcase: TestCase :param testresult: 测试结果 :type testresult: TestResult ''' objid = self._result_manager.add_result(testresult) self._ctrl_msg_queue.put((EnumProcessMsgType.Report_LogTestResult, self._worker_id, serialization.dumps(testcase), objid, testresult.passed))
def log_test_result(self, testcase, testresult): '''记录一个测试结果 :param testcase: 测试用例 :type testcase: TestCase :param testresult: 测试结果 :type testresult: TestResult ''' objid = self._result_manager.add_result(testresult) self._ctrl_msg_queue.put( (EnumProcessMsgType.Report_LogTestResult, self._worker_id, serialization.dumps(testcase), objid, testresult.passed))
def _run_test_thread( worker_id, ctrl_msg_queue, testcase, testreport ): '''执行测试用例的线程 :param worker_id: 工作者ID :type worker_id: string :param ctrl_msg_queue: 控制进程的消息队列 :type ctrl_msg_queue: multiprocessing.Queue :param testcase: 测试用例 :type testcase: TestCase :param testreport: 测试报告 :type testreport: ITestReport ''' try: runnner = getattr(testcase, 'case_runner', TestCaseRunner()) result = runnner.run(testcase, testreport.get_testresult_factory()) if isinstance(result, TestResultCollection): _log_collection_result(testreport, result) else: testreport.log_test_result(result.testcase, result) ctrl_msg_queue.put((EnumProcessMsgType.Worker_Idle, worker_id, serialization.dumps(testcase), result.passed)) except: ctrl_msg_queue.put((EnumProcessMsgType.Worker_Error, worker_id, traceback.format_exc()))
def dumps(self): '''序列化 ''' from testbase import serialization return [serialization.dumps(it) for it in self._testcases]