diff --git a/README_zh.md b/README_zh.md
index 5b8562806d49182c8955b2bb38d3cb0ef2bfd91b..e3339f926b2596467c5370f8345a02fd4ca17708 100755
--- a/README_zh.md
+++ b/README_zh.md
@@ -1147,6 +1147,7 @@ reports/latest
2)安装dos2unix, 安装命令:apt install dos2unix.
3)安装lxml, 安装命令: pip install lxml
4)安装selectolax, 安装命令: pip install selectolax
+ 5)安装CppHeaderParser, 安装命令 pip install CppHeaderParser
4. 远程映射设备,修改usr_config.xml中的ip号,设备映射方式查看上面介绍的远程端口映射,
diff --git a/localCoverage/coverage_tools.py b/localCoverage/coverage_tools.py
index dd5998391f1648eadcabc1734e813550ab2796d9..fd9d8d75e255afa69a381024d47c2197151d92be 100644
--- a/localCoverage/coverage_tools.py
+++ b/localCoverage/coverage_tools.py
@@ -52,7 +52,7 @@ def get_subsystem_config(part_list, developer_path):
def copy_coverage(developer_path):
- print("[*************** Start TO Get Coverage Report ***************]")
+ print("*" * 40, "Start TO Get Code Coverage Report", "*" * 40)
coverage_path = os.path.join(developer_path, "reports/coverage")
code_path = os.path.join(
developer_path, "localCoverage/codeCoverage/results/coverage"
@@ -134,8 +134,8 @@ def get_subsystem_name(part_list, product_name):
return ""
-def execute_interface_cov_tools(subsystem_str, developer_path):
- print("[*************** Start TO Get Interface Coverage Report ***************]")
+def execute_interface_cov_tools(partname_str, developer_path):
+ print("*" * 40, "Start TO Get Interface Coverage Report", "*" * 40)
innerkits_json_path = os.path.join(
developer_path,
"localCoverage/interfaceCoverage/get_innerkits_json.py"
@@ -146,14 +146,12 @@ def execute_interface_cov_tools(subsystem_str, developer_path):
developer_path,
"localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py"
)
- subprocess.run("python3 %s %s" % (interface_path, subsystem_str), shell=True)
+ subprocess.run("python3 %s %s" % (interface_path, partname_str), shell=True)
if __name__ == '__main__':
testpart_args = sys.argv[1]
- subsystem_args = sys.argv[2]
test_part_list = testpart_args.split("testpart=")[1].split(",")
- subsystem_args_str = subsystem_args.split("subsystem=")[1]
current_path = os.getcwd()
root_path = current_path.split("/test/testfwk/developer_test")[0]
@@ -174,6 +172,12 @@ if __name__ == '__main__':
# 执行代码覆盖率
execute_code_cov_tools(developer_test_path)
+ # 执行接口覆盖率
+ if len(test_part_list) > 0:
+ execute_interface_cov_tools(testpart_args, developer_test_path)
+ else:
+ print("subsystem or part without!")
+
# 源代码还原
after_lcov_branch_path = os.path.join(
developer_test_path, "localCoverage/restore_comment/after_lcov_branch.py")
@@ -189,3 +193,5 @@ if __name__ == '__main__':
print(r"See the code coverage report in: "
r"/test/testfwk/developer_test/localCoverage/codeCoverage/results/coverage/reports/cxx/html")
+ print(r"See the interface coverage report in: "
+ r"/test/testfwk/developer_test/localCoverage/interfaceCoverage/results/coverage/interface_kits")
diff --git a/localCoverage/interfaceCoverage/get_innerkits_json.py b/localCoverage/interfaceCoverage/get_innerkits_json.py
index b85ddaadab6c8aed1fd7f7f3634a1394251b8669..f1cc62f02ee40d21b4c13bc0fdb4360fcf9b4d29 100644
--- a/localCoverage/interfaceCoverage/get_innerkits_json.py
+++ b/localCoverage/interfaceCoverage/get_innerkits_json.py
@@ -27,14 +27,14 @@ def _init_sys_config():
sys.path.insert(0, sys.localcoverage_path)
-def gen_parts_info_json(folder_list, output_json_path):
+def gen_parts_info_json(folder_list, output_json_path, target_cpu):
"""
根据部件信息,生成字典至json文件中
"""
if len(folder_list) != 0:
data_dict = {}
for folder_str in folder_list:
- data_dict[folder_str] = f"innerkits/ohos-arm64/{folder_str}"
+ data_dict[folder_str] = f"innerkits/ohos-{target_cpu}/{folder_str}"
output_json_path = os.path.join(output_json_path, "kits_modules_info.json")
json_str = json.dumps(data_dict, indent=2)
with open(output_json_path, "w") as json_file:
@@ -58,16 +58,17 @@ def get_parts_list(path):
if __name__ == "__main__":
current_path = os.getcwd()
_init_sys_config()
- from localCoverage.utils import get_product_name, coverage_command
+ from localCoverage.utils import get_product_name, coverage_command, get_target_cpu
root_path = current_path.split("/test/testfwk/developer_test")[0]
product_name = get_product_name(root_path)
+ cpu_type = get_target_cpu(root_path)
part_info_path = os.path.join(
- root_path, "out", product_name, "innerkits/ohos-arm64"
+ root_path, "out", product_name, "innerkits/ohos-%s" % cpu_type
)
json_path = os.path.join(
- root_path, "out", product_name, "packages/phone/innerkits/ohos-arm64"
+ root_path, "out", product_name, "packages/phone/innerkits/ohos-%s" % cpu_type
)
coverage_command("mkdir -p %s" % json_path)
part_list = get_parts_list(part_info_path)
- gen_parts_info_json(part_list, json_path)
+ gen_parts_info_json(part_list, json_path, cpu_type)
diff --git a/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py b/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py
index 415b93a5023da27a2b9986ecc2e83d22d99dd5e8..9e59f4b4bb6042b002d24c604dfd1b7ac983c4c6 100644
--- a/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py
+++ b/localCoverage/interfaceCoverage/interfaceCoverage_gcov_lcov.py
@@ -54,13 +54,12 @@ def get_subsystem_part_list(project_rootpath):
subsystme_part_dict = {}
subsystem_part_config_filepath = os.path.join(
project_rootpath, "out", product_name, "build_configs/infos_for_testfwk.json")
- print(subsystem_part_config_filepath)
if os.path.exists(subsystem_part_config_filepath):
try:
with open(subsystem_part_config_filepath, 'r') as f:
data = json.load(f)
except IOError:
- print("Error for open subsystem config file: ")
+ print("Error for open subsystem config file. ")
if not data:
print("subsystem_part config file error.")
else:
@@ -184,7 +183,7 @@ def get_pubilc_func_list_from_headfile(cxx_header_filepath):
func_returntype)
)
except CppHeaderParser.CppParseError:
- print("error")
+ print("")
return pubilc_func_list
@@ -205,8 +204,6 @@ def get_sdk_interface_func_list(part_name):
print("get interface error ", sdk_path)
else:
print("Error: %s is not exist." % sdk_path)
-
- print("interface_func_list:", interface_func_list)
return interface_func_list
@@ -221,9 +218,9 @@ def get_function_info_string(func_string):
return function_info
-def get_covered_function_list(subsystem_name):
+def get_covered_function_list(part_name):
covered_function_list = []
- file_name = f"{subsystem_name}_strip.info"
+ file_name = f"{part_name}_strip.info"
file_path = os.path.join(SUB_SYSTEM_INFO_PATH, file_name)
if os.path.exists(file_path):
with open(file_path, "r") as fd:
@@ -233,12 +230,13 @@ def get_covered_function_list(subsystem_name):
temp_list = sub_line_string.split(",")
if len(temp_list) == 2 and int(temp_list[0]) != 0:
func_info = get_function_info_string(temp_list[1])
- if "" == func_info:
+ after_func_info = func_info.decode("utf-8")
+ if "" == after_func_info:
continue
- func_info = func_info.replace("\n", "")
- if func_info == temp_list[1] and func_info.startswith("_"):
+ after_func_info = after_func_info.replace("\n", "")
+ if after_func_info == temp_list[1] and after_func_info.startswith("_"):
continue
- covered_function_list.append(func_info)
+ covered_function_list.append(after_func_info)
else:
pass
return covered_function_list
@@ -299,7 +297,7 @@ def get_function_para_count(func_info):
return len(para_list)
-def get_covered_result_data(public_interface_func_list, covered_func_list, subsystem_name):
+def get_covered_result_data(public_interface_func_list, covered_func_list):
coverage_result_list = []
for item in public_interface_func_list:
data_list = list(item)
@@ -350,18 +348,16 @@ def get_covered_result_data(public_interface_func_list, covered_func_list, subsy
return coverage_result_list
-def get_interface_coverage_result_list(subsystem_name, subsystem_part_dict):
- part_list = subsystem_part_dict.get(subsystem_name, [])
+def get_interface_coverage_result_list(part_name):
public_interface_func_list = []
- for part_str in part_list:
- try:
- interface_func_list = get_sdk_interface_func_list(part_str)
- public_interface_func_list.extend(interface_func_list)
- except Exception:
- print("####")
- covered_func_list = get_covered_function_list(subsystem_name)
+ try:
+ interface_func_list = get_sdk_interface_func_list(part_name)
+ public_interface_func_list.extend(interface_func_list)
+ except Exception:
+ print("####")
+ covered_func_list = get_covered_function_list(part_name)
interface_coverage_result_list = get_covered_result_data(
- public_interface_func_list, covered_func_list, subsystem_name)
+ public_interface_func_list, covered_func_list)
return interface_coverage_result_list
@@ -372,7 +368,7 @@ def get_coverage_data(data_list):
for item in data_list:
if "Y" == item[2] or "Recorded" == item[2]:
covered_count += 1
- coverage = str(covered_count * 100 / total_count) + "%"
+ coverage = str("%.2f" % (covered_count * 100 / total_count)) + "%"
else:
coverage = "0%"
return covered_count, coverage
@@ -392,7 +388,7 @@ def get_summary_data(interface_data_list):
total_count += len(data_list)
covered_count += count
if 0 != total_count:
- total_coverage = str(covered_count * 100 / total_count) + "%"
+ total_coverage = str("%.2f" % (covered_count * 100 / total_count)) + "%"
summary_list.append(["Summary", total_count, covered_count, total_coverage])
return summary_list
@@ -434,14 +430,12 @@ def make_coverage_result_file(interface_data_list, output_path, title_name):
make_result_file(interface_data_list, summary_list, output_path, title_name)
-def make_interface_coverage_result():
- subsystem_name_list = system_name_list
+def make_interface_coverage_result(part_list):
interface_data_list = []
- subsystem_part_dict = get_subsystem_part_list(CODEPATH)
- for subsystem_name in subsystem_name_list:
+ for part_name in part_list:
coverage_result_list = get_interface_coverage_result_list(
- subsystem_name, subsystem_part_dict)
- interface_data_list.append([subsystem_name, coverage_result_list])
+ part_name)
+ interface_data_list.append([part_name, coverage_result_list])
make_coverage_result_file(interface_data_list, OUTPUT_REPORT_PATH,
"Inner Interface")
@@ -449,19 +443,22 @@ def make_interface_coverage_result():
if __name__ == "__main__":
current_path = os.getcwd()
_init_sys_config()
- from localCoverage.utils import get_product_name
+ from localCoverage.utils import get_product_name, get_target_cpu
product_name = get_product_name(CODEPATH)
- PATH_INFO_PATH = "out/{}/innerkits/ohos-arm64".format(product_name)
- OUTPUT_JSON_PATH = "out/{}/packages/phone/innerkits/ohos-arm64".format(product_name)
- KIT_MODULES_INFO = "out/{}/packages/phone/innerkits/ohos-arm64/kits_modules_info.json".format(product_name)
-
- system_args = sys.argv[1]
- system_name_list = system_args.split(",")
+ cpu_type = get_target_cpu(CODEPATH)
+ PATH_INFO_PATH = "out/{}/innerkits/ohos-{}".format(product_name, cpu_type)
+ OUTPUT_JSON_PATH = "out/{}/packages/phone/innerkits/ohos-{}".format(
+ product_name, cpu_type)
+ KIT_MODULES_INFO = "out/{}/packages/phone/innerkits/ohos-{}/kits_modules_info.json".format(
+ product_name, cpu_type)
+
+ part_args = sys.argv[1]
+ part_name_list = part_args.split("testpart=")[1].split(",")
get_innerkits_json.gen_parts_info_json(
get_innerkits_json.get_parts_list(os.path.join(CODEPATH, PATH_INFO_PATH)),
- os.path.join(CODEPATH, OUTPUT_JSON_PATH)
+ os.path.join(CODEPATH, OUTPUT_JSON_PATH), cpu_type
)
- if len(system_name_list) > 0:
- make_interface_coverage_result()
+ if len(part_name_list) > 0:
+ make_interface_coverage_result(part_name_list)
else:
print("subsystem_name not exists!")
diff --git a/localCoverage/interfaceCoverage/make_report.py b/localCoverage/interfaceCoverage/make_report.py
index 7a1dfd1b81c035276a02641e1bcaa0ce81cde8ef..c9a6d5e865f90b1c805b89403ccff65ea5987cc3 100644
--- a/localCoverage/interfaceCoverage/make_report.py
+++ b/localCoverage/interfaceCoverage/make_report.py
@@ -104,7 +104,6 @@ def create_title(reportpath, title_name, summary_list):
report_title = content + """
-  |
Summary Report
接口总数%s, 已覆盖%s, 未覆盖%s
@@ -113,7 +112,6 @@ def create_title(reportpath, title_name, summary_list):
|
"""
- summary_list.sort(key=sort_by_field_element, reverse=False)
subsystems = ""
count = 0
for item in summary_list:
@@ -140,7 +138,7 @@ def create_summary(reportpath, summary_list):
table_head = """
- SubsystemName |
+ PartName |
TotalCount |
CoveredCount |
Coverage |
@@ -179,7 +177,7 @@ def create_table_test(reportpath, subsystem_name, datalist, total_count, covered
table_start = """"""
table_head = """
- SubsystemName |
+ PartName |
ClassName |
InterfaceName |
IsCovered |
@@ -201,7 +199,7 @@ def create_table_test(reportpath, subsystem_name, datalist, total_count, covered
"""
try:
with open(reportpath, "a") as report:
- print("subsystem_name==" + subsystem_name)
+ print("part_name==" + subsystem_name)
tabletitle = table_title % (subsystem_name)
print("tabletitle==" + tabletitle)
tabletitle = "" + tabletitle + "
"
@@ -224,7 +222,7 @@ def create_table_test(reportpath, subsystem_name, datalist, total_count, covered
"" + str(line[2]) + "")
report.write(content)
if 0 != total_count:
- coverage = str(covered_count * 100 / total_count) + "%"
+ coverage = str("%.2f" % (covered_count * 100 / total_count)) + "%"
else:
coverage = "0%"
coverage = table_summary % (total_count, covered_count, coverage)
diff --git a/localCoverage/restore_comment/after_lcov_branch.py b/localCoverage/restore_comment/after_lcov_branch.py
index 34a8d1beb8317e2be6c8b8dcc0f3c0d63e435940..28e9ccde7573cd3ab499c8e1c2ca6a735a633aeb 100644
--- a/localCoverage/restore_comment/after_lcov_branch.py
+++ b/localCoverage/restore_comment/after_lcov_branch.py
@@ -50,7 +50,6 @@ def recover_source_file(cpp_arr_list, keys):
print("no any .cpp file here")
return
- print("[********** Start Recover Source File **********]")
for path in cpp_arr_list:
if not os.path.exists(path):
return
@@ -68,7 +67,6 @@ def recover_source_file(cpp_arr_list, keys):
os.remove(path)
subprocess.Popen("mv %s %s" % (f"{path.split('.')[0]}_bk.html", path),
shell=True).communicate()
- print("[********** End Recover Source File **********]")
if __name__ == '__main__':
diff --git a/localCoverage/utils.py b/localCoverage/utils.py
index 458cbbb825ab28a952e6a7aa80c1c4ba073fce12..74d75abf22828d1102844595327dc05b47e70eb5 100644
--- a/localCoverage/utils.py
+++ b/localCoverage/utils.py
@@ -64,6 +64,22 @@ def get_product_name(root_path):
return ""
+def get_target_cpu(root_path):
+ """
+ 从ohos_config.json中获取编译cpu
+ :param root_path: ohos_config.json所在的目录
+ :return: 编译产量生成的路径
+ """
+ ohos_config = os.path.join(root_path, "ohos_config.json")
+ json_obj = json_parse(ohos_config)
+ if json_obj:
+ target_cpu = json_obj["target_cpu"]
+ return target_cpu
+
+ logger("{} not exist.".format(ohos_config), "ERROR")
+ return ""
+
+
def shell_command(command_list: list):
"""
命令行执行命令
diff --git a/src/core/command/run.py b/src/core/command/run.py
index b6c384f6e05399fe68db81baba32f5d4f135fff3..2202613afb01dc185c1f4a31d6879491e6d141c0 100644
--- a/src/core/command/run.py
+++ b/src/core/command/run.py
@@ -306,10 +306,9 @@ class Run(object):
if not options.pullgcda:
cov_main_file_path = os.path.join(sys.framework_root_dir, "localCoverage/coverage_tools.py")
testpart = ",".join(list(map(str, options.partname_list)))
- subsystem = ",".join(list(map(str, options.subsystem)))
if os.path.exists(cov_main_file_path):
- subprocess.run("python3 %s testpart=%s subsystem=%s" % (
- cov_main_file_path, testpart, subsystem), shell=True)
+ subprocess.run("python3 %s testpart=%s" % (
+ cov_main_file_path, testpart), shell=True)
else:
print(f"{cov_main_file_path} not exists.")
return