1import argparse 2import json 3import os.path 4import platform 5import re 6import traceback 7 8import pytest 9 10BASE_DIR = os.path.dirname(__file__) 11 12 13def distribute_testcase(test_num): 14 with open(os.path.join(BASE_DIR, 'testcases.json'), 'r', encoding='utf-8') as f: 15 test_cases_list = [case.get('case_file') for case in json.load(f)] 16 if test_num == '1/2': 17 selected = test_cases_list[0:1] + test_cases_list[8:] 18 elif test_num == '2/2': 19 selected = test_cases_list[0:8] 20 else: 21 selected = test_cases_list 22 return selected 23 24 25if __name__ == '__main__': 26 parser = argparse.ArgumentParser(description='manual to this scription') 27 parser.add_argument('--test_num', type=str, default='1/1') 28 parser.add_argument('--save_path', type=str, default='./report') 29 parser.add_argument('--device_num', type=str, default='') 30 parser.add_argument('--pr', type=str, default='') 31 args = parser.parse_args() 32 33 test_num = args.test_num 34 sn = args.device_num 35 save_path = os.path.join(args.save_path, sn) 36 pr = args.pr 37 38 print('[current dir]{}'.format(os.getcwd())) 39 40 run_params = ['-vs', '--sn={}'.format(sn)] 41 42 try: 43 44 # 报告保存路径 45 report = os.path.join(args.save_path, '{}_report.html'.format(sn)) 46 run_params.extend(['--html={}'.format(report), '--self-contained-html', '--capture=sys']) 47 48 # 用例选择 49 selected_cases = distribute_testcase(test_num) 50 run_params.extend(selected_cases) 51 52 print(run_params) 53 pytest.main(run_params) 54 55 system = platform.system().lower() 56 if system.startswith('win'): 57 encoding = 'gbk' 58 else: 59 encoding = 'utf-8' 60 61 with open(report, 'r+', encoding=encoding) as f: 62 text = f.read() 63 passed = int(re.findall(r'<span class="passed">(\d+)\s*passed', text, re.I)[0]) 64 # if encoding == 'gbk': 65 # text = text.replace('<meta charset="utf-8"/>', '<meta charset="gbk"/>') 66 # f.seek(0) 67 # f.write(text) 68 if passed == len(selected_cases): 69 print('SmokeTest: End of check, test succeeded!') 70 else: 71 print('SmokeTest: End of check, SmokeTest find some fatal problems! passed {}/{}'.format(passed, len(selected_cases))) 72 except: 73 print('SmokeTest: End of check, SmokeTest find some fatal problems! {}'.format(traceback.format_exc())) 74