import argparse
import json
import os.path
import platform
import re
import traceback
import winreg
import pytest
BASE_DIR = os.path.dirname(__file__)
def distribute_testcase(test_num):
with open(os.path.join(BASE_DIR, 'testcases.json'), 'r', encoding='utf-8') as f:
test_cases_list = [case.get('case_file') for case in json.load(f)]
if test_num == '1/2':
selected = test_cases_list[0:1] + test_cases_list[8:]
elif test_num == '2/2':
selected = test_cases_list[0:8]
else:
selected = test_cases_list
return selected
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='manual to this scription')
parser.add_argument('--test_num', type=str, default='1/1')
parser.add_argument('--save_path', type=str, default='./report')
parser.add_argument('--device_num', type=str, default='')
args = parser.parse_args()
test_num = args.test_num
sn = args.device_num
save_path = os.path.join(args.save_path, sn)
print('[current dir]{}'.format(os.getcwd()))
run_params = ['-vs', '--sn={}'.format(sn)]
try:
report = os.path.join(args.save_path, '{}_report.html'.format(sn))
run_params.extend(['--html={}'.format(report), '--self-contained-html', '--capture=sys'])
selected_cases = distribute_testcase(test_num)
run_params.extend(selected_cases)
print(run_params)
pytest.main(run_params)
system = platform.system().lower()
if system.startswith('win'):
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SYSTEM\CurrentControlSet\Control\Nls\CodePage")
value, reg_type = winreg.QueryValueEx(key, "ACP")
winreg.CloseKey(key)
if "65001" == value:
encoding = 'utf-8'
else:
encoding = 'gbk'
else:
encoding = 'utf-8'
with open(report, 'r+', encoding=encoding) as f:
text = f.read()
passed = int(re.findall(r'<span class="passed">(\d+)\s*passed', text, re.I)[0])
if passed == len(selected_cases):
print('SmokeTest: End of check, test succeeded!')
else:
print('SmokeTest: End of check, SmokeTest find some fatal problems! passed {}/{}'.format(passed, len(selected_cases)))
except:
print('SmokeTest: End of check, SmokeTest find some fatal problems! {}'.format(traceback.format_exc()))