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