class Base(): def __init__(self, driver): self.driver = driver # log = Logger(loglevel=1, logger="fox").getlog() self.log = Logger(loglevel=1, logger="chrome").getlog() def findele(self, *args): try: print(args) self.log.info("通过" + args[0] + "定位,元素是" + args[1]) return self.driver.find_element(*args) except: self.log.error("定位元素失败") def click(self, args): self.findele(args).click() def sendkey(self, args, value): self.findele(args).send_keys(value) def js(self, str): self.driver.execute_script(str) def url(self): return self.driver.current_url def back(self): return self.driver.back() def forword(self): self.driver.forword() def quit(self): self.driver.quit()
def setUpClass(cls): Log = Logger() Log.info("========%s测试开始:========" % __class__.__name__) nowtime = time.strftime("%Y%m%d%H%M") driver = webdriver.Remote(appium_url, desired_caps) cls.nowtime = nowtime cls.Log = Log cls.driver = driver
def setUpClass(cls): Log = Logger() Log.info("========%s测试开始:========" % __class__.__name__) nowtime = time.strftime("%Y%m%d%H%M") driver = webdriver.Remote(appium_url, desired_caps) cls.nowtime=nowtime cls.Log=Log cls.driver=driver # 判断是否有弹窗,并关闭 Main(driver).close_ad() Main(driver).close_update() Mine(driver).stay_location() Main(driver).into_Mainpage(1)
class TestAll(unittest.TestCase): def setUp(self): self.Log = Logger() self.r = Read_xls(test_data_path) def tearDown(self): self.Log.close() @data(*booknames) def test_run(self, bookname): writedata.creattable(bookname) test_data = [] self.test_datas = self.r.read_data(bookname, 1) keys_list = self.r.read_data(bookname, 0)[0] if mode == 1: Logger().info("[mode:1],本次测试执行基本流测试用例") for i in range(len(self.test_datas)): if self.test_datas[i][1] == 1: test_data.append(self.test_datas[i]) i += 1 else: continue elif mode == 0: Logger().info("[mode:0],本次测试执行全部测试用例") test_data = self.test_datas datas = [] datas.append(keys_list) datas.append(test_data) keys_list = datas[0] test_data = datas[1] self.header = ["case_num", "explain", "result", "data", "code"] # 第四个开始设置你需要的值(要和报文字典的key值对应) for n in range(len(self.header)): writedata.write_onlydata(0, n, self.header[n]) for tdata in test_data: global row ruselt_path = Project_path.TestResult_path + now + self.__class__.__name__ + ".xls" testcase_num = tdata[0] explain = tdata[2] url = tdata[3] type = tdata[4] expectation = tdata[5] m = 6 # 前面有几个非参数字段这里写几 data = Change().list_dict(tdata, keys_list, m) result = Request(host).request(url, data, type) try: self.assertEqual(result["code"], expectation, "与期望值不符") test_result = "Pass" except Exception as e: self.Log.error("第%s条用例[%s]测试失败【%s】" % (testcase_num, explain, e)) test_result = "Faile" raise e else: self.Log.info("第%s条用例[%s]测试通过" % (testcase_num, explain)) finally: writedata.write_onlydata(row, 0, testcase_num) writedata.write_onlydata(row, 1, explain) writedata.write_onlydata(row, 2, test_result) writedata.write_onlydata(row, 3, str(result)) for h in range(len(self.header)): if self.header[h] in list(result.keys()): writedata.write_onlydata(row, h, str(result[self.header[h]])) row += 1 writedata.save_excel(ruselt_path) row = 1
def start(case_name, **kwargs): log = Logger() log.info("{:-^80}".format("start a case test")) log.info("case name:" + case_name) report_file = os.path.join(cf.get_current_dir(), "Test_Report", "{}.yaml".format(cf.check_ip_yaml())) cf.new_cases_result(report_file, case_name) session = "win10" root_password = '******' user_password = '******' time.sleep(0.5) log.info(" -------------------------------------------step 1") if not step_1(log=log): step1_report = { 'step_name': 'step1', 'result': 'Fail', 'expect': 'set screen saver default success', 'actual': 'set screen saver default fail', 'note': '' } cf.update_cases_result(report_file, case_name, step1_report) cf.SwitchThinProMode("admin") log.error("{:+^80}".format("test case fail")) return False step1_report = { 'step_name': 'step1', 'result': 'Pass', 'expect': 'set screen saver default and switch to user success', 'actual': 'set screen saver default and switch to user success', 'note': '' } cf.update_cases_result(report_file, case_name, step1_report) log.info(" -------------------------------------------step 2") result_2 = step_2(log=log, case_name=case_name) if not result_2[0]: step2_report = { 'step_name': 'step2', 'result': 'Fail', 'expect': 'no need to input any accounts to unlock the screen', 'actual': 'fail', 'note': '{}'.format(result_2[1]) } cf.update_cases_result(report_file, case_name, step2_report) log.error("{:+^80}".format("test case fail")) cf.SwitchThinProMode("admin") return False step2_report = { 'step_name': 'step2', 'result': 'pass', 'expect': 'no need to input any accounts to unlock the screen', 'actual': 'success', 'note': '{}'.format(result_2[1]) } cf.update_cases_result(report_file, case_name, step2_report) log.info(" ---------------------------------------------step 3_4") result_3_4 = step_3_4(log=log, case_name=case_name) if not result_3_4[0]: step4_report = { 'step_name': 'step 3_4', 'result': 'Fail', 'expect': 'screen can be unlock by the credentals', 'actual': 'fail', 'note': '{}'.format(result_3_4[1]) } cf.update_cases_result(report_file, case_name, step4_report) cf.SwitchThinProMode("admin") log.error("{:+^80}".format("test case fail")) return False step4_report = { 'step_name': 'step 3_4', 'result': 'pass', 'expect': 'screen can be unlock by the credentals', 'actual': 'success', 'note': '{}'.format(result_3_4[1]) } cf.update_cases_result(report_file, case_name, step4_report) log.info(" -------------------------------------------step 5_6") result_5_6 = step_5_6(log=log, session=session, root_password=root_password, case_name=case_name) if not result_5_6[0]: step6_report = { 'step_name': 'step 5_6', 'result': 'fail', 'expect': "'user' is not in the locked accounts, 'root' can not unlock the remote session," " screen can be unlock by the credentials", 'actual': 'fail', 'note': '{}'.format(result_5_6[1]) } cf.update_cases_result(report_file, case_name, step6_report) cf.SwitchThinProMode("admin") log.error("{:+^80}".format("test case fail")) return False step6_report = { 'step_name': 'step 5_6', 'result': 'pass', 'expect': "'user' is not in the locked accounts, 'root' can not unlock the remote session," " screen can be unlock by the credentials", 'actual': 'success', 'note': '{}'.format(result_5_6[1]) } cf.update_cases_result(report_file, case_name, step6_report) log.info("-------------------------------------------step 7_8") result_7_8 = step_7_8(log=log, user_password=user_password, case_name=case_name) if not result_7_8[0]: step8_report = { 'step_name': 'step 7_8', 'result': 'fail', 'expect': "'user' account can unlock the screen", 'actual': 'fail', 'note': '{}'.format(result_7_8[1]) } cf.update_cases_result(report_file, case_name, step8_report) os.system("mclient --quiet set root/screensaver/lockScreenUser 0" ) # disable require password for general users os.system("mclient commit") cf.SwitchThinProMode("admin") log.error("{:+^80}".format("test case fail")) return False step8_report = { 'step_name': 'step 7_8', 'result': 'pass', 'expect': "'user' account can unlock the screen", 'actual': 'success', 'note': '{}'.format(result_7_8[1]) } cf.update_cases_result(report_file, case_name, step8_report) log.info(" ------------------------------------------- step 9") result_9 = step_9(log=log, user_password=user_password, case_name=case_name) if not result_9[0]: step9_report = { 'step_name': 'step9', 'result': 'fail', 'expect': "both 'user' and the login account can unlock the screen", 'actual': 'fail', 'note': '{}'.format(result_9[1]) } cf.update_cases_result(report_file, case_name, step9_report) os.system("mclient --quiet set root/screensaver/lockScreenUser 0" ) # disable require password for general users os.system("mclient commit") cf.SwitchThinProMode("admin") log.error("{:+^80}".format("test case fail")) return False step9_report = { 'step_name': 'step9', 'result': 'pass', 'expect': "both 'user' and the login account can unlock the screen", 'actual': 'success', 'note': '{}'.format(result_9[1]) } cf.update_cases_result(report_file, case_name, step9_report) os.system("mclient --quiet set root/screensaver/lockScreenUser 0" ) # disable require password for general users os.system("mclient commit") log.info("test case pass") cf.SwitchThinProMode("admin") log.info("{:+^80}".format("this case test over")) return True
class Interfere(): def __init__(self): self.Log=Logger() self.r = Read_xls(test_data_path) self.writedata = WriteExcel() def sheet_books(self): self.books = self.r.get_workbook() return self.books def get_data(self,bookname): # self.r = Read_xls(test_data_path) # books = self.r.get_workbook() test_data=[] self.test_datas = self.r.read_data(bookname, 1) keys_list = self.r.read_data(bookname, 0)[0] if mode == 1: Logger().info("[mode:1],本次测试执行基本流测试用例") for i in range(len(self.test_datas)): if self.test_datas[i][1] == 1: test_data.append(self.test_datas[i]) i += 1 else: continue elif mode == 0: Logger().info("[mode:0],本次测试执行全部测试用例") test_data = self.test_datas datas=[] datas.append(keys_list) datas.append(test_data) return datas def test_run( self,book_name,test_data,keys_list): # 创建表格,建立表头 self.writedata.creattable(book_name) self.header = ["case_num", "explain", "result", "data", "code"] # 第四个开始设置你需要的值(要和报文字典的key值对应) for n in range(len(self.header)): self.writedata.write_onlydata(0, n, self.header[n]) for tdata in test_data: global row ruselt_path = Project_path.TestResult_path + now + self.__class__.__name__ + ".xls" testcase_num = tdata[0] explain = tdata[2] url = tdata[3] type = tdata[4] expectation = tdata[5] m = 6 # 前面有几个非参数字段这里写几 data = Change().list_dict(tdata, keys_list, m) result = Request(host).request(url, data, type) try: assert result["code"] == expectation, "与期望值不符" test_result = "Pass" except Exception as e: self.Log.error("第%s条用例[%s]测试失败【%s】" % (testcase_num, explain, e)) test_result = "Faile" raise e else: self.Log.info("第%s条用例[%s]测试通过" % (testcase_num, explain)) finally: self.writedata.write_onlydata(row, 0, testcase_num) self.writedata.write_onlydata(row, 1, explain) self.writedata.write_onlydata(row, 2, test_result) self.writedata.write_onlydata(row, 3, str(result)) for h in range(len(self.header)): if self.header[h] in list(result.keys()): self.writedata.write_onlydata(row, h, str(result[self.header[h]])) row += 1 self.writedata.save_excel(ruselt_path) row = 1
def start(case_name, **kwargs): log = Logger() log.info("{:-^80}".format("start a case test")) log.info("case name:" + case_name) report_file = os.path.join(cf.get_current_dir(), "Test_Report", "{}.yaml".format(cf.check_ip_yaml())) cf.new_cases_result(report_file, case_name) time.sleep(0.5) platform = subprocess.getoutput("hptc-hwsw-id --hw") if "mt" not in platform: log.error("dtc can't run this case") step1 = {'step_name': 'check current platform', 'result': 'Fail', 'expect': '', 'actual': '', 'note': 'current platform is not mtc, skip the case'} cf.update_cases_result(report_file, case_name, step1) log.info("{:+^70}".format("this case test over")) time.sleep(1) return False cf.SwitchThinProMode(switch_to="user") time.sleep(2) if not power_manager_factory.PowerManager.open_power_manager_from_tray(): step1 = {'step_name': 'step1', 'result': 'Fail', 'expect': 'in user mode, open the power manager from the system tray success', 'actual': 'open the power manager from the system tray fail', 'note': ''} cf.update_cases_result(report_file, case_name, step1) log.info("{:+^70}".format("this case test over")) time.sleep(1) return False step1 = {'step_name': 'step1', 'result': 'Pass', 'expect': 'in user mode, open the power manager from the system tray success', 'actual': 'open the power manager from the system tray success', 'note': ''} cf.update_cases_result(report_file, case_name, step1) os.system("wmctrl -c 'Control Panel'") time.sleep(1) cf.SwitchThinProMode(switch_to="admin") time.sleep(2) if not power_manager_factory.PowerManager.open_power_manager_from_tray(): step2 = {'step_name': 'step2', 'result': 'Fail', 'expect': 'in admin mode, open the power manager from the system tray success', 'actual': 'open the power manager from the system tray fail', 'note': ''} cf.update_cases_result(report_file, case_name, step2) log.info("{:+^70}".format("this case test over")) time.sleep(1) return False step2 = {'step_name': 'step2', 'result': 'Pass', 'expect': 'in admin mode, open the power manager from the system tray success', 'actual': 'open the power manager from the system tray success', 'note': ''} cf.update_cases_result(report_file, case_name, step2) time.sleep(1) os.system("wmctrl -c 'Control Panel'") # close control panel log.info("{:+^70}".format("this case test over")) time.sleep(1) return True
class ScreenSaver: def __init__(self): self.log = Logger() @staticmethod def pic(picture): return os.path.join(cf.get_current_dir(), "Test_Data", "td_power_manager", "ScreenSaver", "{}".format(picture)) @staticmethod def lock_screen_by_command(): os.system("hptc-lockscreen") time.sleep(1) def lock_screen_by_right_click(self): lock_screen_pic = self.pic("_lock_screen") try: pyautogui.rightClick(1, 1) time.sleep(1) rs = wait_element(lock_screen_pic) if rs: pyautogui.move(rs[0]) time.sleep(0.2) pyautogui.click() else: self.log.error( "not found the 'Lock Screen' in right click menu") return False except Exception as e: print(e) @staticmethod def lock_screen_by_hotkey(): pyautogui.hotkey("ctrl", "alt", "l") @staticmethod def __registry(): config = os.path.join(cf.get_current_dir(), 'Test_Data', 'td_common', 'thinpro_registry.yml') with open(config, 'r') as f: return yaml.safe_load(f) def check_default_set(self): registry = self.__registry() default = registry["get"]["screensaver"]["default_set"] for key, value in default.items(): k = subprocess.getoutput("mclient --quiet get {}".format(key)) if k.upper() == str(value).upper(): self.log.info("'{}' value is '{}'".format(key, value)) else: self.log.error("'{}' value not is '{}'".format(key, value)) return False def set_default_setting(self): registry = self.__registry() default = registry["set"]["screensaver"]["default_set"] for key, value in default.items(): try: os.system("mclient --quiet set {} {}".format(key, value)) os.system("mclient commit") except: self.log.error(traceback.format_exc()) return False def __login_from_screen_lock(self, **kwargs): admin = os.path.exists('/var/run/hptc-admin') require_user_mode = subprocess.getoutput( "mclient --quiet get root/screensaver/lockScreenUser") require_domain_user = subprocess.getoutput( "mclient --quiet get root/screensaver/lockScreenDomain") require_admin_mode = subprocess.getoutput( "mclient --quiet get root/screensaver/lockScreen") require_remote_session = subprocess.getoutput( "mclient --quiet get root/screensaver/lockScreenSession") if admin: # admin mode if require_admin_mode == '1': admin_pw = kwargs.get("admin_password", "1") if wait_element(cf.get_current_dir( "Test_Data/td_power_manager/ScreenSaver/_root_lock_screen" ), rate=0.98): pyautogui.typewrite(admin_pw) time.sleep(1) pyautogui.press("enter") elif wait_element(cf.get_current_dir( "Test_Data/td_power_manager/ScreenSaver/_domain_lock_screen" ), rate=0.98): # in domain pyautogui.typewrite("root") time.sleep(1) pyautogui.press("tab") time.sleep(1) pyautogui.typewrite(admin_pw) time.sleep(1) pyautogui.press("enter") else: pass else: # user mode if wait_element(cf.get_current_dir( "Test_Data/td_power_manager/ScreenSaver/_root_lock_screen" ), rate=0.98): # not in domain if require_user_mode == '1': user_pw = kwargs.get("user_password", "1") pyautogui.typewrite("user") time.sleep(1) pyautogui.press("tab") time.sleep(1) pyautogui.typewrite(user_pw) time.sleep(1) pyautogui.press("enter") else: pass elif wait_element(cf.get_current_dir( "Test_Data/td_power_manager/ScreenSaver/_domain_lock_screen" ), rate=0.98): # in domain if require_user_mode == "1": pyautogui.press("tab", interval=4) pyautogui.typewrite("root") time.sleep(1) pyautogui.press("tab") time.sleep(1) pyautogui.typewrite("1") time.sleep(1) pyautogui.press("enter") elif require_domain_user == "1": user_sh_pw = kwargs.get("user_sh_password", "Shanghai2010") pyautogui.typewrite(user_sh_pw) time.sleep(1) pyautogui.press("enter") elif require_remote_session == 1: vdi_pw = kwargs.get("vdi_password", "Shanghai2010") pyautogui.typewrite(vdi_pw) time.sleep(1) pyautogui.press("enter") def resume_screensaver_by_keyboard(self, **kwargs): pyautogui.press("enter") time.sleep(1) self.__login_from_screen_lock(**kwargs) def resume_screensaver_by_mouse(self, **kwargs): pyautogui.click() time.sleep(1) self.__login_from_screen_lock(**kwargs) def reboot_by_screen_lock(self): pyautogui.press("enter") time.sleep(1) tool_pic_rs = wait_element(self.pic("_tool")) if tool_pic_rs: pyautogui.click(tool_pic_rs[0]) power_rs = wait_element(self.pic("_power")) if not power_rs: self.log.error("not found power button") return False pyautogui.click(power_rs[0]) reboot_rs = wait_element(self.pic("_reboot")) if not reboot_rs: self.log.error("not found reboot button") return False pyautogui.click(reboot_rs[0]) self.log.info("start reboot") def power_off_by_screen_lock(self): pyautogui.press("enter") time.sleep(1) tool_pic_rs = wait_element(self.pic("_tool")) if tool_pic_rs: pyautogui.click(tool_pic_rs[0]) power_rs = wait_element(self.pic("_power")) if not power_rs: self.log.error("not found power button") return False pyautogui.click(power_rs[0]) reboot_rs = wait_element(self.pic("_power_off")) if not reboot_rs: self.log.error("not found power_off button") return False pyautogui.click(reboot_rs[0]) self.log.info("start power off") @staticmethod def resume_lock_screen_by_mouse(): path = cf.get_current_dir( "Test_Data/td_power_manager/password_frame/double") pyautogui.click() time.sleep(1) res = wait_element(path) if res: pyautogui.typewrite("root") time.sleep(1) pyautogui.press("tab") time.sleep(1) pyautogui.typewrite("1") time.sleep(1) pyautogui.press("enter") return True
def setUpClass(cls): Log = Logger() Log.info(u"========%s测试开始:========" % __class__.__name__) cls.ws = WsSingle(url) cls.Log = Log