From 8bd93fcca3fbcad5f5c993c64c6449266a9aa13c Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Wed, 16 Aug 2023 13:31:05 +0800 Subject: [PATCH 01/15] =?UTF-8?q?=E5=88=9D=E7=89=88=E4=BA=A7=E6=B5=8B?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=20-=20=E6=98=BE=E7=A4=BA=E6=89=80=E6=9C=89?= =?UTF-8?q?=E6=B5=8B=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- file_handler.py | 10 +- main.py | 727 ++++++++++++++-------------------------------- module_test.py | 28 +- serial_handler.py | 4 +- serial_list.py | 4 +- sort_setting.json | 7 +- 6 files changed, 266 insertions(+), 514 deletions(-) diff --git a/file_handler.py b/file_handler.py index 3946440..cec7c9d 100644 --- a/file_handler.py +++ b/file_handler.py @@ -20,21 +20,15 @@ class ExcelHandler(object): handle test result Excel excel_file: filename include full path """ - def __init__(self, excel_file, sheet_name): + def __init__(self, excel_file): self.file = excel_file if os.path.exists(self.file): pass else: wb = openpyxl.Workbook() - ws = wb[wb.sheetnames[0]] - ws.title = sheet_name wb.save(self.file) self.wb = openpyxl.load_workbook(self.file) - if sheet_name in self.wb.sheetnames[0]: - pass - else: - self.wb.create_sheet(sheet_name) - self.ws = self.wb[sheet_name] + self.ws = self.wb[self.wb.sheetnames[0]] def get_rows_columns(self): diff --git a/main.py b/main.py index 25fc84d..db000cf 100644 --- a/main.py +++ b/main.py @@ -26,22 +26,21 @@ import codecs import json -# PROJECT_ABSOLUTE_PATH = os.path.dirname(os.path.abspath(__file__)) - if hasattr(sys, '_MEIPASS'): PROJECT_ABSOLUTE_PATH = os.path.dirname(os.path.realpath(sys.executable)) else: PROJECT_ABSOLUTE_PATH = os.path.dirname(os.path.abspath(__file__)) + class FactoryFrame(wx.Frame): def __init__(self, *args, **kwargs): kwargs["style"] = kwargs.get("style", 0) | wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self, *args, **kwargs) - self.SetSize((876, 600)) + self.SetSize((1120, 650)) self.Center() # stdout log - # sys.stderr = RedirectErr(self, PROJECT_ABSOLUTE_PATH) - # sys.stdout = RedirectStd(self, PROJECT_ABSOLUTE_PATH) + sys.stderr = RedirectErr(self, PROJECT_ABSOLUTE_PATH) + sys.stdout = RedirectStd(self, PROJECT_ABSOLUTE_PATH) # module log self.logger = ModuleLog() # Menu Bar @@ -59,106 +58,45 @@ def __init__(self, *args, **kwargs): wxg_tmp_menu_1.Append(2001, _(u"工具日志"), "") self.Bind(wx.EVT_MENU, self.__menu_handler, id=2001) wxg_tmp_menu_1.AppendSeparator() - wxg_tmp_menu_1.Append(2002, _(u"工具日志"), "") + wxg_tmp_menu_1.Append(2002, _(u"模块日志"), "") self.Bind(wx.EVT_MENU, self.__menu_handler, id=2002) self.menuBar.Append(wxg_tmp_menu_1, _(u"日志")) self.SetMenuBar(self.menuBar) # Menu Bar end - self.statusBar = self.CreateStatusBar(3) + # self.statusBar = self.CreateStatusBar(3) self.main_panel = wx.Panel(self, wx.ID_ANY) self.load_py = wx.Button(self.main_panel, wx.ID_ANY, _("选择")) self.text_ctrl_py = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) self.load_json = wx.Button(self.main_panel, wx.ID_ANY, _("选择")) self.text_ctrl_json = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.button_3 = wx.Button(self.main_panel, wx.ID_ANY, _("全部开始"), style=wx.BU_TOP) - self.button_4 = wx.Button(self.main_panel, 100, _("开始")) - self.text_ctrl_7 = wx.TextCtrl(self.main_panel, 10, "", style=wx.TE_READONLY) - self.text_ctrl_8 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_9 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_10 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_11 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.button_2 = wx.Button(self.main_panel, 200, _("日志")) - - self.button_5 = wx.Button(self.main_panel, 101, _("开始")) - self.text_ctrl_13 = wx.TextCtrl(self.main_panel, 11, "", style=wx.TE_READONLY) - self.text_ctrl_14 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_15 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_16 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_17 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.button_12 = wx.Button(self.main_panel, 201, _("日志")) - - self.button_6 = wx.Button(self.main_panel, 102, _("开始")) - self.text_ctrl_19 = wx.TextCtrl(self.main_panel, 12, "", style=wx.TE_READONLY) - self.text_ctrl_20 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_21 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_22 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_23 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.button_13 = wx.Button(self.main_panel, 202, _("日志")) - - self.button_7 = wx.Button(self.main_panel, 103, _("开始")) - self.text_ctrl_25 = wx.TextCtrl(self.main_panel, 13, "", style=wx.TE_READONLY) - self.text_ctrl_26 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_27 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_28 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_29 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.button_14 = wx.Button(self.main_panel, 203, _("日志")) - - self.button_8 = wx.Button(self.main_panel, 104, _("开始")) - self.text_ctrl_31 = wx.TextCtrl(self.main_panel, 14, "", style=wx.TE_READONLY) - self.text_ctrl_32 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_33 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_34 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_35 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.button_15 = wx.Button(self.main_panel, 204, _("日志")) - - self.button_9 = wx.Button(self.main_panel, 105, _("开始")) - self.text_ctrl_37 = wx.TextCtrl(self.main_panel, 15, "", style=wx.TE_READONLY) - self.text_ctrl_38 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_39 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_40 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_41 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.button_16 = wx.Button(self.main_panel, 205, _("日志")) - - self.button_10 = wx.Button(self.main_panel, 106, _("开始")) - self.text_ctrl_43 = wx.TextCtrl(self.main_panel, 16, "", style=wx.TE_READONLY) - self.text_ctrl_44 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_45 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_46 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_47 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.button_17 = wx.Button(self.main_panel, 206, _("日志")) - - self.button_11 = wx.Button(self.main_panel, 107, _("开始")) - self.text_ctrl_49 = wx.TextCtrl(self.main_panel, 17, "", style=wx.TE_READONLY) - self.text_ctrl_50 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_51 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_52 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.text_ctrl_53 = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - self.button_18 = wx.Button(self.main_panel, 207, _("日志")) - - # button list - self.button_start_list = (self.button_4, self.button_5, self.button_6, self.button_7, self.button_8, self.button_9, self.button_10, self.button_11) - self.button_log_list = (self.button_2, self.button_12, self.button_13, self.button_14, self.button_15, self.button_16, self.button_17, self.button_18) - [i.Enable(False) for i in self.button_start_list] - [i.Enable(False) for i in self.button_log_list] - # text_ctrl list - self.port_ctrl_list = (self.text_ctrl_7, self.text_ctrl_13, self.text_ctrl_19, self.text_ctrl_25, - self.text_ctrl_31, self.text_ctrl_37, self.text_ctrl_43, self.text_ctrl_49) - self.port_imei_list = (self.text_ctrl_8, self.text_ctrl_14, self.text_ctrl_20, self.text_ctrl_26, - self.text_ctrl_32, self.text_ctrl_38, self.text_ctrl_44, self.text_ctrl_50) - self.port_iccid_list = (self.text_ctrl_9, self.text_ctrl_15, self.text_ctrl_21, self.text_ctrl_27, - self.text_ctrl_33, self.text_ctrl_39, self.text_ctrl_45, self.text_ctrl_51) - self.port_time_list = (self.text_ctrl_10, self.text_ctrl_16, self.text_ctrl_22, self.text_ctrl_28, - self.text_ctrl_34, self.text_ctrl_40, self.text_ctrl_46, self.text_ctrl_52) - self.port_result_list = (self.text_ctrl_11, self.text_ctrl_17, self.text_ctrl_23, self.text_ctrl_29, - self.text_ctrl_35, self.text_ctrl_41, self.text_ctrl_47, self.text_ctrl_53) - self.__py_exec_result = list(" ") * 8 - self.__py_test_fp = None # 测试的脚本文件 + + self.button_all_start = wx.Button(self.main_panel, wx.ID_ANY, _("全部开始")) + + self.button_start_list = [] + self.ListCtrl_list = [] + self.port_ctrl_list = [] + self.port_imei_list = [] + self.port_iccid_list = [] + for i in range(4): + ListCtrl = wx.ListCtrl(self.main_panel, 200+i, style=wx.LC_HRULES | wx.LC_REPORT | wx.LC_SINGLE_SEL | wx.LC_VRULES) + ListCtrl.SetMinSize((-1, 250)) + ListCtrl.AppendColumn(_(u"测项"), format=wx.LIST_FORMAT_LEFT, width=130) + ListCtrl.AppendColumn(_(u"测试方式"), format=wx.LIST_FORMAT_LEFT, width=70) + ListCtrl.AppendColumn(_(u"测试结果"), format=wx.LIST_FORMAT_LEFT, width=70) + + button = wx.Button(self.main_panel, 100+i, _("开始")) + text_ctrl = wx.TextCtrl(self.main_panel, 300+i, "", style=wx.TE_READONLY) + # text_ctrl_imei = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) + # text_ctrl_iccid = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) + + self.ListCtrl_list.append(ListCtrl) + self.button_start_list.append(button) + self.port_ctrl_list.append(text_ctrl) + # self.port_imei_list.append(text_ctrl_imei) + # self.port_iccid_list.append(text_ctrl_iccid) + self.__exec_py_cmd_list = ["from usr.test import TestBase"] - self.__test_result = [0 for i in range(8)] # 测试结果 - self.statusBarTimer = wx.Timer(self) - self.Bind(wx.EVT_TIMER, self.__status_bar_timer_fresh, self.statusBarTimer) - self.statusBarTimer.Start(100) - pub.subscribe(self.__update_status_bar, "statusBarUpdate") + self.__init_excel() # event message queue self.message_queue = Queue(maxsize=10) @@ -168,29 +106,14 @@ def __init__(self, *args, **kwargs): # bind Func self.Bind(wx.EVT_BUTTON, self.__load_py_file, self.load_py) self.Bind(wx.EVT_BUTTON, self.__load_json_file, self.load_json) - self.Bind(wx.EVT_BUTTON, self.test_all_start, self.button_3) - self.Bind(wx.EVT_BUTTON, self.test_start, self.button_4) - self.Bind(wx.EVT_BUTTON, self.test_start, self.button_5) - self.Bind(wx.EVT_BUTTON, self.test_start, self.button_6) - self.Bind(wx.EVT_BUTTON, self.test_start, self.button_7) - self.Bind(wx.EVT_BUTTON, self.test_start, self.button_8) - self.Bind(wx.EVT_BUTTON, self.test_start, self.button_9) - self.Bind(wx.EVT_BUTTON, self.test_start, self.button_10) - self.Bind(wx.EVT_BUTTON, self.test_start, self.button_11) - self.Bind(wx.EVT_BUTTON, self.log_terminal, self.button_2) - self.Bind(wx.EVT_BUTTON, self.log_terminal, self.button_12) - self.Bind(wx.EVT_BUTTON, self.log_terminal, self.button_13) - self.Bind(wx.EVT_BUTTON, self.log_terminal, self.button_14) - self.Bind(wx.EVT_BUTTON, self.log_terminal, self.button_15) - self.Bind(wx.EVT_BUTTON, self.log_terminal, self.button_16) - self.Bind(wx.EVT_BUTTON, self.log_terminal, self.button_17) - self.Bind(wx.EVT_BUTTON, self.log_terminal, self.button_18) - self.Bind(wx.EVT_CLOSE, self.close_window) + self.Bind(wx.EVT_BUTTON, self.test_all_start, self.button_all_start) - # bind Timer - self.statusBarTimer = wx.Timer(self) - self.Bind(wx.EVT_TIMER, self.statusbar_fresh, self.statusBarTimer) - self.statusBarTimer.Start(100) + + self.procese_num = 0 + + for i in self.button_start_list: + self.Bind(wx.EVT_BUTTON, self.test_start, i) + self.Bind(wx.EVT_CLOSE, self.close_window) # pub message pub.subscribe(self.port_update, "serialUpdate") @@ -199,85 +122,25 @@ def __init__(self, *args, **kwargs): self.__do_layout() def __set_properties(self): - self.SetTitle("Factory Tool") - # _icon = wx.NullIcon - # _icon.CopyFromBitmap(wx.Bitmap(PROJECT_ABSOLUTE_PATH + "\\images\\quectel.ico", wx.BITMAP_TYPE_ICO)) - # self.SetIcon(_icon) - self.SetBackgroundColour(wx.NullColour) - self.SetForegroundColour(wx.Colour(0, 0, 0)) - self.statusBar.SetStatusWidths([200, -1, 155]) - - # statusbar fields - statusBar_fields = [_(u" Welcome to QuecPython"), _(u" Current status: ready..."), " 0000-00-00 00:00:00"] - for i in range(len(statusBar_fields)): - self.statusBar.SetStatusText(statusBar_fields[i], i) - - self.load_py.SetMinSize((80, 25)) - self.load_json.SetMinSize((80, 25)) - self.text_ctrl_7.SetMinSize((74, 25)) - self.text_ctrl_8.SetMinSize((117, 25)) - self.text_ctrl_9.SetMinSize((123, 25)) - self.text_ctrl_11.SetMinSize((148, 25)) - self.button_2.SetMinSize((98, 25)) - self.text_ctrl_13.SetMinSize((74, 25)) - self.text_ctrl_14.SetMinSize((117, 25)) - self.text_ctrl_15.SetMinSize((123, 25)) - self.text_ctrl_17.SetMinSize((148, 25)) - self.button_12.SetMinSize((98, 25)) - self.text_ctrl_19.SetMinSize((74, 25)) - self.text_ctrl_20.SetMinSize((117, 25)) - self.text_ctrl_21.SetMinSize((123, 25)) - self.text_ctrl_23.SetMinSize((148, 25)) - self.button_13.SetMinSize((98, 25)) - self.text_ctrl_25.SetMinSize((74, 25)) - self.text_ctrl_26.SetMinSize((117, 25)) - self.text_ctrl_27.SetMinSize((123, 25)) - self.text_ctrl_29.SetMinSize((148, 25)) - self.button_14.SetMinSize((98, 25)) - self.text_ctrl_31.SetMinSize((74, 25)) - self.text_ctrl_32.SetMinSize((117, 25)) - self.text_ctrl_33.SetMinSize((123, 25)) - self.text_ctrl_35.SetMinSize((148, 25)) - self.button_15.SetMinSize((98, 25)) - self.text_ctrl_37.SetMinSize((74, 25)) - self.text_ctrl_38.SetMinSize((117, 25)) - self.text_ctrl_39.SetMinSize((123, 25)) - self.text_ctrl_41.SetMinSize((148, 25)) - self.button_16.SetMinSize((98, 25)) - self.text_ctrl_43.SetMinSize((74, 25)) - self.text_ctrl_44.SetMinSize((117, 25)) - self.text_ctrl_45.SetMinSize((123, 25)) - self.text_ctrl_47.SetMinSize((148, 25)) - self.button_17.SetMinSize((98, 25)) - self.text_ctrl_49.SetMinSize((74, 25)) - self.text_ctrl_50.SetMinSize((117, 25)) - self.text_ctrl_51.SetMinSize((123, 25)) - self.text_ctrl_53.SetMinSize((148, 25)) - self.button_18.SetMinSize((98, 25)) + for i in range(4): + self.button_start_list[i].SetMinSize((150, 50)) + self.button_all_start.SetMinSize((150, 50)) def __do_layout(self): sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_2 = wx.BoxSizer(wx.VERTICAL) - sizer_5 = wx.StaticBoxSizer(wx.StaticBox(self.main_panel, wx.ID_ANY, _("工厂测试")), wx.VERTICAL) - sizer_14 = wx.BoxSizer(wx.HORIZONTAL) - sizer_13 = wx.BoxSizer(wx.HORIZONTAL) - sizer_12 = wx.BoxSizer(wx.HORIZONTAL) - sizer_11 = wx.BoxSizer(wx.HORIZONTAL) - sizer_10 = wx.BoxSizer(wx.HORIZONTAL) - sizer_9 = wx.BoxSizer(wx.HORIZONTAL) - sizer_8 = wx.BoxSizer(wx.HORIZONTAL) - sizer_7 = wx.BoxSizer(wx.HORIZONTAL) - sizer_6 = wx.BoxSizer(wx.HORIZONTAL) - sizer_4 = wx.StaticBoxSizer(wx.StaticBox(self.main_panel, wx.ID_ANY, _("选择配置文件")), wx.HORIZONTAL) sizer_3 = wx.StaticBoxSizer(wx.StaticBox(self.main_panel, wx.ID_ANY, _("选择测试脚本")), wx.HORIZONTAL) - sizer_1.Add((20, 4), 0, 0, 0) - sizer_2.Add((20, 4), 0, 0, 0) + sizer_4 = wx.StaticBoxSizer(wx.StaticBox(self.main_panel, wx.ID_ANY, _("选择配置文件")), wx.HORIZONTAL) + sizer_5 = wx.StaticBoxSizer(wx.StaticBox(self.main_panel, wx.ID_ANY, _("工厂测试")), wx.HORIZONTAL) + sizer_3.Add((4, 20), 0, 0, 0) sizer_3.Add(self.load_py, 0, 0, 0) sizer_3.Add((20, 20), 0, 0, 0) sizer_3.Add(self.text_ctrl_py, 1, 0, 0) sizer_3.Add((20, 20), 0, 0, 0) + # sizer_2.Add((5, 20), 0, 0, 0) sizer_2.Add(sizer_3, 0, wx.EXPAND, 0) + sizer_4.Add((4, 20), 0, 0, 0) sizer_4.Add(self.load_json, 0, 0, 0) sizer_4.Add((20, 20), 0, 0, 0) @@ -285,193 +148,24 @@ def __do_layout(self): sizer_4.Add((20, 20), 0, 0, 0) sizer_2.Add((20, 4), 0, 0, 0) sizer_2.Add(sizer_4, 0, wx.EXPAND, 0) - sizer_6.Add((20, 20), 0, 0, 0) - sizer_6.Add(self.button_3, 0, 0, 0) - sizer_6.Add((20, 20), 0, 0, 0) - label_9 = wx.StaticText(self.main_panel, wx.ID_ANY, _(u"端口")) - sizer_6.Add(label_9, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_6.Add((60, 20), 0, 0, 0) - label_10 = wx.StaticText(self.main_panel, wx.ID_ANY, _("IMEI")) - sizer_6.Add(label_10, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_6.Add((100, 20), 0, 0, 0) - label_11 = wx.StaticText(self.main_panel, wx.ID_ANY, _("ICCID")) - sizer_6.Add(label_11, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_6.Add((100, 20), 0, 0, 0) - label_12 = wx.StaticText(self.main_panel, wx.ID_ANY, _(u"测试时间")) - sizer_6.Add(label_12, 1, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_6.Add((10, 20), 0, 0, 0) - label_13 = wx.StaticText(self.main_panel, wx.ID_ANY, _(u"测试结果")) - sizer_6.Add(label_13, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_6.Add((100, 20), 0, 0, 0) - label_14 = wx.StaticText(self.main_panel, wx.ID_ANY, _(u"查看日志")) - sizer_6.Add(label_14, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_6.Add((50, 20), 0, 0, 0) - sizer_5.Add(sizer_6, 0, wx.EXPAND | wx.TOP, 0) - sizer_5.Add((20, 5), 0, 0, 0) - label_15 = wx.StaticText(self.main_panel, wx.ID_ANY, "1", style=wx.ALIGN_CENTER) - label_15.SetMinSize((20, 18)) - sizer_7.Add(label_15, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_7.Add(self.button_4, 0, 0, 0) - sizer_7.Add((20, 20), 0, 0, 0) - sizer_7.Add(self.text_ctrl_7, 0, wx.ALL, 0) - sizer_7.Add((10, 20), 0, 0, 0) - sizer_7.Add(self.text_ctrl_8, 0, 0, 0) - sizer_7.Add((10, 20), 0, 0, 0) - sizer_7.Add(self.text_ctrl_9, 0, 0, 0) - sizer_7.Add((10, 20), 0, 0, 0) - sizer_7.Add(self.text_ctrl_10, 1, 0, 0) - sizer_7.Add((10, 20), 0, 0, 0) - sizer_7.Add(self.text_ctrl_11, 0, 0, 0) - sizer_7.Add((10, 20), 0, 0, 0) - sizer_7.Add(self.button_2, 0, 0, 0) - sizer_7.Add((10, 20), 0, 0, 0) - sizer_5.Add(sizer_7, 0, wx.ALL | wx.EXPAND, 0) - sizer_5.Add((20, 20), 0, 0, 0) - label_16 = wx.StaticText(self.main_panel, wx.ID_ANY, "2", style=wx.ALIGN_CENTER) - label_16.SetMinSize((20, 18)) - sizer_8.Add(label_16, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_8.Add(self.button_5, 0, 0, 0) - sizer_8.Add((20, 20), 0, 0, 0) - sizer_8.Add(self.text_ctrl_13, 0, wx.ALL, 0) - sizer_8.Add((10, 20), 0, 0, 0) - sizer_8.Add(self.text_ctrl_14, 0, 0, 0) - sizer_8.Add((10, 20), 0, 0, 0) - sizer_8.Add(self.text_ctrl_15, 0, 0, 0) - sizer_8.Add((10, 20), 0, 0, 0) - sizer_8.Add(self.text_ctrl_16, 1, 0, 0) - sizer_8.Add((10, 20), 0, 0, 0) - sizer_8.Add(self.text_ctrl_17, 0, 0, 0) - sizer_8.Add((10, 20), 0, 0, 0) - sizer_8.Add(self.button_12, 0, 0, 0) - sizer_8.Add((10, 20), 0, 0, 0) - sizer_5.Add(sizer_8, 0, wx.ALL | wx.EXPAND, 0) - sizer_5.Add((20, 20), 0, 0, 0) - label_17 = wx.StaticText(self.main_panel, wx.ID_ANY, "3", style=wx.ALIGN_CENTER) - label_17.SetMinSize((20, 18)) - sizer_9.Add(label_17, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_9.Add(self.button_6, 0, 0, 0) - sizer_9.Add((20, 20), 0, 0, 0) - sizer_9.Add(self.text_ctrl_19, 0, wx.ALL, 0) - sizer_9.Add((10, 20), 0, 0, 0) - sizer_9.Add(self.text_ctrl_20, 0, 0, 0) - sizer_9.Add((10, 20), 0, 0, 0) - sizer_9.Add(self.text_ctrl_21, 0, 0, 0) - sizer_9.Add((10, 20), 0, 0, 0) - sizer_9.Add(self.text_ctrl_22, 1, 0, 0) - sizer_9.Add((10, 20), 0, 0, 0) - sizer_9.Add(self.text_ctrl_23, 0, 0, 0) - sizer_9.Add((10, 20), 0, 0, 0) - sizer_9.Add(self.button_13, 0, 0, 0) - sizer_9.Add((10, 20), 0, 0, 0) - sizer_5.Add(sizer_9, 0, wx.ALL | wx.EXPAND, 0) - sizer_5.Add((20, 20), 0, 0, 0) - label_18 = wx.StaticText(self.main_panel, wx.ID_ANY, "4", style=wx.ALIGN_CENTER) - label_18.SetMinSize((20, 18)) - sizer_10.Add(label_18, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_10.Add(self.button_7, 0, 0, 0) - sizer_10.Add((20, 20), 0, 0, 0) - sizer_10.Add(self.text_ctrl_25, 0, wx.ALL, 0) - sizer_10.Add((10, 20), 0, 0, 0) - sizer_10.Add(self.text_ctrl_26, 0, 0, 0) - sizer_10.Add((10, 20), 0, 0, 0) - sizer_10.Add(self.text_ctrl_27, 0, 0, 0) - sizer_10.Add((10, 20), 0, 0, 0) - sizer_10.Add(self.text_ctrl_28, 1, 0, 0) - sizer_10.Add((10, 20), 0, 0, 0) - sizer_10.Add(self.text_ctrl_29, 0, 0, 0) - sizer_10.Add((10, 20), 0, 0, 0) - sizer_10.Add(self.button_14, 0, 0, 0) - sizer_10.Add((10, 20), 0, 0, 0) - sizer_5.Add(sizer_10, 0, wx.ALL | wx.EXPAND, 0) - sizer_5.Add((20, 20), 0, 0, 0) - label_19 = wx.StaticText(self.main_panel, wx.ID_ANY, "5", style=wx.ALIGN_CENTER) - label_19.SetMinSize((20, 18)) - sizer_11.Add(label_19, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_11.Add(self.button_8, 0, 0, 0) - sizer_11.Add((20, 20), 0, 0, 0) - sizer_11.Add(self.text_ctrl_31, 0, wx.ALL, 0) - sizer_11.Add((10, 20), 0, 0, 0) - sizer_11.Add(self.text_ctrl_32, 0, 0, 0) - sizer_11.Add((10, 20), 0, 0, 0) - sizer_11.Add(self.text_ctrl_33, 0, 0, 0) - sizer_11.Add((10, 20), 0, 0, 0) - sizer_11.Add(self.text_ctrl_34, 1, 0, 0) - sizer_11.Add((10, 20), 0, 0, 0) - sizer_11.Add(self.text_ctrl_35, 0, 0, 0) - sizer_11.Add((10, 20), 0, 0, 0) - sizer_11.Add(self.button_15, 0, 0, 0) - sizer_11.Add((10, 20), 0, 0, 0) - sizer_5.Add(sizer_11, 0, wx.ALL | wx.EXPAND, 0) - sizer_5.Add((20, 20), 0, 0, 0) - label_20 = wx.StaticText(self.main_panel, wx.ID_ANY, "6", style=wx.ALIGN_CENTER) - label_20.SetMinSize((20, 18)) - sizer_12.Add(label_20, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_12.Add(self.button_9, 0, 0, 0) - sizer_12.Add((20, 20), 0, 0, 0) - sizer_12.Add(self.text_ctrl_37, 0, wx.ALL, 0) - sizer_12.Add((10, 20), 0, 0, 0) - sizer_12.Add(self.text_ctrl_38, 0, 0, 0) - sizer_12.Add((10, 20), 0, 0, 0) - sizer_12.Add(self.text_ctrl_39, 0, 0, 0) - sizer_12.Add((10, 20), 0, 0, 0) - sizer_12.Add(self.text_ctrl_40, 1, 0, 0) - sizer_12.Add((10, 20), 0, 0, 0) - sizer_12.Add(self.text_ctrl_41, 0, 0, 0) - sizer_12.Add((10, 20), 0, 0, 0) - sizer_12.Add(self.button_16, 0, 0, 0) - sizer_12.Add((10, 20), 0, 0, 0) - sizer_5.Add(sizer_12, 0, wx.ALL | wx.EXPAND, 0) - sizer_5.Add((20, 20), 0, 0, 0) - label_21 = wx.StaticText(self.main_panel, wx.ID_ANY, "7", style=wx.ALIGN_CENTER) - label_21.SetMinSize((20, 18)) - sizer_13.Add(label_21, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_13.Add(self.button_10, 0, 0, 0) - sizer_13.Add((20, 20), 0, 0, 0) - sizer_13.Add(self.text_ctrl_43, 0, wx.ALL, 0) - sizer_13.Add((10, 20), 0, 0, 0) - sizer_13.Add(self.text_ctrl_44, 0, 0, 0) - sizer_13.Add((10, 20), 0, 0, 0) - sizer_13.Add(self.text_ctrl_45, 0, 0, 0) - sizer_13.Add((10, 20), 0, 0, 0) - sizer_13.Add(self.text_ctrl_46, 1, 0, 0) - sizer_13.Add((10, 20), 0, 0, 0) - sizer_13.Add(self.text_ctrl_47, 0, 0, 0) - sizer_13.Add((10, 20), 0, 0, 0) - sizer_13.Add(self.button_17, 0, 0, 0) - sizer_13.Add((10, 20), 0, 0, 0) - sizer_5.Add(sizer_13, 0, wx.ALL | wx.EXPAND, 0) - sizer_5.Add((20, 20), 0, 0, 0) - label_22 = wx.StaticText(self.main_panel, wx.ID_ANY, "8", style=wx.ALIGN_CENTER) - label_22.SetMinSize((20, 18)) - sizer_14.Add(label_22, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) - sizer_14.Add(self.button_11, 0, 0, 0) - sizer_14.Add((20, 20), 0, 0, 0) - sizer_14.Add(self.text_ctrl_49, 0, wx.ALL, 0) - sizer_14.Add((10, 20), 0, 0, 0) - sizer_14.Add(self.text_ctrl_50, 0, 0, 0) - sizer_14.Add((10, 20), 0, 0, 0) - sizer_14.Add(self.text_ctrl_51, 0, 0, 0) - sizer_14.Add((10, 20), 0, 0, 0) - sizer_14.Add(self.text_ctrl_52, 1, 0, 0) - sizer_14.Add((10, 20), 0, 0, 0) - sizer_14.Add(self.text_ctrl_53, 0, 0, 0) - sizer_14.Add((10, 20), 0, 0, 0) - sizer_14.Add(self.button_18, 0, 0, 0) - sizer_14.Add((10, 20), 0, 0, 0) - sizer_5.Add(sizer_14, 0, wx.ALL | wx.EXPAND, 0) - sizer_5.Add((20, 20), 0, 0, 0) - sizer_2.Add(sizer_5, 0, wx.ALL | wx.EXPAND, 1) + + for i in range(4): + sizer_6 = wx.BoxSizer(wx.VERTICAL) + sizer_6.Add(self.port_ctrl_list[i], 0, 0, 1) + sizer_6.Add(self.ListCtrl_list[i], 1, 1, 1) + sizer_6.Add((0, 10), 0, 0, 0) + sizer_6.Add(self.button_start_list[i], 0, 1, 0) + sizer_5.Add(sizer_6, 1, 0, 0) + sizer_2.Add(sizer_5, 0, wx.EXPAND, 0) + + sizer_2.Add((0, 30), 0, 1, 1) + sizer_2.Add(self.button_all_start, 0, 1, 1) + self.main_panel.SetSizer(sizer_2) sizer_1.Add(self.main_panel, 1, wx.EXPAND | wx.TOP, 0) self.SetSizer(sizer_1) self.Layout() - - def __status_bar_timer_fresh(self, event): - now = datetime.datetime.now() - self.statusBar.SetStatusText(" " + now.strftime("%Y-%m-%d %H:%M:%S"), 2) - - def __update_status_bar(self, arg1): - self.statusBar.SetStatusText(arg1[0], arg1[1]) + # sizer_5.SetLabel(_("测试中")) def __menu_handler(self, event): # wxGlade: FactoryFrame. if event.GetId() == 1001: @@ -507,29 +201,57 @@ def __load_py_file(self, event): def __load_json_file(self, event): print("json button is press") defDir, defFile = '', '' # default dir/ default file - dlg = wx.FileDialog(self, u'Open Config File', defDir, defFile, 'Config file (*)|*', + dlg = wx.FileDialog(self, u'Open Config File', defDir, defFile, 'Config file (*.json)|*.json', wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) if dlg.ShowModal() == wx.ID_CANCEL: return - self.text_ctrl_json.SetValue(dlg.GetPath()) - # TODO ymodem处理文件 + + # jsonName = PROJECT_ABSOLUTE_PATH + "\\sort_setting.json" + try: + with codecs.open(dlg.GetPath(), 'r', 'utf-8') as f: + data = json.load(f) + print(data) + info = data["info"] + self.testFunctions = [i[1:] for i in info] + self.testMessages = [i[0] for i in info] + self.text_ctrl_json.SetValue(dlg.GetPath()) + except Exception as e: + print(e) + wx.MessageBox(_(u'请选择正确的配置文件'), u'提示', wx.YES_DEFAULT | wx.ICON_INFORMATION) + return + + for i, port_ctrl in enumerate(self.port_ctrl_list): + if port_ctrl.GetValue(): + self.ListCtrl_list[i].DeleteAllItems() + for j, element in enumerate(self.testFunctions): + ListCtrl = self.ListCtrl_list[i] + # testFunction = self.testFunctions[j] + ListCtrl.InsertItem(j, j) + ListCtrl.SetItem(j, 0, self.testMessages[j]) + if element[1] == 1: + ListCtrl.SetItem(j, 1, "人工检测") + else: + ListCtrl.SetItem(j, 1, "自动检测") def test_start(self, event): button_event_id = event.GetId() - 100 # button ID 100开始 - jsonName = PROJECT_ABSOLUTE_PATH + "\\sort_setting.json" - with codecs.open(jsonName, 'r', 'utf-8') as f: - data = json.load(f) - self.testFunctions = data["sort"] - self.testMessages = data["message"] + if self.text_ctrl_json.GetValue(): + pass + else: + wx.MessageBox(_(u'请先选择配置文件'), u'提示', wx.YES_DEFAULT | wx.ICON_INFORMATION) + return if self.text_ctrl_py.GetValue(): if self.port_ctrl_list[button_event_id].GetValue(): # 点击开始时再初始化 self.__port_det(True) # 检测停止 + + self.procese_num += 1 + self.button_all_start.Enable(False) + self.button_start_list[button_event_id].Enable(False) self.message_queue.put( - {"id": button_event_id, "msg_id": "PortInit", "PortInfo": self.port_ctrl_list[button_event_id].GetValue(), - "imei": self.port_imei_list[button_event_id], "iccid": self.port_iccid_list[button_event_id]}) + {"id": button_event_id, "msg_id": "PortInit", "PortInfo": self.port_ctrl_list[button_event_id].GetValue()}) else: return None else: @@ -537,137 +259,178 @@ def test_start(self, event): def test_all_start(self, event): self.__port_det(True) # 检测停止 + + if self.text_ctrl_json.GetValue(): + pass + else: + wx.MessageBox(_(u'请先选择配置文件'), u'提示', wx.YES_DEFAULT | wx.ICON_INFORMATION) + return + if self.text_ctrl_py.GetValue(): pass else: wx.MessageBox(_(u'请先选择测试文件'), u'提示', wx.YES_DEFAULT | wx.ICON_INFORMATION) return None + for i in self.port_ctrl_list: - button_event_id = i.GetId() - 10 + button_event_id = i.GetId() - 300 if i.GetValue(): + self.procese_num += 1 + self.button_all_start.Enable(False) + self.button_start_list[button_event_id].Enable(False) self.message_queue.put( {"id": button_event_id, "msg_id": "PortInit", - "PortInfo": self.port_ctrl_list[button_event_id].GetValue(), - "imei": self.port_imei_list[button_event_id], "iccid": self.port_iccid_list[button_event_id]}) - # time.sleep(2) - # self.message_queue.put( - # {"id": button_event_id, "msg_id": "PortTest", - # "PortInfo": self.port_ctrl_list[button_event_id].GetValue(), - # "script": self.__py_test_fp, "time": self.port_time_list[button_event_id], - # "result": self.port_result_list[button_event_id]}) + "PortInfo": self.port_ctrl_list[button_event_id].GetValue()}) else: return None - def log_terminal(self, event): - event_id = event.GetId() - # print(self.port_ctrl_list[event_id-200].GetValue(), self.__py_exec_result[event_id-200]) - dia = DialogControl(self, self.port_ctrl_list[event_id-200].GetValue(), self.__py_exec_result[event_id-200]) - # - res = dia.Show() - - def statusbar_fresh(self, event): - # self.statusBar.SetStatusText(u" 当前状态: 就绪...", 1) - now = datetime.datetime.now() - self.statusBar.SetStatusText(" " + now.strftime("%Y-%m-%d %H:%M:%S"), 2) - def port_update(self, arg1): # print("message:{}".format(arg1)) self.message_queue.put({"msg_id": "PortUpdate", "PortInfo": arg1}) def port_update_handler(self, arg1): # TODO 设置log按钮状态 - port_list = arg1["PortInfo"][:8] if len(arg1["PortInfo"]) > 8 else arg1["PortInfo"] - if len(port_list) < 8: - self.button_3.Enable(False) if len(port_list) == 0 else self.button_3.Enable(True) - port_list = port_list + [""] * (8 - len(port_list)) + port_list = arg1["PortInfo"][:4] if len(arg1["PortInfo"]) > 4 else arg1["PortInfo"] + if len(port_list) < 4: + self.button_all_start.Enable(False) if len(port_list) == 0 else self.button_all_start.Enable(True) + port_list = port_list + [""] * (4 - len(port_list)) if self._channel_list == [] or self._channel_list != port_list: self._channel_list = port_list - for j in [self.port_ctrl_list, self.port_imei_list, self.port_iccid_list, self.port_time_list, - self.port_result_list]: - [i.SetValue("") for i in j] + for port_ctrl in self.port_ctrl_list: + port_ctrl.SetValue("") + for ListCtrl in self.ListCtrl_list: + ListCtrl.DeleteAllItems() + for i, element in enumerate(self.button_start_list): - self.button_log_list[i].Enable(False) - # self.button_next_list[i].Enable(False) if self._channel_list[i]: self.port_ctrl_list[i].SetValue(self._channel_list[i]) self.button_start_list[i].Enable(True) + + if self.text_ctrl_json.GetValue(): + for j, element in enumerate(self.testFunctions): + ListCtrl = self.ListCtrl_list[i] + # testFunction = self.testFunctions[j] + ListCtrl.InsertItem(j, j) + ListCtrl.SetItem(j, 0, self.testMessages[j]) + if element[1] == 1: + ListCtrl.SetItem(j, 1, "人工检测") + else: + ListCtrl.SetItem(j, 1, "自动检测") else: self.button_start_list[i].Enable(False) def port_init_handler(self, arg1): - self.port_imei_list[arg1["id"]].SetValue("") - self.port_iccid_list[arg1["id"]].SetValue("") - self.port_time_list[arg1["id"]].SetValue("") - self.port_result_list[arg1["id"]].SetValue("") - self.button_log_list[arg1["id"]].Enable(False) + ID = arg1["id"] + for i in range(len(self.testFunctions)): + ListCtrl = self.ListCtrl_list[ID] + ListCtrl.SetItem(i, 2, "") + ListCtrl.SetItemBackgroundColour(i, (255, 255, 255, 255)) + # 重复测试结果重置 - self.__test_result[arg1["id"]] = 0 - self.__py_exec_result[arg1["id"]] = "" - ser = serial_handler.SerialHandler(arg1["PortInfo"]) - imei, iccid = asyncio.run(ser.init_module(arg1["imei"], arg1["iccid"])) + # ser = serial_handler.SerialHandler(arg1["PortInfo"]) + # imei, iccid = asyncio.run(ser.init_module(arg1["imei"], arg1["iccid"])) self.__py_test_fp = open(self.text_ctrl_py.GetValue(), "r", encoding="utf8") self.message_queue.put( - {"id": arg1["id"], "msg_id": "PortTest", "PortInfo": self.port_ctrl_list[arg1["id"]].GetValue(), "Imei": imei, "Iccid": iccid, - "script": self.__py_test_fp, "time": self.port_time_list[arg1["id"]], "result": self.port_result_list[arg1["id"]]}) + {"id": arg1["id"], "msg_id": "PortTest", "PortInfo": self.port_ctrl_list[arg1["id"]].GetValue(), + "script": self.__py_test_fp}) def port_test_handler(self, arg1): + print("start test") + ID = arg1["id"] ser = serial_handler.SerialHandler(arg1["PortInfo"]) - # 测试时间&结果页面刷新 线程ID - test_res_display = threading.Thread(target=self.__test_time_bar, args=(arg1["id"], arg1["time"], arg1["result"])) - test_res_display.start() - ser.write_module(arg1["script"], self.__exec_py_cmd_list) # 写入脚本开始测试 + + result = ser.write_module(arg1["script"], self.__exec_py_cmd_list) # 写入脚本开始测试 + if result[0] is False: + wx.MessageBox(result[1], u'Error', wx.YES_DEFAULT | wx.ICON_INFORMATION) + self.message_queue.put({"id": arg1["id"], "msg_id": "PortTestEnd", "result": 1}) + self.button_start_list[arg1["id"]].Enable(True) + self.procese_num -= 1 + if self.procese_num == 0: + self.button_all_start.Enable(True) + return ser.ret_result() ret_result = [] log = "" length = len(self.testFunctions) - for i in range(length): - testFunction = self.testFunctions[i] + for i, testFunction in enumerate(self.testFunctions): + self.ListCtrl_list[ID].SetItem(i, 2, "测试中") + self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Yellow") + message = self.testMessages[i] cmd = "TestBase." + testFunction[0] + "()" ser.exec_cmd(cmd) test_result = ser.ret_result() # get recv list + print(test_result) log += test_result - boolean = test_result.split("\r\n")[1:-1] + try: + boolean = test_result.split("\r\n")[1:-1] + + if boolean == []: + boolean = ["True"] + if boolean != ["True"] and boolean != ["False"]: + boolean = ["False"] + except Exception as e: + print(e) + boolean = ["False"] if testFunction[1] == 1: - dlg = wx.MessageBox(" 当前测试项为: " + message + "\r\n\r\n 请确认该测试项 【是否通过】", self.port_ctrl_list[arg1["id"]].GetValue(), wx.YES_NO) + dlg = wx.MessageBox(" 当前测试项为: " + message + "\r\n\r\n 请确认该测试项 【是否通过】", self.port_ctrl_list[ID].GetValue(), wx.YES_NO) if dlg == wx.YES: boolean = ["True"] else: boolean = ["False"] + if boolean == ["False"]: + self.ListCtrl_list[ID].SetItem(i, 2, "不通过") + self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Red") + else: + self.ListCtrl_list[ID].SetItem(i, 2, "通过") + self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Green") + ret_result += boolean - arg1["result"].SetValue("process: "+str(int(i/length*100))+"%") - self.__py_exec_result[arg1["id"]] = "\r\n".join([i[0]+": "+i[1] for i in list(zip(self.testMessages, ret_result))]) # 设置测试结果 + test_results = [] + for i in ret_result: + if i == "True": + test_results.append("通过") + elif i == "False": + test_results.append("不通过") + else: + test_results.append(i) + + test_method = [] + for i in self.testFunctions: + if i[1] == 1: + test_method.append("人工测试") + else: + test_method.append("自动测试") + self.logger.write_file(arg1["PortInfo"], log) - self.__init_excel(self.port_ctrl_list[arg1["id"]].GetValue() + "_" + self.port_imei_list[arg1["id"]].GetValue()) # TODO excel写入不要列表形式 if "False" not in ret_result: self.message_queue.put({"id": arg1["id"], "msg_id": "PortTestEnd", "result": 1}) - self.__excel_write([arg1["PortInfo"], arg1["Imei"], arg1["Iccid"], "Success", str(list(zip(self.testMessages, ret_result)))]) + self.__excel_write([arg1["PortInfo"], "Success", str(list(zip(self.testMessages, ret_result)))]) else: self.message_queue.put({"id": arg1["id"], "msg_id": "PortTestEnd", "result": 2}) - self.__excel_write([arg1["PortInfo"], arg1["Imei"], arg1["Iccid"], "Fail", str(list(zip(self.testMessages, ret_result)))]) + self.__excel_write([arg1["PortInfo"], "Fail", str(list(zip(self.testMessages, ret_result)))]) + self.button_start_list[arg1["id"]].Enable(True) + self.procese_num -= 1 + if self.procese_num == 0: + self.button_all_start.Enable(True) def port_test_end_handler(self, arg1): - self.__test_result[arg1["id"]] = arg1["result"] # 设置测试结果 - self.button_log_list[arg1["id"]].Enable(True) - pub.sendMessage('statusBarUpdate', arg1=["The test has been completed", 1]) self.__port_det(False) - def __init_excel(self, sheet_name): - self.__excel_handler = file_handler.ExcelHandler(PROJECT_ABSOLUTE_PATH + "\\Test-Result.xlsx", sheet_name) # Init Excel + def __init_excel(self): + self.__excel_handler = file_handler.ExcelHandler(PROJECT_ABSOLUTE_PATH + "\\Test-Result.xlsx") # Init Excel rows, columns = self.__excel_handler.get_rows_columns() if rows == 1 and columns == 1: self.__excel_handler.set_cell_value(1, 1, "No.") self.__excel_handler.set_cell_value(1, 2, "Com Port") - self.__excel_handler.set_cell_value(1, 3, "IMEI") - self.__excel_handler.set_cell_value(1, 4, "ICCID") self.__excel_handler.set_cell_value(1, 5, "Test Result") self.__excel_handler.set_cell_value(1, 6, "Test Log") @@ -678,30 +441,6 @@ def __excel_write(self, result): for i, value in enumerate(result): self.__excel_handler.set_cell_value(rows + 1, i + 2, value) - def __test_time_bar(self, test_id, time_bar, result_bar): - result_bar.SetValue("Testing") - for i in range(1, 60): - if self.__test_result[test_id] == 0: - time_bar.SetValue(str(i) + "S") - time.sleep(1) - elif self.__test_result[test_id] == 1: - result_bar.SetValue("Test Pass") - break - elif self.__test_result[test_id] == 2: - result_bar.SetValue("Test Fail") - break - else: - result_bar.SetValue("Test the timeout") - - @staticmethod - def __port_det(flag): - if flag: - tSerialDet.exit_event() - pub.sendMessage('statusBarUpdate', arg1=["Port Detect Close", 1]) - else: - tSerialDet.enter_event() - pub.sendMessage('statusBarUpdate', arg1=["Port Detect Start", 1]) - def port_process_handler(self): while True: try: @@ -715,22 +454,36 @@ def port_process_handler(self): if msg_id == "exit": pass elif msg_id == "PortUpdate": + # threading.Thread(target=self.port_update_handler, args=(message,)).start() self.port_update_handler(message) elif msg_id == "PortInit": + # threading.Thread(target=self.port_init_handler, args=(message,)).start() self.port_init_handler(message) elif msg_id == "PortTest": - self.port_test_handler(message) + threading.Thread(target=self.port_test_handler, args=(message,)).start() + # self.port_test_handler(message) elif msg_id == "PortTestEnd": - self.port_test_end_handler(message) + threading.Thread(target=self.port_test_end_handler, args=(message,)).start() + # self.port_test_end_handler(message) else: pass except Exception as e: print(e) + @staticmethod + def __port_det(flag): + if flag: + tSerialDet.exit_event() + else: + tSerialDet.enter_event() + # end of class FactoryFrame def close_window(self, event): self.Destroy() - self.__excel_handler.close() + try: + self.__excel_handler.close() + except Exception as e: + pass time.sleep(0.2) wx.GetApp().ExitMainLoop() wx.Exit() @@ -738,35 +491,6 @@ def close_window(self, event): p = subprocess.Popen(process_name, shell=True) -class DialogControl(wx.Dialog): - def __init__(self, parent, title, log_data): - super(DialogControl, self).__init__(parent, title=title, size=(350, 400)) - self.data = log_data - self.panel = wx.Panel(self) - self.main_sizer = wx.BoxSizer(wx.VERTICAL) - self.panel_sizer = wx.BoxSizer(wx.VERTICAL) - self.vbox1 = wx.BoxSizer(wx.VERTICAL) - self.cmd_content = wx.StaticText(self.panel, wx.ID_ANY, _(u"测试日志:")) - self.vbox1.Add(self.cmd_content, proportion=1, flag=wx.LEFT | wx.EXPAND,) - self.text_content = wx.TextCtrl(self.panel, wx.ID_ANY, style=wx.TE_MULTILINE) - self.text_content.SetMinSize((300, 350)) - self.vbox1.Add(self.text_content) - # set sizer - self.panel_sizer.Add(self.vbox1, flag=wx.TOP | wx.EXPAND, border=15) - self.panel.SetSizer(self.panel_sizer) - self.main_sizer.Add(self.panel, - proportion=1, - flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, - border=15 - ) - # Apply sizer and display dialog panel - self.SetSizerAndFit(self.main_sizer) - self.Layout() - self.Center() - # 设置log显示内容 - self.text_content.SetValue(self.data) - - class MyApp(wx.App): languageTab = locale.getdefaultlocale()[0] print("languageTab: ", languageTab) @@ -793,6 +517,12 @@ def OnInit(self): self.factory_frame = FactoryFrame(None, wx.ID_ANY, "") self.SetTopWindow(self.factory_frame) self.factory_frame.Show() + + # 串口检测线程 + global tSerialDet + tSerialDet = serial_list.SerialDetection() + tSerialDet.setDaemon(True) # set as deamon, stop thread while main frame exit + tSerialDet.start() return True @@ -821,11 +551,6 @@ def write_file(self, port, data): if __name__ == "__main__": - # 串口检测线程 - tSerialDet = serial_list.SerialDetection() - tSerialDet.setDaemon(True) # set as deamon, stop thread while main frame exit - tSerialDet.start() - file_name = os.path.basename(sys.executable) app = MyApp() - app.MainLoop() + app.MainLoop() \ No newline at end of file diff --git a/module_test.py b/module_test.py index b58993d..48b37a8 100644 --- a/module_test.py +++ b/module_test.py @@ -2,12 +2,13 @@ import sim import net import uos - +import utime class TestBase(object): # ------该区域为测试代码------ @staticmethod def det_signal(): + utime.sleep(2) if sim.getStatus() == 1: if net.getConfig()[0] == 5: return True @@ -18,6 +19,31 @@ def det_signal(): @staticmethod def det_file_space(): + utime.sleep(2) + if uos.statvfs('usr')[3] > 5: + return True + else: + return False + + @staticmethod + def det_file_space1(): + utime.sleep(2) + if uos.statvfs('usr')[3] > 5: + return True + else: + return False + + @staticmethod + def det_file_space2(): + utime.sleep(2) + if uos.statvfs('usr')[3] > 5: + return True + else: + return False + + @staticmethod + def det_file_space3(): + utime.sleep(2) if uos.statvfs('usr')[3] > 5: return True else: diff --git a/serial_handler.py b/serial_handler.py index c7953b8..f9624e0 100644 --- a/serial_handler.py +++ b/serial_handler.py @@ -107,13 +107,15 @@ def write_module(self, source, py_cmd, filename="test.py"): self._send_cmd("f.close()") self._conn.write(b"\x04") self._conn.write(b"\x02") + self._conn.write(b"\x04") else: print("串口异常") except Exception as e: print("文件写入异常:{}".format(e)) + return (False, e) finally: source.close() - return self.exec_cmd(py_cmd[0]) + return (True, self.exec_cmd(py_cmd[0])) def exec_py(self, cmd): self._send_cmd(cmd[0]) diff --git a/serial_list.py b/serial_list.py index 3e023b4..6037825 100644 --- a/serial_list.py +++ b/serial_list.py @@ -43,10 +43,12 @@ def run(self): pass else: if serial_list == [] or serial_list != self.serPort.comports(): + serial_list = self.serPort.comports() # serial_port = self.get_com_number("0x2C7C:0x6005", "x.8") # serial_port.extend(self.get_com_number("0x2C7C:0x6005", "x.5")) serial_port = self.get_com_number("0x2C7C:0x0901", "x.8") - serial_port.extend(self.get_com_number("0x2C7C:0x6001", "x.5")) + serial_port.extend(self.get_com_number("0x2C7C:0x6002", "x.5")) + serial_port.extend(self.get_com_number("0x2C7C:0x6005", "x.5")) # print("设备列表为{}".format(serial_port)) pub.sendMessage('serialUpdate', arg1=serial_port) time.sleep(1) diff --git a/sort_setting.json b/sort_setting.json index d58feb9..a1f768f 100644 --- a/sort_setting.json +++ b/sort_setting.json @@ -1,4 +1,7 @@ { - "sort": [["det_file_space", 1], ["det_signal", 0]], - "message": ["内存检测", "信号检测"] + "info": [["内存检测", "det_file_space", 0], + ["信号检测", "det_signal", 0], + ["内存检测1", "det_file_space1", 0], + ["内存检测2", "det_file_space2", 0], + ["内存检测3", "det_file_space3", 0]] } \ No newline at end of file From f2d450f6937361d435b3e444f4d47c19a5c0c094 Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Mon, 21 Aug 2023 10:34:35 +0800 Subject: [PATCH 02/15] =?UTF-8?q?1.=20=E6=89=93=E5=BC=80=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E6=98=AF=E5=90=A6=E6=89=93=E5=BC=80=E4=B8=8A?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=202.=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8A=9B=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 155 ++++++++++++++++++++++++++++++++-------------- serial_handler.py | 83 +++++++------------------ 2 files changed, 132 insertions(+), 106 deletions(-) diff --git a/main.py b/main.py index db000cf..37f02cb 100644 --- a/main.py +++ b/main.py @@ -20,6 +20,7 @@ import file_handler import serial_list import serial_handler +import configparser from log_redirect import RedirectErr, RedirectStd from pubsub import pub from queue import Queue @@ -32,6 +33,43 @@ PROJECT_ABSOLUTE_PATH = os.path.dirname(os.path.abspath(__file__)) +def set_config(PROJECT_ABSOLUTE_PATH, frame): + if not os.path.exists(PROJECT_ABSOLUTE_PATH+"\\config.ini"): + return + conf = configparser.ConfigParser(interpolation=None) + conf.read(PROJECT_ABSOLUTE_PATH+"\\config.ini", encoding='utf-8') + py_file = conf.get("software", "py_file") + json_file = conf.get("software", "json_file") + + if py_file or json_file: + no_exist = [] + msg = wx.MessageBox(_(u'是否恢复上次文件'), _(u'提示'), wx.YES_NO) + if msg == wx.YES: + if py_file: + if os.path.exists(py_file): + frame.text_ctrl_py.SetValue(py_file) + else: + conf.set("software", "py_file", "") + wx.MessageBox(py_file + _(u"文件不存在"), _(u"提示"), wx.YES_DEFAULT | wx.ICON_INFORMATION) + + if json_file: + if os.path.exists(py_file): + frame.text_ctrl_json.SetValue(json_file) + frame.load_json_file(0, json_file) + else: + conf.set("software", "json_file", "") + wx.MessageBox(json_file + _(u"文件不存在"), _(u"提示"), wx.YES_DEFAULT | wx.ICON_INFORMATION) + + with open(PROJECT_ABSOLUTE_PATH + "\\config.ini", "w+", encoding='utf-8') as f: + conf.write(f) + + elif msg == wx.NO: + conf.set("software", "py_file", "") + conf.set("software", "json_file", "") + with open(PROJECT_ABSOLUTE_PATH + "\\config.ini", "w+", encoding='utf-8') as f: + conf.write(f) + + class FactoryFrame(wx.Frame): def __init__(self, *args, **kwargs): kwargs["style"] = kwargs.get("style", 0) | wx.DEFAULT_FRAME_STYLE @@ -105,7 +143,7 @@ def __init__(self, *args, **kwargs): # bind Func self.Bind(wx.EVT_BUTTON, self.__load_py_file, self.load_py) - self.Bind(wx.EVT_BUTTON, self.__load_json_file, self.load_json) + self.Bind(wx.EVT_BUTTON, self.load_json_file, self.load_json) self.Bind(wx.EVT_BUTTON, self.test_all_start, self.button_all_start) @@ -118,6 +156,11 @@ def __init__(self, *args, **kwargs): # pub message pub.subscribe(self.port_update, "serialUpdate") + self.conf = configparser.ConfigParser(interpolation=None) + if not os.path.exists(PROJECT_ABSOLUTE_PATH+"\\config.ini"): + self.initConfigFile() + self.conf.read(PROJECT_ABSOLUTE_PATH+"\\config.ini", encoding='utf-8') + self.__set_properties() self.__do_layout() @@ -186,6 +229,13 @@ def __menu_handler(self, event): # wxGlade: FactoryFrame. p = subprocess.Popen("explorer.exe " + PROJECT_ABSOLUTE_PATH + "\\logs\\apps\\", shell=True) event.Skip() + def initConfigFile(self): + self.conf.add_section("software") + self.conf.set("software", "py_file", "") + self.conf.set("software", "json_file", "") + with open(PROJECT_ABSOLUTE_PATH + "\\config.ini", "w+", encoding='utf-8') as f: + self.conf.write(f) + def __load_py_file(self, event): defDir, defFile = '', '' # default dir/ default file dlg = wx.FileDialog(self, u'Open Py File', defDir, defFile, 'Python file (*.py)|*.py', @@ -195,44 +245,50 @@ def __load_py_file(self, event): py_cmd = file_handler.ScriptHandler(dlg.GetPath()) if py_cmd.script_check(): self.text_ctrl_py.SetValue(dlg.GetPath()) + self.conf.set("software", "py_file", dlg.GetPath()) + with open(PROJECT_ABSOLUTE_PATH + "\\config.ini", "w+", encoding='utf-8') as f: + self.conf.write(f) else: wx.MessageBox(_(u'py代码有语法错误'), u'Warn', wx.YES_DEFAULT | wx.ICON_INFORMATION) - def __load_json_file(self, event): + def load_json_file(self, event, json_file=None): print("json button is press") - defDir, defFile = '', '' # default dir/ default file - dlg = wx.FileDialog(self, u'Open Config File', defDir, defFile, 'Config file (*.json)|*.json', - wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) - if dlg.ShowModal() == wx.ID_CANCEL: - return - - # jsonName = PROJECT_ABSOLUTE_PATH + "\\sort_setting.json" + if event != 0: + defDir, defFile = '', '' # default dir/ default file + dlg = wx.FileDialog(self, u'Open Config File', defDir, defFile, 'Config file (*.json)|*.json', + wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + if dlg.ShowModal() == wx.ID_CANCEL: + return + json_file = dlg.GetPath() try: - with codecs.open(dlg.GetPath(), 'r', 'utf-8') as f: + with codecs.open(json_file, 'r', 'utf-8') as f: data = json.load(f) print(data) info = data["info"] self.testFunctions = [i[1:] for i in info] self.testMessages = [i[0] for i in info] - self.text_ctrl_json.SetValue(dlg.GetPath()) + self.text_ctrl_json.SetValue(json_file) + self.conf.set("software", "json_file", json_file) + with open(PROJECT_ABSOLUTE_PATH + "\\config.ini", "w+", encoding='utf-8') as f: + self.conf.write(f) + + for i, port_ctrl in enumerate(self.port_ctrl_list): + if port_ctrl.GetValue(): + self.ListCtrl_list[i].DeleteAllItems() + for j, element in enumerate(self.testFunctions): + ListCtrl = self.ListCtrl_list[i] + # testFunction = self.testFunctions[j] + ListCtrl.InsertItem(j, j) + ListCtrl.SetItem(j, 0, self.testMessages[j]) + if element[1] == 1: + ListCtrl.SetItem(j, 1, "人工检测") + else: + ListCtrl.SetItem(j, 1, "自动检测") except Exception as e: print(e) wx.MessageBox(_(u'请选择正确的配置文件'), u'提示', wx.YES_DEFAULT | wx.ICON_INFORMATION) return - for i, port_ctrl in enumerate(self.port_ctrl_list): - if port_ctrl.GetValue(): - self.ListCtrl_list[i].DeleteAllItems() - for j, element in enumerate(self.testFunctions): - ListCtrl = self.ListCtrl_list[i] - # testFunction = self.testFunctions[j] - ListCtrl.InsertItem(j, j) - ListCtrl.SetItem(j, 0, self.testMessages[j]) - if element[1] == 1: - ListCtrl.SetItem(j, 1, "人工检测") - else: - ListCtrl.SetItem(j, 1, "自动检测") - def test_start(self, event): button_event_id = event.GetId() - 100 # button ID 100开始 @@ -285,7 +341,7 @@ def test_all_start(self, event): return None def port_update(self, arg1): - # print("message:{}".format(arg1)) + print("message:{}".format(arg1)) self.message_queue.put({"msg_id": "PortUpdate", "PortInfo": arg1}) def port_update_handler(self, arg1): @@ -337,41 +393,48 @@ def port_init_handler(self, arg1): def port_test_handler(self, arg1): print("start test") ID = arg1["id"] - ser = serial_handler.SerialHandler(arg1["PortInfo"]) - - result = ser.write_module(arg1["script"], self.__exec_py_cmd_list) # 写入脚本开始测试 - if result[0] is False: - wx.MessageBox(result[1], u'Error', wx.YES_DEFAULT | wx.ICON_INFORMATION) + try: + ser = serial_handler.SerialHandler(arg1["PortInfo"]) + ser.write_module(arg1["script"], self.__exec_py_cmd_list) # 写入脚本开始测试 + ser.ret_result() + except Exception as e: + print(arg1["PortInfo"], e) + wx.MessageBox(arg1["PortInfo"]+"串口异常,测试脚本写入失败, error %s"%str(e), u'Error', wx.YES_DEFAULT | wx.ICON_INFORMATION) self.message_queue.put({"id": arg1["id"], "msg_id": "PortTestEnd", "result": 1}) self.button_start_list[arg1["id"]].Enable(True) self.procese_num -= 1 if self.procese_num == 0: self.button_all_start.Enable(True) return - ser.ret_result() ret_result = [] log = "" length = len(self.testFunctions) for i, testFunction in enumerate(self.testFunctions): - self.ListCtrl_list[ID].SetItem(i, 2, "测试中") - self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Yellow") + try: + self.ListCtrl_list[ID].SetItem(i, 2, "测试中") + self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Yellow") - message = self.testMessages[i] + message = self.testMessages[i] - cmd = "TestBase." + testFunction[0] + "()" - ser.exec_cmd(cmd) + cmd = "TestBase." + testFunction[0] + "()" + ser.exec_cmd(cmd) - test_result = ser.ret_result() # get recv list - print(test_result) - log += test_result - try: - boolean = test_result.split("\r\n")[1:-1] + test_result = ser.ret_result() # get recv list + self.logger.write_file(arg1["PortInfo"], test_result) - if boolean == []: - boolean = ["True"] - if boolean != ["True"] and boolean != ["False"]: + boolean = test_result.split("\r\n") + + if boolean[-2] == "False": boolean = ["False"] + else: + if boolean[-2] == "True": + boolean = ["True"] + elif boolean[-2] == cmd: + boolean = ["True"] + else: + boolean = ["False"] + except Exception as e: print(e) boolean = ["False"] @@ -408,8 +471,6 @@ def port_test_handler(self, arg1): else: test_method.append("自动测试") - self.logger.write_file(arg1["PortInfo"], log) - # TODO excel写入不要列表形式 if "False" not in ret_result: self.message_queue.put({"id": arg1["id"], "msg_id": "PortTestEnd", "result": 1}) @@ -523,6 +584,8 @@ def OnInit(self): tSerialDet = serial_list.SerialDetection() tSerialDet.setDaemon(True) # set as deamon, stop thread while main frame exit tSerialDet.start() + + set_config(PROJECT_ABSOLUTE_PATH, self.factory_frame) return True diff --git a/serial_handler.py b/serial_handler.py index f9624e0..792f4de 100644 --- a/serial_handler.py +++ b/serial_handler.py @@ -21,11 +21,8 @@ def __init__(self, port, baud): self._conn = None def _open_conn(self): - try: - self._conn = serial.Serial(self._port, self._baud) - return self._conn - except IOError as e: - print("Failed reason: %s" % str(e)) + self._conn = serial.Serial(self._port, self._baud) + return self._conn def _close_conn(self): self._conn.close() @@ -60,62 +57,28 @@ def __init__(self, port, baud=115200): super(SerialHandler, self).__init__(port, baud) self.init() - async def init_module(self, imei_text_ctrl, iccid_text_ctrl): - self._send_cmd("import sim") - self._send_cmd("import modem") - await asyncio.sleep(.1) - self._conn.flushInput() # 丢弃接收缓存中的所有数据 - try: - self._send_cmd("modem.getDevImei()") - await asyncio.sleep(.1) - imei = self.ret_result().split("\r\n")[1] - # print("imei: {}".format(imei)) - except Exception as e: - print("get imei error: {}".format(e)) - imei = "-1" - finally: - imei_text_ctrl.SetValue(imei[1:-1]) - try: - self._send_cmd("sim.getIccid()") - await asyncio.sleep(.1) - iccid = self.ret_result().split("\r\n")[1] - # print("iccid: {}".format(iccid)) - if iccid == "-1": - iccid = "'No SIM card'" - except Exception as e: - print("get iccid error: {}".format(e)) - iccid = "-1" - finally: - iccid_text_ctrl.SetValue(iccid[1:-1]) - return imei[1:-1], iccid[1:-1] - - def write_module(self, source, py_cmd, filename="test.py"): - try: - if self._test_conn(): - self._conn.write(b"\x01") - self._send_cmd("f=open('/usr/" + filename + "','wb')") # 写入文件 - self._send_cmd("w=f.write") - while True: - time.sleep(.1) - data = source.read(255) - if not data: - break - else: - self._send_cmd("w(" + repr(data) + ")") - self._conn.write(b"\x04") - self._send_cmd("f.close()") - self._conn.write(b"\x04") - self._conn.write(b"\x02") - self._conn.write(b"\x04") + self._test_conn() + + self._conn.write(b"\x01") + self._send_cmd("f=open('/usr/" + filename + "','wb')") # 写入文件 + self._send_cmd("w=f.write") + while True: + time.sleep(.1) + data = source.read(255) + if not data: + break else: - print("串口异常") - except Exception as e: - print("文件写入异常:{}".format(e)) - return (False, e) - finally: - source.close() - return (True, self.exec_cmd(py_cmd[0])) + self._send_cmd("w(" + repr(data) + ")") + self._conn.write(b"\x04") + self._send_cmd("f.close()") + self._conn.write(b"\x04") + self._conn.write(b"\x02") + self._conn.write(b"\x04") + + source.close() + self.exec_cmd(py_cmd[0]) + return True def exec_py(self, cmd): self._send_cmd(cmd[0]) @@ -138,7 +101,7 @@ async def run_cmd(self,source:list, log_text_ctrl): def ret_result(self): data = "" - for i in range(30): + for i in range(60): data += self._conn.read(self._conn.inWaiting()).decode("utf-8", errors="ignore") if data.endswith(">>> "): break From f052ec1f3fbe52fd0d2635bbc988582dca66edd6 Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Tue, 22 Aug 2023 14:22:57 +0800 Subject: [PATCH 03/15] add readme --- README.md | 66 ++++++++++++++++++++++++---------------- main.py | 6 ++-- media/1665207910586.png | Bin 24161 -> 0 bytes media/1665208145345.png | Bin 36234 -> 0 bytes media/1692598668142.jpg | Bin 0 -> 22283 bytes media/1692598910646.jpg | Bin 0 -> 12168 bytes media/1692599116860.jpg | Bin 0 -> 4169 bytes media/1692599729648.jpg | Bin 0 -> 30540 bytes media/1692599801694.jpg | Bin 0 -> 31824 bytes media/1692599919725.jpg | Bin 0 -> 38008 bytes 10 files changed, 43 insertions(+), 29 deletions(-) delete mode 100644 media/1665207910586.png delete mode 100644 media/1665208145345.png create mode 100644 media/1692598668142.jpg create mode 100644 media/1692598910646.jpg create mode 100644 media/1692599116860.jpg create mode 100644 media/1692599729648.jpg create mode 100644 media/1692599801694.jpg create mode 100644 media/1692599919725.jpg diff --git a/README.md b/README.md index 33fb734..a99f330 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,7 @@ | 版本 | 日期 | 作者 | 变更描述 | | ---- | ---------- | ---- | ------------ | -| 1.0 | 2022-10-08 | 袁帅 | 初版 | -| 2.0 | 2023-04-23 | 袁帅 | 更新使用说明 | +| 1.0 | 2023-08-16 | 郭臻 | 初版 | ## 简介 @@ -22,26 +21,24 @@ QuecPython产测工具是专用于QuecPython项目模块出厂测试的工具, ## 如何拉取仓库 ```shell -git clone --recurse-submodules https://github.com/QuecPython/FactoryTool.git +git clone --recurse-submodules https://github.com/QuecPython/FactoryTool.git -b interventionable ``` ## 页面介绍 -**菜单栏** 包括配置菜单和日志菜单 +**菜单栏** 包括编辑菜单和日志菜单 -**配置菜单** 用于配置自动检测串口以及测试脚本和测试结果文件 +**编辑菜单** 用于编辑测试脚本和Excel日志文件 -**日志菜单** 用于查看测试日志文件和工具运行日志文件 +**日志菜单** 用于查看测试日志文件和工具运行日志文件 -**加载栏** 包括 加载测试文件和配置文件,其中测试文件为要测试的测试文件,配置文件为测试完成之后要写入到模块的配置文件 +**加载栏** 包括 加载测试文件和配置文件,其中测试文件为要测试的测试文件,配置文件为需要测试function,测试的顺序,测试项的名称,测试的方式(人工测试/自动测试) -**测试区域** 包括 端口、IMEI、ICCID、测试时间、测试结果和测试日志,其中测试日志按钮可以查看测试脚本执行的日志结果,工具有八个测试栏位最多可一次性同时测试八个设备,也可以单独测试某个设备。 - -**状态栏** 包括欢迎标语和状态信息以及时间信息,其中状态信息会伴随工具运行状态进行切换,时间信息会跟随系统时间变化 +**测试区域** 包括 端口、测试项名称、测试的方式、测试结果,工具有四个测试栏位最多可一次性同时测试四个设备,也可以单独测试某个设备。 > **注意:测试的模块需要保证交互口不处于堵塞状态,否则测试将失败** -![1665207910586](./media/1665207910586.png) +![1692598668142](./media/1692598668142.jpg) ## 测试脚本 @@ -55,16 +52,30 @@ git clone --recurse-submodules https://github.com/QuecPython/FactoryTool.git # 检测sim卡状态正常并且驻网状态为LTE时测试成功,否则返回失败测试结果 @staticmethod def det_signal(): - if sim.getStatus() == 1: - if net.getConfig()[0] == 5: - return True + if sim.getStatus() == 1: + if net.getConfig()[0] == 5: + return True else: - return False + return False ``` 测试脚本示例: -![1665208145345](./media/1665208145345.png) +![1692598910646](./media/1692598910646.jpg) + +## 配置文件 +配置文件为json格式 +```json +# 测项名称 function 测试方式: 1为人工测试 0为自动测试 +{ + "info": [["内存检测", "det_file_space", 1], + ["信号检测", "det_signal", 0]] +} +``` +测试脚本示例: + +![1692599116860](./media/1692599116860.jpg) + ## 测试原理 @@ -77,28 +88,31 @@ def det_signal(): ## 测试步骤 -**步骤一**:编辑测试**module_test.py**代码,测试代码案例如上图所示 +**步骤一**:编辑测试**module_test.py**代码 和 配置文件**sort_setting.json**,测试代码和配置文件案例如上图所示 + +**步骤二**:打开 **Factory Tool**,点击 **选择** 按钮,分别选择上一步编辑好的测试代码和配置文件,若有检测到串口,则该串口下会显示每一项测试名称以及测试方式 -**步骤二**:打开 **Factory Tool**,点击 **Load Py File** 按钮,选择上一步编辑好的测试代码 +![1692599729648](./media/1692599729648.jpg) -**步骤三**:如果测试完有需要写入到模块中的配置文件,点击 **Load Json File **选择要写入的配置文件,将会在测试成功之后将该配置文件写入模块 +**步骤三**:点击 **全部开始** 按钮开始测试所有已接入的模块,也可以通过单独点击端口对应列的 **开始** 按钮来测试某一个模块 -**步骤四**:点击 **Start All** 按钮开始测试所有已接入的模块,也可以通过单独点击端口对应列的 **Start** 按钮来测试某一个模块,测试超时时间2min +若是人工检测会弹窗提示是否成功,可人工点击 **是/否** 来确认该项结果 +![1692599919725](./media/1692599919725.jpg) -**步骤五**:测试完成后可在测试结果栏位看到测试结果,如果测试结果失败,可点击对应失败的那一列的日志按钮来查看测试日志,从而可定位到具体哪一项测试失败 +**步骤四**:测试完成后可在测试结果栏位看到测试结果 -**步骤六**:测试完成后会在工具同级目录下生成**Test-Result.xlsx**文件,包含测试项目内容以及测试结果日志 +![1692599801694](./media/1692599801694.jpg) + +**步骤五**:测试完成后会在工具同级目录下生成**Test-Result.xlsx**文件,包含测试项目内容以及测试结果日志 ## 测试结果 -每一个模块的的测试结果会写入到excel中导出,可以通过菜单栏的 **配置** 中的 **测试结果文件 **菜单打开该excel文件 +每一个模块的的测试结果会写入到excel中导出,可以通过菜单栏的 **编辑** 中的 **编辑Excel文件**菜单打开该excel文件 -每一次测试会在excel中生成一条测试记录(无论测试成功或者失败),多次测试会有多条记录,根据测试设备的IMEI区分 +每一次测试会在excel中生成一条测试记录(无论测试成功或者失败),多次测试会有多条记录,根据测试设备的COM口区分 该文件会保存在工具同级目录下,测试过程中自动追加 -同时测试结果会上传到云端生成报表以供云端查看整体测试结果(开发中) - ## 环境配置 diff --git a/main.py b/main.py index 37f02cb..8379138 100644 --- a/main.py +++ b/main.py @@ -220,7 +220,7 @@ def __menu_handler(self, event): # wxGlade: FactoryFrame. raw_app_path = r'%s' % app_path subprocess.call([raw_file_path, raw_app_path]) elif event.GetId() == 1003: - excel_file = subprocess.Popen(["start", "/WAIT", PROJECT_ABSOLUTE_PATH + "Test-Result.xlsx"], shell=True) + excel_file = subprocess.Popen(["start", "/WAIT", PROJECT_ABSOLUTE_PATH + "\\Test-Result.xlsx"], shell=True) # psutil.Process(excel_file.pid).get_children()[0].kill() excel_file.poll() elif event.GetId() == 2001: @@ -492,8 +492,8 @@ def __init_excel(self): if rows == 1 and columns == 1: self.__excel_handler.set_cell_value(1, 1, "No.") self.__excel_handler.set_cell_value(1, 2, "Com Port") - self.__excel_handler.set_cell_value(1, 5, "Test Result") - self.__excel_handler.set_cell_value(1, 6, "Test Log") + self.__excel_handler.set_cell_value(1, 3, "Test Result") + self.__excel_handler.set_cell_value(1, 4, "Test Log") def __excel_write(self, result): if self.__excel_handler: diff --git a/media/1665207910586.png b/media/1665207910586.png deleted file mode 100644 index 0379070357cc17d75c8e99666cccdef78c3e17a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24161 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 C9ohB( diff --git a/media/1665208145345.png b/media/1665208145345.png deleted file mode 100644 index a0f6e8e2b93eb80934622b5743dca2d4e6b3d2ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36234 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 T%XDls)X!T5b@|FSW}*KV3RPGp diff --git a/media/1692598668142.jpg b/media/1692598668142.jpg new file mode 100644 index 0000000000000000000000000000000000000000..024dae18bece507940d9c2ed2eec92160ba6270a GIT binary patch literal 22283 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 a4!i)$g>3l_B*Sa6aq`&NA1jVPuKgQH1HMoI literal 0 HcmV?d00001 diff --git a/media/1692598910646.jpg b/media/1692598910646.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bdb46bac9bef11b8fa2bea5935fd38950a2c0cb GIT binary patch literal 12168 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 H)6@R~&Cbay literal 0 HcmV?d00001 diff --git a/media/1692599729648.jpg b/media/1692599729648.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40329554cd668c371fe7c1c4ac71c4b84480db18 GIT binary patch literal 30540 zcmeFa2UL?;+b9}9K?TJM7K#okIs%EJbjYZq=+IPDq(?=H^j;HCM8-iuMWus^f`Wjw zL|PJ1M5L)Pgb*Mi5F`O2C5a>?xjO-7zWKlZe0uKs&${cZJFam}%)8%bKl|xr@11MM zEKQd$+qet@fh<3IY4A;egk~uCpG4pZ(*uy=cBK*Uk40|#E%rko zrAe~0XBUHiFZDZO8wi1{cq#fT(d7HY1p*1_KlYChZE2Azkw?v|F0-Iq|fY^%5bPWa87@ z@Eez1i(9nqX56n5(p9U7K3gke#@SD{?)$Jxa%-!EQTb@GBwN1`%#NS!ovV0LtJPeYtbHm&GEZ(EW za)hhup`UYf3ZznJ$k3@I)w`RPAm+yCSns)G#jjY6zf+D#XI@T=hm}KIx#5oj_E(*N zNQuWhHx7nOJ?$tq8T)en2muU(4jQ|+qda6_+n(;cb^{{fHUxsu-ga>2jzLTsO73Z- zLhEsewF&B^42;FWMP1}K?v`9H9u?CD7QdYH2s2DKB zE#>xus7Z~Or#Km!J|TMf$c~tuZn#+jrVa-{Q*G*mZNeuj5O1IE8PYbREQ0ygO?VQW zXY++8`7_R5zGMNlmUWmlO|a@H*lZITy zoCO4g4rHMgjWoiY>ZUlpr;-F+B-O>RZKdSxF*A3a`4}Q|wvSgBJ^2=MnmUz>JBef# zQcobMo&pONU&w7E4kQWV=}CgGYDAt-Zvp>ha|e939A~?0PBsui^7cnvO_01r8bXYa zCsex%V-y=|0oFXS61@6)s21=q&kbM8;uD!dK^wgZ>mjf@=DP{s^X;y4A&PU2T7n&s z={ts;g7e69d%+N+Fy48FKoovG4?kth?pi}sMGn3+lW5&Voo3FW7%phj&_m0S{T=Cp*In6Pd!VY-2a_g{bEj40h9x{1u#FW`j@+XCS+&3(}ML=pH+VHzV zRkI`rf+Zhn;NQmW<}gBd-MN2m6X%+@N(a`MrWJY;GKE2X;T1ypHdJe5W1-+Ut5#K5 zOrI&?%K#0E&tk^RSVd0^SI+AKJEvR)zqj9P#+NsY)h~t6T2O-lth*(sa265n|1_fC zs;+|DO^S8{qCY5aC(&wZa)LjSBWR-MM$b0Q18Il2>Bk%eMA_2%RiYKj4`5N45e3}7 zoSCO|9*SK_a9d;xr>%d`+a`x3quFQ%}cv|gb^ zYxVsLzpr%t3ZW?q+9(CWDd8+!G*b0c^yK@e!U-#Z%V*O<;kQzFv0%1CAOy-VlS6dF zMvb0VEfjo95xR4DB1N!Me13<)jp~V&ftB#mbUV+!{W*FhCAu<#QZh@S zr}VLR$)*T>;e2hP4E$R?*-4BHq+JV)k7m0?pO)D<IDzlRi9ew_vaZqjPE1{BXJJ3)Tv;U?im$tm^vp{|VG4sZ^foi~MS);Bzlg zy+?Oq&3HlfOsm^TP7iN_C?(&cOIbdL(&^)S?$nG6N(yS2GiJeg0Zi?jxhY~Fnhs;^ui~w>haaVRKzq_B?NUH`+G73AUtQ0gh&RlOa@dv&BF(2LQr%HmJ zmM@N&vn>$KtMZ7%%YUq{esuply)n1qd|7X7$&t zb^DT3DuC?Z)o>?hd+QyBV!nj=4D$eN>Qf{A^G!Fr*9N?XadB{QkGdH7^}Ak5!$?re z4zILX&Zp0V!)wp9dIcoRG$l#D-Z1A?K3!SAH%8we@R8uid!T%Ysc}D9)qbw`cyau4 zhUKxqL6;m%9CO}LslR&ehS$hEx`+R{S7yNUj}>%S?jopc3jEt2^mXM)>TTrDqj$W! zM&wc_BN_fhlV55)=V(Zi+la4_x+?>9dZrTfJSyL8sZOztqS?3Ih6#gTuBU7mqfT*3 zGJ_z53kl`nbFa9{MM;|{a3c{;rIY5jLm&jfmk)wW32SUdUT`=+$_~T1wN*Uw`Q?7# zc~2_EX^`9`4jV}2Ip|Wx>x~Vi^1SS$YuzU%C%f{ja%Y%Jk(cIHtY;0d`PhF{Ilvqz zynvE!_EFt`G2nI_jJ61OB~%b*P;YKg<)u*DdU>OGf*75bITF@-+%QXB{Eqt8yKBEk)dv852wtfdP>*uBPlh>AcO0G|( z0LwXOCAcCEDsFq$jzMU-s{9?I5aae%(vFxd;!jFvB;>>&2Jy=fN5s!$*e;T(87YNR zGQ))}y7o9#r;ORC^6DtT^XkrClt)G^{nKXsnz724bOaI28X_S3YNN0QwK~0m*`W;6 z6zG}p(8<&l>b$3zA}H>(vJTHMx~ke%%X4g?yMI`YQK@)46ue}&b!T&gXilsjOmo$>BMf9@{?22H|p*GdoXz%cI& zh$|MS^!nKn1ii(MpOhbtvh+lRy~nrvrJOQx=_*t`F*`bWKP+84DW7c#1PZ|3@M zyxiIzQ)R?^NY#`~^-O6&La%CB+z+S_=9c?!2ShI8_YdOA`C2lt3(*N%%nW08cB(cm z>qruV?X%5xhY%L69Kt0CFTdaWEH(T6hh-*q{YQD%Q?@aXjv1)IC*`=1Pw$Pc#zAO) z3Lk?cQ*)m`GP+tOq~Xe+f9W22IWmyx=p+JtIWZ~0_t2WCx!IEoH;iwux3 zSN=7#q&>%()rhIz9y8+5x8iuBQFq8hYx1}$vRb0mXvxL+U*ZYOL=R+q>+#LjGO!|M z%+qMCj>5p#=6=|uC}Xi^)M^`-LRcw_*-|x_<#V6I4@{G;;pMX=OCV zcI0euQB{)2V)$pgo+1uqlzS($#&o>`6^w2TmyYmHIN>@y%dPHlKF_oe+k$#8N6sn% zg=;o^cNyYpj-{ZFCJcZ6gTfviSp@4v{G>Vi z_OjoTI99>pU~I?gI~rIWMy7F!!Idhbs+>;2Z)c84rZxv}t4))EwG=N8`=br}A$U!R zvJR)_VWMQJ@~B$OhDmw z)|~A9(&MwkN+*Wwf9uqNtB)H8@CkKcIo|5B#LhHz(ux$0wN{2!MGIeUJ>Dx=y7kqK z4v#Dz8fJ2%seHr)BM0?i1ncEVt_NHUfNCy5gaimyJq%3oxx&yvF7iN;Z@ZU?8ms4r%;QO}}FK;`U z#&o+O%iAF|=4&H92Nw8JKjs=?o7pMq2`uthKBw+sUslU-Qh8MlnKdk5__CQfHhdhX zvWZjva=y(Vm&JD177^;T$~{-SkG9jA(B+d>^E zyo=DEH`()^V0?R>{YOlu(zG%(Io51Pg~a5h<0@7;66V9Z(T;jjd0j|L*~&CcuMCEw zQ>;&23wjKRDajGku3UD9XB^Q+p%ha(RwSt#B|UEZhVBR?^4y72c3mJkKh@!RjuY&z zVr`upf$MF0@$H+gF)o*venuv~4Xel|@{#ew&s{j&eHf<6RW(v?({%M+78H)5y`6}- z3$)S5R#q}~Ku;EtPHiD;n5t_2rmFt4gt@ItaC=A^b$rl>2%)`UfA%E=hd)5i+OPt` ztGs9G>eg$tv;DiAYSE4;BeP4drSm1;RyOnRP%PLs*`c;k_u^QOR@5zmnRe)sk+oUF z6&2scwNf*vhOA;mYzs#h`D~=pW2^?5<0)d{$avrgpV)`$Mdi~t$0MA2`94#%1{4*3 zA4<*>MV+4gz#3~&aGDxt))>VXXK|m^A**sGdFOfqZ;%{GMbYKB&Z*5n@Ht(VAvC=Z z$<%=DttTMX(eT#Cx!O+Y<@PjHV>|ZNhE%{W1%=;wTWp}|H0sk6D5l11`XLtvcl@XF z;Eb7vzHFY$M4cbnqNS17V+>rO^SIk2b@Eoq>e@R^ooNRDc8jzXj@gI~iAw{VQ|4OS(j zQvrv9ki4?E;g5VIX85^#zKMM=Dk8(jDuik{=50fY?t=!$p!1+2%Y`i69HXB&2C`;N zQ@1(|X_zVH3NvPB--H|9{F&krS=rWeo)b3EWrn1bmPCahhGHav-@yr5bz}^4 z1=R^P&veAzgh?rDpa&qJy**dkqvP{}fY*1|hSLwkAdAvt4l{LiclxP+uF@RBrH zX3_Y0I}R_1%E)o%Vcn7<`}gHAdFbqym$OJNy<_T0XU|);qZz1CuVB6#1zOi6S|1-6 zEB&k6^mg|DhSX_kFioUUCsqqL&{ubUBo)DsQBU2h3}T)ZDcU4-u-uQ6ZMRx#%03@& z@DHeoIIC};xsR8oG2IJ?cn&N4Qo<~4h#sv2s3WG zZz#M%@u_!9u&nIZr*q10FBI9mYNA9~24`gq+h<4D(2B;kkN={0JWk&nFMi zP4e#Y$o&%3;8%T{ zEJMso)2oN0q+9)q6y0jBY&P!d87@|Z|D5n?1bBbN;_^7odt8HdFSFrtP;zn;LE|Jz zdT)7LSZD^}iCPNFVDz&_40)wwu#~09MCXW1^fWz=)_RXk*4kC;$NB;)br9D8O5~WM@IH4vyFz$hCZ8MX~CpoX43o?$5e+dB@eY|A;#G2T2MAQ=^dY@2I{aFw{8wE318#`rjxmcOmm_n8R;wUFWz z`>a5?IydlYnZk7LU|(}=pdBIsboJ_+-G%aS14@_Kgrk0@JK2!$vp z9yzQJf^agh8?CuK`xVZKUMj*rnnDKCn|=|mtplsR5pUjcq{>zpx;w~Sxa(liFXvMr zxn6{&o}V|s%-l+@@GE5ycgkB2C5hjBWFjfK1Iitih8NzR=*}(C8G~I#PY1uIUo2t>62x6w1{cD zH1wo?BxCt90y;1tV{vME81iIs*MFa}ynR@<2$szFElgV;anEtn*R>hQ$BgYxhF;^L zhm@Ij7LQ*uN-~j5-9qiiA6;2epEW5ENrBB7Kk3%eT06(oIG7Fe(V_6&b43$}I#3IA zgkR4Okv6Y;PSrR@$%c6z`Sq5<`wPy63V*Z(moJV8A4f{V z%$TLzOzDuyj8GlcI;CrX+0>9Mj|g#iarfrgov9<|Corz66DAZ(1xk^&Rk5-bGv7hS z(LDtSY7Ch!mwIhe4#9xqU5cEWO%dPI_utL--={KPRgHhne!Bri(fFlB$JEU?NHOBV z1In`J=}00b&AHEM{k_ct?!4SX0dBaqF~%=yP%X13d#D{771_rHkz6{HY5 zsN^xIstSnlsJrOBRZ#-H3|^XJv`86d`%o$@MyWsC&?q}@xU{yTF$q)D%^c-gS`4%3 zMkS9KEklK>F9VS2V|g@=yMJ%sNN2<(%EPxNuLE6&bC~jj+t;OhK(?aIk}9XFRZ0$L zsK^4|g-0l4N(3sEI6aX{C91;H$yc=c4H2MLq`xVzod1g`>%=NPuIsWp^R->Ul64{Z zko6jsI~0w~k@t?TEKzW;v2rim^Ah&uXQh=%5xh?Rx|DJ4oRKne0Q>^=!WO-7rJ;#w zpx!FyDWG`uNAGaOu?+H0=qgnIzAv4T=qES&+oy-)4*6A4b4j&zW7Yi8uVD>SXP(&e zxjr*SHg!p-jZ5PA=x8Ta?e=1%a<@-}R{!o`=B_HXpc7X-#Sa0FXn*m!ffBu&^o*$7B_OvLT$x&9Z3e7QNmay3%8r+9V z`Y=Tw56u`RlG$H4Wo@4ax@H}8jPp(vSK&Gb9HV-A!E&hVx;xp{QQ2!!*j1l*Q)vtf z(Q@vImtzUBZogu?3_)kcR|N&VHVX`CnawqAS)u$oGYnE*vH2npwL4k{Ld(08k#@6{ z#m;A5?6dUMcE$r=rt$hT|4`I~NvJ#`kJ6zKHKew3TiDK|q7G1AY(c?{`{F?Ih4=QQ zIz0)Y*Ilf4ppZjc197q)9%HDGFr%^I(t!PaJt1u<2LD-sRfN-6iyf0%+2MJSQ@1a; z8kfuY@_M*zWVd%f2G4VJ95cm3Gam=37LJFW&ACA_qIL3%kgB3MDBrVw1FWeO6dmsm zeR-DB2%))Wd{u@u8VZ08613&26Yh6PqMgEmi=ipXniU2Kxb~mCs)aLHt)@dD!r%(J z6I#;DIAlk;;_~@4W&9y8OrkX^+MeumADv^(ugz$B;q#!ofcPGrz^V>;@y#JnvxQS% z!93q9T8ddmuJv#nrzxFZ9I4tiUe162ppnsnQdB*Na?&;|IfzOELY8IltoGT!RbER{ zO%1i3X;xBSKmx-Fd?n-j2za?Sg=Z9UqtjRcFlRDIQ%{Pv{@$lYS9Y<;8nUYT>CsJQ zvu;n!&R9ER8m1>6s~F#a0#&2h~CFEK*6$eJ7MSmE2TZK7i{CL^5I7w2?ajO2J7V;US(l+#m%Svy*zTp${J*C zk_3+*u|r?)&31uU8<|P8ez28R|LoB-{I2g>$B2f(Ytn;7H^+t@F5ZlNWpLjvP(fZ~ z(mDY@T(@RdY9o$}f8N{kE3K9g$ZxQkD&!-T<>$GJqop=YtocaM@5V$V*~gb#L+fOXZ+;xx^y4#xY~Q+o2KI zv>0Zj+_LE!00NQ;ouYi+$@#EM|M^0`aOuwytC#P5OuyA8k|JULTZnk}t@<|q;hoW? zi(#aKm$9*QL~cB>lBOey`v-KCS%M$IBvVP+3|c8Km;nx+#+!3Oy;bmc zC_bz3=DyCCGiY8J><;mCw=u&g85k)&+Rng15u`eoQ^*@&DQ=kFpJJ*)s;(F%JZK4W zPT;AF(Kbqq1QrU~nU(XPteI?@NY61#{ScMu?k@yFcy`UCsJ@akc1AUJju4qOI0_OzX{_Te*#uM$FFrM|cT7q=+zY zP7;Kuy8CCU@Pn~u-lARQNn44$944kJ$>8_2Ugm7bR0{?!JC}zBkgbiSu5PuN$%ju7 zh|x18Imb_h^5KQ_4XV1Ovng9KetUEUE#-njdIwGzkO>9T<)39rTtBp?`L0jZj-LY` zRkzG;4zEEuuoS5*&Ojz;&=`3{E=OpjAMqLH9y-p#3)OqBZcXZU6qe|@0co`Ac9L43 zu>H1ujqCA`edACp<1w)*JL)GN)7#B(WD8WI^;QL7_25y8FN9#wRqFl|IhbnN?Sr@4?i`B)>=B)Whpvfh36Xbr zz7dYi$sd*Ud3mI}M#~AjWVe^o5x4V45Wr#U8nvrPuZu?;tAAiMvUT(#Q`LH8+HRHK z&~HF~sHSSoZ& zJmWptHko}i(EQA5X*yqj|MNTa@UPX_uD-mRXmX2wnI9k21(3Z*G(-f%WT^F+%F>o_ znpupE!AeLxEC2vOF|+%Eg{ z@u8FDdKVSW0=x16^7>zJgJVpphdD!a7rO*UVY2g5VE-GBFLW>7V$icZ_<8? z%EGJAX$3=wj?pOZeRx# z^qvCB2YR_WB_FAYlsj82LhS3Gi1~>SIg&2hJ4qXKeNO@T!4O-3lSs$aeM)L71dql(qP{t(+!**G}cdFrX}$d1Z-fWN`cv zTTL!+joEGb0$!Y>*5f8-dTnvPi9O8pMN+mO=v|aFwH?^zgqtpX(B9yI{*(@VwjHf# z$r`gK6&-_|Kjt4s3H-?sY#Ouv;)IJ1d=xBgF;mwU;&>!z*bcyu_eodlaTbF;1!Sp2 zEKAp9V3ik+TSJ3fLxc~F?02+bMzmb2W%J3G3+r;&4NoJZwJ8|rGKAdED|{m@A2AZf zyq9@o@H5mbVhD9n4kF6O+PAG5e=LGF*d4r_^FhRx=^)AV;JesA4pOq$jBvr8#RJ_} zc^)GAx+i8jijX+UNH2F2eerWl|E>S&k=01Z6kfK#2F~uIW1Lt-$yCFS|KFLC-k)Q_ z8S(IA$S(((h1n=>9oU3sb=u09l}(>$QY}q$NNf&CZJjVT%*z@NI{H4E@qJovl@tfnX;{HX78NAo$fq z`lYwM(GoGiscMjj`?kMI;EQ{lAb~<-VheS)kKXCa_hZdA$4RdDY9Uy`jd@GG58J17 zW*+$%On$!nb-e!V<0;qmFJD15KQYUDngEgZo;Ew|xCaCgJsf;Xfv)#V$>t3w-QV3z zd*AtZpZe-xM;))&iL;3=AGe)P-2A|K5B;_W{im4yoA>}w>zE9TLv?iiq;{lh@$$3{ z-i~&GKOHAsc&W2qm39Pxr7c;_-IlABmZv4TzT!P}LvZsFgx}BZZ(7|MAJW%ctJd0t zuKxxz1weP3-h3x|zBhOk{{9USc84Lc*82~-{s{Jx>ob>a+@sxHT|xWxVR6eZ4OpFXpi<*iQIs2Dt%D=me8etYl~gQP#i9-~y; z(8YU{qPK)1Rn5`SU*4`E$krJ7KaTkFAc5G}jOwggT@)Sy#ANfwQB`m z^x2c6JeD&|xr0no<6YIiy<&L%&5E2h?+OrqD0o6!=)UO zcQ!-uAvwq-vm4%l*~#1Ugnfgxocx^6yFXJ!(UW(qDhoMwce=8U-{VoPP|eG9rh2m} z!xfClSA&yei=;zUIp>$>ElA-W+MBGzf1h3!v9a}*p>p8X^NB8OEwH8NJ!4Ao;abA| z>VdA0H*2u+3Vmy2OJ=G`IFE1S64O>`{3u4hxBjCrk}*v`f%29A+#GxXSJaR8bF6A~ zp|+5U`~;i#6zSi3!YDhNp;Oc8F`1wrAPrdfU&xM@Xe|y-pFNkDxqoiGH6p#7lx*$$ z#m1G2ucgI3Dalwj@E{?X;pY2j1VvwN0A0eqWU;)80oFgmy*tT;Vrf&H1M$tM^gMeP z%KlR!rSy|821*r!J>1zf_ySbANnS!S@}5cUi;$*E^K`JtaAcfxc1z6E|96@5hLn3| z(HTJKfRPjlodUjsx_RhYhxD=GqpItoL(+*SG#R>xDxa6Km#oht500}<^tj<4HU|%c zq(61Ap`!Qpy}zF}j;ZNLj~naOkT2lY=|r#G<%2QKcS@NI>@`frrpsa4Vhh5R2u_}C zTfwHtz;z3>(x<&S^Y79bB9cypISQ3P^45+#xj&_NU+xh*;XP_gwRyaa^_$5COBA!v z?#qqJ<>A*k`+L`CZP^PFo#w~~K3H5`r`04&a`7 zzd2tkpH66}lMMDA4h*k);gcQ5pe(O_L2YE@Ew47$#y9W+Oo0V4Q(FF7X9#x7AM<)(Uvd8B ztF713TJy}?bX`7hYp&LYz(q?%UeVlIQ9`c!OA2s6i(q=|_PV%M1behy`_(aJIRz1w zss_AVs@f6p^YrQ^h6g&>O$fCxcy{hW*D%fLEjTZs8a-$;vLXA%}4m?PSixHYR6A_;{h z;`m`MPM8LVNWPsS3cnpJd4{473oTf?a1#vTOT`@Zn0h;nm3!tWsgWtN^y2X1`7dw8 zLB(9?lLMg%+-#y*vVt1AZxk)sv3Ke=>7+dFlWc@6BKyVUvET{rXiBiy?|(X18BSmj z8{>;lTD77)cW?sV)y;w^;y!jty6#ZG1%TV zWBEO32d84(8Aps?wRec)<~xT1;IjFA)WXcY3Lu(TFl=4ki3p9q$wuHPgvN@_Ux(l8 zhL37cJVoV9;f^C)FiL%gAq11U$OuTSAFNyH89Ghrg{83IMc6M!n97baZ(d1PG9!fz zH+0WdeP*x6YV(o3LO$mf|5J&RURxJ|Q}3>536!(TyWb`8`r^Q?+THqPmwIVSUSIy3 z&^4_<6i1B*K&D1pmteN%S&#m;XpbE-O<7W(16KAZ!ALT% zk|`mIc8Vn(E3Pw;Db#p4LS>Vo=1SLu)Odpgda#$B-WX$nOn6rE|k7u%e ztl=q$;A=E9TW^&j5?u}(n(92KDAk|&no{0Vlhi^zP;`;)sp(-|F~5x7KATZFVk^_fnUsGlg4)TB{z> z<*ZY11)+%v9HAxCtze01W6NHd?7q{j3)f{{V*yrKIG6k-m*0^Nf)!+HCZ$jp$6yhK z)3%{R;j#}2(5OD|#V|$t{9w$^{4nR*J@ET=DF2X^n^xoz_K&ify>kG=+ORE`n4`lH zRMu`kM#6fY%G}+*hLzT&O)T^ZZ zdJYqpEcUwM=r|-pZN2Q@P0wn46vNZ^w67q$W28UlLAF+Ar%I%bOrfb4&M*Cg0YVG6 zPv#A)o_RNpp}=uep-h*2>XizR&F>|Bc@FdclRa>vCp7{Bzg9A@l$txOQ5 zmQsL)*dRNvr8RA+ z11w~(oEVtSQnGeUNZEIY8r)xj--(q!T;q4K?b<6JS@l2{P|r$x-+pWPsE#R20T@e> z`{jUTH60Um$c4L+KSCvAf89>nIy!3Ow10dfL zd((!0RXnjTmAx{TjxLo|7bQaCwDE5=5rqcd1(jwE+NS$g9@UwzalKaB60TGexajZ7 zc2aWveUp{1SN~`4L_S_bUE`c1W_m>vXkLYy z($zph@UL#)6)Kg=P*j(>zeaJzu^JWS9-7prokPEbCd3ie*c8NXPjRdYdmi=4UUjck zu_rU%%ULJW!Dhu<&CC!tg5(1y{3BA`P}Kgl3VX{*Vfk?cmD&ZZ@)!BJtfYAZ?@wDY z9`!d7BI6*gAz#y11ZyWtePT;Y-EO-yK3UJ2j;Zd!lJoe18Lkqi7u+b?RT~ZVc z0@Y=T2%F4PK?LF8zE7qa_#t4(<8TpHY>eM?dsROx-$4F3Ua4Fp-be?`J48Z_PgmMn zk*&%ddBaHL54v$+s0jqnbgG}!k$KhhSZR^2Oe;%bV(^z2k-wlo9EE>ja!d;+^3yu9 z`IY;!h}fAb-bPF3rpCq-|2mDMg5^-~juPs7-g!vtE&jqXQ}i!S{C$~BiPkC97sVuH zyaP^8f4#B6=4_Q`A@Z*I?eeZutmc4>W(nq?2|a0}5}z2bNh6b+M~Wj{56URpaZxJ+ zn#tz;Nl#lq&w=`Rdj9)FaEaCu;jgTNC0M7rF`62YLKSSnaFk*FF=1-VsIn(jXB74qktW?ASPS<= zYG#l;;eR@vVUg2WHlLP;WUH-T{5Pkg1dj>tOgSZ-RAv_S303<}@oO+nMW`=^PRGDm z=<#YkwBK9vGM!NKQex_JsP3KEfr_>s8iLKeOTHAW|3y>rjue&L(dMj2i5}6o6Mb~( z?V56_ue%iUg$_^R2;Svw4IbVWH3>t_%r>?u#=8z1N1H_c8OCKP0`cB4pKf)9CnDDV zJ&c=$&@M$5Oyx|a5%bLj_FC>Hm-jA5nAGG$@|2!+!qFg7(bCB5Bp5@AeW?biCe>Ih zb(btjvyT*Y3GIhBsc-NIQv$CA6F*_+CoYF9SExw`t+Z7r#xjc4gX28zK9SwY>H`t^j>3+ksWPf;;Yl?+) z{A9HiidoyvP_UHE{QPGKSL?UO^zcI5)*iSh7yqyBBdt#=6}TFIASItKP4=vl&2RRu zp=c>VNPA^k%VQa*?x}s^mfq=LVB}xO4nZQyHt)*6NuuO0R_QDS1Rwk9QOyhBz_}l7 ztP~9iq^Eo=x#Q2+HCzXU;10@8mWSRB=tVve$AM3acRk)rhIe(V^E#_ zcYHxX54P;P$&sk?`h9OJ%5A?3Di7pYEdpCsOA^>A%n?#*(93?nOR}X>WwIUXzE$FE z>t-TN+{)_R!1?jc;Zwtz60ysFtb9!SCed1M@|5ctJ!MufERctv=D)tNi%8`snh_tH z3GY|W=K4OvPRuxO2A=fCa`eDW60L4FCExC<7gG6I7#m;YOGY6{@Mehq!3>M#et^z0 zh{H%CX({lSKUNI~T0OC?_QmoaoS!1mI#=ZX_lQ6?YSB{0`yZ;>n?og9GqAkunGG;# zIJnYb(+|IPT^sRy*N+w2N4CZIOUs2E`kyY~1Gp2bwvPVsWAzuX15GDeB9JtVXu5wO z_OEwN6nie(zEG|BFO?WVBxLFul;3>U4eubl1r8@_zD@*hmT5&#D9Vc38;>0@+aLWe z+ZK5^aTZrR`{6t>7sv7>_NN%Rso;C2gxM-zKB62LZnrf;Xb0}Ad>Zrai}nmz{`$J` ze8&?rnp*U?;e^0Nsp4wXzw}tVL64<3Iuu#|-t^}7O(~mnC0e7oHPqTL{K4CWvt`iq z8+nK55?Za>!tH%lMD8{b#~uIj{wE3Z3E_)xmpk_-#jR;BPOkb&jTU%mXj;pE#c{m* zL$+4cM1Lj0&+9nCLjLQ!U{CoC>2(|Tx`0ZJg<~HFgMD84`)bF|IsTIuUtO0m$|StxqF9sNSvD!E<`P!&Yv67u2{c%gXqXK$)C(Z{mP8l3W7 z_sF?!GF)=~=#}q}4}@3?wLgO6()#mi4e(wOHdirPn0}!tbRi@t@OF`8s(kb}DPp|I zG?qS+Pqpu@X1TCFS~H)jM9&rxF|5{a zp6G~~8SE%@;&x+BQNNzb*(EkD-@{>GF)T;$kp31buw%)>zY&S$NEtaDPzRUyg0a!$c(CezZiIwf=MRma9l)UON3_7P7;qg!4MR2&-0MM0Iqe*B91_d= z0gPo}?J@QK-zN)jEcO3WqtJ2)pHsN6j^M5X=u_56uy?Sn#!aG?A8L~`8w_{gbI+3s zQldH?!EU>_?}ln+AUn|tYj;B)W{o!A1+RdF^m_>qIIf*UtOzoT7a%)yap?UZRiKC)wbp41G)bxK~LwCDE*11!gIN z{VaFnOphu!pm2>;*9AX#y^F> z_E*S{q*wod60zVPT8Rr4{|LiB!XVla{*N$-Hx>RP4F3qj-#qm{ZsPwRmH~83ou(7* ziTzf!=8)JQ3ARI}Tg$P95#wsiBByTyDT`oT8@?N$xzs@Nq85!9Mq?xTDXLFRge}Zf zc!c`*(~4eDkmp$wQ=)1h(ltMn3EW}EgpY?}pGAyQK>jir2?aZh)_lLYa$2G_Fgw^c zm?|Z?UP=D@3o3-<309=qLI%L$q;=mP&I7|&_vxO_3C2OB@n7{mN%+-(BUV0&fs63| zbNv=Yd@J?}C!8wW$65?}OxD=h#$EH*VKwjW2CWs)+fMoF^zG8H4d~c$Iv0+t=lg_8 zi|*0lHx5BuiKaK_&#s^P4`eR`LzdU~uq8&4Y;B*$*4|;p{?{#Wh#eS^6$EihvY1lWhViH{$wlUvz z3Gahk+OC)lzsRbyAIA~G_L+92fRi+pVdtFfjBZ$KUqO0YZC!_#yC1iP_o2a~HeGGh zEYPLa&Zrcsnf?0dh6e23gS2G`>30p+kRE?cqM6;5qF^=fQSPjB`j)`OFe&%`SJ(=_ zjU_ZNq0)vD1*=iBgna*tSD!=MZdOUAN>uoP3H5H+1cC_@uiGR5Y#IrA`wn)cxV~|a zXocA6feABT7wUrvOfGPxJe%jRoI8 z4?M}_gz@ZGa2cLKVn~0G=$2N$=XVv0+kFGaKip`?`kYK@&k|iB>#Sob=3kj@po<}3 zfkAg8p`)%WVy49zd$(k^YR0>`mVMaGS+{`XRCS_`eVA9~e^JE3n{DY^C_o6o(axE# zqNAN}OmCt?z^?myHqanN6PrR=(LG0Yl(oJN2AEpEKN6n$Ula>s;3E;M!93P2IguAa zC#C|4yGm-&)$hCW!UigB?kQUN@84%Bmf~|)r-7V^hzHha33hp-{S3IfLcAjlqwCQk zsr_C5!<<@ldrt&Sr;K*9Lj-?#izQ4OOmnl!PzFY2ZCBmj{V0wAcEL3>vy#@_!JUTo zj=z3PcR1sB-v3I^_C~@(dt}u8*$dpea2sK5EwW{@F;k5%ixw+v z>&-tc!cOGyfirp*3cnI?M|7j>omeF1h%;uGw=qeqsk=?NbEaSx<(#KpAa=Fkh zk9wj;L3hdx)4$VsvRAHmvDFzPBBf2?2+O&Y@UYPKOeJ(vlGr-!KF9@YuQ>>r%A>bg z;c_F0vP}JDh^VE$A)~VSlg4s{xMRG@3cqwmC$OO`Si#a!EW_s#r^O`3hW$)!ggMGp zLah?=$wL<=z~Qrrk3_Lyay=rld>DCz$#folNZtq+LG*1CuG{K{cWJ8iD^Rp3R5)Um zVx?#?G$2K2?0nq(lLtFxbg^cpo=MxPdC{dcTG#p6RUWacj;i+iS#?XQ)(a;?+Z}C! z^t$_vYnmQ!Sdd%s{yg3|v>hi!OH01-796a<&{XYbSLgn7h@xeo;I}a-$y<#2?P6Wi z#9WblREOEs`GLn)g@O}fCE&5hoP);)6LaTG=6OfG(&)czF5`@%)u{77M*AP1^@A?^ zUaVsoln{A66gyJ)iwbF4WgyE}|I;?!p1P(mw~RiSL4ONo>F%HZx=Q^ANMmkQo? z7@Lqv1?N{HzIo#Gwj0h}X_HyAd)_z99s8eZDH!HYVNUuA-}`3Dz@XnQ|84>quj>n@r9&4tjQ^N^{p3{b9}Qg=Ryd@IFS zc#_or8bYHADY`bgIZ>vpw+9#QCH3#28zM}E6zD1HL}Q1-+_jBIRbFOcuPj_>R8=Fo z7d7VrYPhiAAXP$q(fihLjZgzAS~z@?v2a6@a<5iQ_$P;8fwuUh#=^{)P=HfssL^RY z6O;X{@2mU*b(;LagAX`y!=Uu1F22cZ=>|&E1Ej$f|`^A z$C&F9N86@Vz->q`ML(i3DQBzDhVkkB$=6=Q8TCRyg=TF)3*=7GQy0&t#7Lc8OpUuV1qSx(AVllg6F7Ck$U-d1{Ts2@`m(SP4S z@5M34wKyXK1&zAi^?Okb8lUEc@rEGOZArMgZ zW(0ytK`J5zLI@2rUQ}B4Kfq1`tXBF>EQ8;IJhECSl3a8sM_p47mqyuYpE2 z_T2SCp{?Gu0ev!U#5l z(g@St`&4=hsBetH@^JoQ;&_tHhP1Lwm3Ep zsb=yOl~v17T180wU{qt7emK1SQI3pwpFx2u47{qLpRq#2WWIQ75J-7;s=1szU<(^ZxPj#?@&i(gsQtc*<`J{s@sU~4UB54^G_C9Vb<7;IotzwhLG9&!e zA&_?hxF$8|%4Gx_lB@yW?1~wGm9_s8{L8-j$B_9i7H`XEO||`23^iATwW?vv9bbg+XErTl~$oP*Bg@1>12V|uyBh{1M+FTxqPaxvOjg$Upc%>onMC# z+=*G`9;Xk+@Q#YP9D=N^6;hm|JtqZ^>Zhf`FsIabQGMsC=nN+IqO_n?epdx16P#T}4MIKG=yQcL=tHg+ht(MOEAX5mpH^~8)%KQ%b-&jhJ_J3EKQ&S4<5!d%r8FEn9De_ zSt%jn%MxzPLJQ*ay-*`XM&a32;huW_a2O9OD2WM)4bZhEQYiHWEt184$1c)KWO39J z2D%QnbYbx;p+<=S)Y&o0xwhyr-^vX7c?PU7VyERcs0C_|bvfh6JJpY};$>d?_|_|M z3-}xDEqM!Zy*b)Q(N?rfR;|jISQJDEC=h0nC{^34pi&KU zv7gpfoCNem&$_W;_Sem$r5|JV1w@B4r2xO550^X$Fv z`MU3Y@BQN*Kd;3LS1kmAK#OI0R1TVzDn2?W0Ey4=z{>J96x!<(tM4 zXCW(>&i_>U#P7mogGQ%^M+`4??CiM)-u-Kp&8F|c1xI#Q$)6Timfvj;Df7z^4@e2| zN#EjCq6X-QhTw|2J93w7TO^n4>skSo=lMJ0)ooT=@wy2%(@Hn6k7+g4n8UP&sbll4 z^umK%;o7^gNZPBT@Sb!fk`)=_rtmI^O=ohP;ZAz3oHqUmGpT>9M?`3KW^ z@O+M1%{*9`9xt!58|9r{xBJSv-Ig^hv@*hxg>H8!5V?~YN>ZfAMRxs4Q4I2_EaS}` zAytqjPB^CEo<7gVu4plP6CZLzHpws z9j#h@LzQtoMUdT4mBJr-Jo`$I&pdk)RJ@W|eXad;!1wkmbZ@iqF}l~;#mAwFJAx>* zUIlwT#g}E&q`dsmt3aSGGVzCz4Q5`(GB?f1jrcYDA0fA^;l*hh40lR`8K(*FTk{1| z6Bzw^Hv8y^Au4Qkrs&cwKL^EVtD{(_>)&{&=){z%9IIHg>Yxm%!^71s?2U8nXP=~0 zuVQREXTQR7veMrVhMt&U!I1XGW#OE#0jkZnB0>8i7@aE~wzXsL$S`*t5V}6U2u8nNiAP#aUNrHadbSGIKUHup zf;K3^)TcDl(@%`}(-lZ&8Nln`2Qy`~u}-J7|GG#ZFSafa=(X9-_^F}h{A|orQh`9r z6U3m!BxsNO)SDgCD=UUzO4Qls9J4K{Y3snT}RkJI!K=o=|Rmjy`OYZF*k`sk0=rMiJ3k(GJ{9r`V3 zMoAb0)!w^K{s8uww@H6aKZsenBiEM`vJsG0UJcc!x<)FqRsYM*7xG*?KdUcNFX5*EfB=g#vz#N>R8NcO+HTB^GYbzjhXqeu*2xN!%g_9 zH~VLofQa6|=l=O~zuIPto>|7@3qHrH?_%C+nckSUGAFqFn!Y|o?N6hr&uVnatypyv zKZ!9_rhjWy`cC_|rDu6yBb#uO)fzd?1(^FNEVW+UhffZZbM!4C%#HlXKH;~qns$Io zcVMsQ+T$np%Vl~kJqoIA#%#iZr}^+={x%_K!#vv^XY89G_A*_G&>1$7ELZV$-9nA- zQ3g|`AB9EoC*onfQ!gm!UsCiMO#Ek9b*I&or`#H^PLQ9&ygfI^bcUx{*s#S2r+GFz zzPHbW*z3pPRFYbtSLtJ?pS&sbhkD2b+7`UeRDxUvl{YgnZ`pc(xs|>N@5f44w?#nN zQ)5>8=kNFfI_H08BPID*XIS5|dz~mvdOt9zimr_)JN(pDp!JqT@inb_a*8SqlQKMx znPl<#>Ek*0!r1As2T+#0(jBX2!?f(kOM4@#3m=hvdCOfi(p&n%F_HOCeQ%e~$ zUxJJ-fTm+B2!ueqcVq@@-#>2pPJ0-Pck%}r?wmCckiGri8Y9rCTUHxv1-k`HM?y&0g@k+m%4H7*B32t z7(C?`0rt_>FKg>ZN5qRRMKDH985QmXUjlE#%nYU*n+)wu`d!?rkB*DZxLL!>7~jPd z1Z{$%x7xSA8&mY_b#U8o-dc9{vPzhN@aL3I$6pu3;Ln(S(m!!Jf1fqC!8RQ-YiHZ6 z&w3by5Bpr{T_NLJ!uBQ{UKPIoO;v(g5__D#RiE5(+M?aB_l!dkcpp8`B%8e0|qbHn9W|qz6+$I4SadTr9#QtT}Z#GWseI7 zac^ub{q1t|_TreCxRgD!G4+Fh2V@F_4)By>O=+gvXA4_Kv~Zth4Oj|7iQ08piX$ZTP7c{G}O$5tqraV5Cp7 z@f)V`#+4z%dG<4(UoqH-T{H8M`5~~;?01Y}e^9(4E`Io7iEzBDU1oi70}PI|g}X)) zCOGf_(f0U(?Qv-CMr-C7l-SP>kCczR@@BSN?VZHg!ab^#Hp&GXKxR&;UV%z=!F`Vn z&up1p%v7;Ah>hNK%rW{2xUI9q0TFI{`r<3@ruJ|bZ%}o+Q}l31_t^~+RD_E`sijwP z|IAx)=EZ`Q_HxE|+U9Iw-Hp}`uT$Y1n>mGkt2+WjLr-nNZQrH2TnPA>;bSKbCdGsH zsggQ^i-VJf$6pC=WuRxr*czGylJ|sVSE7d7T~B>gKY!!i7n@Hq1J)L>zUy6&&8y_< zf-%KsVIP;RX?Y9^SI(oJ=lY-pOBnlKbn;mfYSqXy$F5mXThh}OAok|o`_3-;Smuu< zpzx~p(enwSfyYzPm(jaAYRzs3lhcnbWpp|LaVb1IBJtYOt5@+s6mZ+i`*kFEl40A+ zo8JI&I>}{59UAJXCxJ+AgS_;7k)t2SMLU0QW%WI)xSICum((lmaU%ExWd|t!RUA(h z_qxOI^D-{X!z|+E#C^YRSl*P2Kzbasj~iqhKnDA`Xg@uWJWKGna6H%`*9m(YhSSfx z8E|N`+s%@X(-R)%NLSiz^dq5;DlgyUE6Jz4G^W?)|vaK}%55_N-Tz{vjCsWZ8j9F1-0nzK7%`HUinprvI0BFa|4=(rS%+k_w z>J!EV28X7somG|0;p9|&aTF+CuT{mLzZ1iWqF$bH3ttFJjS$7jFBcF_z6Naw@tPiH zDA#7L{n~xAV-BeU&3!=ftY$uMN=u~GrnDnh6xdBJVtvdoy7g{#^4e{=AR#gvz$7gP z`F-vpv7moyMAkr5-#DmC0k?tPEz});K63#AJ<=ox3F}$WP*nl?mKttF>qzIU$hZay zXJt8H>-&Of2{&BouMoJ*a-5wb;2th=GA5tyjvp9$Iwb1V20wUqGF2T-?Rz}BIXKdf zEUr-8s_)=8ceOH09{7o;-H)2wGAtog#2Xd2%6pXPI~=0C&-{uav>~CsKA#XYj>Q`Q z98CE*(EJE!--?De=R^D5W8+>m&a*e+cLg_`xL+@BY?meVyQ$TULc;l^ttutp!>ldb zaZxdph*%#G+hjw>DY(TFV-$ia#kvY2=B;lfGB=1=M^`-zF7Ee_Nc&{@evm^w;bFm7 zpz4vw*s^HSRYF1Xt6NloBWf9=urXt<{SF%5`O_IkYSQr%F(+4+!m`eXPf_5{rn-o_ zpM*g)`C_J-;BBd}m_(~p(_+&egNwoOvGL9B-`A_M6840aUMfYKcrvL;TUYoIt-9k) z5T%edZDwyvBYfMgwl%-jWe$V{(=Rd`yPO#Sjau`lW8zfRt=hhG{ zgz6vr>tJspo^oadN97uPQ}hvIbkNbIMzs=Pl1s&-#<}+XQ0=!vsN4BqQ8i5rlQo-u5|Ea2s4w)UHnRIXdmJJw}9wad+eaw6UGRTCKMNXy5_-XBgM9TN1j~$`Wtb* zp*_VM+wEEw5j$b>bY%7Yj}f)pe17=J6xC|N=?iRyzlnVs7a0p%ymkB(;>_pgCDA7$ z%@m@GFoO-yvSA4~wR5nb0+SMV4@%dL(m0)zB=yUabt(YickGVeqNZxxONq_hlEQ(p zO&-}@NLx$;l9wprsE(6wAC#q32E%bgj8VBFk`u)#axdL@UQ-+jZ)|xg;VM>eL$z;1 z^^-q(XLJN$UU}SWjepIh&?||^krov97;nG67v-HDD|+@LV2lkXmqR{gxU1-zGUiRX z&ZL0YAh~8>j1cnEnzv#D^kX;ck*`0Z8H6u=(b;QHRX`>HAE`U_yaOzodJ&r%VC{aJ zyQygSIqZj`DRf7#aDq`wsg!yijfya1E8J8E3H<;nK1xBsY9+2G3f;3(-8Dvt)a?7> zj+ORD^)5DD;b;Umls>U)LL4GaB=M+drF`$FdsJzY`AHmJO_76p@f-I8#*dRSip6{{ zaWSVOkpd&8g?_9d?$G4+t@0&tF&A31FUO-VookhRm5aL$M`}()Xg6=YUrHaO=VU#Ut3w<1(h0C zrAAOT#U!Em&p^UXX``S{JbtQgL~xh$3dNnIrr95AC!Or@NS2T%lMl?fXwyFD=Z!g< zJ6zwogDi?MRLn@-dyYESzKrGEi)o;WYU1ATV2BuutSc?`1tk?z-JBm<&|XJT)t_{W zNOspE2@Q0zIJQsPHU<5fRZi!H6d#P`u?3Xu!%Z@7F`P_G>+Oi*>$RI$H)4rUvsk!l zAKi}Q!AWMLw38&R*xdy1t>ai5V{2@^(;_E62Lx13#vb2_|UC{1hzwH zUveOqa zS%-T=GZM+#Q73KjC_RZRCJ^<%z)Qh>XKAYe(V0AYd3{c|74vIf(BQ`eQ|8-K4_`F1JN` z>V(S07oVgt)j+f;E3xr~DBi2o5SIWnq5hg8!=9(n^Gy7Nd| zdTBwO8|H$XYeUZ#vZCU8Cnbq!xTYbHqT*tFC{wf^<@jLkAz2q&yn$3+P4p9374`WB zqq8D1j9aBT%K%Q!FbauR)lDYVaZ?D>;9^aX`2mo;|3~;FSr|eGxD+9HgDbF08RQn| zCCzlnJ?QDJi@&jTT47f_uy)5?DmS!{reNc zpDHLW*htoDGu_E)0H>*5!nok`4#J6|)?ioWy~AuQ&UTQ)mUlT;G4Tv2{K)UPsbC9s zAbcN>z;Sw)wUzfLfQ@1=D0cn>pl$aRv2Qb5v;SYgz**F2Jj#DJ&2EB@l&=Wp{stG(GSj;m9jt#~E+ttMVd&Kfwo0n+97zWvfST#x!K^?1j|ma922Aa)E<6Yuf3ofTz}8#k6duHb3JQ=4Yf z)3}7K2i6M0~lmLEW`#VA|iK-Fa3Pi#%kNnW?|g;$#XeFx2F`BogX$c?-_!?wJWED(3V_|)cKoEUg5`71E+241EI<5J(PDN0W)-7T zMV&Cn-AJuI7!Gdx$CKVhC4eSM)w1}5nMLYBw~VPGvFPyg??T>W2fh@+ZSx_Y6to}8 zi&^{qD)y3FD;S$7^N)AeuVVNFFAP3zrmco=U`fV@CLJSMqu=Sr5L0w<5#sajU!OHC z0tpj}9KnwtJ0MaChW5PbP%?~|4>mA7;T;Aiydt*A2!VHb25x{Mu7k(~h z!*Dy!N$FcU7i?|+2+`?Ey|0yMV3}nR-`{Lx{`;5ZZU(d4E^)X1$`)pU>bl*=6`=6B zK=wtP1~a>_nE3$KIStG-GCDrU2So`LUz|IWe{FF-3X=c&vHyvSJ0SMMt}}9Oj{cio zVG+3PiFpJlzP3JnczZlxN2CHkLyy~r&{h#O6IXMD4_mIbu&Omc#cyz8yf?M>VsF@k zj=}^^fOvO&2{pSMSKxiJsC(LO<)|DsH#R_I>W&lLmuUAA;iB4=1v?rHom(~2RhQtf zHCUJO{|D(&W0XawF$z@ouhS#co`C5R&BEB_;I_MF2E|pp1LT;OS96qTPUl#-3&R6g zMK&n>iAugW@dwU}@D$86XQDREwdV{`nHKUTLcUvvXG-4o{7H|wjw=51;B8d&Ar=6E zEDtG6!mS}?I9um~6tVBW$b$An16j~@PP`xjR6TAfCMWv@k!qi3bf)3?KQvcMph*i5 z1Qn|1(T(G5f%FE|dfLwq0$w{f+q-c$)S%SrS^vq{5Ze3`rQ8R}2jvJ^;*Jy=xNW6L z|K~>zEeKbhd_y{HHU_2m8P~Z*6bHKm@ccrY+@29MEA6qpfEW2O2+!VNB0*?&x)&o= z^+BNc3}Tb5@wWxKL=%aJCqSqr{tQUyWBd1Vn~9MxNWbScjC-@W&6W4LP2| zCY05h(0wxgtMkpheAd*Yw>7h6NF|l$(kz2W@n@T>C)^K^>Ziu)P~0N8pnUk3P^zdl zE+d4d+g#CI77`nd&c0Sq>`m{^QF$lv7H8CnwXgEeX?lmLKTE@Cp{W&Aj-u~)jpY7x zuyJnR4vM$=tF&b@^k->f_jKmMh)nGrx_)P|$%vD8MCydech+=#LS2B^4q2Y|MR#BC z;{k{h>?K#0WeY4L1WHsDhJ|{Qoq~-sfo*4aedg8k0YsjHt za{8q_{n>Ohs4niAqu}vw6{1o+G8nL6Yu&a*dk8+#vKZ&yP!E|as3Nm*w}tW}Mj=#i zL_el1W_NfZLpUMy5w?zBu9^TPDRkl4j#Q^2WRfg?FtPnj@+3Dn1p{Q`HM~4^#?QqE zF%*hBkxwq8b6i`q!!+@|%G~by0iA1hlKP~I#MNYQRC`nX#!~!(dxiPU=|x0mz)_{# zoHnrU?67wn4j-74JFIHzN2NaYPD^ZkdDE-B*vm8?aMDk~->Al=p2Jn=W&7_4*o|<} zWQhT(yBE0}azZY!hJ=ZAJJZ!rmL*VY#aq4U@>>0Q@}1^77N}HPphcuMc(Wp3fk+gz z>WkWgG8Ck3Uz)fbDN7o5LH4(=wDeb{RCuh8jinr>uq74c{;8q7R#%zeA}cCfPj!s1 zqq0@6yG2!!&B%D1CQ1@ZQfUaXk_0QUG%2#6lHx9G*CNxcE>Ejl_q4ht8sshv^kbz4 z7$f{R3k2YO{D}yLPhrvFXR!Gr<_tfRhExvcXc;7snn~w-_C#yWBSW$v7mM&^Dvrm4 zLP{K7o7w1_Sj?KDeZEI*l>i6IdOduF7q$D!*(jVC_3DVaUKrS| zYD|!Yv8RP{pxBGp?k&q+%;il$^92#An>$)LoJ5?}4s>XI8gU0Y8_+STYX!AJbWPKm zO`-GnvW>(>GKYY%s+JT2Wr#!}kaMRn9s4E@O}im8058@XZrpa~#L-kIplF=6Trl>L ze&xu*s8UYl=8W`6R&f#lRZ>sXP6hj${6dBtE+Yj%Pvl!n`NcSUJj=KGwU(P_zBN%V zY-o2nMhr6lBFW_C)8144I#UrT2yMm0bB3xE zT*(wonNn*D!%tb-ID6pKVI#;ig~$DoJ`MNH0}VGszbYCnxh4yXOHp|zmvNY!kUn8; z_p#Qn>0O4{>wq(?@Z0h8dFG?@5pSP7`+$CLXq1sB1-XLcSgGW*7hFoMdZBs~7QIdldk^P>T?bx4(2Nb+oW z)gj%<&D1je-n}Zfu)ult1*1hrPuTK*(3tlXjJa6c3`@8896JgX-Sss7s0`e7wmNxQ z8et>=%C`+JKM7&e8kSu-zusPJ~J?laq5z!A`NEuKJPvCUBP(s_)zS+8IVxVPjILD{}pDJ z+PvGP8A>I(VRyF}&p?rND`FNSLeZFgwqbd$geeT!GY!Ko3J z6MUjSXs$hANx7-y80U!Hr=ck30qp%C1rKYN{py)Wi{G67=QgJD2 z2CS`Pz32uBubPA)X`@lGJPq#60n;j{xu2DReXK9_3b%e=-wz}hck0to=m2Dx<+IL= zB18KeF`+Q{iAul^UnNYa`)YWvsAMgXp6fx=HZwFb<|Mft^~0m+MF z=uEAAT}mR*EK)45g>^SfVGVMX6u2K@^drFcRaOVZnXY{&0u2h_pB+IRaT~Aa&~B!T z-f!;Cm)@KHw9WI0G=fnB-)Eq~{}Bpo*J^ls)|i_6}FNgwYlQZ}d&8^HoL6kliAVF9U^7F1;nXriOd2+Jvp| z(6KuP$S`S!Uo{uXJ0vjq$L(^W=itCtR^wW%5#0?A>+M|@M0jIN-KDd;(9WhB`#I?+BF~t77 z=Fs;}EBa(v!{~EuQ_6Q*r0AcMyKp-ho+aI<`7J47vw7?@2{38_0+?^tP``CbQsJ&xIL0kr)Nod2H0x*Y<^`#7{~UdQ#d z>tcT%*0v1VQ;UZ#+EZaE=B1pRhNYz{>+Gh9)GN*%o(87oR)(LL?2aGWw%IFrSN_`O zA6*{q=rDKjYg=mh3(ysyZB2QweD;aAn}E-*2%n4vp4%A1r9ab-b#SOW@@GV5A)-uIg~wt5GLldqolgwOo|>)48GN%*!QW|NMKO6RBE5MN3tJ>i~%+X>hDV90(g{U|}a0TPOHwlM0_R_G*(Prw&EA7zdw z3!kKGbt^Zot(hK02r#?u55oyS;atIz*ajK~7>g0Oz_$+>-PhgW*|UB6{ig9_!d*on z4gs?9BW~5%Ru_}5Edxkx+2)n}><=`10sRif*RG+ZmU9(${@g&d>BHX!cru|Z5|nYW zyJ_b{4XwBoELo#XX!&=YFpvTu=9!}XBzplc$J7w>* z8V#Bccn1BmJ{8A;suLzL;}-6y-B#btym1w?zNGB^AV+jd*MTp% zJZy4cEw!xrXPtZP00l$Rxy1Za|PG zk|BOtO#zph@fmjW?c_t29P>znLfxyus%eSD6s~pOH7)a7E^+D8gFY{slWT%`+gxyv zpD5PNF}1vP#`Dp%xy_i$`=@@>Itmb$?pnn{-<~I~VDu0Dr5Q<=GdjI4(L^E4CfL~G zIk^Qr53j%clQq7d;yKSCchWeQ8_H=A|Ja=0Y^C2Nf3nuZ+3GDrQ^08ub^!zY`j-O$ zl$7ChU&?>ZUd@~M>y;%MUXWo|p7~2sBa9KDdRr?`a)6D|=YR4tznKbE2(%0~lRWzS zRUxdNR70bzX#)nRDtxCyzs|ZK>uF{K-p#U1%em6<&2Jv>;e>AJWNxVc_|9BD-rblj z-p$_yS%e_;>#Juy_01Z5PN5C3QGsFx@y9ty#t6`hz{qpULBSh^^RePb=HL^RoujWs z>mueO_+3*Eb4(m#Qy$p>eHW#61CFQH)YyRuD@x!GJfs??UiqE z7hFz%k8Zi`T^jBMv+ni4ri_Fz&0;lYg*N)|G2&_$14GL7H4Y8Kt9s8blrqE@VTSgq|1*W!_1o>9DJ_5srlkOV5Jt8v#$#0fAr53_%O53e*eHW zzBu*-7=QH5?7B94{c+yoi4*Zx%vLbmPejBIv_m$)-23{qR~9kPEV3xWv63gGxUEI- z6`c|aX?RsE*6h*av+iOIqDtp2MJFU4#(T+PLdUPT6}VY*dnc9y{acH~r2AP)beW9e zR*=!q6q6oec}!}=IvT?2dgYzHHd#nEY_DmG?{-z>(Tb_u+Q()ub{@_;(sp^8;VxG; zdu;*85bk zd#vM!lBeebCi8q~4oG5J_VMe&vX0C$#f;$-dEVK-(y3ud4m=;%FeGiU5yFxTIoo%L zpY`-z+SmRDdK*=KDormBJQmivIZ{o!x716XrhVs$ z9LzVnli{8=w6pu@NlK!IeZH)M8%{@a(ewlDRZU@87a%jl0Gc(;U4XTh?5C-n(dhb9 z5sdw(Mt-IMGw=pF)hYM=-cQlXhg73BUiP{8^Qx-Wj|lsd+3fR%T{rI6 zuL(-TSk=H(W}@{;0_w><-%j?0U^7q*fDKIx50KpInYm{)KW>LXZtuq#h_UVaH!r?hkcC{F0wld1Y2OVy3MM8= zi(z`j&uUPvzV13KSE=WdPonM!D4EG|AxM%#|20B+kWU>omA7hz$;H{|76WuIlJP(ahD8(Zd6d{{C;~U=OIAC zWibC$NBSO6!|#eqNtKV?EVfollq8p*UzuGZn#(V=rwIgMtD=X%@OLo9D(Xv zo6(CG7pE+iWk!ZgoP9QmIgq1zSfdtV66+|3=w6HQ$v`7dXCJS7NL06*c+Tt~P7U+s zWboNyu7c7&8Py%t>Smx_)z+QY1HB$KMGfp`s z803(W*#?Dl`{&+eqDO7HuT z=gQK|TAB1^lSfhC;2LUBpE)s?UdV>MRq5$!|JT3R=GEB>=aXmR=CrH+2z=q_vyv0o zd*s{Rp?&0K1&PUI(*6D^?;G#~KyddC!hOd!Z+v?KdkKh^Aj6sUyo-+ajmXQ4m;CmW zvA@dcS^?&>iPn){Y*Qk|d!zH$npznz0Rs9`#y(z#k8l-z6?#9O||`WAJ^~ zS0Upa-6cIWO>FALS3>wgZPokb2FPnIGrR$%Tzbp7Ves)>`&u?Gaa9hlXh4^BQu2NG(ORl5qt*?F%BVc(t?eZQWy@TX za+~XxMLamMn*k2 z&r`LXqGBG`EfYQ&sfrI7(e^{nlJ%2RDJ3n1a!b@FCZXHnL;9NWqqd4%@yQZJpvha%-FHe}aFw$S$iWprc2(Y*C+>jijwIb_c0cWM zdTao+1^}aAqZzxOi7!WhGK{lMVYl_5Rod-((Ge`DlroXDlUvj!-3wHQwH7Z4JQPLs z4M#zO<7!oG>3);n*Q4L$rjm%OVq6%i#ys)f>^0i{jL?E>sTC1-h8G9Ex0!%Dp8DEI zI7QmgeKRIV;giVmxTj+ETzhC95YiruOEnr6N#%Vtonao{zOm1y8NSua9%{ZCz`bj+ zv-o$$u1A*v&E|}$tNHAx0&2qc`q-?01~8<`Z`ns}~;7l6d|eHNXx zjN%=_7kpDu!prmFAOnwUPbJQ%uIq{8QT^oBDkRS!-D-3{PDwjHOp{SyN%(z9+CZ|n z3&jg{efHk#69S*sr@C?clA$8Flcm$8eyD!o8 z+t&Ko@FbkQ;;X0vGC>=k{f_zDx}x?u#$xzKBjLE38Y1Tu)gZwo+>lgx&Uzv z@f%FgwTs?|vnp)ex=N@-z^@RhL&#!IM@A?rMCD@n`rj*7A<(*s15P861)$PI;Rs8& z7sv5KP^u4Ny0Z{TUiU*f{Guray)hIXm{3yJCEb-6%i()fa`>v^8BgM7we8y?KuxYG z9ee6(h~9yHttO)x_x6SKY3`P2Xfj*0^NDv_xtx1i zYN&Vo(CrzcnB`0ET2q%l$B0A|Ao=SFP93vhFB&8ThWTEUL9P^` zl+o!s0_m!xFP(X~qenkWbUpDk(aQ!Epm%(2htk%ejAvKZe9&99xr?PRA7M$uWCVe& zB=r@_oiG30a#OUE=Uw6^-m^6$y*9yWpVoc+Uu!YoN<2(F`lqs3 zgjW(m)a1ujcO!8IY14+6sNpr|R-hqQ;9E#DE zJhLl*k8b|uxb>xgV_CZ^=c@Se9Me|ve<_-oYk$oX_YnN>J?7~f80J5YliQs^2fQaE ze(qoscso#^m}B~ToucIh*hez=@=(AgvYUIP#g+ae&x_V#|BQ6vVFso3Cr*XMJxuW0 z7UCSk`@ocPzQ8#)WIN7+A+ zAZ|ySTw$L|h_XnRe#EGO+#LpyrRDS@Tt>Z=;x3y|{WR7>L!z`V`G+W1R_ z#7YHKxN2zDNXgqNE^yAs&!Z#NR3`b?vc6&l^h-dhwXK{0$OUgVrUy5( zO?kb#)+1SJc|8#$4a8kVWmw#jDi~?eem%>#j_zeE9S=o>2r{T#&J;obaqBFJHM>0l z9QX7e|M$i zkvI)%FHou&{+#qo7e-tkAWe>oMK$aLr3R0cDuM(Yuc{(vP|&=((NMSwP8zmE zkhpo$+kVk@L>N)?p1_YlHN?gZQErk{9=^5jvFD5o1*yio(4HfjTn&uGx=)e1iglB? z#W6v+1qDgT$9Z`uM6cx%mC4VPL=zATI6X1MNEjZ?YpJ_toG(Ts#s%<7)0B*R5Pn#E z+Os{5zQi<+vbOgKvJ7zG^20O}C(cnp_F4s?5jB#iTh-&ek!E44`g$=S>W z+|y@6j`z_FD~FvVQT$K=ztnc4$;dQqfnxNesuzlvrXE$faKfbeU{;y7o`S|uw;(Ym z-g{L)OWDxs@l$HgBU--Y7aO>lFB5pKVkZS}3p@2(Cd*eE$0&$t9#URE9OdgK%jr%i zNcFG9btxoBV|m6ss%<3&nxzy?R&y8C7K03%v;O2bub3@o)BqZggu-!aAm!{LrW!9n zNdV?11xY;9R16BWB1ANBxUtmd$^nu_L7PA%(3v{hIorxMPoK~GYLYxiMM>y4Ibf7&#t_F!^(7>hM1DU+IOI+@#nhn|Gch#(qzoI4PD(gYsHUl+%Jd zu90Nm#M0{SVJK;`IwMqz7prSvNgV$~nWq0Y-AqC+34r;-Hf-tjt4aeMf?SC#>Q;hk zjO)rEuTjqeNtFg1HA|BB5zk>mU-KRanQg#tk(9v?kX3-Et`B;4?|!MgF9{RNfl-kn zg(MXHK$a;%xrhf}!$dK!J7UTyT6TV$FY6BFqWt8)2@Jr|3fFC;aDhj1e|RMa_C=+D zo5_|cP;{QS55?6SH)+s7ZgVnTcsN-{FIts&CsKtvw&VLM4+H^E5huXKRhqygBIU3w z(*|`%BZ<{-LXAMrP1Z+8b!8B=qHjr&9Bv{!v*#U%NRm#iu0s1ket1=5Np0=!gZ1}}-xSg?!fc{qa#p;628)OXHECuGJH;*;EPq`EFzbY1(K*$-;4sYk zHs?n`EL;wX%{_o+r_m}o`as$mef~MqHnX8w*)1Py9^ZfwW9#Vv?U`%kt zma9qKeyFq;eQ>&X2*&1e8jn>5(MjD$k5Z(b7WXX4AJ@%WO!nx^!rljk`l3vM>ph=r`URlFwoa=cLrNC^qV=-(D1&up8l_ec&VqhBUuP1p`@ zu3vx5wDRBL%lZM}KttUBD1@1~5J4M)VD6-h;Pf%_m)sZ^;3&46=em^T=cUH}f#=pa z2PBB*zxZ=OiR6H=)u+ol?PzFN1Ot)q!HvSdSJefQICt%Yb$(g#) z1ApB9{ckPf&rq>I1~6JDbR?=%!A4FWCMD6$Kv)-)4_wleU})6-fAzM*e1!eBRa=1a zs+;>CH{ajwpwEL5f+06P6tNz2PZ*YIV>*hZO__rIB z{==&Ou-N9ZmVPjKiK_#ZLQhZl!ulFyI=z?N z9c+~N<%e5hY_RHaj&rR3j8&8_R?l?EfEXq2{P1hQdE%CNs52l#%7>x;-!h@9eIPl6 zL?f%ULG+tyY7mX8?y(VcPe~oLy@@5F^&GPh3`+?yYgv-hnyZ=oYIQV3;%rf!s23W0K2ec zd^y;Nu;|0SMF|ovmK{S&yx_Lj#`X`pFreA&pte2;*N#=6wbEV{X2j}N0sd(F2Muoe zq5`$oC26uesK9Ef59p-7_sNHs#{^%so)W7w5gd1>7p7D16M~Pp2kPZLUey8^{Y)bD6jGr-r zrqlqpeD|&Z82{mzGwrkoO!Ud}r`#CHJo{LrRKxIhgbR&Kqdh-JBT%RG!EGyO`$3r({}wQ~C;-b}!R@e(J3kz+6?iak zgudtWhxrX0nTt`k4bKAv|KW|EzjaLQzdQ;3zy0{d|5P8z@cix^grWE@3-lngZ7GQJ z^>p=X%dz+O#_iO&v>@KyO}8%MZ(elur=$13-45RKhl3dD<2RWf`@46$>)vwn^(W&> z-XGeh0G2GPPcL_PcbzeD`g|~O8}6u4F8r+<>3fiH(ffNS%=$mWM$!$07wLPfJX5{o zFkf4s?I~48*Q4WNOI4<^Xn}^Wx{~HVZBCXK@D~l$=JUfE>V0Jf@hOic6TS()3zTX@tdA*x0Wh51}?%u+g^0)HMV3-; zH;=(C^8wmcug7;*0?(b@)Zety-fjtF;x8X+pn-$|c2PQ_U`jG4w|I`J)EnHET+43C zh%Ad}$Y0x!6F%AIxZ{Bx^U@iB;RQeerI)3Vf9TN&SA+0L)*gS`*M|1MEwkT(ja0z( z;0=Al1GF08vQp+!sdxO5!u&P;xbP!0ncBvs0i$U{mYfk`2cH{F^qsavj4pZZh*o;f4PEr_6DE+ zm2f`AuKeP!Xx=_^z4ZgTdG>={ekQ7tqT;dRSpaQo2Rn@b8SYrV5Mj6n)C3%iUr9_% zePH(|mD&Sxz}{SpkWz2fpBQ-P$3H21>9j(YdXH2IDWKSfMoUxgrS)zDuJh(RmrgXu zi-i|s(+B{s< z7vS1xG&T;nLHZFTAL1td*@TZe>4^RDM%(-G6VgQ<+M;VoPOAP4xEv8tG~TF@hVq7g zblX1IIU~Kc%d?vMt5Gi?@mcEImoo~B7dzBaiX9Hmo#q3pH!;;uZ+QH8k_Sd}WJdjj zPi7VRyR)N!Wz33&GS@ywkY?q5w>tDdjOs-Q^U;$23t!D>ZT0_Z@7jZ!zOpcFD#ap= zty|DVU`3@59|=o%#()S8P!L+QQYw-t8ekDnX$T=CVQrP&f`HWuBnE1EnPN>VRT>f! z!4=CRL`1;|B+4TYViPn8A&^J!FNCf;wKMye&g^#f4<-z`xsP+cbMCqK7rw76S~RAU zu&!x+cWh`PPxEEUuNzU07VG_OwRi!`-K9`;00=zr17Ez{bI|`C@g!;&YjCJ{2+c8S zs>7WSGQ#VdtJZtD0{0Nkp)p$D&@Qy6GgJBfopfcY#2>WMNV%#WMRbCR!FrrxnJPM^ z7?4(gATD)5g=B*Og)jhQEM{M+3E++wlk0=nm!#kDhln-Ft#-I}gZ?69dRdW9nM zjFL2=nYgP(_d89U)MQpZf)dEj=li*h2Zb1E2b`Wn#Yd7ox|{cpD$PH zu0@GHj%XE*B)whO)n09h)`~|DEOF|$&ht9D_?rGd4~+U$Z0WbrR{m;}d7%_rdh z{I>21kWE0aZSc8(;2*s3iYfK=fgzZ|zseIUvvXzO|3pNZ05pd3OU@~Wm8Z^L-kcJj zWgA6Vmg;zaXnbur2J%QZ8q?=eNkIE*`rDu;@DJ>}8dvA)e~Pb&+hi?=K2@|RZ9LYa7l=3#78C*^K7C4R z)7ifrG=+Y8apy5OV)aTk* z%gzoO=0RLkq|ldeP$jS~qLK|cy(HXHIsBIlPVxf!TfB*rKvNn+G zjCt3D1Rw5j8&^gCnl#DOZQOgcgDmlv_K*4W4PMoGYg=V}ZkbAjfA=ZN@Zw?RFRHj) z(&(_x8@~H+EUiuvk`t?t5Jm2xENwLGGmeT^@Af&bk&`T>TzmoPd4}T;(cmpwK9g@# z*MlS_soTjC&Uc4$XF8`UkX^x@Xa-rPxU&k`cdNFicxh`V;9MJ@uH#CCM317U97)=_ z1gS1rsujIo5n#N~YZwi!FN?E_J>PY7mf8;q<=;j@N;^%5pe!RZ&?A^f|Huz?Vff^Ikeg~f6=(h8NglwJ#+*Ztv2Ey<_ zZAawZEvJS>rf12q@6+kem+Qx`oRkxwF*u72fviOGg>%2}$(Q>%VEdPBN(1MYAG)_O z2-xKoPVE7RpRi-?le(q2?Ah6O6&ug6@(+N+Ny|TM$>2b!jIl)1m@v zd?8BP%%9c^Ct4n4(I+q}(an<vQ(9p=;Hgf z*AR~e;DE19{4r&2OA$@bOp+rmn%cD(!5bKN&90lS!0YV@c3lQ4RitG-s|*0Rld zbHgbFqY+z__GE0^{FkyY>h{Gq8o(Ru5A<=RfM7nz%0e2UJP?#mYQ2$Yqu#4C98km9 zbmo$^)+KM@0v0c|+2Ec}+V^_Ceq;bNm`)0k8d}N#nJ)Gab((E&bu{sa6+XO2FH*lD zJ%Z^_QXdB#pUW|S6h{|e;^P-*F$`{WoCLECj7+05BHh#mBxfmVQIIBvAy{u6cc`Ne zsALka?Xqdqtmm-}=VfKIaiMU-;?)mY49D#@y;c)%<7L0^t$Yq(8uE6V6LaZ^&s$4zi6637T+4fG9%rLyoStKP1N#tPH$iJ8>EKi?>Z?V*(+r>tz)l*TXTC2^H@NnoNDLA`QlZ2;UWf@7njwVm+*c7+HcQw z7lNOW!W>|9`zpkuEn0z2tZBA)V;(DJHJ~;vELqcnYu>irn~-DyXha54J{rbs#0Cn$ zQ(o+Cux`H{2cv^dpg6(9U;9jx5IGW52g#&Pu1clPajG!J6H-={n)atkD{1NJ55!@N zk9K*)io?g({Sa1iRz$6!=rhJQ656_AZ5sXT>-a@P$F@5aNUgZ`ez>tKyb+1tf7~-G z2DWM;L>NOpaMqy%j=T@Amr2A3gz^PsS8{8&poj=|NwMG))RD`l?%#4RskObKyPcl|~oJN;7BRjkfa+nF|+3qhd+ z*60vl7aXZ@hxt3~m9<9Be^Y&TdVBt)Vzt**>496s{qxk>*B;L)2v?0wK5Y8|m%_e@X+G@^@2v!4N}`IK zG^q<27-%v2(%}Llca&fmK7@FRvhnz4=7WQKXa5MtZ3Z4}BAT|>{H{&&QF*+b7kt01 zW;>#}fpjyIc7b%$`H8k*%-4Jm;VUo>>U=Zp7Df>m-%$%6HixLUXMSf+aaA}=9-o&r zNsq+wilI?RxU0cksrPOZ&K6v>Mfm5viQtXd2LOeH<#ncx8bWZC!o5_?M&$M?7*%A$ zTA|3u%rmahZ_3mU2uDlIYMJU|Mez-JR*ty@C4Kc0dL35tMI2!9Gl$W2g7Nnr&xNQ} zhM_R}O`1~s*dk0Y_Hav}EE6w5UJR!Smk@bw&9vymV8}8VTNbygw literal 0 HcmV?d00001 diff --git a/media/1692599919725.jpg b/media/1692599919725.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c13397d9102128eb62d9a025894e00fa30c80a82 GIT binary patch literal 38008 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 E0E`JqnE(I) literal 0 HcmV?d00001 From 3aef3f8b6c4b71b2b186c98693f9a8f309dfa63b Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Wed, 23 Aug 2023 13:55:20 +0800 Subject: [PATCH 04/15] =?UTF-8?q?=E8=8B=B1=E6=96=87=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 97 ++++++++++++++++++++----------- locale/en/LC_MESSAGES/English.mo | Bin 1333 -> 1957 bytes locale/en/LC_MESSAGES/English.po | 30 +++++++++- main.py | 25 ++++---- media/1692598668142.jpg | Bin 22283 -> 21283 bytes media/1692598910646.jpg | Bin 12168 -> 0 bytes media/1692599116860.jpg | Bin 4169 -> 0 bytes media/1692599729648.jpg | Bin 30540 -> 25917 bytes media/1692599801694.jpg | Bin 31824 -> 26377 bytes media/1692599919725.jpg | Bin 38008 -> 32401 bytes 10 files changed, 105 insertions(+), 47 deletions(-) delete mode 100644 media/1692598910646.jpg delete mode 100644 media/1692599116860.jpg diff --git a/README.md b/README.md index a99f330..4306793 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,20 @@ # QuecPython产测工具使用指导手册 -## 文档历史 - -| 版本 | 日期 | 作者 | 变更描述 | -| ---- | ---------- | ---- | ------------ | -| 1.0 | 2023-08-16 | 郭臻 | 初版 | - ## 简介 -QuecPython产测工具是专用于QuecPython项目模块出厂测试的工具,方便对出厂前已经烧录正式固件的模块进行相关的功能测试,本文档主要介绍如何使用该工具,在电脑使用以下任一种操作系统时,该工具可直接使用 - -- **Windows7** -- **Windows10** -- **Windows11** +QuecPython产测工具是专用于QuecPython项目对模块功能测试的工具,方便对出厂前已经烧录正式固件的模块进行相关的功能测试,本文档主要介绍如何使用该工具,在电脑使用Windows7及以上系统都可使用。 适用模块: 所有使用QuecPython开发的模块均可使用 +## 功能介绍 +1. 支持QuecPython项目功能测试 +2. 支持4台设备同步测试 +3. 支持自动测试 +3. 支持人工断点测试 + + ## 如何拉取仓库 ```shell @@ -46,35 +43,52 @@ git clone --recurse-submodules https://github.com/QuecPython/FactoryTool.git -b **导入模块**:导入测试中用到的python库 -**测试函数**:自行编写测试函数,函数名可以自定义,但是需要是静态方法且无法传参,函数体内容根据测试需求自定义,函数需要有返回值,可以是bool或者其他类型(其他类型不会校验测试结果),返回值会在日志中体现,当测试结果不满足预期,需要将测试结果设置为失败时,只需返回布尔值False即可,测试函数案例如下: +**测试函数**:自行编写测试函数,函数名可以自定义,但是需要是静态方法且无法传参,函数体内容根据测试需求自定义,函数需要有返回值,必须是bool值 + +测试脚本示例: ```python -# 检测sim卡状态正常并且驻网状态为LTE时测试成功,否则返回失败测试结果 -@staticmethod -def det_signal(): - if sim.getStatus() == 1: - if net.getConfig()[0] == 5: +# Write the modules that need to be imported here +import sim +import net +import uos +import utime + +class TestBase(object): + # ------This area is for testing code------ + @staticmethod + def det_signal(): + utime.sleep(2) + if sim.getStatus() == 1: + if net.getConfig()[0] == 5: + return True + else: + return False + else: + return False + + @staticmethod + def det_file_space(): + utime.sleep(2) + if uos.statvfs('usr')[3] > 5: return True - else: - return False + else: + return False + # ------This area is for testing code------ ``` -测试脚本示例: +## 配置文件 +配置文件为json文件,需要配置三维数据,分别为: 测项名称, 测项的方法名称, 测试方式(1为人工测试 0为自动测试) -![1692598910646](./media/1692598910646.jpg) +测试脚本示例: -## 配置文件 -配置文件为json格式 ```json -# 测项名称 function 测试方式: 1为人工测试 0为自动测试 +// 测项名称 function 测试方式: 1为人工测试 0为自动测试 { - "info": [["内存检测", "det_file_space", 1], - ["信号检测", "det_signal", 0]] + "info": [["Memory test", "det_file_space", 1], + ["Signal test", "det_signal", 0]] } ``` -测试脚本示例: - -![1692599116860](./media/1692599116860.jpg) ## 测试原理 @@ -88,22 +102,37 @@ def det_signal(): ## 测试步骤 -**步骤一**:编辑测试**module_test.py**代码 和 配置文件**sort_setting.json**,测试代码和配置文件案例如上图所示 +**步骤一**:编辑测试文件和配置文件 + +编辑测试**module_test.py**代码 和 配置文件**sort_setting.json**,测试代码和配置文件案例如上图所示 + +**步骤二**:打开工具,选择测试文件和配置文件 -**步骤二**:打开 **Factory Tool**,点击 **选择** 按钮,分别选择上一步编辑好的测试代码和配置文件,若有检测到串口,则该串口下会显示每一项测试名称以及测试方式 +打开工具后,点击 **选择** 按钮,分别选择上一步编辑好的测试代码和配置文件,若有检测到串口,则该串口下会显示每一项测试名称以及测试方式 ![1692599729648](./media/1692599729648.jpg) -**步骤三**:点击 **全部开始** 按钮开始测试所有已接入的模块,也可以通过单独点击端口对应列的 **开始** 按钮来测试某一个模块 +**步骤三**:开始测试 + +点击 **全部开始** 按钮: 开始测试所有已接入的模块 + +点击 **开始** 按钮: 开始测试对应的那一个模块 若是人工检测会弹窗提示是否成功,可人工点击 **是/否** 来确认该项结果 ![1692599919725](./media/1692599919725.jpg) -**步骤四**:测试完成后可在测试结果栏位看到测试结果 +**步骤四**:查看测试结果 + +可在测试结果栏位直接看到测试结果: +1. 通过: 绿色背景色,测试结果栏位标记: 通过 +2. 不通过: 红色背景色,测试结果栏位标记: 不通过 +3. 测试中: 黄色背景色,表示该测项正在检测中 ![1692599801694](./media/1692599801694.jpg) -**步骤五**:测试完成后会在工具同级目录下生成**Test-Result.xlsx**文件,包含测试项目内容以及测试结果日志 +**步骤五**:查看测试日志 + +在工具同级目录下生成**Test-Result.xlsx**文件,包含测试项目内容以及测试结果日志 ## 测试结果 diff --git a/locale/en/LC_MESSAGES/English.mo b/locale/en/LC_MESSAGES/English.mo index d1d8ce1996d857ab6ef028fb446acaf8ee4fa131..288f9ff18a893c9e1796471cd62def067366cadd 100644 GIT binary patch literal 1957 zcmZ9KU2IfE6vszJ(3L9S2Yx#UCMM=CyR9{K)d%c{+1Tm=n_{BITz04JHFxi<_s&W; zJ`xjs&^LJUr9uJ$QMxWIO}`8+>C#GDZEYhDsMu(lDu!rc)Cm61+(A}P?#%C;nKNh3 zoO{l1ShbHqwqV?k@$_|!)q}5Gj|mdHfw4!xICv+x3%n7`fvdm(TnBa=`(3aG_WNK2 z`~X}H9s+LyKQ`<){LJtSNPb^}6!&YhejZ#8`$x0>hgrXDxCYJ}u)hwZbDJ^IJ&zj3 zLCP;-?B@;BAU^ggCfeU^>;R;^yN$gUTnqah!+jvd{}8+a9t9hSD9R>q38eb0#$&L> z)`Aa!>y5n?ybbo_AjNGm>)Sz!+iv)pVHbEa*53fvfNvRlui1YOya((1LAviaNO4b? z{ZrsZ*i#_o^*u=MTQ>a7>|X)to{hNV7H|`Y5;F_j0>(j#-wxgmzHDp>QvHq&9pQ<35Z#FsPQ44+;Hu%87*DL_)o{S!>}$ zHKo3$x8aGp_EZn*WsX6$qq@*rNgl+Y`cVz;!l)K{C##9nM7WlTl}dkQ=HyuE!sPtS zMcy+qInjUV?BRjGdq!F4aiVwPc(^-#B*8gLHZ~@kShB4-$@0bWpQl#lX6JtCKV1HK z`d8Nb?a(njHFsx(J3T&hSzD>1R!f5vm{G9);mKjG41YK9msToYEsSVovUg}nD+{y0 z%tcmO9xdx#%4D(p`9}#pa(4FjXf(?Drbf@PfrFnOqL@%dzR`|@eRIbq2j<4M7eppi zR9(_zqemu(*!Y3bW$iG2U@=rCR%R++^vqwP^E$`M(bA~)txOFZ9Qvtrf$0NOmBEFR zRx)d~3qNqA zm*A1qi`EYDrbCw1WGj*2wXxb-D^`z>$LkYyb&tgwVzEf89Vjd9+g{+>O8Pk2YI~gp zyHi+cVdtvs1Q%YU4L|AHE%9h9(kMM8Jj5vGafuS$YHQxL9q%cg>9YMmsAn?yC+nWL z=0|sR2;XYJmsOP~1@>hdxZ%K_IeR`uqi{{%yuIyfOvf$0Mq| zo#20sNp8pmISbxp2RtZx%I@aE_oW}OX5^zMuG^HiIIaloR53JKY{zA3t4*MHvQT!2 zpx`Q&ruG^o5-*Qro7auULzn!9Of= z3d+(_y5S+dOSl=CLop<;>ffEp#+f#mEx1BER;i|vfpF1TVOcupN%{=m=DMuS_6oKe zUPY-jNnVr%zQ?9AN+cE_6Ty#4~wpH3$J?VgaXU2E( X;VMUibvT`25w{hT%-Lv?@ZNs_b6Xk( delta 683 zcmXw%O(;ZB6o4;p=HdAtKZ7Vul$8w1W)?PfGaIo-$%0szveIN@p=5Ehvr#BEqKKMd z!IVac8Y5*CS;$T{B0t}GbLaHV{m##Q=e%?8+pIirVvj!0szMsjX7mAVN7o8ikgh_d zyf6qoun$(jkntn19Dfixa0C{^NyDh&yx}6OCcgry7gOsdv1PameQY?&ZBUmcehsDZ zz46~n{=@JSmXZH4bS$O*@cmE*@Y78OXklrA0oRWy)sIn0U;s*iVOR>spiD9iOW>UG z7hog)668@EEb`tql>LX$4^N>qzJqcySrdPSQcsc={gs13OjSUcu*R?rnp<%5MUq2B zU@9rYo63M+>B>9p#yE>2m>K)IQ-QC&S h8FaMQ4ts~jXQQop)Nazt_Jsbk16FuuLQfZU`~%R{ULXJf diff --git a/locale/en/LC_MESSAGES/English.po b/locale/en/LC_MESSAGES/English.po index 1c0acb0..cdcd73e 100644 --- a/locale/en/LC_MESSAGES/English.po +++ b/locale/en/LC_MESSAGES/English.po @@ -65,7 +65,7 @@ msgid " msgstr "Test Time" msgid "Խ" -msgstr "Test Result" +msgstr "T-Result" msgid "鿴־" msgstr "View Log" @@ -86,11 +86,39 @@ msgstr " Current status: ready..." msgid "ӭʹQuecPython" msgstr " Welcome to QuecPython" +msgid "ģ־" +msgstr "Module Log" + +msgid "" +msgstr "Test-Item" + +msgid "Էʽ" +msgstr "T-Method" + +msgid "˹" +msgstr "Manual Test" + +msgid "Զ" +msgstr "Automated Test" +msgid "ͨ" +msgstr "Pass" +msgid "ͨ" +msgstr "Fail" +msgid "" +msgstr "Testing" +msgid " ǰΪ: " +msgstr " The current test item is: " +msgid "\r\n\r\n ȷϸò Ƿͨ" +msgstr "\r\n\r\n Please confirm the test item Passed or Not" +msgid "Ƿָϴļ" +msgstr "Do you want to restore the last file" +msgid "ļ" +msgstr "File does not exist" diff --git a/main.py b/main.py index 8379138..9a6222f 100644 --- a/main.py +++ b/main.py @@ -281,9 +281,9 @@ def load_json_file(self, event, json_file=None): ListCtrl.InsertItem(j, j) ListCtrl.SetItem(j, 0, self.testMessages[j]) if element[1] == 1: - ListCtrl.SetItem(j, 1, "人工检测") + ListCtrl.SetItem(j, 1, _(u"人工检测")) else: - ListCtrl.SetItem(j, 1, "自动检测") + ListCtrl.SetItem(j, 1, _(u"自动检测")) except Exception as e: print(e) wx.MessageBox(_(u'请选择正确的配置文件'), u'提示', wx.YES_DEFAULT | wx.ICON_INFORMATION) @@ -369,9 +369,9 @@ def port_update_handler(self, arg1): ListCtrl.InsertItem(j, j) ListCtrl.SetItem(j, 0, self.testMessages[j]) if element[1] == 1: - ListCtrl.SetItem(j, 1, "人工检测") + ListCtrl.SetItem(j, 1, _(u"人工检测")) else: - ListCtrl.SetItem(j, 1, "自动检测") + ListCtrl.SetItem(j, 1, _(u"自动检测")) else: self.button_start_list[i].Enable(False) @@ -412,7 +412,7 @@ def port_test_handler(self, arg1): length = len(self.testFunctions) for i, testFunction in enumerate(self.testFunctions): try: - self.ListCtrl_list[ID].SetItem(i, 2, "测试中") + self.ListCtrl_list[ID].SetItem(i, 2, _(u"测试中")) self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Yellow") message = self.testMessages[i] @@ -440,17 +440,17 @@ def port_test_handler(self, arg1): boolean = ["False"] if testFunction[1] == 1: - dlg = wx.MessageBox(" 当前测试项为: " + message + "\r\n\r\n 请确认该测试项 【是否通过】", self.port_ctrl_list[ID].GetValue(), wx.YES_NO) + dlg = wx.MessageBox(_(u" 当前测试项为: ") + message + _(u"\r\n\r\n 请确认该测试项 【是否通过】"), self.port_ctrl_list[ID].GetValue(), wx.YES_NO) if dlg == wx.YES: boolean = ["True"] else: boolean = ["False"] if boolean == ["False"]: - self.ListCtrl_list[ID].SetItem(i, 2, "不通过") + self.ListCtrl_list[ID].SetItem(i, 2, _(u"不通过")) self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Red") else: - self.ListCtrl_list[ID].SetItem(i, 2, "通过") + self.ListCtrl_list[ID].SetItem(i, 2, _(u"通过")) self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Green") ret_result += boolean @@ -458,18 +458,18 @@ def port_test_handler(self, arg1): test_results = [] for i in ret_result: if i == "True": - test_results.append("通过") + test_results.append(_(u"通过")) elif i == "False": - test_results.append("不通过") + test_results.append(_(u"不通过")) else: test_results.append(i) test_method = [] for i in self.testFunctions: if i[1] == 1: - test_method.append("人工测试") + test_method.append(_(u"人工检测")) else: - test_method.append("自动测试") + test_method.append(_(u"自动检测")) # TODO excel写入不要列表形式 if "False" not in ret_result: @@ -555,6 +555,7 @@ def close_window(self, event): class MyApp(wx.App): languageTab = locale.getdefaultlocale()[0] print("languageTab: ", languageTab) + languageTab = "en" # 根据系统语言自动设置语言 if languageTab == "zh_CN": t = gettext.translation('Chinese', PROJECT_ABSOLUTE_PATH + "\\locale", languages=["zh_CN"]) diff --git a/media/1692598668142.jpg b/media/1692598668142.jpg index 024dae18bece507940d9c2ed2eec92160ba6270a..cc289ecb5e784ef8585f3868042d560a2e134dcd 100644 GIT binary patch literal 21283 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 Sq$Mt4aP+X#q0$3Bm;VbWf$Y5i diff --git a/media/1701828343176.jpg b/media/1701828343176.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e59df6ca670a938a6fd6fd26855a68350c61e84 GIT binary patch literal 48632 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

  • 603JNn84%c2xs`h)qS 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 YD_}lo#fuL<73NeFG~|o_FnRTV02u7FbpQYW literal 0 HcmV?d00001 diff --git a/media/quectel.png b/media/quectel.png new file mode 100644 index 0000000000000000000000000000000000000000..954fd563924daea374e86af91625e83024aeb929 GIT binary patch literal 12991 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 "): break + time.sleep(1) + + if tips_info: + tips_ctrl.SetValue("") + + if not data.endswith(">>> "): + self._conn.write(b"\x03") time.sleep(0.5) + data += self._conn.read(self._conn.inWaiting()).decode("utf-8", errors="ignore") return data def exit_test(self): diff --git a/sort_setting.json b/sort_setting.json index f4b6e97..4c70b8d 100644 --- a/sort_setting.json +++ b/sort_setting.json @@ -1,4 +1,5 @@ { - "info": [["Memory test", "det_file_space", 1], - ["Signal test", "det_signal", 0]] + "info": [["Memory test", "det_file_space()", 1], + ["Signal test", "det_signal('test')", 0]], + "tips": {"Signal test": "Please press button 1"} } \ No newline at end of file From 5e739169ff0cb8c006d7692d9dbc864ee7b7406a Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Thu, 7 Dec 2023 13:35:25 +0800 Subject: [PATCH 11/15] =?UTF-8?q?1.=20=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=A3=80=E6=B5=8B-2=202.=20=E6=B5=8B=E5=AE=8C=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=B5=8B=E8=AF=95=E8=84=9A=E6=9C=AC=203.=20Imei?= =?UTF-8?q?=E5=8F=B7=E5=92=8C=E7=89=88=E6=9C=AC=E5=8F=B7=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=94=BE=E5=9C=A8=E5=89=8D=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 ++++++- main.py | 34 ++++++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index bf96d87..a98f0e0 100644 --- a/README.md +++ b/README.md @@ -124,13 +124,18 @@ class TestBase(object): ```json { - // 测项名称 测项的function 延时时间 测试方式:0自动检测1人工检测 + // 测项名称 测项的function 延时时间 测试方式:0/1/2 "info": [["Memory test", "det_file_space()", 0, 0], ["Signal test", "det_signal('test')", 0, 0]], + // 测试方式 0: 全自动测试 + // 测试方式 1: 需手动确认开始 和 手动确认结果测试项 - 确认开始的弹窗提示tips内容 + // 测试方式 2: 需手动确认开始 和 自动确认结果测试项 - 确认开始的弹窗提示tips内容 + // 测项名称 该测项对应的提示信息 "tips": {"Memory test": "Please press button 1"} } ``` + 若有配置tips,则在测试该项时,界面测项显示下面的文本框会显示该提示信息 ## 测试原理 diff --git a/main.py b/main.py index 2aa75e8..d84f8be 100644 --- a/main.py +++ b/main.py @@ -326,7 +326,6 @@ def __init__(self, *args, **kwargs): self.Bind(wx.EVT_MENU, self.__menu_handler, id=2002) self.menuBar.Append(wxg_tmp_menu_1, _(u"日志")) - wxg_tmp_menu_2 = wx.Menu() wxg_tmp_menu_2.Append(3001, _(u"高级设置"), "") self.Bind(wx.EVT_MENU, self.__menu_handler, id=3001) @@ -534,15 +533,9 @@ def load_json_file(self, event, json_file=None): data = json.load(f) print(data) info = data["info"] - if selectedList: - info = [i for i in info if i[0] in selectedList] - self.testFunctions = [i[1:] for i in info] - self.testMessages = [i[0] for i in info] - self.tips_info = {} - try: - self.tips_info = data["tips"] - except Exception as e: - print("523 e: ", e) + + self.testFunctions = [] + self.testMessages = [] print("versionDetection: ", versionDetection) if versionDetection == "True": @@ -553,6 +546,16 @@ def load_json_file(self, event, json_file=None): self.testFunctions.append(["Imei号匹配", 0, 0]) self.testMessages.append(_("Imei号匹配")) + if selectedList: + info = [i for i in info if i[0] in selectedList] + self.testFunctions += [i[1:] for i in info] + self.testMessages += [i[0] for i in info] + self.tips_info = {} + try: + self.tips_info = data["tips"] + except Exception as e: + print("523 e: ", e) + try: relative_path = os.path.relpath(json_file, PROJECT_ABSOLUTE_PATH) self.text_ctrl_json.SetValue(relative_path) @@ -573,8 +576,11 @@ def load_json_file(self, event, json_file=None): # testFunction = self.testFunctions[j] ListCtrl.InsertItem(j, j) ListCtrl.SetItem(j, 0, self.testMessages[j]) + if element[-1] == 1: ListCtrl.SetItem(j, 1, _(u"人工检测")) + if element[-1] == 2: + ListCtrl.SetItem(j, 1, _(u"自动检测-2")) else: ListCtrl.SetItem(j, 1, _(u"自动检测")) if automated == "True": @@ -689,6 +695,8 @@ def port_update_handler(self, arg1): ListCtrl.SetItem(j, 0, self.testMessages[j]) if element[-1] == 1: ListCtrl.SetItem(j, 1, _(u"人工检测")) + if element[-1] == 2: + ListCtrl.SetItem(j, 1, _(u"自动检测-2")) else: ListCtrl.SetItem(j, 1, _(u"自动检测")) print("automated: ", automated) @@ -748,6 +756,11 @@ def port_test_handler(self, arg1): self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Yellow") message = self.testMessages[i] + if testFunction[-1] in [1, 2]: + tips = self.tips_info.get(message) + if tips: + dlg = wx.MessageBox(tips, self.port_ctrl_list[ID].GetValue(), wx.YES_DEFAULT | wx.ICON_INFORMATION) + if message == _("版本号检测"): ser.exec_cmd(testFunction[0].replace("\\r\\n", "\r\n")) test_result = ser.ret_result() @@ -833,6 +846,7 @@ def port_test_handler(self, arg1): self.button_all_start.Enable(True) return + ser.exec_cmd("uos.remove('/usr/test.py')") if restartSign == "True": ser.exec_cmd("from misc import Power\r\nPower.powerRestart()") From 6267c6934526efc594b480ddb0f8a3bd5a532f82 Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Fri, 19 Jan 2024 17:10:52 +0800 Subject: [PATCH 12/15] =?UTF-8?q?1.=20=E4=BF=AE=E5=A4=8D=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E4=BA=BA=E5=B7=A5=E6=B5=8B=E8=AF=95=202.=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=8B=A5=E6=9C=89=E6=97=A0=E6=B3=95=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E5=8F=A3=E6=97=B6=EF=BC=8C=E5=AF=BC=E8=87=B4=E6=89=80?= =?UTF-8?q?=E6=9C=89=E5=8F=A3=E9=83=BD=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 3 +-- serial_list.py | 7 ++++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/main.py b/main.py index d84f8be..9730f3a 100644 --- a/main.py +++ b/main.py @@ -576,10 +576,9 @@ def load_json_file(self, event, json_file=None): # testFunction = self.testFunctions[j] ListCtrl.InsertItem(j, j) ListCtrl.SetItem(j, 0, self.testMessages[j]) - if element[-1] == 1: ListCtrl.SetItem(j, 1, _(u"人工检测")) - if element[-1] == 2: + elif element[-1] == 2: ListCtrl.SetItem(j, 1, _(u"自动检测-2")) else: ListCtrl.SetItem(j, 1, _(u"自动检测")) diff --git a/serial_list.py b/serial_list.py index befae34..c226a5c 100644 --- a/serial_list.py +++ b/serial_list.py @@ -1,10 +1,10 @@ #!/usr/bin/env python # -*- coding: UTF-8 -*- """ -@Project:Factory_test +@Project:Factory_test @File:serial_list.py @Author:rivern.yuan -@Date:2022/9/6 15:59 +@Date:2022/9/6 15:59 """ import time @@ -31,7 +31,8 @@ def enter_event(self): def get_com_number(self, vid_pid, location): port_list = [] for p in list(self.serPort.comports()): - if p.vid == int(vid_pid.split(":")[0], 16) and p.pid == int(vid_pid.split(":")[1], 16): + print("p.location: ", p.location) + if p.vid == int(vid_pid.split(":")[0], 16) and p.pid == int(vid_pid.split(":")[1], 16) and p.location is not None: if location in p.location: port_list.append(p.device) return port_list From 4d07a2555ca5514ba1a4c6f966e0867e3389dc12 Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Sun, 7 Apr 2024 10:42:07 +0800 Subject: [PATCH 13/15] =?UTF-8?q?1.=20=E4=BF=AE=E5=A4=8D=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E4=BA=BA=E5=B7=A5=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index 9730f3a..bdbd0cb 100644 --- a/main.py +++ b/main.py @@ -694,7 +694,7 @@ def port_update_handler(self, arg1): ListCtrl.SetItem(j, 0, self.testMessages[j]) if element[-1] == 1: ListCtrl.SetItem(j, 1, _(u"人工检测")) - if element[-1] == 2: + elif element[-1] == 2: ListCtrl.SetItem(j, 1, _(u"自动检测-2")) else: ListCtrl.SetItem(j, 1, _(u"自动检测")) From dbb94ac1de7c6886548e53c8a55e5e5462cfdad0 Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Sun, 7 Apr 2024 14:11:32 +0800 Subject: [PATCH 14/15] get REPL function change --- serial_list.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/serial_list.py b/serial_list.py index c226a5c..d411900 100644 --- a/serial_list.py +++ b/serial_list.py @@ -28,13 +28,23 @@ def exit_event(self): def enter_event(self): self._exit = False - def get_com_number(self, vid_pid, location): + def get_com_number(self): port_list = [] + repl_port = [("0x2C7C:0x0901", "x.8"), # Unisoc + ("0x2C7C:0x6001", "x.5"), # N 系列 + ("0x2C7C:0x6002", "x.5"), # M 系列 + ("0x2C7C:0x6005", "x.5"), # A 系列 + ("0x2C7C:0x0700", "x.1"), # BG95 + ("0x2C7C:0x0903", "x.5"), # Eigen + ("0x2C7C:0x6002", "x.20")] # M 系列 新驱动 for p in list(self.serPort.comports()): - print("p.location: ", p.location) - if p.vid == int(vid_pid.split(":")[0], 16) and p.pid == int(vid_pid.split(":")[1], 16) and p.location is not None: - if location in p.location: + print(p.description) + for vid_pid, location in repl_port: + location_ = p.location if p.location is not None else "" + if (p.vid == int(vid_pid.split(":")[0], 16) and p.pid == int(vid_pid.split(":")[1], 16) and location in location_) or "Quectel USB REPL Port" in p.description: port_list.append(p.device) + break + return port_list def run(self): @@ -45,13 +55,7 @@ def run(self): else: if serial_list == [] or serial_list != self.serPort.comports(): serial_list = self.serPort.comports() - serial_port = self.get_com_number("0x2C7C:0x0901", "x.8") # Unisoc - serial_port.extend(self.get_com_number("0x2C7C:0x6001", "x.5")) # N 系列 - serial_port.extend(self.get_com_number("0x2C7C:0x6002", "x.5")) # M 系列 - serial_port.extend(self.get_com_number("0x2C7C:0x6005", "x.5")) # A 系列 - serial_port.extend(self.get_com_number("0x2C7C:0x0700", "x.1")) # BG95 - serial_port.extend(self.get_com_number("0x2C7C:0x0903", "x.5")) # Eigen - # print("设备列表为{}".format(serial_port)) + serial_port = self.get_com_number() pub.sendMessage('serialUpdate', arg1=serial_port) time.sleep(1) From 3f59b36994c18ef97f444fc65f1d26b05dca5aeb Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Mon, 9 Sep 2024 10:22:06 +0800 Subject: [PATCH 15/15] add readme en --- README-EN.md | 224 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 README-EN.md diff --git a/README-EN.md b/README-EN.md new file mode 100644 index 0000000..82b6a33 --- /dev/null +++ b/README-EN.md @@ -0,0 +1,224 @@ +# QuecPython Production Test Tool Application Guide + +## Overview + +The QuecPython production test tool (hereinafter referred to as the production test tool) is used for production testing of products developed based on QuecPython. This tool is available for Windows 7 and above operating systems. + +The basic functions of the production testing tool are as follows: + +1. Load test scripts and configuration files + + a. Users are required to write test scripts that can be run in the product in units of unit test functions. + + b. Users can bind test information for each test in the configuration file, including test item name, test function name, test method, etc. + +2. Supports both automatic and manual testing methods + + a. The automatic test method does not require manual intervention. It automatically tests according to the order in the configuration file and automatically saves the test results. It directly encounters manual test items. + + b. In manual testing, when the current test ends, a window will pop up so that the tester can manually confirm the test results; the tool will save the manually confirmed results. + +3. Supports display of test details and viewing of test reports + + a. The test results of each item will be displayed in different colours on the main interface. + + b. The complete test report will be saved in the root directory of the tool for overall viewing. + +4. Supports 1 to 4 tests. + +## Tool Download + +[Click here to go to the download page](https://github.com/QuecPython/FactoryTool/releases)to obtain the production testing tool `FactoryTool.zip`。 + +![download-page.jpg](./media/download-page.jpg) + +## Interface + +- **Menu bar**:Includes edit tab and log tab + + - **Edit tab**:For editing test scripts and Excel log files + + - **Log tab**: Used to view test log files and tool run log files + + - **Setting tab**: Used for some advanced settings + +- **Load area**:Includes loading test scripts and configuration files + - **Load Test Script**:A collection of test functions + - **Load Config File**:Bind test information to each test, including test item name, test function name, test method, etc + +- **Factory Test**:Includes device connection ports, test item names, test methods, and test results. The tool has four test areas. Up to four devices can be tested simultaneously at one time, or a device can be tested individually. + +> **Ensure that the interaction port of the tested module is not blocked, otherwise the test will fail.** + +![1692598668142](./media/1701828343176.jpg) + +## Setting Menu - Advanced Settings +![1692598668142](./media/1701828550273.jpg) + +After modifying the items in the advanced setting, you need to click on the lower right conner **confirm** for the settings to apply. + +1. Start testing automatically + + The test will start automatically when the interaction port is detected. + +2. Automatic restart + + The module will automatically restart after testing. + +3. IMEI matching + + The IMEI number will be matched with the IMEI number in **IMEI.txt** in the local tool directory. If it exists, the test will pass. Otherwise, the test will not pass. + +4. Version detection + + The software version number (the software version number acquisition method can be configured by yourself, **uos.uname()** is used by default to obtain it) will be matched with the configured version number. If it matches, the test will pass. Otherwise, the test will not pass. + +5. Test item configuration + + Before configuring this item, you need to select the JSON file. You can select all test items in the JSON file. Only the test items added to the right will be tested (the default is that all test items will be tested) + +## Test Script + +When writing test scripts, you need to be careful not to change the original template code structure. It is recommended to manually run the test in the module after writing to confirm whether the running results meet expectations. There are two locations that need to be changed in the test script template. + +**Import module**:Import the python library used in testing + +**Test function**:Write your own test function. The function name can be customized, but it needs to be a **static method** and cannot pass parameters. The function body content is customized according to the test requirements. The function needs to have a return value, which **must be a bool value.** + +Test script example: + +```python +# Write the modules that need to be imported here +import sim +import net +import uos +import utime + +class TestBase(object): + # ------This area is for testing code------ + @staticmethod + def det_signal(args): + utime.sleep(2) + if sim.getStatus() == 1: + if net.getConfig()[0] == 5: + return True + else: + return False + else: + return False + + @staticmethod + def det_file_space(): + utime.sleep(2) + if uos.statvfs('usr')[3] > 5: + return True + else: + return False + # ------This area is for testing code------ +``` + +## Configuration file +The configuration file is a JSON file, and three-dimensional list needs to be configured, which are: test item name, test function name, test mode (1 for manual testing, 0 for automatic testing) + +Test script example: + +```json +{ + // Test item name, Function of test item, Test method: 0/1/2 + "info": [["Memory test", "det_file_space()", 0], + ["Signal test", "det_signal('test')", 0]], + // Test mode 0: Fully automatic test + // Test mode 1: Manual confirmation of start and manual confirmation of test items results – “tips” is the content of the pop-up window for confirmation at the start + // Test mode 2: Manual confirmation is required to start and automatic confirmation of test items results - Confirm the pop-up window prompts content at the start + + // Test item name: Prompt information corresponding to the test item + "tips": {"Memory test": "Please press button 1"} +} +``` + +If tips are configured, the text box below the interface test item display will display the prompt information when testing this item. + +## Test principle + +The production testing tool uses python scripts to test the business functions of QuecPython products. The test scripts are executed through the command interaction port REPL of QuecPython. The test scripts can be adjusted according to the test requirements to complete the production test function. + +1. Get module parameters and running status through QuecPython's API interface. +2. Obtain business running status by accessing objects in running business code. +3. Test business functions or hardware functions by calling the interface provided by the business code. +4. Transfer configuration files or write product parameters through the QuecPython API interface. + +## Test steps + +**Step 1**:Edit test scripts and configuration files + +Edit the **module_test.py** test code and **sort_setting.json**,configuration file. The test code and configuration file examples are shown in the figure above. + +**Step 2**:Open the tool and select the test script and configuration file + +After opening the tool, click the **Select** button to select the test code and configuration file edited in the previous step. If a serial port is detected, each test name and test method will be displayed under the serial port. + +![1692599729648](./media/1692599729648.jpg) + +**Step 3**:Start testing + +- Click the **Start All** button: Start testing all connected modules. + +- Click the **Start** button: Start testing the corresponding module. + +If manual detection is performed, a pop-up window will prompt whether it is successful. You can manually click **Yes/No** to confirm the result. +![1692599919725](./media/1692599919725.jpg) + +**Step 4**:View test results + +You can see the test results directly in the test result field: +1. Pass: Green background colour, test result file mark: Pass +2. Failed: Red background colour, test result field mark: Fail +3. Testing: Yellow background colour indicates that the test item is being tested, test result field mark: Testing + +![1692599801694](./media/1692599801694.jpg) + +**Step 5**:View the test log + +Generate the **Test-Result.xlsx** file in the same directory as the tool, including test project content and test result logs. + +## Test results + +The test results of each module will be written to excel and exported. The excel file can be **opened** through the **Edit Excel file** menu in the menu bar. + +Each test will generate a test record in excel (regardless of whether the test is successful or failed). Multiple tests will have multiple records, which are distinguished according to the COM port of the test device. + +This file will be saved in the directory of the same level as the tool and will be automatically appended during the test process. + +## Secondary development of production test tools + +### How to pull from repository + +If you have secondary development needs, you can directly pull the code repository. + +```shell +git clone --recurse-submodules https://github.com/QuecPython/FactoryTool.git -b interventionable +``` + +### Configure environment + +**Installing dependencies** + +```shell +pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple +# If the above method fails to install, you can use a separate installation method. +pip install wxpython -i https://pypi.tuna.tsinghua.edu.cn/simple +pip install pypubsub -i https://pypi.tuna.tsinghua.edu.cn/simple +``` +**Run code** + +```shell +python main.py +``` +**Compile into executable program** + +```shell +# If you use a separate installation method above, you need to install the pyinstaller library +pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple +# Compile it into an exe program, and the output exe directory is under ./dist/ +pyinstaller -F -w --win-private-assemblies --icon images/quectel.ico -w ./main.py +``` pFad - Phonifier reborn

    Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

    Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


    Alternative Proxies:

    pFad Proxy

    pFad v3 Proxy

    pFad v4 Proxy

    Alternative Proxy

  • >Ve(8BCh|ls4%Jji%iL%Ek!xKdwEnZ(oG3B=7SmG*EDOBF3R>lIc)X37g#N z;2NJ3ijGtu_3rNDr-mIOzUsZ^rt31?qH8zv(_z@`OJx&7tGm50@EH^@Sk07^ zn3JO;oQ^*TR8U(CIKt_u4S~FL3vfj^6t2n_nz=j&MdWh|8aZ-6(KcNTRrk^xvTRj` zUxap%FsJtRz|=Hc^5=|S<;r)3$rVX(u6d-oFzTNdWvZ@rS!rM z6|T>7N-NmXH((0+)O;&IkAf*$w7xvjnH}8s9O1)Raf^bi5Jrc34_a`?C7u{kv z50|Xg$@a9WxPnsJ#|{gsR;T{C$r}+@YR?VZtL=$^LteWTxvHL2eWveMI8&hejVy1s zxHG3VY4RKQT*rtVy~)L$F`yy|1PAb9*HZvO$&rGq19n^TjJ_)z@w~UE=)m>*n;bMq zym}~pf^f8Db!cy_+iI7yN4)Bb?LzQYccm0GgM~BV^@iz?HI<7eDT@!%nd|d@&SY-S zv+Kochd^3xOLpTltncYw+K8V77b*`JLkkTCjA4b21x`STy2;Z}jDRyDS`FQMJ(QvB Sq$Mt4aP+X#q0$3Bm;VbWf$Y5i literal 22283 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 a4!i)$g>3l_B*Sa6aq`&NA1jVPuKgQH1HMoI diff --git a/media/1692598910646.jpg b/media/1692598910646.jpg deleted file mode 100644 index 4bdb46bac9bef11b8fa2bea5935fd38950a2c0cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12168 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 H)6@R~&Cbay diff --git a/media/1692599729648.jpg b/media/1692599729648.jpg index 40329554cd668c371fe7c1c4ac71c4b84480db18..e0d874f65f94735cd2cbb6ae03eb42a4b8e97ad8 100644 GIT binary patch literal 25917 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 literal 30540 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 literal 31824 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 diff --git a/media/1692599919725.jpg b/media/1692599919725.jpg index c13397d9102128eb62d9a025894e00fa30c80a82..25615de126b58114a7b64c8b26991130dd8d9287 100644 GIT binary patch literal 32401 zcmeFZ2~?7K+c1txT3MP|+2T@JTB9lDzE8_UrD1cdO0wHZ#x6`~1)OpYwh1IdA85Zg05x{jPocUDq9d z#0j!|>H4K05NP?q1N)AFK=M!!NcQGp1>loVnH>n=A`^BDvIkVqsKEwq$bc+_(F9q!&jlB^V%3EM%tr8C#wxN?;DT z{jQAJMQgazv6wp6XklhHq}4v)bsApAjkLKbKFb}whVW;|GftRI-)cuKjg~{M%D&9WWuV3c^n>?D&@4=Ps=DdMmd)t)?4! z;m?bH(jW2UBeR?Pd_le-nJ|(TA?fs< z{r9&VyuYPp`K*ve?up^0^#+AK{OBrS21{}qJT^zCD1t-$<-xs@snWDy)QEe7dFA+> zsTzO^z`s+@zT42_>gZ24yn18K?j23G0*^F8wT#h4P>ZH`rHmtD(&35exV+4=`Nt`r z_FbD8G(r=XpXonuUY&MV(XIaQK)(eO_Qyc;2Q4Ioz9UC1~YTF}_%3&5ujkOdQ}% z4`54am*a!B?n**}T%`PL3&{4y6F0+>-zy~652uLa6M z)=~DICL9FuzUgEIj1gmd3sFOT&gS;hRVsdgGV@?{cy8WH3>nzZn`uJFYEi1SEf2}z zEX=pB`4DHe96A<5ElX3>7LHaoz5GUK(9_No76^LjpY31O>;9zg1`Bk7awk)m* zH5SIX8Y!J^lFnWNxkwg0F~rOe>_vn-vN#oQX(IC~H?|Zhx!Q1tivIGBMpqKc&ixoO zK5@;w{EQBDe~`=U*2gERi|k6RcRg^9ok+Yci+j@pGm@#V5TKqQC&%+rT^YhYW}9?u zZv#1MKrxM0&X#KkW=OR4jD+u*X-%=&GZVg^eT2j;DHUPY{1av#N$70Q%44^8V&XA_ z0_hi(&nx^GMTwsmfya~YDlCB(^osNve4J;IJaiPJELF2)vNi;1Dai!1I>$1g2$)wY^R4Wp&>sk1fVo+lwoi8CmG$1+m3w zLTPfiM@nATmU>^#Uj&wlXtOY$0L_YMaFAZ7nMm8TJp#O@u9Ge8Wpiy7u?gt$&XWt8 z0qwo<=&TyGT9+JTwD$4U?J&@lu0X<2CAjs|-qy)Ml=N`&rJ0QXKu zsZt!<#Wb{-!*oxieODr22}?|kZ1Qh=aD8$(6-JBAM2cP-nx9Z=ibt|E8-goD4GqC$ zL9aQPS7~mRHC?UaAX9Iy8$3oN3s3S!2~A6(^RRTtz)dl3>aUlnzFnq8nH^UggH=k! zT+=3Tn|T_m(v(k6j6jKq!KS^E7v!K!X&TqW$VMAK&YAi}I$=ca{FlJ&ds7teqf-*# zNm*GZ>>jItm49B}`X*IT>jc8!HqyJoK*kTu!c7Q2$qD%QPr9jB;r$-V89zIi;p5 zO-Wj3zk&Qnwx#*q^JsxElFmaQLdch+3SfuH)#=}%qfGq^l=^jwU={Py9T}M>A?#I8 zEIgk@)%(uWxRu)SOIq^|J*>lRcIiEkGZ2LV-| z`apqD97_ieA*)g>*859@{F26=@6rtlqI7D?Bxb3wD;W&RV4%O$u>{n0%B?Y>n{kd*#aTjoE$6k4*9V&EyKYY3(1tWgbpAV^j( z@mvb+XFg;P=+-$q71^HnSahl+l9L3FCY>{UyI|eS{J(&h8Ux=Kd9_IvcjtzVf342h z`z}fI>w->h#B@H$ak+cNX#O4=_Al;+4TE&Y^Z*xk@c!2e&YF~%5%=EB3%BbRf#-bR z!TWOhm`(G4Xq=K+w(uP#6Axl`4KlyQME&qw4!siBwY*+anKF(pg39_Hannq-OWD zn8dglV5x#}(n$BQjD=kbS5eYCbb4Ggh(-LC-{cp-OZcQJ53b8&Yqa(qh+f+Gyd`p& z87= z{rjHD;f!MXl=MBzo1cUH)~|nX1`@r>VV#AC;pHni=UP}vBSCmx=wpCr`gp>zAnq~H zG19Q@>Js{fUk^-0wTWOE1!3&*gCN4|@&ebQ!=3(n=L3jRe#Sxw z-a#HYjx}Yb72wU5K$*L1idrzf>ytDzNGrx}3LaSWO2#ge^-GQ2{G;R@3uD-o4W;q( z%z#l<6~Tm8K5*fu*#q}>-5#>WSWX~Y1g{pKP1pc;j7y&ymt8x*rQicW1zO}1QhVv~ z(w}l6_ruTZQ$7E>G!Gy07{qKQ^@rzn`oKH_3XbCok9Me5)qKu+lRz7KnBSE_p@J9QP94pAX97>JqIC+RJ9W61sHf zp(T2juBE)v*6iCecl)(qJEqg}yZnu%%HlFyK=Xv0`{FOMxD^lG}4+twEWspp2$`r(9_u zpf1MWcZbn_1`+(fZ_!=wE6A^D73H{BS+|Bq`RDGBNjs4F#F$G&Vv?cGoREeV15X6? zz+J*F^(8T*N?s~90h0g8gBaPYp%L!4d%wJfdYZoZum}Kl9wUtoVEsZ`n!BNfi8&)_ z$H*t%8cO$@&mJ}w=MBB}x#V^ar#;vWu7+mn`0i7r;7g?|DUNba2iI%R?AmwF;ccTN zCsY4nDYP93Mybn|Z+_XiZ5jLMf?kC}fB#MaoF@MhM|BtD8N}@)*xHocHF+S_;_5R` zt*V;QsfnY;rzyn+%mN&+!Un7L=Ef-hfknI)k!eD_qP_Y;E=txXw`Ub46- z2zj{)NnojDoFt3u3H&$9r;)ho`2ylBh9b9R4ysi$z>KZ)D*q{g=4?|X@W+ym3 zOU5H(E0%}RDn5jF9_u(>$sG>6At;Y>pEnAq4U3^>@Dm{8gH#>w ztLb7a#FLh`3 zybiyjIxjHi=QyNgjv+P!;7{;IC$nc%cX2qVB~a2x%7b4Ip1QK`;>V*qup*|+`<;Ln zVnxubQw+W3R}=2~Y{$60j3#jog2K+*s;-Zy+ckpmZQ$wAFXePqvIm|=7+f3~MXjo; zohWJ2LXU@r5tXt@qIt5#&6DjH5Mg-L6T^MaWFNBcfnPZ7PObcaTnar+f3-1zdCEfN z;PYmm3-U|PJw0aF`xQQO`UH68uk|sVUy-g!*!?LA>MeunM&6l0?(0a$fBg_+TX*IV zGp54fjI(5Rie$nl+WTAW*UD4WV+_B(df#YP(~Dj~bA?&Dl7Iy`O?C&h~eU z0$(lT0jx^1*_o}?ZZ zOY9kW-)%_Eud6BZcpg-Kxv=)ZP-wK$cS}X=a!~}k6)pINnydfxn}2e`|1x}2F^j-7 zLvuxSyoq_yxwzl8yNfjwMTTC) z!r3=!k(`O$MkAdsPyYT$jqOrsE~Ii<@$&DV5NiP^-L`#q#H;4aD8i}A@&qAK&2TmW<7fq(a(?(eEI{%SV#2xwV3`^td^g*G&Pkr z5g^`GqnI-}x71IsrZ~pMA0PK8Z+%Fu+aB)5-+{Z>W} z5Q@f9hgwd0d;e3ApXyM3d)Y2bd{*5^gGNEbROdXaYB-$^Ai`pmlf=!KgM072!(KGH zWUaEruWIj9cf_W;qcZjP==T?CZjc948I323fxW9qH(%w3Z9nimdSKp=!@0fsbWItx zXhQ_%7_znGwk5`mXgDX8TafLUC{T;SlD1Fl&pkSFRjEbiOzn!t9;`{z_N%HbEZ0r- zUrlrI=<1Sm6O82)T+0|^`C8JE1Y0*RTsDEFS`>o}UBarM2X(dIpfgB7^9=Xgh*!N^ zpM@B|af{yQ5!F~dmTH(kQnEEEV+)22LyXv5u*Pnngx9U1qlSp{44$RpQlF8}ws~7B~ zXN|SwD}WI_NIfhV(3LwzE9YJAN6Tcu(q1R-RRnkLn%_py`EMNSJRgXjfJw~!?&w3y z7L+wip=Zu1&Wo~v^|QS%6X$lcyzx)&)(cjk8C74*oIoyLwGb^5X~1fCDtfv@`yLV5 zC4kUpmV$DZFI5Jj)LIeVG}*{20QLZz7CBJ+p4tC!gM)xSVzT&jPm(6hq3L?N;XAjOxeOm;;GI(+=q2Ms)07&r673fO^|zXJM!~- z&Eg$%xYpP$lLv1oGsF<{i2(t6f`8{>15ZRYUsGU+(ih198R)2GGJZ$<(M8LZ@~Yk* zgRW@Gu!paw7$_=l&`2qo;@{+WoOZ3~8J_xV<^SsefmU*lG~BHsQ%4S`Mmx_anMYOx znAxDwxls6#$D2W6f2GCEb6Rg5GZ8MTPYrgY*_C>*E}9>P-)IU18Jojr36zcQW=czj zp&LB~q$9pCv0TJ1d(QlkU20%r(>sz3@4v@`;ancqJIiJQNXJiR5qFKxdy zV1ssdE!ATRs!A;N7q;QPAKyO2yH;RB8T_bZSn`>gqrXu<2Re=!8NGFHzYvh2mw#_T z8B5PBxX)u_^^I}&g?mVzl+bCUI*b$$BJa3XrePMTp6U*>^oCH?uQ`1sPGS!i6FvuaN*c(abS<@Lu<zk=7qhXB z_L(|wR1W&VOfkfm9qw=skq0f;E6`Be16GhzmoVTKWIb;ZZ2}j8H~gN7=m|#Ua2s4x zZ@p*R)?wqn_!N%zKh$?9RnObG!+s39-GJ>CJ%ziKoK}}e2V!{Kjx4}ms^;y>UkV-O zxWD9mczCOA>Nx$4Tpo16!NvaI;8L$`y!G>AC4F6ix8da*i}x^hQ%zo-T6*a82v`r< z{W*$6Gn9Ss)1~;pikJ33ZB>HySKexPxPierTh?{tS!@g+*DrYqpX1iSiP;VZkju3t zMC7+-O{)cW8aC3Y2tILR zr|rsIC97P>J%h}!eBx&XQ$8sdYaPDyb4-Q4m-XAssVFf2=uatgL9D3%IFOa_rH5SO*XulX zt&?>yGbc^~++l0-Q^G-%ulXm4g)aXdW1n^(t`!1TLtXI+{|3sf%o;Flemeh+ar43x zKVJ7Q0;g{{e_SI`_;GCAkj`JO*|KXJmoID}ST?CTx6vQ2KrYBqSihS3#I7h>LAdxY z*QcOsVRCnF`W(~lw3P!u`tx=2wk$5NVK6R^`G_}BJUD1xV4_|(s5qC$-W=>D0m&_n z(QD~0eXrkeXRIig+S~@ADDA$r%YT6M z69?e1=7Ty~5*H}vb0#iO{YrF-BOAl1?Ed$+0-&LQJ7z04$4~=`bRy2{J*Qg^!`~X3 zCmSh20laG%Y#jo9aKhGfj(Dz9stN5sFA%s1xUOY{f{exLgE<+whm(ysqmGDlL+^Oa z=R)rkpH5%uNG&Pjx5$il(kRqnQ1;P~<6}tKHk3DF8xUe?X`Z#Qa9~ zK-ia79h{l<^=t{WdfBsmB?S1M`nd(m5Sj{OcnO2*|a7(iI@$S#ux4JTvMVt&l=>{TB4v=bSLXKq_aQ`g)Dxvk z!y-Z593edD5Q{@UO6p{g?AnCSKWF#PY1JIl|9oA$nsNy?CyK*5W&U%}{ONjoDb&LJ z|6vsbtb{_@)&1}1h^M=t!f6X!fj!1vx~;sPa>+d3-eKZpePven@&UvmO9cW~5Akl4 z*L{xA8`i!2``wnN&sBgjBP!FjSf1^jf^at2xGvcBY`>(2dokvM#SWVqVvE#ScVo?FOrx_fapB!e-U`Dcq z{ueua2uE_4oo&Cm6Lr?^zK`AIWdmCQ7=I^$&(F-K4hc(|*iZG?j4hSRyoQ@|=sUL| zv>tQOEbHEs4P?2-&(pSv3^Mn*1I#tqykhY50v&EA4`qFFcBsSnomlIlurtD&JF4_& zlJq0)0c1Y=`ySi$SP|b=CJL=0*>96xDY;jQIl)bLD(w}tqelxTB`85O%E5vJza9v2Gi zc9tPekCBL$Z^Db+ib)LE@uM%&^rReZ0FtB5wS;du%e-nUwcr(H%iJE*u6s*`G?pE3 znC{=NgSENeV{aE696SC6IEovO59(Y}E>=&A%bHbh&?`EphR8EaIr_po2n+1HP^LdJU8LAa4*Epe0kpxjEY@fy-(Zz#9|-2 z(9QLbyJyI{5N$w`KJjN8jg_Edq=i!q1W3OrbM(BiTVR2cQHMP>M@U1|4IvuI@}DoKV2ZQ)i; z8kdE$j|r7n@h_4Sb{-gMLfhQAP&Gb$EH;_$XWo%q)?E-w{S=~WqcnLhbXV;0>6I1b zO5Tt2sEt2Q@;i3lc(wJmxBR#p(2L+5kQp`njOZ3Sj(%yvopo? zo%=l3a0lxeHlSmVUC%=MjN|Nfl#YB0%=%DZh)2I82j(ZUV5jr4yGJYbT~zNS$M)KX zm3BcS_5`~LHS(v~nkUKdD#t5bo@>=A5K;T;?=Vl;M>NlVrsr*{2YN{o%rHm}%L^wM zFTne6s{fsE%XWH=(pohnhTIF<3$_WTrF1)ex5C%97Y#XkvDkBo`@UqJMS6EoED~qzd2z zeXn+n@}boY*OQXYHMU0tBCJc!Ow6jxQLD6|H(~eiF0_%_0N)!PI8P^iB*&$rZO~iV z!v%CI%sjv4C~V3LhU(nSd+Zu>9$wZfXzI?Nx~HU`ik37^&q;rYqdq5Mz& zd618e?{EPtc+jxHJmplWuyO3c6NCvl{F@+^7R#KOF+D?Ck*fqvSpD|9z%APa(Czq^ z-a$={&L`{P^ewT@w@ondB9+`{z16!`r|12eKi)k^Ef9qotZ#eHdKtxdgPz!0sju)c z+)Y$fo!r;#b97fL#zT^0{9E9%>+APTrTAq@M~xHq(->r%iR7%X^U))NYP1;j>lcr= z(Cd0@208l4np!TLj5_kNBp8BzqJm}0MYsqvzG<**gC$-c+99tYg z8Zs1p#YnY$pAmOY^7NwSs|HwmNu)@9uNG?Z)70CC<4T)n>;3J*bbC+&23uTLSvf|4quEag;fDPOQ7sY1d^jRXEz{; z#zf;x8X7e*J0{7B7M~UK!;~)uSH$#xh8tKP_pGHm@Sm07J*FzXrQ>JI{PBWH@8DP< zamt}H;3v4q1`(qbknu8MbUuHg`$U9QV|34Kg+XQXi%i0B#DJs*G0Hz$$1a*OzQrB= zjan35hWeUihMv8KwwRIDrAaN=IiH-fBKuWRlN;=^zv;ye=rpuAlXGU?_gBVcMV;V% zE9C~ovcKe|(#o01YXs7XGNxFpXdfBO>rHC1oD|`Oj8&;vjSakeC-9`+-)%{&Wz7Mg z*(iA8Y6^LvfA7;<=6RAwp-JR!epq`stnB6VMv_9CEpiZk=9NrmtO6tKxrim_$M8=@ zN%;O>lmt(31>wfb|azFB0 zl_Gubbkkcw1s4S{P~yb<9G7fHP6QYj%?q@LH#>U-tNVFGc}FP8p%22_B5X1|J-zt&*s@};%(OPPJQw*+uriC&Uv|Xa zzhR`L?k4vak!EVQm$301{r$zsdy3jIkZ7s24`JWgJx#NxYs?x+yc^1ND<=D{OVJHY znzKOvjF6fY_zq`rNZ09%@G4sRuqIt7VR}ox?&dl72!pJz$Bq&0FT`%QYw;GUw2%`f zJ85P{c99`G5@g^sm>cje*?}zXcq|~(Vtj=>Kk_^C_c2@OhJd;2Dx%}J<0_MR&5*f} zsm4MMSFq%`6M0LEQFWin+4so>QKMb^BfgF#;gPKu!_#Aa_RBgmlX4ghv(GBBY_nI- zI>(wcZm2XK^j}-&Us@N@xIHs#hjSJI`i4~P;GDFhrz70`rl6Mycg#4NJ$&(P*nL6F zP=#-C!U@F4lIJXq8PZ^&Rz$Qh>0qSBeJ=$tKf-(X+t&55@9-diptrWxuOCB;Ibu=%MC(PB8+S1uJXdcTu6j)(n{;cI- zPna-cD6=dws1-rV{AvlQgw3Qv7=A1>;YU7twa=7m8ePwpS4o={*EC5zc_jz6E2I(9 z!O#Ak$i6HF!-n6QWrClriDRkaHOiE{d zd5;g&a<^K}4&mLK^5@+nWMW6<-rY%NH*r`l37tY#KVdXIHn$UzJG;zhW)x0rw0zGa z3<4*eLpqjoM%uSrrao0Avi7yb3%jQ$G&-N2tb_&m&+OKU*r2JWeRtiAKfHL>qpm50 z<9{0MKimXPYJ%mBSe^v}BCR)u9G;mNhH#|q)OKN=c^lR(DDR72=c1h=RT?tDY{$mN zqb={aU>_q85OOtN;W3)Z_uL#a)0rji%=o4~8;8EzLmq81F_PR>_UkY9jM>Rs=qJce&SYP9Wpb;%cF}3qvgJk>Vuf1=CptOdwh#kvQI{Mo z2i4POmEV>0tR-UhfNNaxY&h@nMDe^uAy2VKhbOY6Ea@-5bBK41JLq4_br+`>1GnDJZMuvndhYe-(pMXZEr-rMeBH~oy+rh-7PW48dUp%S-Y zgfw&m#ilFs=Ih1KSbB`_+Xa<+QhrBSWNIlq;53;4q-*}5mY&kt4_p#*3U{!uppk2& z^xCbk-RyY;o^Gg5u7)u7Q_U2<_TMEgafk~g*+?A;5f8J@7;s_EG{W?l<0+9>jQs#bDbE;+j%l7OB0IL_1&T^6Tmptk5mK{677XdtC|&Gt%+OR`e=8?uc? z!0C@QsK82%x;sB18*6EII36_IFny?_76<|^8=w{2W0I5Xr9$J|wCDB%@1v4ZeOBPD zz0Ht4s;)b3GKoIhnhYbwynhzwpHfmFku;G0UNa0aU%0B0WcU@)K z-j5Mf)5ZPkjqt+W*-2l>7yBB-iUarMM0*=(XpXciW@xohs-$sxE?Sq=b1s6y2KRfY zFo`u9vwfQ}Gd)k5$fD+7B73c8Y{Ar+>X@&~{)E~_Ocm0fAVWkyb!e>7wGlZ0U9;22 z6u_TK%UrPic&!LpY`nd`Cc1N|N>Mw=YdTAuSEDR*Ff>r|4gERu=BmVR7JJ6od08-4 z*Qc`V>kuR01Zt8W08&#Q;7B%q?r%Dpwd&7_=MTAf0z{M2s@{8Nzn7MHqSeK@*jCh% zB?*r%WaMOET*doaYaX4PoR=Ox>4}S0Sn<^ihpK`fb(V=<}o{-tt}oJB^en@husOqvY=~E zDkSZ*sqXfzlC2~QQxn6xT4cp+e*~mzpHY_AZ9%X+*uDDi65N5ppD^(?QR?B52NKgXLeJ zI?St|Dg}CJ*+-zru(Qun%X5w)gM4pN3${O17O2wbYSY%=$VGE21cn^o0JLN;P%#Jc zH<#qRP4882dxF%eqU6CLs~p!+!Z+0)+^Jo&Q+xNd@%uoPV$O8#1I1PC+!)rnm3oC0 z34|#qnV!W^VC}QVyuC1j%;+(0z4lh;2;jG2ETD0i0EqDrYI7r@an?04FdZ=aQc&UNcnnR=?- zRN++rP>3e(%}G~;CTFgj1-3OudYtHdjn2ohd?{ zoGWc;nD*6VmZ2q#-oxT56=mJTZ*etOW*;H@uEsH~do9lc^^mxOYWC-WmU!r{czfLJ zSsUEsXdH8#s*(!Pvcx$~sidl)&KG5#Rs3>(>;lZr;=Hm|aAhD|dRwo+EV*`2F*)^x zbA3{=%_onF2aMjG?$VqWiIB!OBTUngv{$cZnKkP{&{+Tpv7ootWvM+!5Yr+P=&$~ws5i154rIw?epe+J7*&@K~_lk+JC~!)(wu$#l?QUL3*xR>6!#Z=m9!u~L?HVg zF;Xh5X3(VB`c)JSDq{&$SzD$>+^to7%+B78HrWL}@#enGSo0ht$NmgSO^O0|=S%{+ z%A;7#LL9hOF>wjJGQI4}r`_*5$cp}ekSF*ePQSmOC?Zg`>0zrVqhZ>er$L19^+!MK z#LKv7y$=nDTK~z$;@Rbga06fc%(>FK%&S{}hWoy;3e@nbtGXbg@C~EU1G*<_L+fOqO=+mN7+Rn?YA8CEsJsLMn_Cc!zOyi%By*a)b^1jb(*EH zvMy?MlUfT$KU2*xALtdjkj9c)*&COfX|saUmdoJ|9yXU~)jMUehmVgv-7oIa9P2Ea z5&AWypd0mJ_|yIsKIkZCZA$uZ^oa`T!wCH(MBTOJCQfT98Z41<$O%rDm7`WKO1+D_ z+r}OlRFU~=HofE%WOEF1w)7U&IfkXA*kH7}R3&!e(ab4tpy&OO`d={GCX0h9=FyRE zByyL`c03P^?hfjlEhO+8@X7Z^gS5I-e@dc8)zSIz>I5$Vsd&)rs(vZ4EBAAhW*G-) z8_DgBd*iiF5GGEaiavrGyC@!saxKN4X3ZiikU$S*YwwHU5d9G|_mi>OKDL9bPk22Q zsF_&u@+Bjv(~y6U934YC%w@Ezfx; z;&9>}s`jCx`$-W6!gA-a?Xoz#O4l}#w_E9xDK@GCd2{Y3cKmx5vbybRrQU+4K*v9P zkxc!x>W?OAS1Kr%{#%N~^!A`gnX_+eLHE(;!T3|oK@NiHAnJB_qfc2^#^jiHwHiV2 z`a+uZfMuav@faUL8(0K}#H#3;-uwcs41$Y3Zu~8(`!lDrX{4Qa0W$M7a~Fm^T==25 z_r+J++=x1_z;`tJlsuqnG%L|4C2Zz4S8DzW@4m+!Owvyn+iL9QO7!O%2eXjX2qI7^Y)97}p!l`7Sb?ns# zv05F!-H*GS!K|_BKdr_P5Ar_Kdfl+=D2}&N^Jldl*gKCVoVMI`;6@YvRLNxd@^;JK zq|c!lFJc=rX;A>x;Jwc(T?rQrdVPo$JW@l_L;UKx+9>|Wb~#*pVTI^31PFP1W4ZmC z%gOxyI3^jH_wNBd0SX)PzWPEl6_&RXUhp@o$y4oT-z5<&7dNa%!9wlI_KN)d%*mJ$T(l1Ybd*Lr2E;a() zR{pabgyzcB7p${(a**~nEbq2C-(iG!V;J%1(+jE!6y9JbI)Gey45iw`%CyE!o`q0A zl(njVmTXzv;S8}-c+?ho+BQrLBZE|ZPh(JEmmpkgc*BMzEXr0bwqPQ|9V8!Z(#02K&&%ojQB^F1?-2(!}OSkXcV^=C-$8(YXK zi1v?e>jw|tZ)tmfg>{~^1mRfevr8oXN7Yh$If2(eDXvlftY=U6Kq^EM=cNT#ysY{_#VTIUHsm2j(@(P1T6Sz+Hi=m+j zt10z%TogwK=zQ)t{6}{P90EmNlc~QllMq}iM|eG8!dT)q`pr@L%XG8yVF6}}NXVFp z9Bp{-3t(`0*jQm@b-=(vp$qbXSQ<~hH zlabZgcwlt26{tgpdzZMl^cc32UnjzEYv#=;_Y?txxSa{~&t~!?i1exW?910II8T=y zPJ+>_a~(<(o1RGu3~X~H1sW07UWTHv$vBWMt3#&#Hfr>5NMQk(_u6p9CyY-+fz)T7 zP0urCe8wy^y9)6scK(24i=_r+ozgZ5x6UjkH2JZO(_V!~1KUj7y~dx2b#3qV5;53{ zGLDT0<#5|uxGj~Fs{h9H)ZX4=QwGw7pG}(jX*i=dR57nxCWZ4TsA%9g2cY~Sk-W9j z^^#2|ZKKD0-SI$OD64dS-wh_!{^3Jm+lCpj>T9yN6aF}~6Hjvx%5j=XrH@ov51Qo* zk#h3$()XC@5chI=8NDf6RNzS7aO=7g*}AOf?-axli*d7iLhh(J)fJN3+%u+S-nqTj zFf)Z?(E#@%@x4<=M}ww}XzxoR@PyaP`A)6tcr~!#YtNw*~;I zEs~T-w~e*zen!?Gf#GMyUiV(@95^X1mjSfYXAxL!iuiYW0YvJ0xkB}T+Z%T81rE10 z%rTZbS&#niX=QovIKGL0bXi+~?po7%BeG5xW101L5``F8j2nK1>Z^loI{y(!QqRcZ zmatx7M_oZKS-RJ}0;trak?1w}CAa1OVkF1*gW@vwH{S))dtlz0br%@%G4NE(dtIRm zL?K5Se*v|4;se^O@*tI#SJ(Oc{1^K**TV2<6VP@b4^9i~k;N@4%=Yl^p0-g0w|se2 zzKypFvZMFPz{_kb%~~m!jsjB0$;G7+>aVqo=#tUG9e+_+i%5`~waXTyMqKFIMB8i5 z#cGq_sE{lAI|I;jgXL6hbUAYJ6NDZgb7jZQXK0|tkSgMm$wWaa^uZ0{o_1^!4Da?ff7gWk*nBlyN1tl8AbfwA699QnBNxOHXNa0V@h-l-fE+S|oBMG&)v4$lW6l}_EjFqTEXX?sPl zPX#_3roLskVNTJ`L!PIF3tKs!b zJeKeape{dD<^bCdG@1O~Nn{2AwJ;LS)mh^Z3=ey9cI>EUL))o?8x#!M?JJT#?3BY5 z(+goDY}f7rV9YF|M)bxCXg%#w#TS}gvT77r4a0ZOq`oLA6MD2K1`CE=&;T?o{QA9_ zP-NtA4YDgTr1ce^ygTPAAyK@t%KN5(1JN)nz=} z(;0BEL*>6)@q6U`Ph#^u0{Wq7Tz>$F#}$5WS!w{ryeY8Fn059{ogZVqAKJdsfEo6M zu<)Pc951Wb;WFCVD{ z)(1v;(}JD6Sf}t6{b8PNT*g1!V^+5!SZz(!6;Q7BuqII4jUSTzb?=5(W7aX(g7h)O zK%q28K!*U4zV%9Gy&W%eE~Wl^-S6arbYaejk8g7{E2o~uy)O#Ao^RXcUm5g{uX(o3 zCz)$sE~$wwBTXmIjv*NdgR_>LDMS+oe!zbOhVb*74U79f?2+m$}0`A|v^oHJic9rQaWmL|8v1XtoSS_;Zb) z_R>k5o9EKnx4Lt0vI@E@BSy0Bww}wT1tw>__R>F3J6h=lDTjqfkJ;+gC5RXv#ETGe zZ&AXc{$Ym`NMrg&rS{k+?q51sO^eNhGv3YcUD4q4X_*7w#;y<&(G7FHG zp@<}FT;agU(dGti!mI9Qb=dW|v02TokRB*1ED5fw^jS2L(I0gk86pD4Fp+r#FWS*k zhhctxXTd;gju*F!^&#*BCu##haQan&A*8a0Bz*aTwzP{@mubu>cyFc=TVGh2_F~Li z5bNV6_N*TpIgtF2Z`&Uh@J!qI#oq3t1yU3IRt!+CSoaS!&yuNsuG!b2x00Jgs=!_HsT(3e~M1ps_-BqP^L z{|3z=%cT|1+|t`%*(M(82`(9ZgAMk^)2}^m-(KV6$3?K;mggb!VW_}TAH-ap_U~cp zq=RzBNF-#mpvK87n$T6{ZngSsksKmIk{${PZV)OTwVx_r4u@mkRG=%vGz~5~7#Q`^ zC!#gafm#gduMIn+Tx}48th*Jo%f%6HrTP45o8c*iYJYch&yI8ApPVKbHlGkBUS>cm z!)Z~r_AOsCa#}Lx2k6!b zY)SHq#_WomP zu!WfRKL(I@QQtl%+#{NPkFDC7`(fdmSSI zbWNk(5c3pK;yiY-;jp4&L)D?+3owVQQdHB|#W*_b(1rWaEf;HeO-KF{R3r%);1K4- z$IuGm;M=})!242~HM+yy!{~<U=w|x)&Jj7u(?{+Lm(4Lwx`dfd}#N2J=wGKD)DuDYFX zmXxnDs3wuMkeYoV*c`zpPQe&{A7S3vU7jw*oF2`r7SxN zyvFap=Mlk5RyU#bRQd(uv_1`tn|I&8syLERV3|S(UXBqg&Pq{LIwqSB;B5TZL&@#J^LJa2el$!< z1-Wevcl^kmBsts|+`Vb9j3b%9l9F!!-^t$E(Z#sMi%xo7_ia;MPpy!C&2$41m|X^? zjN{jIN3fUxj?*tz;b*)clyDsO>wlmjSs!w4eei=s*YCZ&cyW=A$w_&|i_Oj6k1pi` z?*h@sY!B80UQ{*n2?9h={~78+D_Q1|6_lW|;kKr__xL9KM@ z=d(zp^w@v8+B_j8gPFS`55Bva;t75=Yz4kPDu~kUgK5YZhYYNLIOY8x$z)Z54B=PK zQDflkQHrLC6;cDvN9Q$F&;+fLAL5wPgouP=vOgfMJN~KoGhfEQLC0 zQ)0gAXam{DvcDD1uv8FJBI2r3?m}=^RYm7drhQ(l9VrAcKit_Mi&On4V-0vN*m}y` zD_Ui7#&7@DNNea}W`8zQ0w6^avTp$$~5*U5mfxz`^W*^fw+>Ox@T#*NWhRQg4g=I731W<`of3rXM)}q z!3S*rM$^UXM4`2X>w-U@#zmh`Sbjwy09cqB?HYF9|{!y!|aQ z<>vla31b9kzO1j5LUuS$=5-3=XF3KD{#m$0b${ccO>d zPs9b4rIk!H7$={mV3og z0r)M{efmu?@i$r;*)}cL0)y`6bWvFEK(OR;M=U#2Q?>c*eUWh8)Hq(JDAe`)l}_b? z_q}u2=#L*hpvO37q{H;uMaEG#;n_!YWGbHbA_GMbY%;cJdtEeQ@^1e!*z}JRyeSf? zb6+t1JRmS0Fr|B;LF(un`_cQI{!Qha78H_NWGu$%ss#)qqp87Vz;jXix(wE8@Ky~&4ZMK^>v+~os6}OLa|a0a z`pzJ*R+E${`jZi}k83UI)90O>H|>UtBMncKxq58($;Lr}U0=#XlReV9Uk13SeuYIS zaShmhA(OQlnJ{tJ%M16)i}1-*@}4q+w1x)QugGzYci=sTouuGqc+XiBqiWi|ZF(nQ z)_LCW?5d*vTNlZ^0%^XTBIQc#?PxL2A{wkav3nkc&8KHOzk@K+z=*O>KP`${F+g@n zYqa=XmeTVR(pY(7NINVxz6@XR9x;xR_WS4eb?cND4iJ_%^Q?v%X3(k0P2WjB_BAPXwJt0N2GiN}5~O zBZe$mFVtOuy9J;oo5h@dC0V>zwtNaO7d_`*Zw}M6HGLHq4z{fezql=ex>secbbXcP znlG)v4xSv$!Bzd>)^lqad77|JBXC6zZu{sua}4%&l$d+z+5XM5ZJ8>2=-olB8;Sv5 zn3qfuK&2%OomC6RM#rw)Su?kc!ECY%wYqY!81<}kkR(GiM~?A^_e~BBQXHn6riLuP zm>e>bBZAgjqgPo6ZSR_6FH(2U7=aL?8qwZLU3bxYvb z%dvMlmA~14SvN0H+E~JAU2~M4#|ID6wEV}Inc*JgKNip$yrZT|IF`QN@N?H&QTWMe zJLj|d5-z1e8KaDobmTXSy%4lGE!e7WOiPKu30ohAiOb1x9*@v;8CYJIvWy(ScTdi0 z#~XeR;}pD*Tq!RgB*2`1mpo@!Ltxl;<)J2Kv-UahG`a=<5jONbzlR)eN&0H>bd(9> z1+NfnEDYC36-aB0?!aru#PXa~WSXONoz}@&bkj!zRf}kHE)JvRXYWGf3MDity5~H( zg65^0k4G|{Fj|*z+F?T%anwlo2d~9Ih*#aB3%?=PWNqy2G&hxSJ9f+kCbNIJt`i_m z&~q!6%R2)sctu%3`v62r;5$3zdqyw`D_HZq2gR1aTWhL68V5)da5>1_6)qK}-KpPx z0l#2lW2ysdj(Pkdal(k;nz0fDY%2Op9jbX=X z$j=N!7p-(I{XJdMxgsA&K@+9E95{YHYD(?$M zuP^Ry7i1|g`cz|n@y)wd9?HZPE@6z0cKb3J#o+Bebz*V{ZhPGWos5DGlz{|ke001) zB2)0ti#r&sH=%}8%>`@W0Z6U$XWB2-b~&;}A7(~>dEgq2VK>9OQnfYVhsVSs`)n#4 zI0KlHvgV4p1%Kk?SV>JED+qw)aL&D{twbz-s*B()naKRz=RHhoa)U&SMs7zHjKhfm z!BtVi`LA-cgUV>gLWr~B4l}qW)cf!h^`S?Q2R_u8KKr$=fqUPT3GzeRBEvxA&j z4iNvy_?y#oZ^$Q1M;OAL=h@(?xZb1p`EK;?pE_RWPrfDABvSo_O4Z@7^sse$TyI z_l|D?T{y(9fZm1xpE}E@FPegvdcF5sAF}Mxk!Zk}m&+F808&d^rZg*EC4aBbmWW%c zId%naU6?YgbVNRBSZ&k_eFE8P)`knM-XUBkbn4KkRsAVUt7RLGUCn!deGF$Na1Thi zxeTudERV~w9P;2lWOEO~zyUQ*Hll*qV#(TX3g(L5ysCWVFYYghElZRC!^}SBQ4nhD zKk~gxdzoMVBYKTWCG~*=EtegGXqt0^K{d#iGDBljn&#bP%%$Mgwg)>em3DQYm~Z+` zCsJ*j%WOEaoreUzg}w*5%|RI1l0D~rrrhK5A(5dBv>lL#FZu*}0Lv}2^B;d_~ z(#lDrk-{K9&YNF{3LB3i3VlPAnG;iUA@J%XyV?u*w>|ovV}@XXAW&YN3NSKi%f{Z0^Bb2j_Si=Li7L_XU;bXK8$_>_MYbGqczHdL@P zs*Aeyhc^!o-T%91=2UR&N!WC!pMMhkbaG4K%sDI}bmWocy%)?09PW0|-_4HpKBQ!^ zlpB_^;=ivRFhtcjdYm}MY%*HDI`P(`BG>KSy$mXHdFTUkdO?3vEC1IdM*h2{dY(@E zFC@eM$5sD7KUA+|$j6PwE7HXx~&~ zw!*ay2c0O+hGtN<6RISxf=)O=GmOQHD6rE1zfA32JGHf#I1XxEbT|UJ;GU`{0Hw|o z#;g7tTYS;BEc|+)v4IL0e_Kq4uC67ZT_^HSedZG?YouFwpc#4 z_US(Il{#&rbif)$01`Dbu~v7jA~zT4xQ8DVTm@+c0UsF?!6%`<+pGAz4t_a#`6f{B zqPDdk$4a{P6s8$)H<7d!-b1c%U5l7e>Fawd_PS@n>X%((vAjg^L#MSWQjEYC?5BX{&ie(z?I) z?fa8!v*yc~lJI^cCd47dr_i8Nld#D0T_Os1ZvR94?Efsfe!lIV4=Mj2VWG*OI{@uT*|9n3EH?0Z~Ss|uM8Xrlz0+nXE(h65d5^@)1sbaoj6mVKEsZA4Va#kGS~I^6*Atthkh5n24;~iiDpwzF63QS*(li{{|7$qNf7Ff-FU|{H(Sv| z{>64}RC%qP(EdA@TbyF-p=1SaJ)|({Zz3%qKrI4DMN5i8-3yHJU_Ha@d{&V@#6=;HL6JN) zdj14Q{Y3Xm(cl8)cIEckXH&$fr>tl|5~dvy+Z^9hp^M@*4S;9Ia?F@cej|mLb`>-p zF{v=VL5M1yO_kaT3N8$KO!K4lqDKAV0mt(%^*a$WHMZOIeL6h(ljl-GCxHSqvEKF- zDPondb*~l>GUn1Tq*&<;#EJ}#e+z>Wulh9BAK&BaQ1xMJUXR%EifK73x3YC1O32_T z=8QZZvPiTZ%QPP?>nBI(NUPmmQN0r}khsA>=p zRAk=Yg}P%Gsl&Ku5TqFwIn#{fHU~x}3_edixPrQ~I&pgA6sC;Z1ev=x{w2|}$aaTH zmG<&jYxSSQ)N`iBU%B$@%xn!ur5zz2;z%%2&rfL3J{Ozj z-1FnjCl9UG5Y4;50Fd(bTd*#T&9;``UBWjUMtPJ;hd9E}vo)+&uOR~(-pivW&=TX5 zkGQWpxlQ(hl|s^P`7-mHcG2*Jr-0*6xgrv!ZXM!;H&E3$)UxL8%8<3GvrYSHseO<} zTFv^aXsmZ?q)9Be)?v3oiQw9%DENo1K{MMY_{%SJHyPShHa>?m!*=hqG0)lIdhx#i DpDmq- literal 38008 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 E0E`JqnE(I) From 8faa85e4e83e3d0a76b34ee4f60592b100f6964e Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Wed, 23 Aug 2023 13:57:31 +0800 Subject: [PATCH 05/15] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E8=87=AA=E5=8A=A8=E8=AE=BE=E7=BD=AE=E8=AF=AD?= =?UTF-8?q?=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index 9a6222f..bb61f63 100644 --- a/main.py +++ b/main.py @@ -555,7 +555,7 @@ def close_window(self, event): class MyApp(wx.App): languageTab = locale.getdefaultlocale()[0] print("languageTab: ", languageTab) - languageTab = "en" + # languageTab = "en" # 根据系统语言自动设置语言 if languageTab == "zh_CN": t = gettext.translation('Chinese', PROJECT_ABSOLUTE_PATH + "\\locale", languages=["zh_CN"]) From 7e227f1460302e03f3d13625aa03da6ec922e009 Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Thu, 24 Aug 2023 09:16:27 +0800 Subject: [PATCH 06/15] add V2.1 --- README.md | 22 ++++++++++++++-------- locale/en/LC_MESSAGES/English.mo | Bin 1957 -> 1957 bytes locale/en/LC_MESSAGES/English.po | 2 +- module_test.py | 24 ------------------------ sort_setting.json | 7 ++----- 5 files changed, 17 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 4306793..ee4d4fa 100644 --- a/README.md +++ b/README.md @@ -9,17 +9,15 @@ QuecPython产测工具是专用于QuecPython项目对模块功能测试的工具 所有使用QuecPython开发的模块均可使用 ## 功能介绍 -1. 支持QuecPython项目功能测试 -2. 支持4台设备同步测试 -3. 支持自动测试 -3. 支持人工断点测试 +1. 支持4台设备同步测试 +2. 支持自动测试和人工断点测试 +3. 可自定义测试脚本,测试方式(自动测试和人工测试) +## 工具获取 -## 如何拉取仓库 +[FactoryTool-Tags](https://github.com/QuecPython/FactoryTool/tags) -```shell -git clone --recurse-submodules https://github.com/QuecPython/FactoryTool.git -b interventionable -``` +github上进入FactoryTool项目最新的tag,可以下载可执行包( FactoryTool.zip ) 和 源代码( Source code(zip/tar.gz) ) ## 页面介绍 @@ -143,6 +141,14 @@ class TestBase(object): 该文件会保存在工具同级目录下,测试过程中自动追加 +## 如何拉取仓库 + +若有二次开发需求,可直接拉取代码仓库 + +```shell +git clone --recurse-submodules https://github.com/QuecPython/FactoryTool.git -b interventionable +``` + ## 环境配置 **安装依赖库** diff --git a/locale/en/LC_MESSAGES/English.mo b/locale/en/LC_MESSAGES/English.mo index 288f9ff18a893c9e1796471cd62def067366cadd..c206697a340155cd9983ffe7f556041169fff27c 100644 GIT binary patch delta 35 rcmZ3=zm$K&Syr*4)Z)^d5{2l1#Ny)A6ovdE1;6}~*v*ew4>1A&@+b|6 delta 35 rcmZ3=zm$K&Syr*klGI# 5: - return True - else: - return False - - @staticmethod - def det_file_space2(): - utime.sleep(2) - if uos.statvfs('usr')[3] > 5: - return True - else: - return False - - @staticmethod - def det_file_space3(): - utime.sleep(2) - if uos.statvfs('usr')[3] > 5: - return True - else: - return False # ------该区域为测试代码------ diff --git a/sort_setting.json b/sort_setting.json index a1f768f..f4b6e97 100644 --- a/sort_setting.json +++ b/sort_setting.json @@ -1,7 +1,4 @@ { - "info": [["内存检测", "det_file_space", 0], - ["信号检测", "det_signal", 0], - ["内存检测1", "det_file_space1", 0], - ["内存检测2", "det_file_space2", 0], - ["内存检测3", "det_file_space3", 0]] + "info": [["Memory test", "det_file_space", 1], + ["Signal test", "det_signal", 0]] } \ No newline at end of file From d1c9afcc7aab77f7260afb8ff94e64113905bf61 Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Mon, 28 Aug 2023 18:53:10 +0800 Subject: [PATCH 07/15] update readme --- README.md | 87 ++++++++++++++++++++++------------------ media/download-page.jpg | Bin 0 -> 14581 bytes 2 files changed, 47 insertions(+), 40 deletions(-) create mode 100644 media/download-page.jpg diff --git a/README.md b/README.md index ee4d4fa..b981f00 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,43 @@ -# QuecPython产测工具使用指导手册 +# QuecPython 产测工具应用指导 -## 简介 +## 概述 -QuecPython产测工具是专用于QuecPython项目对模块功能测试的工具,方便对出厂前已经烧录正式固件的模块进行相关的功能测试,本文档主要介绍如何使用该工具,在电脑使用Windows7及以上系统都可使用。 +QuecPython 产测工具(下称产测工具)用于对基于 QuecPython 开发的产品进行生产测试。该工具适用于 Windows 7 及以上版本操作系统。 -适用模块: +产测工具的基础功能如下: -所有使用QuecPython开发的模块均可使用 - -## 功能介绍 -1. 支持4台设备同步测试 -2. 支持自动测试和人工断点测试 -3. 可自定义测试脚本,测试方式(自动测试和人工测试) +1. 加载测试脚本和配置文件 + a. 要求用户以单元测试函数为单位编写可运行在产品中的测试脚本。 + b. 用户可在配置文件中为每一项测试绑定测试信息,包括测试项名称、 测试函数名称、测试方式等。 +2. 支持自动和人工两种测试方式 + a. 自动测试方式无需人工干预,按照配置文件中的顺序自动测试,并自动保存测试结果,直接遇到人工测试项。 + b. 人工测试在当前项测试结束时,会弹出窗口,以便测试人员手动确认测试结果;工具会保存手动确认的结果。 +3. 支持测试明细展示和测试报告查看 + a. 主界面上会以不同的颜色展示每一项的测试结果。 + b. 完整的测试报告将会保存在工具的根目录,以便整体查看。 +4. 支持 1 拖 4 测试。 ## 工具获取 -[FactoryTool-Tags](https://github.com/QuecPython/FactoryTool/tags) +[点此进入下载页面](https://github.com/QuecPython/FactoryTool/releases)获取产测工具 `FactoryTool.zip`。 -github上进入FactoryTool项目最新的tag,可以下载可执行包( FactoryTool.zip ) 和 源代码( Source code(zip/tar.gz) ) +![download-page.png](./media/download-page.png) ## 页面介绍 -**菜单栏** 包括编辑菜单和日志菜单 +- **菜单栏**:包括编辑菜单和日志菜单 -**编辑菜单** 用于编辑测试脚本和Excel日志文件 + - **编辑菜单**:用于编辑测试脚本和Excel日志文件。 -**日志菜单** 用于查看测试日志文件和工具运行日志文件 + - **日志菜单** 用于查看测试日志文件和工具运行日志文件。 -**加载栏** 包括 加载测试文件和配置文件,其中测试文件为要测试的测试文件,配置文件为需要测试function,测试的顺序,测试项的名称,测试的方式(人工测试/自动测试) +- **加载区域**:包括加载测试脚本和配置文件 + - **测试脚本**:测试函数的集合 + - **配置文件**:为每一项测试绑定测试信息,包括测试项名称、 测试函数名称、测试方式等。 -**测试区域** 包括 端口、测试项名称、测试的方式、测试结果,工具有四个测试栏位最多可一次性同时测试四个设备,也可以单独测试某个设备。 +- **测试区域**:包括设备连接端口、测试项名称、测试的方式、测试结果,工具有四个测试区域,最多可一次性同时测试四个设备,也可以单独测试某个设备。 -> **注意:测试的模块需要保证交互口不处于堵塞状态,否则测试将失败** +> **测试的模块需要保证交互口不处于堵塞状态,否则测试将失败**。 ![1692598668142](./media/1692598668142.jpg) @@ -41,7 +47,7 @@ github上进入FactoryTool项目最新的tag,可以下载可执行包( Factory **导入模块**:导入测试中用到的python库 -**测试函数**:自行编写测试函数,函数名可以自定义,但是需要是静态方法且无法传参,函数体内容根据测试需求自定义,函数需要有返回值,必须是bool值 +**测试函数**:自行编写测试函数,函数名可以自定义,但是需要是**静态方法**且无法传参,函数体内容根据测试需求自定义,函数需要有返回值,**必须是bool值** 测试脚本示例: @@ -76,12 +82,12 @@ class TestBase(object): ``` ## 配置文件 -配置文件为json文件,需要配置三维数据,分别为: 测项名称, 测项的方法名称, 测试方式(1为人工测试 0为自动测试) +配置文件为json文件,需要配置三维数据,分别为: 测试项名称, 测试函数的名称, 测试方式(1为人工测试 0为自动测试) 测试脚本示例: ```json -// 测项名称 function 测试方式: 1为人工测试 0为自动测试 +// 测试项名称 测试函数的名称 测试方式: 1为人工测试 0为自动测试 { "info": [["Memory test", "det_file_space", 1], ["Signal test", "det_signal", 0]] @@ -91,46 +97,46 @@ class TestBase(object): ## 测试原理 -产测工具利用python脚本的形式来测试QuecPython产品的业务功能,通过CDC口来执行测试脚本,测试脚本根据测试需求可以自行调整以达成完成生产测试的功能 +产测工具利用python脚本的形式来测试QuecPython产品的业务功能,通过 QuecPython 的命令交互口 REPL 来执行测试脚本,测试脚本根据测试需求可以自行调整以达成完成生产测试的功能。 -1. 通过QuecPython的API接口来获取模组参数和运行状态 -2. 通过访问正在运行的业务代码中的对象来获取业务运行情况 -3. 通过调用业务代码提供的接口才测试业务功能或者硬件功能 -4. 通过QuecPython API接口传输配置文件或者写入产品参数 +1. 通过QuecPython的API接口来获取模组参数和运行状态。 +2. 通过访问正在运行的业务代码中的对象来获取业务运行情况。 +3. 通过调用业务代码提供的接口来测试业务功能或者硬件功能。 +4. 通过QuecPython API接口传输配置文件或者写入产品参数。 ## 测试步骤 -**步骤一**:编辑测试文件和配置文件 +**步骤一**:编辑测试脚本和配置文件 -编辑测试**module_test.py**代码 和 配置文件**sort_setting.json**,测试代码和配置文件案例如上图所示 +编辑测试**module_test.py**代码 和 配置文件**sort_setting.json**,测试代码和配置文件案例如上图所示。 -**步骤二**:打开工具,选择测试文件和配置文件 +**步骤二**:打开工具,选择测试脚本和配置文件 -打开工具后,点击 **选择** 按钮,分别选择上一步编辑好的测试代码和配置文件,若有检测到串口,则该串口下会显示每一项测试名称以及测试方式 +打开工具后,点击 **选择** 按钮,分别选择上一步编辑好的测试代码和配置文件,若有检测到串口,则该串口下会显示每一项测试名称以及测试方式。 ![1692599729648](./media/1692599729648.jpg) **步骤三**:开始测试 -点击 **全部开始** 按钮: 开始测试所有已接入的模块 +- 点击 **全部开始** 按钮: 开始测试所有已接入的模块。 -点击 **开始** 按钮: 开始测试对应的那一个模块 +- 点击 **开始** 按钮: 开始测试对应的那一个模块。 -若是人工检测会弹窗提示是否成功,可人工点击 **是/否** 来确认该项结果 +若是人工检测会弹窗提示是否成功,可人工点击 **是/否** 来确认该项结果。 ![1692599919725](./media/1692599919725.jpg) **步骤四**:查看测试结果 可在测试结果栏位直接看到测试结果: -1. 通过: 绿色背景色,测试结果栏位标记: 通过 -2. 不通过: 红色背景色,测试结果栏位标记: 不通过 -3. 测试中: 黄色背景色,表示该测项正在检测中 +1. 通过: 绿色背景色,测试结果栏位标记: 通过。 +2. 不通过: 红色背景色,测试结果栏位标记: 不通过 。 +3. 测试中: 黄色背景色,表示该测试项正在检测中。 ![1692599801694](./media/1692599801694.jpg) **步骤五**:查看测试日志 -在工具同级目录下生成**Test-Result.xlsx**文件,包含测试项目内容以及测试结果日志 +在工具同级目录下生成**Test-Result.xlsx**文件,包含测试项目内容以及测试结果日志。 ## 测试结果 @@ -140,16 +146,17 @@ class TestBase(object): 该文件会保存在工具同级目录下,测试过程中自动追加 +## 产测工具二次开发 -## 如何拉取仓库 +### 如何拉取仓库 -若有二次开发需求,可直接拉取代码仓库 +若有二次开发需求,可直接拉取代码仓库。 ```shell git clone --recurse-submodules https://github.com/QuecPython/FactoryTool.git -b interventionable ``` -## 环境配置 +### 环境配置 **安装依赖库** diff --git a/media/download-page.jpg b/media/download-page.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cf39aacf78ca43aaaddbf28847244c94b66d3be GIT binary patch literal 14581 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 AWB>pF literal 0 HcmV?d00001 From 35493fb7a0b19e58fc5d90b5a0e145a41b59819e Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Thu, 31 Aug 2023 13:36:21 +0800 Subject: [PATCH 08/15] update readme --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b981f00..4d9674b 100644 --- a/README.md +++ b/README.md @@ -7,21 +7,30 @@ QuecPython 产测工具(下称产测工具)用于对基于 QuecPython 开发 产测工具的基础功能如下: 1. 加载测试脚本和配置文件 + a. 要求用户以单元测试函数为单位编写可运行在产品中的测试脚本。 + b. 用户可在配置文件中为每一项测试绑定测试信息,包括测试项名称、 测试函数名称、测试方式等。 + 2. 支持自动和人工两种测试方式 + a. 自动测试方式无需人工干预,按照配置文件中的顺序自动测试,并自动保存测试结果,直接遇到人工测试项。 + b. 人工测试在当前项测试结束时,会弹出窗口,以便测试人员手动确认测试结果;工具会保存手动确认的结果。 + 3. 支持测试明细展示和测试报告查看 + a. 主界面上会以不同的颜色展示每一项的测试结果。 + b. 完整的测试报告将会保存在工具的根目录,以便整体查看。 + 4. 支持 1 拖 4 测试。 ## 工具获取 [点此进入下载页面](https://github.com/QuecPython/FactoryTool/releases)获取产测工具 `FactoryTool.zip`。 -![download-page.png](./media/download-page.png) +![download-page.jpg](./media/download-page.jpg) ## 页面介绍 From bac4875e82b922cd139153f0363cf63a9a93c8bd Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Wed, 6 Sep 2023 13:56:04 +0800 Subject: [PATCH 09/15] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 4 ++++ media/quectel.ico | Bin 0 -> 41864 bytes serial_list.py | 11 ++++++----- 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 media/quectel.ico diff --git a/main.py b/main.py index bb61f63..7680dad 100644 --- a/main.py +++ b/main.py @@ -74,6 +74,10 @@ class FactoryFrame(wx.Frame): def __init__(self, *args, **kwargs): kwargs["style"] = kwargs.get("style", 0) | wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self, *args, **kwargs) + self.SetTitle("FactoryTool") + _icon = wx.NullIcon + _icon.CopyFromBitmap(wx.Bitmap(PROJECT_ABSOLUTE_PATH + "\\media\\quectel.ico", wx.BITMAP_TYPE_ICO)) + self.SetIcon(_icon) self.SetSize((1120, 650)) self.Center() # stdout log diff --git a/media/quectel.ico b/media/quectel.ico new file mode 100644 index 0000000000000000000000000000000000000000..a9b82f9ffd7c99ce0e3a2c3a1b5a0282f3f42580 GIT binary patch literal 41864 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 SjCi>lSr5K(&;Q?m=6?XY%p1V~ literal 0 HcmV?d00001 diff --git a/serial_list.py b/serial_list.py index 6037825..befae34 100644 --- a/serial_list.py +++ b/serial_list.py @@ -44,11 +44,12 @@ def run(self): else: if serial_list == [] or serial_list != self.serPort.comports(): serial_list = self.serPort.comports() - # serial_port = self.get_com_number("0x2C7C:0x6005", "x.8") - # serial_port.extend(self.get_com_number("0x2C7C:0x6005", "x.5")) - serial_port = self.get_com_number("0x2C7C:0x0901", "x.8") - serial_port.extend(self.get_com_number("0x2C7C:0x6002", "x.5")) - serial_port.extend(self.get_com_number("0x2C7C:0x6005", "x.5")) + serial_port = self.get_com_number("0x2C7C:0x0901", "x.8") # Unisoc + serial_port.extend(self.get_com_number("0x2C7C:0x6001", "x.5")) # N 系列 + serial_port.extend(self.get_com_number("0x2C7C:0x6002", "x.5")) # M 系列 + serial_port.extend(self.get_com_number("0x2C7C:0x6005", "x.5")) # A 系列 + serial_port.extend(self.get_com_number("0x2C7C:0x0700", "x.1")) # BG95 + serial_port.extend(self.get_com_number("0x2C7C:0x0903", "x.5")) # Eigen # print("设备列表为{}".format(serial_port)) pub.sendMessage('serialUpdate', arg1=serial_port) time.sleep(1) From e0757b5783a6f0e9dc18d1a6c14037493dad71a3 Mon Sep 17 00:00:00 2001 From: "zhen.guo" Date: Wed, 6 Dec 2023 15:16:14 +0800 Subject: [PATCH 10/15] =?UTF-8?q?1.=20excel=E5=A2=9E=E5=8A=A0Imei=E5=8F=B7?= =?UTF-8?q?=EF=BC=8C=E6=80=BB=E4=BD=93=E6=B5=8B=E8=AF=95=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E6=A0=87=E6=B3=A8=202.=20=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E5=89=8D=E4=B8=AD=E6=96=AD=E6=89=80=E6=9C=89=E8=BF=9B=E7=A8=8B?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E9=98=B2=E5=BD=B1=E5=93=8D=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=203.=20=E5=A2=9E=E5=8A=A0=E6=B5=8B=E9=A1=B9?= =?UTF-8?q?=E4=B9=8B=E9=97=B4=E8=87=AA=E5=AE=9A=E4=B9=89=E5=BB=B6=E6=97=B6?= =?UTF-8?q?=204.=20=E5=8F=AF=E9=85=8D=E7=BD=AE=E4=B8=8A=E7=94=B5=E5=90=8E?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=BC=80=E5=A7=8B=E6=B5=8B=E8=AF=95=205.=20?= =?UTF-8?q?=E9=AB=98=E7=BA=A7=E8=AE=BE=E7=BD=AE=20-=20=E6=B5=8B=E9=A1=B9?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E9=80=89=E6=8B=A9=206.=20=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E5=92=8C=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E7=9B=B8=E5=AF=B9=E8=B7=AF=E5=BE=84=207.=20=E6=8E=89?= =?UTF-8?q?=E7=94=B5=E5=90=8E=E6=A3=80=E6=B5=8B=E5=8F=A3=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E4=B8=8D=E5=8F=98=208.=20=E6=98=BE=E7=A4=BAImei=E5=8F=B7=209.?= =?UTF-8?q?=20=E5=8F=AF=E8=87=AA=E5=AE=9A=E4=B9=89=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E6=A3=80=E6=B5=8B=2010.=20=E5=A2=9E=E5=8A=A0=E9=87=8D?= =?UTF-8?q?=E5=90=AF=E8=87=AA=E5=AE=9A=E4=B9=89=2011.=20=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E6=97=B6=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=2012.=20=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=B5=8B=E9=A1=B9=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=A1=86=2013.=20imei=E5=8F=B7=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=8C=B9=E9=85=8D=E5=8A=9F=E8=83=BD=2014.=20=E6=B5=8B?= =?UTF-8?q?=E9=A1=B9=E5=8F=AF=E5=B8=A6=E5=8F=82=E6=95=B0=2015.=20=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=B5=8B=E9=A1=B9=E4=B8=AD=E7=9A=84=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E4=B8=8E=E6=B5=8B=E9=A1=B9=E7=BB=93=E6=9E=9C=2016.=20excel?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=B6=E9=97=B4=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 41 ++- file_handler.py | 12 +- locale/en/LC_MESSAGES/English.mo | Bin 1957 -> 2580 bytes locale/en/LC_MESSAGES/English.po | 44 +++ main.py | 614 +++++++++++++++++++++++++------ media/1692598668142.jpg | Bin 21283 -> 0 bytes media/1701828343176.jpg | Bin 0 -> 48632 bytes media/1701828550273.jpg | Bin 0 -> 58423 bytes media/quectel.png | Bin 0 -> 12991 bytes module_test.py | 2 +- serial_handler.py | 53 ++- sort_setting.json | 5 +- 12 files changed, 637 insertions(+), 134 deletions(-) delete mode 100644 media/1692598668142.jpg create mode 100644 media/1701828343176.jpg create mode 100644 media/1701828550273.jpg create mode 100644 media/quectel.png diff --git a/README.md b/README.md index 4d9674b..bf96d87 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,8 @@ QuecPython 产测工具(下称产测工具)用于对基于 QuecPython 开发 - **日志菜单** 用于查看测试日志文件和工具运行日志文件。 + - **设置菜单** 用于一些高级设置。 + - **加载区域**:包括加载测试脚本和配置文件 - **测试脚本**:测试函数的集合 - **配置文件**:为每一项测试绑定测试信息,包括测试项名称、 测试函数名称、测试方式等。 @@ -48,7 +50,32 @@ QuecPython 产测工具(下称产测工具)用于对基于 QuecPython 开发 > **测试的模块需要保证交互口不处于堵塞状态,否则测试将失败**。 -![1692598668142](./media/1692598668142.jpg) +![1692598668142](./media/1701828343176.jpg) + +## 设置菜单 - 高级设置 +![1692598668142](./media/1701828550273.jpg) + +高级设置项修改后,需点右下角 **确认** 才可生效 + +1. 自动开始测试 + + 勾选后,检测到交互口自行开始测试 + +2. 自动重启 + + 勾选后,测完模组自动重启 + +3. Imei号匹配 + + 勾选后会把Imei号和本地工具目录下 **imei.txt** 里的imei号匹配,若存在则通过,否则该项测试不通过。 + +4. 版本号检测 + + 勾选后会把软件的版本号(软件版本号获取方式可自行配置,默认用 **uos.uname()** 去获取)和配置的版本号进行匹配,若匹配上测该项测试通过,否则该项测试不通过。 + +5. 测项配置 + + 配置该项前需先选择json文件,可对json文件内所有测项进行选择,添加到右边的测项才会检测(默认是所有测项都会测试) ## 测试脚本 @@ -70,7 +97,7 @@ import utime class TestBase(object): # ------This area is for testing code------ @staticmethod - def det_signal(): + def det_signal(args): utime.sleep(2) if sim.getStatus() == 1: if net.getConfig()[0] == 5: @@ -96,13 +123,15 @@ class TestBase(object): 测试脚本示例: ```json -// 测试项名称 测试函数的名称 测试方式: 1为人工测试 0为自动测试 { - "info": [["Memory test", "det_file_space", 1], - ["Signal test", "det_signal", 0]] + // 测项名称 测项的function 延时时间 测试方式:0自动检测1人工检测 + "info": [["Memory test", "det_file_space()", 0, 0], + ["Signal test", "det_signal('test')", 0, 0]], + // 测项名称 该测项对应的提示信息 + "tips": {"Memory test": "Please press button 1"} } ``` - +若有配置tips,则在测试该项时,界面测项显示下面的文本框会显示该提示信息 ## 测试原理 diff --git a/file_handler.py b/file_handler.py index cec7c9d..247e405 100644 --- a/file_handler.py +++ b/file_handler.py @@ -8,6 +8,7 @@ """ import serial_handler import openpyxl +from openpyxl.styles import PatternFill, Color import codecs import json import sys @@ -30,7 +31,6 @@ def __init__(self, excel_file): self.wb = openpyxl.load_workbook(self.file) self.ws = self.wb[self.wb.sheetnames[0]] - def get_rows_columns(self): rows = self.ws.max_row columns = self.ws.max_column @@ -53,9 +53,17 @@ def get_row_values(self, row): rows_data.append(self.ws.cell(row=row, column=i).value) return rows_data - def set_cell_value(self, row, column, cell_value): + def set_cell_value(self, row, column, cell_value, fill=None): try: self.ws.cell(row=row, column=column).value = cell_value + if fill == "Green": + fill = PatternFill('solid', fgColor=Color("00FF00")) + self.ws.cell(row=row, column=column).fill = fill + elif fill == "Red": + fill = PatternFill('solid', fgColor=Color("FF0000")) + self.ws.cell(row=row, column=column).fill = fill + else: + pass except KeyError as e: self.ws.cell(row=row, column=column).value = "Write Fail" print(e) diff --git a/locale/en/LC_MESSAGES/English.mo b/locale/en/LC_MESSAGES/English.mo index c206697a340155cd9983ffe7f556041169fff27c..b90f2751e2c6c3a81cc8012b89aa03e1a9010955 100644 GIT binary patch literal 2580 zcmZ9MYitx%6vwYTR8}hpzQ6}p1Yc#BZ3_k#O)PzoOGM$p#SMYf z$AwB?20jXXx#DV&`msUjo0MJ!{)6@H;CkXijJ*hc2|fe1fe6J;f)wWrNd2Ayp9e34 z3&6Q>PJPP*$!7IK2DYz8tpM#Hp-+&b7 zFi3G*K#J1`;$maCJq`W@QvNqV>d$S(IS5AUc_7&>0nq}M58`5lxRL#vAmy_eq_|Ze z9pxP$*?*v(*MKXb+v@pOAmz6kTmtSV0odu5SL?UI@^&QJ=WKHF*h-Koj3L5hB|JZI?#Eysh0&7M_Y!PgQp`0 zW1KVIdU5pnz@^DP&f+B{@lqDAEQ_;vy)cgt4DKJe#2QlRzkiq>9~-~XaUgwd!cC<4ym}@}}?I(KAv18{m?ZdxK z_OZ@=ZQoK92tDWJt6lBmM{=FxeeWiPo=Ew1j?H=x<}$2*Z|_xU(7$&o5QZ-Io@GPR zquJ9<6F13;Og-B)dWU5Xwf4%lvWHGLG3qeOp6J{sE0<1&d)n?YnE~~?Yw}oncr-mC z9h|(D8E3M5Qd_&yS0>Ie3L$S4r+c8KM=G=n@|~%P_V1;05-6~&iImA72XC>2>wF}1 zKO8s0+l1?xjveEnL{)f;*lCg$F4cSy#21bJng&ZV?TuWo z(_ByZZ|Myiir%4!E8TewKn2yaToctfgI_~b0okm3cA zb)oHHWk5M59ATI~FN#DX1)*8TJz)vW6I^%f8q=-kew{!A_8mE7xmoq+D1fUrfD z#bl0_gV>a8wOKEuB(uRvIF5SQHdE~46)@r@s#ed}{3NP$g=VDaBPwx{wr@DQaC}(8 zaeY>7?9^->4cm&nfIE+sYdQ`|ic=(3?KoE8lD{V`-Kj^n9X{*J+UjfYQt22;OGv|6 zVhOg&WopAbVW9~@_iL!^5{hdv>3|nokOB)0A`TqwF00h+q-F)FP+_Go@dYepuB_DI zDJRKyX|$~l9RXyH46#2J&ODcKiVcI&pFJ2#^76Z*K7z@ oxy+$9*p=d>?_m4UCfSuBXCL9vF|GvPK5dZ)H delta 1045 zcmY+?Ur19?90%~9b)8$SoTgb>c1So_cwon{ovfs{hf2}J?H%HyHj1BGh!JgS7O`)`MCyMc%dfI3weXPC2te` zP@x#n37K%J*nty4-g!jwKIle%S?q_rz->4S2jNZ@WvPdsAy>$O(_o0)a2>3Wd_sRHGxElQfkQaOedBaa+JOgWx=OJ(G6XXMa zg)zSQEfZ!TFI0n7mcn|7D${1z2)&RO=!7d^m*hdnCAP#%a5?e;h~MeIKv(hE^>7u| zFMeB|JRfW3Z$vIB|BD;YYSF6DxSYHp4*vGMDGoji2mgQ##k;u+SCxNmJ{-WwD;W~N5pjQ&jCPy8tS zvcD-IAzb?UEsD2F5!JuupHrY2^ GhyDR4%9#TI diff --git a/locale/en/LC_MESSAGES/English.po b/locale/en/LC_MESSAGES/English.po index e4f539e..484e48d 100644 --- a/locale/en/LC_MESSAGES/English.po +++ b/locale/en/LC_MESSAGES/English.po @@ -122,3 +122,47 @@ msgstr "Do you want to restore the last file" msgid "ļ" msgstr "File does not exist" +msgid "Imeiƥ" +msgstr "Imei matching" + +msgid "Զ" +msgstr "Automatic restart" + +msgid "汾ż" +msgstr "Version detection" + +msgid "汾: " +msgstr "Version: " + +msgid "Զʼ" +msgstr "Start testing automatically" + +msgid "" +msgstr "Add" + +msgid "ɾ" +msgstr "Delete" + +msgid "" +msgstr "Clear" + +msgid "ȫѡ" +msgstr "Select all" + +msgid "ȷ" +msgstr "Confirm" + +msgid "ȡ" +msgstr "Cancel" + +msgid " " +msgstr " Test item configuration" + +msgid "" +msgstr "Setting" + +msgid "߼" +msgstr "Advanced Settings" + +msgid "ʱ: " +msgstr "Countdown: " \ No newline at end of file diff --git a/main.py b/main.py index 7680dad..2aa75e8 100644 --- a/main.py +++ b/main.py @@ -21,6 +21,7 @@ import serial_list import serial_handler import configparser +from wx import stc from log_redirect import RedirectErr, RedirectStd from pubsub import pub from queue import Queue @@ -47,14 +48,22 @@ def set_config(PROJECT_ABSOLUTE_PATH, frame): if msg == wx.YES: if py_file: if os.path.exists(py_file): - frame.text_ctrl_py.SetValue(py_file) + try: + relative_path = os.path.relpath(py_file, PROJECT_ABSOLUTE_PATH) + frame.text_ctrl_py.SetValue(relative_path) + except Exception as e: + frame.text_ctrl_py.SetValue(py_file) else: conf.set("software", "py_file", "") wx.MessageBox(py_file + _(u"文件不存在"), _(u"提示"), wx.YES_DEFAULT | wx.ICON_INFORMATION) if json_file: - if os.path.exists(py_file): - frame.text_ctrl_json.SetValue(json_file) + if os.path.exists(json_file): + try: + relative_path = os.path.relpath(json_file, PROJECT_ABSOLUTE_PATH) + frame.text_ctrl_json.SetValue(relative_path) + except Exception as e: + frame.text_ctrl_json.SetValue(json_file) frame.load_json_file(0, json_file) else: conf.set("software", "json_file", "") @@ -70,6 +79,219 @@ def set_config(PROJECT_ABSOLUTE_PATH, frame): conf.write(f) +class AdvancedSettings(wx.Dialog): + # automated, self.testMessages, selectedList + def __init__(self, parent, automated, selectedList, json_file): + super(AdvancedSettings, self).__init__(parent, title="Advanced Settings", size=(350, 200)) + self.SetSize(wx.DLG_UNIT(self, wx.Size(400, 280))) + + if json_file: + with codecs.open(json_file, 'r', 'utf-8') as f: + data = json.load(f) + info = data["info"] + self.funcList = [i[0] for i in info] + else: + self.funcList = [] + + # self.funcList = funcList + self.parent = parent + self.add_partition_box = wx.CheckBox(self, 100, _(u"自动开始测试")) + if automated == "True": + self.add_partition_box.SetValue(True) + else: + self.add_partition_box.SetValue(False) + + self.restart_box = wx.CheckBox(self, 107, _(u"自动重启")) + if restartSign == "True": + self.restart_box.SetValue(True) + else: + self.restart_box.SetValue(False) + + self.imei_box = wx.CheckBox(self, wx.ID_ANY, _(u"Imei号匹配")) + if self.parent.conf.get("detection", "imei") == "True": + self.imei_box.SetValue(True) + else: + self.imei_box.SetValue(False) + + self.version_box = wx.CheckBox(self, 106, _(u"版本号检测")) + self.label_1 = wx.StaticText(self, wx.ID_ANY, _(u"cmd: ")) + self.cmd_txt = wx.TextCtrl(self, wx.ID_ANY, self.parent.conf.get("version", "cmd")) + self.label_2 = wx.StaticText(self, wx.ID_ANY, _(u"版本号: ")) + self.version_txt = wx.TextCtrl(self, wx.ID_ANY, self.parent.conf.get("version", "version")) + if versionDetection == "True": + self.version_box.SetValue(True) + else: + self.version_box.SetValue(False) + + self.funcSelector = wx.Choice(self, wx.ID_ANY, choices=self.funcList) + self.selectedListBox = wx.ListBox(self, wx.ID_ANY, choices=selectedList) + self.add = wx.Button(self, 101, _(u"添加")) + self.delete = wx.Button(self, 102, _(u"删除")) + self.clear = wx.Button(self, 103, _(u"清空")) + self.selectAll = wx.Button(self, 104, _(u"全选")) + self.confirm = wx.Button(self, 105, _(u"确认")) + self.buttonFotaCancel = wx.Button(self, wx.ID_CANCEL, _(u"取消")) + + # self.Bind(wx.EVT_CHECKBOX, self.key_processing, self.add_partition_box) + # self.Bind(wx.EVT_CHECKBOX, self.key_processing, self.version_box) + self.Bind(wx.EVT_BUTTON, self.key_processing, self.add) + self.Bind(wx.EVT_BUTTON, self.key_processing, self.delete) + self.Bind(wx.EVT_BUTTON, self.key_processing, self.clear) + self.Bind(wx.EVT_BUTTON, self.key_processing, self.selectAll) + self.Bind(wx.EVT_BUTTON, self.key_processing, self.confirm) + + self.__set_properties() + self.__do_layout() + self.Center() + + def __set_properties(self): + self.funcSelector.SetMinSize((150, 25)) + self.selectedListBox.SetMinSize((150, 300)) + + # self.label_1.SetMinSize((50, 25)) + self.cmd_txt.SetMinSize((200, 20)) + # self.label_1.SetMinSize((50, 25)) + self.version_txt.SetMinSize((200, 20)) + + def __do_layout(self): + sizer_1 = wx.BoxSizer(wx.VERTICAL) + sizer_2 = wx.BoxSizer(wx.VERTICAL) + sizer_3 = wx.BoxSizer(wx.HORIZONTAL) + sizer_4 = wx.BoxSizer(wx.HORIZONTAL) + sizer_3_ = wx.BoxSizer(wx.HORIZONTAL) + sizer_3_1 = wx.BoxSizer(wx.HORIZONTAL) + + + sizer_3.Add((20, 0), 0, 0, 0) + sizer_3.Add(self.add_partition_box, 0, 0, 0) + + sizer_3_.Add((20, 0), 0, 0, 0) + sizer_3_.Add(self.restart_box, 0, 0, 0) + + sizer_3_1.Add((20, 0), 0, 0, 0) + sizer_3_1.Add(self.imei_box, 0, 0, 0) + + sizer_4.Add((20, 0), 0, 0, 0) + sizer_4.Add(self.version_box, 0, 0, 0) + sizer_4.Add((20, 0), 0, 0, 0) + sizer_4.Add(self.label_1, 0, 0, 0) + sizer_4.Add(self.cmd_txt, 0, 0, 0) + sizer_4.Add((20, 0), 0, 0, 0) + sizer_4.Add(self.label_2, 0, 0, 0) + sizer_4.Add(self.version_txt, 0, 0, 0) + + sizer_box_1 = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, _(u" 测项配置 ")), wx.HORIZONTAL) + + + sizer_2.Add(self.add, 0, 0, 0) + sizer_2.Add((0, 20), 0, 0, 0) + sizer_2.Add(self.delete, 0, 0, 0) + sizer_2.Add((0, 20), 0, 0, 0) + sizer_2.Add(self.clear, 0, 0, 0) + sizer_2.Add((0, 20), 0, 0, 0) + sizer_2.Add(self.selectAll, 0, 0, 0) + # sizer_2.Add((0, 20), 0, 0, 0) + # sizer_2.Add(self.confirm, 0, 0, 0) + + sizer_box_1.Add(self.funcSelector, 0, 0, 0) + sizer_box_1.Add((20, 0), 0, 0, 0) + sizer_box_1.Add(sizer_2, 0, 0, 0) + sizer_box_1.Add((20, 0), 0, 0, 0) + sizer_box_1.Add(self.selectedListBox, 0, 0, 0) + + sizer_1.Add((0, 10), 0, 0, 0) + sizer_1.Add(sizer_3, 0, 0, 0) + sizer_1.Add((0, 20), 0, 0, 0) + sizer_1.Add(sizer_3_, 0, 0, 0) + sizer_1.Add((0, 20), 0, 0, 0) + sizer_1.Add(sizer_3_1, 0, 0, 0) + sizer_1.Add((0, 20), 0, 0, 0) + sizer_1.Add(sizer_4, 0, 0, 0) + sizer_1.Add((0, 20), 0, 0, 0) + sizer_1.Add(sizer_box_1, 0, 0, 0) + + sizer_5 = wx.BoxSizer(wx.HORIZONTAL) + sizer_5.Add(self.confirm, 0, 0, 0) + sizer_5.Add(self.buttonFotaCancel, 0, wx.LEFT, 10) + sizer_1.Add((0, 10), 0, 0, 0) + sizer_1.Add(sizer_5, 0, wx.ALIGN_RIGHT | wx.ALL, 5) + self.SetSizer(sizer_1) + + def key_processing(self, event): + + if event.GetId() == 101: + funcName = self.funcSelector.GetString(self.funcSelector.GetSelection()) + + if funcName and self.selectedListBox.FindString(funcName, caseSensitive = True) == -1: + self.selectedListBox.Append(funcName) + + elif event.GetId() == 102: + deleted_item = self.selectedListBox.GetSelection() + if deleted_item != -1: + projectName = self.selectedListBox.GetString(deleted_item) + print(projectName) + self.selectedListBox.Delete(deleted_item) + + elif event.GetId() == 103: + self.selectedListBox.Clear() + + elif event.GetId() == 104: + self.selectedListBox.Clear() + for x in self.funcList: + self.selectedListBox.Append(x) + + elif event.GetId() == 105: + global selectedList, automated, versionDetection, restartSign + + # 自动开始测试配置 + if self.add_partition_box.GetValue(): + automated = "True" + else: + automated = "False" + + self.parent.conf.set("detection", "automated", automated) + + # 自动重启配置 + if self.restart_box.GetValue(): + restartSign = "True" + else: + restartSign = "False" + + self.parent.conf.set("detection", "restart", restartSign) + + # Imei号匹配配置 + if self.imei_box.GetValue(): + imei = "True" + else: + imei = "False" + + self.parent.conf.set("detection", "imei", imei) + + # 版本号测试配置 + if self.version_box.GetValue(): + versionDetection = "True" + else: + versionDetection = "False" + self.parent.conf.set("version", "ifdetect", versionDetection) + self.parent.conf.set("version", "cmd", self.cmd_txt.GetValue()) + self.parent.conf.set("version", "version", self.version_txt.GetValue()) + + # 测项配置 + selectedList = [] + for i in range(self.selectedListBox.GetCount()): + projectName = self.selectedListBox.GetString(i) + selectedList.append(projectName) + + self.parent.conf.set("detection", "item", ",".join(selectedList)) + with open(PROJECT_ABSOLUTE_PATH + "\\config.ini", "w+", encoding='utf-8') as f: + self.parent.conf.write(f) + + json_file = self.parent.text_ctrl_json.GetValue() + if json_file: + self.parent.load_json_file(0, json_file) + self.Destroy() + + class FactoryFrame(wx.Frame): def __init__(self, *args, **kwargs): kwargs["style"] = kwargs.get("style", 0) | wx.DEFAULT_FRAME_STYLE @@ -78,7 +300,7 @@ def __init__(self, *args, **kwargs): _icon = wx.NullIcon _icon.CopyFromBitmap(wx.Bitmap(PROJECT_ABSOLUTE_PATH + "\\media\\quectel.ico", wx.BITMAP_TYPE_ICO)) self.SetIcon(_icon) - self.SetSize((1120, 650)) + self.SetSize((1120, 700)) self.Center() # stdout log sys.stderr = RedirectErr(self, PROJECT_ABSOLUTE_PATH) @@ -103,6 +325,13 @@ def __init__(self, *args, **kwargs): wxg_tmp_menu_1.Append(2002, _(u"模块日志"), "") self.Bind(wx.EVT_MENU, self.__menu_handler, id=2002) self.menuBar.Append(wxg_tmp_menu_1, _(u"日志")) + + + wxg_tmp_menu_2 = wx.Menu() + wxg_tmp_menu_2.Append(3001, _(u"高级设置"), "") + self.Bind(wx.EVT_MENU, self.__menu_handler, id=3001) + self.menuBar.Append(wxg_tmp_menu_2, _(u"设置")) + self.SetMenuBar(self.menuBar) # Menu Bar end # self.statusBar = self.CreateStatusBar(3) @@ -117,8 +346,8 @@ def __init__(self, *args, **kwargs): self.button_start_list = [] self.ListCtrl_list = [] self.port_ctrl_list = [] - self.port_imei_list = [] - self.port_iccid_list = [] + self.Imei_ctrl_list = [] + self.tips_ctrl_list = [] for i in range(4): ListCtrl = wx.ListCtrl(self.main_panel, 200+i, style=wx.LC_HRULES | wx.LC_REPORT | wx.LC_SINGLE_SEL | wx.LC_VRULES) ListCtrl.SetMinSize((-1, 250)) @@ -126,16 +355,19 @@ def __init__(self, *args, **kwargs): ListCtrl.AppendColumn(_(u"测试方式"), format=wx.LIST_FORMAT_LEFT, width=70) ListCtrl.AppendColumn(_(u"测试结果"), format=wx.LIST_FORMAT_LEFT, width=70) + tips_ctrl = wx.TextCtrl(self.main_panel, wx.ID_ANY, style=wx.TE_MULTILINE|wx.TE_WORDWRAP|wx.TE_READONLY|wx.TE_RICH2) button = wx.Button(self.main_panel, 100+i, _("开始")) + button.Enable(False) text_ctrl = wx.TextCtrl(self.main_panel, 300+i, "", style=wx.TE_READONLY) - # text_ctrl_imei = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) - # text_ctrl_iccid = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) + text_ctrl_imei = wx.TextCtrl(self.main_panel, wx.ID_ANY, "", style=wx.TE_READONLY) + + # tips_ctrl.AppendText("请按键") self.ListCtrl_list.append(ListCtrl) self.button_start_list.append(button) self.port_ctrl_list.append(text_ctrl) - # self.port_imei_list.append(text_ctrl_imei) - # self.port_iccid_list.append(text_ctrl_iccid) + self.Imei_ctrl_list.append(text_ctrl_imei) + self.tips_ctrl_list.append(tips_ctrl) self.__exec_py_cmd_list = ["from usr.test import TestBase"] self.__init_excel() @@ -143,6 +375,7 @@ def __init__(self, *args, **kwargs): # event message queue self.message_queue = Queue(maxsize=10) self._channel_list = [] + self.testMessages = [] threading.Thread(target=self.port_process_handler, args=()).start() # bind Func @@ -165,12 +398,22 @@ def __init__(self, *args, **kwargs): self.initConfigFile() self.conf.read(PROJECT_ABSOLUTE_PATH+"\\config.ini", encoding='utf-8') + global automated, selectedList, versionDetection, restartSign + automated = self.conf.get("detection", "automated") + restartSign = self.conf.get("detection", "restart") + selectedList = [i for i in self.conf.get("detection", "item").split(",") if i != ""] + versionDetection = self.conf.get("version", "ifdetect") + self.__set_properties() self.__do_layout() def __set_properties(self): for i in range(4): self.button_start_list[i].SetMinSize((150, 50)) + self.port_ctrl_list[i].SetMinSize((80, 25)) + self.Imei_ctrl_list[i].SetMinSize((190, 25)) + self.tips_ctrl_list[i].SetMinSize((250, 100)) + self.button_all_start.SetMinSize((150, 50)) def __do_layout(self): @@ -198,14 +441,19 @@ def __do_layout(self): for i in range(4): sizer_6 = wx.BoxSizer(wx.VERTICAL) - sizer_6.Add(self.port_ctrl_list[i], 0, 0, 1) + sizer_7 = wx.BoxSizer(wx.HORIZONTAL) + sizer_7.Add(self.port_ctrl_list[i], 0, 0, 1) + sizer_7.Add(self.Imei_ctrl_list[i], 0, 0, 1) + sizer_6.Add(sizer_7, 0, 0, 1) sizer_6.Add(self.ListCtrl_list[i], 1, 1, 1) sizer_6.Add((0, 10), 0, 0, 0) + sizer_6.Add(self.tips_ctrl_list[i], 0, 1, 0) + sizer_6.Add((0, 10), 0, 0, 0) sizer_6.Add(self.button_start_list[i], 0, 1, 0) sizer_5.Add(sizer_6, 1, 0, 0) sizer_2.Add(sizer_5, 0, wx.EXPAND, 0) - sizer_2.Add((0, 30), 0, 1, 1) + sizer_2.Add((0, 10), 0, 1, 1) sizer_2.Add(self.button_all_start, 0, 1, 1) self.main_panel.SetSizer(sizer_2) @@ -231,12 +479,24 @@ def __menu_handler(self, event): # wxGlade: FactoryFrame. p = subprocess.Popen("explorer.exe " + PROJECT_ABSOLUTE_PATH + "\\logs\\software\\", shell=True) elif event.GetId() == 2002: p = subprocess.Popen("explorer.exe " + PROJECT_ABSOLUTE_PATH + "\\logs\\apps\\", shell=True) + elif event.GetId() == 3001: + global automated, selectedList + AdvancedSettings(self, automated, selectedList, self.text_ctrl_json.GetValue()).ShowModal() event.Skip() def initConfigFile(self): self.conf.add_section("software") self.conf.set("software", "py_file", "") self.conf.set("software", "json_file", "") + self.conf.add_section("detection") + self.conf.set("detection", "automated", "False") + self.conf.set("detection", "item", "") + self.conf.set("detection", "restart", "False") + self.conf.set("detection", "imei", "False") + self.conf.add_section("version") + self.conf.set("version", "ifdetect", "False") + self.conf.set("version", "cmd", "import uos\\r\\nuos.uname()") + self.conf.set("version", "version", "") with open(PROJECT_ABSOLUTE_PATH + "\\config.ini", "w+", encoding='utf-8') as f: self.conf.write(f) @@ -248,7 +508,12 @@ def __load_py_file(self, event): return py_cmd = file_handler.ScriptHandler(dlg.GetPath()) if py_cmd.script_check(): - self.text_ctrl_py.SetValue(dlg.GetPath()) + try: + relative_path = os.path.relpath(dlg.GetPath(), PROJECT_ABSOLUTE_PATH) + self.text_ctrl_py.SetValue(relative_path) + except Exception as e: + self.text_ctrl_py.SetValue(dlg.GetPath()) + self.conf.set("software", "py_file", dlg.GetPath()) with open(PROJECT_ABSOLUTE_PATH + "\\config.ini", "w+", encoding='utf-8') as f: self.conf.write(f) @@ -269,9 +534,31 @@ def load_json_file(self, event, json_file=None): data = json.load(f) print(data) info = data["info"] + if selectedList: + info = [i for i in info if i[0] in selectedList] self.testFunctions = [i[1:] for i in info] self.testMessages = [i[0] for i in info] - self.text_ctrl_json.SetValue(json_file) + self.tips_info = {} + try: + self.tips_info = data["tips"] + except Exception as e: + print("523 e: ", e) + + print("versionDetection: ", versionDetection) + if versionDetection == "True": + self.testFunctions.append([self.conf.get("version", "cmd"), 0, 0]) + self.testMessages.append(_("版本号检测")) + + if self.conf.get("detection", "imei") == "True": + self.testFunctions.append(["Imei号匹配", 0, 0]) + self.testMessages.append(_("Imei号匹配")) + + try: + relative_path = os.path.relpath(json_file, PROJECT_ABSOLUTE_PATH) + self.text_ctrl_json.SetValue(relative_path) + except Exception as e: + self.text_ctrl_json.SetValue(json_file) + self.conf.set("software", "json_file", json_file) with open(PROJECT_ABSOLUTE_PATH + "\\config.ini", "w+", encoding='utf-8') as f: self.conf.write(f) @@ -279,22 +566,30 @@ def load_json_file(self, event, json_file=None): for i, port_ctrl in enumerate(self.port_ctrl_list): if port_ctrl.GetValue(): self.ListCtrl_list[i].DeleteAllItems() + self.Imei_ctrl_list[i].SetValue("") + self.tips_ctrl_list[i].SetValue("") for j, element in enumerate(self.testFunctions): ListCtrl = self.ListCtrl_list[i] # testFunction = self.testFunctions[j] ListCtrl.InsertItem(j, j) ListCtrl.SetItem(j, 0, self.testMessages[j]) - if element[1] == 1: + if element[-1] == 1: ListCtrl.SetItem(j, 1, _(u"人工检测")) else: ListCtrl.SetItem(j, 1, _(u"自动检测")) + if automated == "True": + self.test_all_start(0) + except Exception as e: - print(e) + print("line 292: ", e) wx.MessageBox(_(u'请选择正确的配置文件'), u'提示', wx.YES_DEFAULT | wx.ICON_INFORMATION) return def test_start(self, event): - button_event_id = event.GetId() - 100 # button ID 100开始 + if isinstance(event, int): + button_event_id = event - 100 + else: + button_event_id = event.GetId() - 100 # button ID 100开始 if self.text_ctrl_json.GetValue(): pass @@ -305,11 +600,10 @@ def test_start(self, event): if self.text_ctrl_py.GetValue(): if self.port_ctrl_list[button_event_id].GetValue(): # 点击开始时再初始化 - self.__port_det(True) # 检测停止 - + # self.__port_det(True) # 检测停止 self.procese_num += 1 - self.button_all_start.Enable(False) self.button_start_list[button_event_id].Enable(False) + self.button_all_start.Enable(False) self.message_queue.put( {"id": button_event_id, "msg_id": "PortInit", "PortInfo": self.port_ctrl_list[button_event_id].GetValue()}) else: @@ -318,7 +612,7 @@ def test_start(self, event): wx.MessageBox(_(u'请先选择测试文件'), u'提示', wx.YES_DEFAULT | wx.ICON_INFORMATION) def test_all_start(self, event): - self.__port_det(True) # 检测停止 + # self.__port_det(True) # 检测停止 if self.text_ctrl_json.GetValue(): pass @@ -348,39 +642,64 @@ def port_update(self, arg1): print("message:{}".format(arg1)) self.message_queue.put({"msg_id": "PortUpdate", "PortInfo": arg1}) + def automated_start(self): + if self.text_ctrl_json.GetValue(): + test_all_start(1) + def port_update_handler(self, arg1): + # arg1: {'msg_id': 'PortUpdate', 'PortInfo': ['COM15']} + # print("message: ", arg1) # TODO 设置log按钮状态 port_list = arg1["PortInfo"][:4] if len(arg1["PortInfo"]) > 4 else arg1["PortInfo"] - if len(port_list) < 4: + + if self._channel_list == []: self.button_all_start.Enable(False) if len(port_list) == 0 else self.button_all_start.Enable(True) - port_list = port_list + [""] * (4 - len(port_list)) + if len(port_list) == 0: + self.button_all_start.Enable(False) + if self._channel_list == [] or self._channel_list != port_list: self._channel_list = port_list - for port_ctrl in self.port_ctrl_list: - port_ctrl.SetValue("") - for ListCtrl in self.ListCtrl_list: - ListCtrl.DeleteAllItems() - - for i, element in enumerate(self.button_start_list): - if self._channel_list[i]: - self.port_ctrl_list[i].SetValue(self._channel_list[i]) - self.button_start_list[i].Enable(True) + exists_port = [] + for i, port_ctrl in enumerate(self.port_ctrl_list): + if port_ctrl.GetValue() and port_ctrl.GetValue() not in self._channel_list: + port_ctrl.SetValue("") + self.Imei_ctrl_list[i].SetValue("") + self.tips_ctrl_list[i].SetValue("") + self.ListCtrl_list[i].DeleteAllItems() + self.button_start_list[i].Enable(False) + elif port_ctrl.GetValue() and port_ctrl.GetValue() in self._channel_list: + exists_port.append(port_ctrl.GetValue()) + + new_ports = [x for x in self._channel_list if x not in exists_port] + for new_port in new_ports: + for port_ctrl in self.port_ctrl_list: + if port_ctrl.GetValue() == "": + port_ctrl.SetValue(new_port) + break + + for i, port_ctrl in enumerate(self.port_ctrl_list): + if port_ctrl.GetValue() and port_ctrl.GetValue() in new_ports: + self.button_start_list[i].Enable(True) if self.text_ctrl_json.GetValue(): for j, element in enumerate(self.testFunctions): ListCtrl = self.ListCtrl_list[i] # testFunction = self.testFunctions[j] ListCtrl.InsertItem(j, j) ListCtrl.SetItem(j, 0, self.testMessages[j]) - if element[1] == 1: + if element[-1] == 1: ListCtrl.SetItem(j, 1, _(u"人工检测")) else: ListCtrl.SetItem(j, 1, _(u"自动检测")) - else: - self.button_start_list[i].Enable(False) + print("automated: ", automated) + if automated == "True": + self.test_start(100+i) + def port_init_handler(self, arg1): ID = arg1["id"] + # print(ID) + self.tips_ctrl_list[ID].SetValue("") for i in range(len(self.testFunctions)): ListCtrl = self.ListCtrl_list[ID] ListCtrl.SetItem(i, 2, "") @@ -395,14 +714,16 @@ def port_init_handler(self, arg1): "script": self.__py_test_fp}) def port_test_handler(self, arg1): - print("start test") + print("start test", arg1["PortInfo"]) ID = arg1["id"] + self.ListCtrl_list[ID].SetItem(0, 2, _(u"测试中")) + self.ListCtrl_list[ID].SetItemBackgroundColour(0, "Yellow") try: ser = serial_handler.SerialHandler(arg1["PortInfo"]) ser.write_module(arg1["script"], self.__exec_py_cmd_list) # 写入脚本开始测试 ser.ret_result() except Exception as e: - print(arg1["PortInfo"], e) + print("line 406: ", arg1["PortInfo"], e) wx.MessageBox(arg1["PortInfo"]+"串口异常,测试脚本写入失败, error %s"%str(e), u'Error', wx.YES_DEFAULT | wx.ICON_INFORMATION) self.message_queue.put({"id": arg1["id"], "msg_id": "PortTestEnd", "result": 1}) self.button_start_list[arg1["id"]].Enable(True) @@ -411,84 +732,126 @@ def port_test_handler(self, arg1): self.button_all_start.Enable(True) return - ret_result = [] - log = "" - length = len(self.testFunctions) - for i, testFunction in enumerate(self.testFunctions): - try: - self.ListCtrl_list[ID].SetItem(i, 2, _(u"测试中")) - self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Yellow") - - message = self.testMessages[i] - - cmd = "TestBase." + testFunction[0] + "()" - ser.exec_cmd(cmd) - - test_result = ser.ret_result() # get recv list - self.logger.write_file(arg1["PortInfo"], test_result) + try: + imei = ser.getImei() + print("imei: ", imei) + if imei: + self.Imei_ctrl_list[ID].SetValue(imei) + + ret_result = [] + log = "" + length = len(self.testFunctions) + all_result = "" + for i, testFunction in enumerate(self.testFunctions): + try: + self.ListCtrl_list[ID].SetItem(i, 2, _(u"测试中")) + self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Yellow") + + message = self.testMessages[i] + if message == _("版本号检测"): + ser.exec_cmd(testFunction[0].replace("\\r\\n", "\r\n")) + test_result = ser.ret_result() + all_result += test_result + print("test_result: ", test_result) + version = self.conf.get("version", "version") + print("version: ", version) + if version in test_result: + boolean = ["True"] + else: + boolean = ["False"] + + elif message == _("Imei号匹配"): + print(os.path.exists(os.path.join(PROJECT_ABSOLUTE_PATH, "imei.txt"))) + if os.path.exists(os.path.join(PROJECT_ABSOLUTE_PATH, "imei.txt")): + f = open(os.path.join(PROJECT_ABSOLUTE_PATH, "imei.txt")) + cont = f.read() + f.close() + print(imei.replace("'","").replace('"',"")) + if imei.replace("'","").replace('"',"") in cont: + boolean = ["True"] + else: + boolean = ["False"] + else: + boolean = ["False"] + else: + cmd = "TestBase." + testFunction[0] + ser.exec_cmd(cmd) - boolean = test_result.split("\r\n") + if self.tips_info.get(message): + test_result = ser.ret_result(self.tips_ctrl_list[ID], self.tips_info.get(message)) + else: + test_result = ser.ret_result() # get recv list + all_result += test_result + print("test_result: ", test_result) + self.logger.write_file(arg1["PortInfo"], test_result) + + boolean = test_result.split("\r\n") + print("boolean: ", boolean) + if boolean[-2] == "False": + boolean = ["False"] + else: + if boolean[-2] == "True": + boolean = ["True"] + elif boolean[-2] == cmd: + boolean = ["True"] + else: + boolean = ["False"] - if boolean[-2] == "False": + except Exception as e: + print("line 445: ", e) boolean = ["False"] - else: - if boolean[-2] == "True": - boolean = ["True"] - elif boolean[-2] == cmd: + + if testFunction[-1] == 1: + dlg = wx.MessageBox(_(u" 当前测试项为: ") + message + _(u"\r\n\r\n 请确认该测试项 【是否通过】"), self.port_ctrl_list[ID].GetValue(), wx.YES_NO) + if dlg == wx.YES: boolean = ["True"] else: boolean = ["False"] - except Exception as e: - print(e) - boolean = ["False"] - - if testFunction[1] == 1: - dlg = wx.MessageBox(_(u" 当前测试项为: ") + message + _(u"\r\n\r\n 请确认该测试项 【是否通过】"), self.port_ctrl_list[ID].GetValue(), wx.YES_NO) - if dlg == wx.YES: - boolean = ["True"] + if boolean == ["False"]: + self.ListCtrl_list[ID].SetItem(i, 2, _(u"不通过")) + self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Red") else: - boolean = ["False"] + self.ListCtrl_list[ID].SetItem(i, 2, _(u"通过")) + self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Green") - if boolean == ["False"]: - self.ListCtrl_list[ID].SetItem(i, 2, _(u"不通过")) - self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Red") - else: - self.ListCtrl_list[ID].SetItem(i, 2, _(u"通过")) - self.ListCtrl_list[ID].SetItemBackgroundColour(i, "Green") + if len(testFunction) == 3 and (isinstance(testFunction[1], int) or isinstance(testFunction[1], float)) and testFunction[1] > 0: + time.sleep(testFunction[1]) - ret_result += boolean + ret_result += boolean - test_results = [] - for i in ret_result: - if i == "True": - test_results.append(_(u"通过")) - elif i == "False": - test_results.append(_(u"不通过")) - else: - test_results.append(i) + print("all_result: ", all_result) + self.tips_ctrl_list[ID].SetValue(all_result) + except Exception as e: + print("i: ", i) + print("line 464: ", arg1["PortInfo"], e) + wx.MessageBox(arg1["PortInfo"]+"测试异常, error %s"%str(e), u'Error', wx.YES_DEFAULT | wx.ICON_INFORMATION) + self.message_queue.put({"id": arg1["id"], "msg_id": "PortTestEnd", "result": 1}) + self.button_start_list[arg1["id"]].Enable(True) + self.procese_num -= 1 + if self.procese_num == 0: + self.button_all_start.Enable(True) + return - test_method = [] - for i in self.testFunctions: - if i[1] == 1: - test_method.append(_(u"人工检测")) - else: - test_method.append(_(u"自动检测")) + if restartSign == "True": + ser.exec_cmd("from misc import Power\r\nPower.powerRestart()") - # TODO excel写入不要列表形式 - if "False" not in ret_result: - self.message_queue.put({"id": arg1["id"], "msg_id": "PortTestEnd", "result": 1}) - self.__excel_write([arg1["PortInfo"], "Success", str(list(zip(self.testMessages, ret_result)))]) - else: - self.message_queue.put({"id": arg1["id"], "msg_id": "PortTestEnd", "result": 2}) - self.__excel_write([arg1["PortInfo"], "Fail", str(list(zip(self.testMessages, ret_result)))]) self.button_start_list[arg1["id"]].Enable(True) self.procese_num -= 1 if self.procese_num == 0: self.button_all_start.Enable(True) - def port_test_end_handler(self, arg1): - self.__port_det(False) + # TODO excel写入不要列表形式 + now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + if "False" not in ret_result: + # self.message_queue.put({"id": arg1["id"], "msg_id": "PortTestEnd", "result": 1}) + self.__excel_write([arg1["PortInfo"], now_time, imei, "Success", str(list(zip(self.testMessages, ret_result)))]) + else: + # self.message_queue.put({"id": arg1["id"], "msg_id": "PortTestEnd", "result": 2}) + self.__excel_write([arg1["PortInfo"], now_time, imei, "Fail", str(list(zip(self.testMessages, ret_result)))]) + + # def port_test_end_handler(self, arg1): + # self.__port_det(False) def __init_excel(self): self.__excel_handler = file_handler.ExcelHandler(PROJECT_ABSOLUTE_PATH + "\\Test-Result.xlsx") # Init Excel @@ -496,15 +859,22 @@ def __init_excel(self): if rows == 1 and columns == 1: self.__excel_handler.set_cell_value(1, 1, "No.") self.__excel_handler.set_cell_value(1, 2, "Com Port") - self.__excel_handler.set_cell_value(1, 3, "Test Result") - self.__excel_handler.set_cell_value(1, 4, "Test Log") + self.__excel_handler.set_cell_value(1, 3, "Time") + self.__excel_handler.set_cell_value(1, 4, "IMEI") + self.__excel_handler.set_cell_value(1, 5, "Test Result") + self.__excel_handler.set_cell_value(1, 6, "Test Log") def __excel_write(self, result): if self.__excel_handler: rows, columns = self.__excel_handler.get_rows_columns() self.__excel_handler.set_cell_value(rows + 1, 1, rows) for i, value in enumerate(result): - self.__excel_handler.set_cell_value(rows + 1, i + 2, value) + if value == "Success": + self.__excel_handler.set_cell_value(rows + 1, i + 2, value, "Green") + elif value == "Fail": + self.__excel_handler.set_cell_value(rows + 1, i + 2, value, "Red") + else: + self.__excel_handler.set_cell_value(rows + 1, i + 2, value) def port_process_handler(self): while True: @@ -512,28 +882,27 @@ def port_process_handler(self): message = self.message_queue.get(True, 5) except Exception as e: message = None - try: - if message: - # print("message:{}".format(message)) - msg_id = message.get("msg_id") - if msg_id == "exit": - pass - elif msg_id == "PortUpdate": - # threading.Thread(target=self.port_update_handler, args=(message,)).start() - self.port_update_handler(message) - elif msg_id == "PortInit": - # threading.Thread(target=self.port_init_handler, args=(message,)).start() - self.port_init_handler(message) - elif msg_id == "PortTest": - threading.Thread(target=self.port_test_handler, args=(message,)).start() - # self.port_test_handler(message) - elif msg_id == "PortTestEnd": - threading.Thread(target=self.port_test_end_handler, args=(message,)).start() - # self.port_test_end_handler(message) - else: - pass - except Exception as e: - print(e) + # try: + if message: + msg_id = message.get("msg_id") + if msg_id == "exit": + pass + elif msg_id == "PortUpdate": + # threading.Thread(target=self.port_update_handler, args=(message,)).start() + self.port_update_handler(message) + elif msg_id == "PortInit": + # threading.Thread(target=self.port_init_handler, args=(message,)).start() + self.port_init_handler(message) + elif msg_id == "PortTest": + threading.Thread(target=self.port_test_handler, args=(message,)).start() + # self.port_test_handler(message) + # elif msg_id == "PortTestEnd": + # threading.Thread(target=self.port_test_end_handler, args=(message,)).start() + # self.port_test_end_handler(message) + else: + pass + # except Exception as e: + # print("line 546: ", e) @staticmethod def __port_det(flag): @@ -561,6 +930,7 @@ class MyApp(wx.App): print("languageTab: ", languageTab) # languageTab = "en" # 根据系统语言自动设置语言 + # languageTab = "en" if languageTab == "zh_CN": t = gettext.translation('Chinese', PROJECT_ABSOLUTE_PATH + "\\locale", languages=["zh_CN"]) t.install() diff --git a/media/1692598668142.jpg b/media/1692598668142.jpg deleted file mode 100644 index cc289ecb5e784ef8585f3868042d560a2e134dcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21283 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