|
42 | 42 | from testkitlite.util.result import TestSetResut
|
43 | 43 | import subprocess
|
44 | 44 | import glob
|
| 45 | +import json |
45 | 46 |
|
46 | 47 | if platform.system().startswith("Linux"):
|
47 | 48 | import fcntl
|
@@ -110,6 +111,7 @@ def __init__(self, connector, worker):
|
110 | 111 | self.bdd_test_files = []
|
111 | 112 | self.xcunit_test_files = []
|
112 | 113 | self.iosuiauto_test_files = []
|
| 114 | + self.mocha_test_files = [] |
113 | 115 | self.testresult_dict = {"pass": 0, "fail": 0,
|
114 | 116 | "block": 0, "not_run": 0}
|
115 | 117 | self.current_test_xml = "none"
|
@@ -397,6 +399,15 @@ def run_case(self, latest_dir):
|
397 | 399 | else:
|
398 | 400 | self.testworker = TestWorker(self.connector)
|
399 | 401 | self.__run_with_worker(self.iosuiauto_test_files)
|
| 402 | + if len(self.mocha_test_files) > 0: |
| 403 | + try: |
| 404 | + exec "from testkitlite.engines.mocha import TestWorker" |
| 405 | + LOGGER.info("TestWorker is mocha") |
| 406 | + except Exception as error: |
| 407 | + raise TestEngineException("mocha") |
| 408 | + else: |
| 409 | + self.testworker = TestWorker(self.connector) |
| 410 | + self.__run_with_worker(self.mocha_test_files) |
400 | 411 |
|
401 | 412 | def __run_with_worker(self, test_xml_set_list):
|
402 | 413 | try:
|
@@ -465,6 +476,7 @@ def __split_xml_to_set(self, webapi_file):
|
465 | 476 | bdd_test_set_list = []
|
466 | 477 | xcunit_set_list = []
|
467 | 478 | iosuiauto_set_list = []
|
| 479 | + mocha_set_list = [] |
468 | 480 | auto_webdriver_flag = self.is_webdriver and webapi_file.split('.')[-3] == 'auto'
|
469 | 481 | if len(test_xml_set_list) > 1:
|
470 | 482 | test_xml_set_list.reverse()
|
@@ -508,6 +520,8 @@ def __split_xml_to_set(self, webapi_file):
|
508 | 520 | xcunit_set_list.append(test_xml_set)
|
509 | 521 | elif set_type == "iosuiauto":
|
510 | 522 | iosuiauto_set_list.append(test_xml_set)
|
| 523 | + elif set_type == "mocha": |
| 524 | + mocha_set_list.append(test_xml_set) |
511 | 525 |
|
512 | 526 | set_keep_number += 1
|
513 | 527 | set_number -= 1
|
@@ -537,6 +551,8 @@ def __split_xml_to_set(self, webapi_file):
|
537 | 551 | self.xcunit_test_files.extend(xcunit_set_list)
|
538 | 552 | iosuiauto_set_list.reverse()
|
539 | 553 | self.iosuiauto_test_files.extend(iosuiauto_set_list)
|
| 554 | + mocha_set_list.reverse() |
| 555 | + self.mocha_test_files.extend(mocha_set_list) |
540 | 556 |
|
541 | 557 | def lock(self, fl):
|
542 | 558 | try:
|
@@ -1013,6 +1029,8 @@ def __prepare_external_test_json(self, resultfile):
|
1013 | 1029 | value = 'xcunit'
|
1014 | 1030 | elif parameters['type'] == 'iosuiauto' :
|
1015 | 1031 | value = 'iosuiauto'
|
| 1032 | + elif parameters['type'] == 'mocha' : |
| 1033 | + value = 'mocha' |
1016 | 1034 | elif parameters['type'] == 'qunit':
|
1017 | 1035 | value = 'default'
|
1018 | 1036 | if value != None:
|
@@ -1437,6 +1455,46 @@ def write_file_result(set_result_xml, set_result, debug_log_file):
|
1437 | 1455 | LOGGER.error(
|
1438 | 1456 | "[ Error: fail to write cases result, error: %s ]\n" % error)
|
1439 | 1457 |
|
| 1458 | +def __expand_subcases_mocha(tset, tcase, sub_num, result_msg): |
| 1459 | + sub_case_index = 1 |
| 1460 | + |
| 1461 | + if os.path.isdir(result_msg): |
| 1462 | + case_id = tcase.get("id") |
| 1463 | + case_purpose = tcase.get("purpose") |
| 1464 | + result_json_file = "%s/%s.json" % (result_msg, case_id) |
| 1465 | + with open(result_json_file) as js_handle: |
| 1466 | + result_content = json.load(js_handle) |
| 1467 | + for sub_test_details in result_content['tests']: |
| 1468 | + sub_case = copy.deepcopy(tcase) |
| 1469 | + sub_case.set("id", "/".join([case_id, str(sub_case_index)])) |
| 1470 | + sub_case.set("purpose", "/".join([case_purpose, sub_test_details['fullTitle']])) |
| 1471 | + sub_case.remove(sub_case.find("./result_info")) |
| 1472 | + result_info = etree.SubElement(sub_case, "result_info") |
| 1473 | + actual_result = etree.SubElement(result_info, "actual_result") |
| 1474 | + stdout = etree.SubElement(result_info, "stdout") |
| 1475 | + if len(sub_test_details['err']) == 0: |
| 1476 | + actual_result.text = 'PASS' |
| 1477 | + else: |
| 1478 | + actual_result.text = 'FAIL' |
| 1479 | + stderr = etree.SubElement(result_info, "stderr") |
| 1480 | + stderr.text = "%s" % sub_test_details['err']['stack'] |
| 1481 | + sub_case.set("result", actual_result.text) |
| 1482 | + sub_case_index += 1 |
| 1483 | + tset.append(sub_case) |
| 1484 | + for block_case_index in range(sub_case_index, sub_num + 1): |
| 1485 | + sub_case = copy.deepcopy(tcase) |
| 1486 | + sub_case.set("id", "/".join([case_id, str(block_case_index)])) |
| 1487 | + sub_case.set("purpose", "/".join([case_purpose, str(block_case_index)])) |
| 1488 | + sub_case.remove(sub_case.find("./result_info")) |
| 1489 | + result_info = etree.SubElement(sub_case, "result_info") |
| 1490 | + actual_result = etree.SubElement(result_info, "actual_result") |
| 1491 | + actual_result.text = 'BLOCK' |
| 1492 | + sub_case.set("result", actual_result.text) |
| 1493 | + stdout = etree.SubElement(result_info, "stdout") |
| 1494 | + stdout.text = "None result of this sub test case, please check the test case or \"subcase\" number." |
| 1495 | + block_case_index += 1 |
| 1496 | + tset.append(sub_case) |
| 1497 | + tset.remove(tcase) |
1440 | 1498 |
|
1441 | 1499 | def __expand_subcases_bdd(tset, tcase, sub_num, result_msg):
|
1442 | 1500 | sub_case_index = 1
|
@@ -1732,6 +1790,8 @@ def __write_by_caseid(tset, case_results):
|
1732 | 1790 | else:
|
1733 | 1791 | if tset.get('type') == 'nodeunit':
|
1734 | 1792 | __expand_subcases_nodeunit(tset, tcase, sub_num, result_msg)
|
| 1793 | + elif tset.get('type') == 'mocha': |
| 1794 | + __expand_subcases_mocha(tset, tcase, sub_num, result_msg) |
1735 | 1795 | else:
|
1736 | 1796 | __expand_subcases(tset, tcase, sub_num, result_msg)
|
1737 | 1797 |
|
|
0 commit comments