• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import argparse
2import os.path
3import shutil
4import sys
5
6from xdevice.__main__ import main_process
7from xdevice._core.report.result_reporter import ResultReporter
8from xml.dom.minidom import parse
9import pandas as pd
10from datetime import datetime
11
12BASE_DIR = os.path.dirname(__file__)
13
14TEST_CASE_MUST = [
15    'Launcher',
16    'ProcessCheck',
17    'APLCheck',
18    'ACLCheck',
19]
20
21# 根据用例耗时分配的两台设备跑的用例,使两台设备跑的时间都差不多在2min
22TEST_CASE_DEVICE1 = [
23    'SettingsWifi',
24    'CrashCheck',
25    'Photos',
26    'Contacts',
27    'Mms',
28    'DistributedMusicPlayer'
29]
30
31TEST_CASE_DEVICE2 = [
32    'Camera',
33    'NotificationBar',
34    'Note',
35]
36
37
38def get_test_result(report_path):
39    try:
40        if not os.path.exists(report_path):
41            return False
42        rst = ResultReporter.get_task_info_params(report_path)
43        unsuccessful_params = rst.get('unsuccessful_params')
44        for case, step in unsuccessful_params.items():
45            if step:
46                return False
47        return True
48    except:
49        return False
50
51
52def collect_test_result(report_path):
53    xml_report = os.path.join(report_path, 'summary_report.xml')
54    if not os.path.exists(xml_report):
55        return
56    timestamp = datetime.fromtimestamp(os.path.getmtime(xml_report))
57    test_date = timestamp.strftime('%Y-%m-%d')
58
59    try:
60        dom = parse(xml_report)
61        data = dom.documentElement
62        test_result = {
63            '用例名': [],
64            '测试结果': [],
65            '耗时': [],
66            '报错信息': [],
67            '报告路径': [],
68        }
69        testcases = data.getElementsByTagName('testsuite')
70        testcase_result = []
71        for t in testcases:
72            module_name = t.getAttribute('modulename')
73            result_kind = t.getAttribute('result_kind')
74            time = t.getAttribute('time')
75            testcase = t.getElementsByTagName('testcase')
76            message = testcase[0].getAttribute('message')
77            line = (module_name, result_kind, time, message, xml_report, test_date)
78            if line not in testcase_result:
79                testcase_result.append(line)
80                # csv
81                test_result['用例名'].append(module_name)
82                test_result['测试结果'].append(result_kind)
83                test_result['耗时'].append(time)
84                test_result['报错信息'].append(message)
85                test_result['报告路径'].append(xml_report)
86
87        df = pd.DataFrame(test_result)
88
89        with open('D:\\smoke_result_{}.csv'.format(test_date), 'a', newline='') as f:
90            df.to_csv(f, header=f.tell() == 0, index=False, mode='a')
91    except:
92        pass
93
94
95if __name__ == '__main__':
96    argv = sys.argv[1:]
97    parser = argparse.ArgumentParser(description='manual to this scription')
98    parser.add_argument('--config', type=str)
99    parser.add_argument('--test_num', type=str, default='1/1')
100    parser.add_argument('--tools_path', type=str)
101    parser.add_argument('--anwser_path', type=str)
102    parser.add_argument('--save_path', type=str)
103    parser.add_argument('--device_num', type=str)
104    parser.add_argument('--pr_url', type=str)
105    args = parser.parse_args()
106
107    new_cmd = 'run'
108    # 指定设备sn
109    if not args.device_num:
110        print("SmokeTest: End of check, test failed!")
111        sys.exit(98)
112    new_cmd += ' -sn {}'.format(args.device_num)
113    # 测试用例路径
114    tcpath = args.tools_path
115    new_cmd += ' -tcpath {}'.format(tcpath)
116    # 测试的设备编号,1/1表示只有一台设备;1/2表示第一台设备;2/2表示第二台设备
117    if args.test_num == '1/1':
118        new_cmd += ' -l {}'.format(';'.join(TEST_CASE_MUST + TEST_CASE_DEVICE1 + TEST_CASE_DEVICE2))
119    elif args.test_num == '1/2':
120        new_cmd += ' -l {}'.format(';'.join(TEST_CASE_MUST + TEST_CASE_DEVICE1))
121    elif args.test_num == '2/2':
122        new_cmd += ' -l {}'.format(';'.join(TEST_CASE_MUST + TEST_CASE_DEVICE2))
123    # 指定报告生成路径
124    report_path = args.save_path
125    new_cmd += ' -rp {} -ta screenshot:true'.format(report_path)
126    # 测试资源路径
127    # respath = args.anwser_path
128    # new_cmd += ' -respath {}'.format(respath)
129    # shutil.rmtree(os.path.join(BASE_DIR, 'reports'), ignore_errors=True)
130
131    print('SmokeTest Begin >>>>>>>>>>>>')
132    main_process(new_cmd)
133
134    # print('SmokeTest collect test result >>>>>>>>>>>>')
135    # collect_test_result(report_path)
136
137    print('SmokeTest ending >>>>>>>>>>>>')
138    smoke_rst = get_test_result(report_path)
139    if smoke_rst:
140        print("SmokeTest: End of check, test succeeded!")
141        sys.exit(0)
142    print("SmokeTest: End of check, test failed!")
143    sys.exit(99)
144