Coverage for test_utils.py: 36%

39 statements  

« 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日 

4 

5@author: jingyu.wy 

6''' 

7import io 

8import json 

9import os 

10from pathlib import Path 

11from unittest import mock, main 

12 

13from ansible.module_utils import basic as module_utils_basic 

14 

15try: 

16 import coverage 

17 

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() 

24 

25 try: 

26 main() 

27 except SystemExit: 

28 pass 

29 finally: 

30 cov.stop() 

31 cov.save() 

32 

33 # 生成报告 

34 if not os.path.exists('htmlcov'): 

35 os.mkdir('htmlcov') 

36 cov.html_report(directory='htmlcov') 

37 

38except ImportError: 

39 

40 def run_unittest_with_coverage(): 

41 main() 

42 

43 

44def run_module(module_main_fuc:callable, modules_args:dict) -> dict: 

45 """执行模块并捕获输出的通用方法""" 

46 

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() 

51 

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() 

62 

63