Coverage for test_utils.py: 36%
39 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-22 16:13 +0800
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-22 16:13 +0800
1# encoding: utf-8
2'''
3Created on 2025年3月7日
5@author: jingyu.wy
6'''
7import io
8import json
9import os
10from pathlib import Path
11from unittest import mock, main
13from ansible.module_utils import basic as module_utils_basic
15try:
16 import coverage
18 def run_unittest_with_coverage():
19 project = str(Path(__file__).parent.parent.resolve())
20 cov = coverage.Coverage(
21 source=[project], # 指定统计的代码目录
22 )
23 cov.start()
25 try:
26 main()
27 except SystemExit:
28 pass
29 finally:
30 cov.stop()
31 cov.save()
33 # 生成报告
34 if not os.path.exists('htmlcov'):
35 os.mkdir('htmlcov')
36 cov.html_report(directory='htmlcov')
38except ImportError:
40 def run_unittest_with_coverage():
41 main()
44def run_module(module_main_fuc:callable, modules_args:dict) -> dict:
45 """执行模块并捕获输出的通用方法"""
47 modules_args = {'ANSIBLE_MODULE_ARGS': modules_args}
48 stdin = io.BytesIO(json.dumps(modules_args).encode("utf-8"))
49 stdin.buffer = stdin
50 stdout = io.StringIO()
52 with mock.patch.multiple("sys", **{"stdin":stdin, "stdout":stdout, "argv":[]}):
53 try:
54 module_utils_basic._ANSIBLE_ARGS = None
55 module_main_fuc()
56 except SystemExit:
57 pass
58 try:
59 return json.loads(stdout.getvalue())
60 except Exception:
61 return stdout.getvalue()