def open(step): element = step['element'] value = e.get(element)[1] if step['data'].get('清理缓存', '') or step['data'].get('clear', ''): g.driver.delete_all_cookies() if step['data'].get('打开方式', '') == '新标签页' or step['data'].get('mode', '').lower() == 'tab': js = "window.open('%s')" % value g.driver.execute_script(js) # 判断是否打开了新的窗口,并将新窗口添加到所有窗口列表里 all_handles = g.driver.window_handles for handle in all_handles: if handle not in w.windows.values(): w.register(step, handle) else: if step['data'].get('打开方式', '') == '新浏览器' or step['data'].get('mode', '').lower() == 'browser': w.close() g.set_driver() w.init() g.driver.get(value) w.open(step) cookie = step['data'].get('cookie', '') if cookie: g.driver.add_cookie(json2dict(cookie)) co = g.driver.get_cookie(json2dict(cookie).get('name', '')) logger.info(f'cookie is add: {co}') sleep(0.5)
def open(step): element = step['element'] if g.exist == 0: g.set_driver() w.init() if element == '浏览器' or element.lower() == 'browser': return 0 el, value = get_elem(element) if step['data'].get('清理缓存', '') or step['data'].get('cookie', ''): g.driver.delete_all_cookies() if step['data'].get('打开方式', '') == '新标签页' or step['data'].get( 'mode', '').lower() == 'tab': js = "window.open('%s')" % value g.driver.execute_script(js) # 判断是否打开了新的窗口,并将新窗口添加到所有窗口列表里 all_handles = g.driver.window_handles for handle in all_handles: if handle not in w.pages.values(): w.register(step, handle) else: if step['data'].get('打开方式', '') == '新浏览器' or step['data'].get( 'mode', '').lower() == 'browser': w.close() g.set_driver() w.init() g.driver.get(value) w.open(step) sleep(0.5) return 1
def run(self, sheet_name): # 1.从 Excel 获取测试用例集 try: data = self.testcase_workbook.read(sheet_name) testsuite = testsuite_format(data) # logger.info('Testsuite imported from Excel:\n' + # json.dumps(testsuite, ensure_ascii=False, indent=4)) logger.info('From Excel import testsuite success') except: logger.exception('*** From Excel import testsuite fail ***') self.code = -1 sys.exit(self.code) # 2.初始化全局对象 try: g.init(self.desired_caps, self.server_url) g.set_driver() # 如果测试数据文件存在,则从该文件里读取一行数据,赋值到全局变量列表里 data_file = path.join('data', g.project_name + '-' + sheet_name + '.csv') if path.exists(data_file): g.var = get_record(data_file) data_file = path.join( 'data', g.project_name + '-' + sheet_name + '-globle.txt') if path.exists(data_file): g.var.update(get_all_record(data_file)) w.init() except: logger.exception('*** Init global object fail ***') self.code = -1 sys.exit(self.code) # 3.解析测试用例集 try: parse(testsuite) logger.debug('testsuite has been parsed:\n' + str(testsuite)) except: logger.exception('*** Parse testsuite fail ***') self.code = -1 sys.exit(self.code) # 4.执行测试套件 ts = TestSuite(testsuite, self.report_ts[sheet_name], self.conditions) ts.run() # 5.判断测试结果 if self.report_ts[sheet_name].high_errors + self.report_ts[sheet_name].medium_errors + \ self.report_ts[sheet_name].high_failures + self.report_ts[sheet_name].medium_failures: self.code = -1 # 6.保存测试结果 try: self.report_data[sheet_name] = testsuite2report(testsuite) data = testsuite2data(testsuite) self.report_workbook.write(data, sheet_name) except: logger.exception('*** Save the report is fail ***')
def run(self, sheet_name): # 1.从 Excel 获取测试用例集 try: data = self.testcase_workbook.read(sheet_name) testsuite = testsuite_format(data) # logger.info('Testsuite imported from Excel:\n' + # json.dumps(testsuite, ensure_ascii=False, indent=4)) logger.info('From Excel import testsuite success') except: logger.exception('*** From Excel import testsuite failure ***') self.code = -1 sys.exit(self.code) # 2.初始化全局对象 try: g.set_driver() # 如果测试数据文件存在,则从该文件里读取数据,赋值到全局变量列表里 data_file = Path('data') / (g.plan_name + '-' + sheet_name + '.csv') if data_file.is_file(): g.test_data = get_record(str(data_file)) w.init() except: logger.exception('*** Init global object failure ***') self.code = -1 sys.exit(self.code) # 3.解析测试用例集 try: parse(testsuite) logger.debug('testsuite has been parsed:\n' + str(testsuite)) except: logger.exception('*** Parse testsuite failure ***') self.code = -1 sys.exit(self.code) # 4.执行测试套件 g.ts = TestSuite(testsuite, sheet_name, self.junit_suite[sheet_name], self.conditions) g.ts.run() # 5.判断测试结果 if self.junit_suite[sheet_name].high_errors + self.junit_suite[sheet_name].medium_errors + \ self.junit_suite[sheet_name].high_failures + self.junit_suite[sheet_name].medium_failures: self.code = -1 # 6.保存测试结果 try: data = testsuite2data(testsuite) self.report_workbook.write(data, sheet_name) self.report_data[sheet_name] = testsuite2report(testsuite) except: logger.exception('*** Save the report is failure ***')
def ready(): ''' 测试准备工作:解析测试用例集 -> 解析全局变量 -> 初始化浏览器和窗口 -> 初始化 unittest.testcase :param sheet_name: excel格式的测试用例集 testcase 的格式: { 'id': 'Login_001', #用例编号 'title': 'Login OK', #用例标题 'condition': '', #前置条件 'designer': 'Leo', #设计者 'flag': '', #自动化标记 'result': '', #用例结果 'remark': '', #备注 'steps': [ { 'no': 1, #测试步骤 'keyword': '输入', #关键字 'page': '产品管系统登录页', #页面 'custom': , #frame 'element': [元素1,元素2], #元素 'data': {变量1:值1,变量2:值2}, #测试数据 'expected':{变量1:值1,变量2:值2}, #预期结果 'output': {变量1:值1,变量2:值2}, #输出数据 'score': '', #测试结果 'remark': '', #备注 'snippets': [[{},{},...],[],...] #调用的用例片段各步骤 }, {……} …… ] } testsuite 的格式:[testcase1,testcase2,testcase3,...] ''' # 1.从 Excel 获取、解析测试用例集 parse_suite(g.current_sheet_name) # 2.从 Csv 获取、解析全局变量 parse_var(g.current_sheet_name) # 3.初始化浏览器和窗口 try: g.set_driver() w.init() except: logger.exception('*** 初始化浏览器或窗口失败 ***') g.code = -1 sys.exit(g.code) # 4.初始化 unittest.testcase gentest()