def run_main(self, method, url=None, data=None, header=None): """ 定义一个run_main函数,通过传过来的method来进行不同的get或post请求 :param method: :param url: :param data: :param header: :return: """ result = None if method == 'post': result = self.send_post(url, data, header) logger.info(result) elif method == 'get': result = self.send_get(url, data, header) logger.info(result) elif method == 'put': result = self.send_put(url, data, header) logger.info(result) elif method == 'delete': result = self.send_delete(url, data, header) logger.info(result) else: print("method值错误!!!") logger.info("method值错误!!!") return result
def test_operational_point_details(self): #质检-操作-采集点详情 driver = self.driver testcase_title = '-*-*-*-*-*执行质检-操作-采集点详情用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[14]/div/button").click() #点击操作按钮 time.sleep(1) task_id = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[1]").text task_status = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text task_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/a").text #获取当前页面第一个任务名 point_details_num = re.findall( r"\d+\.?\d*", driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[14]/div/ul/li/a/small").text)[ 0] #获取采集点详情按钮中的数字 #获取当前标签句柄 first_handle = driver.current_window_handle driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[14]/div/ul/li/a").click() #点击采集点详情 all_handles = driver.window_handles # 获取所有窗口句柄 for handle in all_handles: #判断当前窗口句柄,切换窗口 if handle != first_handle: driver.switch_to_window(handle) page_sum = re.findall( r"\d+\.?\d*", driver.find_element_by_xpath( "//div[@class='am-u-sm-12']/div/div/div[2]/div").text ) #获取采集点详情页点总数 self.assertIn(point_details_num, page_sum) logger.info( [task_id, task_status, task_name, point_details_num, page_sum])
def test_signal_link(self): #质检-检测状态-信号 driver = self.driver testcase_title = '-*-*-*-*-*执行质检-检测状态-信号用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) task_id = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[1]").text task_status = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text task_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/a").text #获取当前页面第一个任务名 string = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[13]/a[3]").text signal_num = re.findall(r"\d+\.?\d*", string)[0] #获取信号数量 #获取当前标签句柄 first_handle = driver.current_window_handle driver.find_element_by_xpath("//table[@id='dg']/tbody/tr/td[13]/a[3]" ).click() #点击 信号连接,进入采集点信号详情页 all_handles = driver.window_handles # 获取所有窗口句柄 for handle in all_handles: #判断当前窗口句柄,切换窗口 if handle != first_handle: driver.switch_to_window(handle) page_signal_sum = re.findall( r"\d+\.?\d*", driver.find_element_by_xpath( "//div[@class='am-u-sm-12']/div/div/div[2]/div").text ) #获取采集点信号详情页信号总数 self.assertIn(signal_num, page_signal_sum) logger.info([ task_id, task_status, task_name, string, signal_num, page_signal_sum ])
def mailMain(self): try: # 创建一个实例 with open(mailFilePath, 'rb') as f: mailBody = f.read() message = MIMEMultipart() message.attach(MIMEText(mailBody, 'html', 'utf-8')) # 邮件正文 message['From'] = mailFromPerson # 邮件上显示的发件人 message['To'] = mailToPerson # 邮件上显示的收件人 message['Subject'] = Header(mailTitle, 'utf-8') # 邮件主题 att1 = MIMEText(open(mailFilePath, 'rb').read(), 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' # 这里的filename可以任意写,写什么名字,邮件中显示什么名字 att1["Content-Disposition"] = 'attachment; filename="report.html"' message.attach(att1) smtp = smtplib.SMTP() # 创建一个连接 smtp.connect(mailSmtpServer) # 连接发送邮件的服务器 smtp.login(mailSmtpUser, mailSmtpPwd) # 登录服务器 smtp.sendmail(mailFromPerson, message['To'].split(','), message.as_string()) # 填入邮件的相关信息并发送 logger.info("邮件发送成功!!!") smtp.quit() except smtplib.SMTPException: logger.info("邮件发送失败")
def write_file(open_method, file_dir, file_name, write_info): # 写入方法(w创建写入a追加写入),文件名,写入信息(分隔符换行等信息由调入者格式化传入) file_name = file_name.replace(':', '-') file = ''.join([file_dir, os.sep, file_name]) file = file.replace('\\', '/') try: if (open_method == 'a' and os.path.exists(file)) or open_method == 'w': with codecs.open(file, open_method, 'gb18030') as f: # 判断写入信息是否为空,非空则写入 if write_info.strip(): f.write(write_info) elif open_method not in ['w', 'a']: print(u'========== open_method error : %s %s==========' % (open_method, datetime.datetime.now())) return {'result': '1', 'info': 'open_method error'} elif os.path.exists(file) == False: logger.info(u'file not exist : %s ' % (file)) return {'result': '1', 'info': 'file not exist'} except Exception as e: logger.info(u'file write error : %s ' % (e)) return {'result': '1', 'info': 'file write error : %s' % e} return { 'result': '0', 'info': 'file write success', 'file_name': file_name }
def makeCaseList(self,fileName,defNameHead): try: # 创建caseList文件 write_file('w',caseListFilePath,caseListName,'') with open(fileName,'r') as file: while 1: # 去除每行头部的空格或制表符 f = file.readline().strip().strip('/t') # 检查是否以class为开头 if f == None or f == u'\n' or f == u'' and f == u'\r\n': break if f.startwith('class'): classNameBeg = 5 classNameEnd = f.find('(',1) className = f[classNameBeg,classNameEnd] self.testCaseCount[className] = 0 elif 'className'in vars() and f.startwith('def'): defNameBeg = 3 defNameEnd = f.find('(',1) defName = f[defNameBeg,defNameEnd] # 过滤函数名 if defName.startwith(defNameHead): self.testCaseCount[className] += 1 writeData = className + '/' + defName write_file('a',caseListFilePath,caseListName,writeData) self.pyCaseFileCount += 1 logger.info('获取 test case 列表结束') except Exception as e: logger.error('获取 test case 列表时异常 %s'%(e)) return {'result':1,'msg':'获取 test case 列表时异常 %s'%(e)} return {'result':0,'msg':'获取 test case 列表结束','testCaseCount':self.testCaseCount}
def send(self): self.msg['Subject'] = self.title self.msg['From'] = self.sender self.msg['To'] = self.receiver # 邮件正文 if self.message: self.msg.attach(MIMEText(self.message)) # 添加附件,支持多个附件(传入list),或者单个附件(传入str) if self.files: if isinstance(self.files, list): for f in self.files: self._attach_file(f) elif isinstance(self.files, str): self._attach_file(self.files) # 连接服务器并发送 try: smtp_server = smtplib.SMTP(self.server) # 连接sever except (gaierror and error) as e: logger.exception('发送邮件失败,无法连接到SMTP服务器,检查网络以及SMTP服务器. %s', e) else: try: smtp_server.login(self.sender, self.password) # 登录 except smtplib.SMTPAuthenticationError as e: logger.exception('用户名密码验证失败!%s', e) else: smtp_server.sendmail(self.sender, self.receiver.split(';'), self.msg.as_string()) # 发送邮件 finally: smtp_server.quit() # 断开连接 logger.info('发送邮件"{0}"成功! 收件人:{1}。如果没有收到邮件,请检查垃圾箱,' '同时检查收件人地址是否正确'.format(self.title, self.receiver))
def send(self): self.msg['Subject'] = self.title self.msg['From'] = self.sender self.msg['To'] = self.receiver # 邮件正文 if self.message: self.msg.attach(MIMEText(self.message)) # 添加附件,支持多个附件(传入list),或者单个附件(传入str) if self.files: if isinstance(self.files, list): for f in self.files: self._attach_file(f) elif isinstance(self.files, str): self._attach_file(self.files) # 连接服务器并发送 try: smtp_server = smtplib.SMTP(self.server) # 连接sever except (gaierror and error) as e: logger.exception('发送邮件失败,无法连接到SMTP服务器,检查网络以及SMTP服务器. %s', e) else: try: smtp_server.login(self.sender, self.password) # 登录 except smtplib.SMTPAuthenticationError as e: logger.exception('用户名密码验证失败!%s', e) else: smtp_server.sendmail(self.sender, self.receiver.split(';'), self.msg.as_string()) # 发送邮件 finally: smtp_server.quit() # 断开连接 logger.info('发送邮件"{0}"成功! 收件人:{1}。如果没有收到邮件,请检查垃圾箱,' '同时检查收件人地址是否正确'.format(self.title, self.receiver))
def run_main(self, method, url=None, data=None, body=None, headers=None): result = None if (method == 'post' or method == 'POST'): print("headers " + str(headers)) print("params " + str(data)) print("body: " + str(body)) result = self.send_post(url, data, body, headers) logger.info(str(result)) elif (method == 'get' or method == 'GET'): print("headers " + str(headers)) print("params " + str(data)) result = self.send_get(url, data, headers) logger.info(str(result)) elif (method == 'delete' or method == 'DELETE'): print("headers " + str(headers)) print("params " + str(data)) result = self.send_delete(url, data, headers) logger.info(str(result)) elif (method == 'put' or method == 'PUT'): print("headers " + str(headers)) print("params " + str(data)) print("body: " + str(body)) result = self.send_put(url, data, body, headers) logger.info(str(result)) else: print("method值错误!!!") logger.info("method值错误!!!") return result
def _attach_file(self, att_file): """将单个文件添加到附件列表中""" att = MIMEText(open('%s' % att_file, 'rb').read(), 'plain', 'utf-8') att["Content-Type"] = 'application/octet-stream' file_name = re.split(r'[\\|/]', att_file) att["Content-Disposition"] = 'attachment; filename="%s"' % file_name[-1] self.msg.attach(att) logger.info('attach file {}'.format(att_file))
def _attach_file(self, att_file): """将单个文件添加到附件列表中""" att = MIMEText(open('%s' % att_file, 'rb').read(), 'plain', 'utf-8') att["Content-Type"] = 'application/octet-stream' file_name = re.split(r'[\\|/]', att_file) att["Content-Disposition"] = 'attachment; filename="%s"' % file_name[-1] self.msg.attach(att) logger.info('attach file {}'.format(att_file))
def test_task_username_search(self): #质检-模糊匹配-按采集员-搜索 driver = self.driver testcase_title = '-*-*-*-*-*执行质检-按采集员-搜索用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) driver.find_element_by_xpath( "(//button[@type='button'])[12]").click() #点击选择搜索类型 time.sleep(1) driver.find_element_by_xpath( "//div[@class='admin-content-body']/div[7]/div[5]/div/div/ul/li[4]/span" ).click() #选择搜索类型为采集员 logger.info('选择搜索条件:' + driver.find_element_by_xpath( "//div[@class='admin-content-body']/div[7]/div[5]/div/div/ul/li[4]/span" ).text) InspectionPage().search_enter(driver, '李') logger.info('输入内容:李') driver.find_element_by_id("search_button").click() time.sleep(1) task_id = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[1]").text #获取要操作的子任务id task_status = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text task_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/a").text user_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[8]/a[1]").text self.assertIn(u"李", user_name) logger.info([task_id, task_name, task_status, user_name])
def run_main(self, method, url=None, data=None, headers=None): result = None if method == 'post': result = self.send_post(url=url, headers=headers, data=data) elif method == 'get': result = self.send_get(url=url, headers=headers, data=data) else: logger.info("method值错误!!!") return result
def test_task_username_accurate_search(self): #质检-精确匹配-按采集员-搜索 driver = self.driver testcase_title = '-*-*-*-*-*执行质检-精确匹配-按采集员-搜索用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) InspectionPage().inspection_page_accurate_search(driver) driver.find_element_by_xpath( "//div[@class='admin-content-body']/div[7]/div[5]/div/div/ul/li[4]/span" ).click() #选择搜索类型为采集员 logger.info('选择匹配方式:精确匹配,选择搜索条件:' + driver.find_element_by_xpath( "//div[@class='admin-content-body']/div[7]/div[5]/div/div/ul/li[4]/span" ).text) InspectionPage().search_enter(driver, '马良') logger.info('输入内容:马良') driver.find_element_by_id("search_button").click() time.sleep(1) task_id = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[1]").text task_status = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text task_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/a").text #获取当前页面第一个任务名 user_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[8]/a[1]").text self.assertEqual(u"马良", user_name) logger.info([task_id, task_status, task_name, user_name])
def test_quality_inspection_area_search(self): #质检-按区域搜索 driver = self.driver testcase_title = '-*-*-*-*-*执行质检-按区域搜索用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) driver.find_element_by_xpath( "(//button[@type='button'])[2]").click() #点击所在城市选择框 time.sleep(1) driver.find_element_by_xpath( "//div[@class='am-u-sm-12 am-u-md-3']/div/div/ul/li/span").click( ) #点选深圳市 logger.info('选择搜索条件:' + driver.find_element_by_xpath( "//div[@class='am-u-sm-12 am-u-md-3']/div/div/ul/li/span").text) driver.find_element_by_xpath( "(//button[@type='button'])[3]").click() #点击所在区域选择框 time.sleep(1) driver.find_element_by_xpath( "//div[@class='am-selected am-dropdown am-active']/div/ul/li[4]/span" ).click() #点选南山区 logger.info('选择搜索条件:' + driver.find_element_by_xpath( "//div[@class='am-selected am-dropdown am-active']/div/ul/li[4]/span" ).text) time.sleep(1) area_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[2]").text self.assertIn(u"南山区", area_name) self.assertEqual( u"待质检", driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text) logger.info([ area_name, driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text ])
def test_allocate_task(self): #任务分配 driver = self.driver testcase_title = '-*-*-*-*-*执行任务分配用例*-*-*-*-*-' logger.info(testcase_title) driver.find_element_by_xpath( "//ul[@id='collapse-nav9']/li[3]/a/span[2]").click() #点击任务管控链接 driver.find_element_by_xpath( "(//button[@type='button'])[4]").click() #点击任务状态选择框 time.sleep(1) driver.find_element_by_xpath( "//div[@class='am-g']/div[3]/div/div/ul/li[1]/span").click( ) #选择未领取状态 time.sleep(2) task_id = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[1]").text task_status = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text task_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/a").text task_list = [task_id, task_name, task_status] logger.info(task_list) time.sleep(1) driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[8]/div/button").click() #点击操作按钮 time.sleep(1) driver.find_element_by_link_text(u"分配").click() #点击分配按钮 driver.find_element_by_id("search-text").click() driver.find_element_by_id("search-text").clear() driver.find_element_by_id("search-text").send_keys("马良") #输入搜索条件 driver.find_element_by_id("search-text").send_keys(Keys.ENTER) logger.info('输入内容:马良') driver.find_element_by_link_text(u"分配到用户").click() #点击分配到用户按钮 driver.find_element_by_xpath( "//div[@id='my-confirm']/div/div[3]/span[2]").click() #点击确定按钮 time.sleep(2) self.assertEqual(u"任务分配成功", self.close_alert_and_get_its_text()) BusinessExecutionPage().business_execution_menu(driver) BusinessExecutionPage().business_execution_search_enter( driver, task_id) #调用业务执行-搜索输入框函数输入id driver.find_element_by_id("search_button").click() #点击搜索 time.sleep(1) self.assertEqual( u"马良", driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[8]/a").text) self.assertEqual( u"待提交", driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text) logger.info([ task_id, task_name, driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[8]/a").text, driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text ])
def get_jwt(username, password): if username in jwt_cache.keys(): return jwt_cache[username] # 在喂小保后台调接口时,请求头需要用到jwt参数,此参数从登录接口中获取 url = 'https://test.wxb.com.cn/dalaran/login' requests.packages.urllib3.disable_warnings() try: rs = requests.post(url=url, data={"userName": username, "pwd": password}, headers={"Content-Type": "application/x-www-form-urlencoded", "jwt": ""}, verify=False) if json.loads(rs.text)['code'] == 10000 and json.loads(rs.text)['msg'] == 'Success': jwt = json.loads(rs.text)['data']['jwt'] jwt_cache[username] = jwt logger.info(f"获取jwt:{jwt} 成功") return jwt else: logger.info(f"{rs.text} 获取jwt失败") except Exception as e: logger.error(f"调用获取jwt接口失败{e}")
def outlook(self): olook = win32.Dispatch("%s.Application" % app) mail = olook.CreateItem(win32.constants.olMailItem) mail.To = addressee # 收件人 mail.CC = cc # 抄送 mail.Subject = str(datetime.datetime.now())[0:19] + '%s' % subject # 邮件主题 mail.Attachments.Add(mail_path, 1, 1, "myFile") content = """ 执行测试中…… 测试已完成!! 生成报告中…… 报告已生成…… 报告已邮件发送!! """ mail.Body = content mail.Send() print('send email ok!!!!') logger.info('send email ok!!!!')
def start(self,filePath,defNameHead,skipDirs=None): try: for root,dirs,files in os.walk(filePath): if skipDirs: for i in range(len(skipDirs)): skipDirs[i] = filePath + u'/' + skipDirs[i].replace('\\','/').replace('//','/') root = root.replace('\\','/') if root in skipDirs: logger.info('跳过目录 %s'%(root)) continue if not files: logger.warning('文件列表为空') return {'result':1,'msg':'文件列表为空'} for i in files: result = self.makeCaseList(i,defNameHead) except Exception as e: logger.error('处理文件时异常 %s'%(e)) return {'result':1,'msg':'处理文件时异常 %s'%(e)} return {'result':0,'msg':'处理文件成功','testCaseCount':self.testCaseCount,'pyCaseFileCount':self.pyCaseFileCount}
def getValue(self, response, param): try: if response.status_code != 200: print('请求失败:', response.status_code) else: if param.lower() == 'token': return response.json()['loginInfo']['tokenVo']['token'] elif param.lower() == 'status': return response.json()['result']['status'] elif param.lower() == 'userid': return response.json()['loginInfo']['userId'] elif param.lower() == 'message': return response.json()['result']['message'] elif param.lower() == 'targetid': return response.json()['loginInfo']['targetId'] elif param.lower() == 'userid': return response.json()['loginInfo']['userId'] except Exception as e: print(format(e)) logger.info(e)
def test_task_status_settle_and_no_pay_search( self): #质检-按任务状态-完成 (无须付款)-搜索 driver = self.driver testcase_title = '-*-*-*-*-*执行质检-按任务状态-完成 (结算付款)-搜索用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) driver.find_element_by_xpath( "(//button[@type='button'])[6]").click() #点击任务状态下拉框 driver.find_element_by_xpath( "//div[@class='am-selected am-dropdown am-active']/div/ul/li[3]/span" ).click() #取消选择'待质检' time.sleep(1) driver.find_element_by_xpath( "//div[@class='am-selected am-dropdown am-active']/div/ul/li[9]/span" ).click() #点击选择'完成 (无须付款)' logger.info('选择搜索条件:' + driver.find_element_by_xpath( "//div[@class='am-selected am-dropdown am-active']/div/ul/li[9]/span" ).text) time.sleep(3) task_id = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[1]").text #获取要操作的子任务id task_status = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text task_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/a").text task_list = [task_id, task_name, task_status] self.assertEqual(u"完成 (无须付款)", task_status) logger.info(task_list)
def test_quality_inspection_scene_type_search(self): #质检-按场景类型搜索 driver = self.driver testcase_title = '-*-*-*-*-*执行质检-按场景类型搜索用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) driver.find_element_by_xpath( "(//button[@type='button'])[4]").click() #点击场景类型选择框 time.sleep(1) driver.find_element_by_xpath( "//div[@class='am-g']/div[3]/div/div/ul/li").click() #点选商场场景 logger.info('选择搜索条件:' + driver.find_element_by_xpath( "//div[@class='am-g']/div[3]/div/div/ul/li").text) time.sleep(1) self.assertEqual( u"商场", driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[3]").text) self.assertEqual( u"待质检", driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text) logger.info([ driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[3]").text, driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text ])
def test_settle_and_no_pay(self): #批量结算不付款 driver = self.driver testcase_title = '-*-*-*-*-*执行批量结算不付款用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) InspectionPage().switch_status_to_wait_to_settlement(driver) task_id = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[1]").text #获取要操作的子任务id task_status = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text task_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/a").text task_list = [task_id, task_name, task_status] logger.info(task_list) driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr[1]/td[15]/input").click() #选择勾选框 driver.find_element_by_link_text(u"批量结算(不付款)").click() #点击批量结算不付款 time.sleep(1) self.assertEqual(u"完成结算质检!", self.close_alert_and_get_its_text()) BusinessExecutionPage().business_execution_menu(driver) BusinessExecutionPage().business_execution_search_enter( driver, task_id) # 调用业务执行-搜索输入框函数输入id driver.find_element_by_id("search_button").click() #点击搜索 time.sleep(1) self.assertEqual(u"完成 (无须付款)", driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text ) #比对任务状态是否为完成 (无须付款),以判断是否结算成功 logger.info([ task_id, task_name, driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text ])
def test_reapprove_switch_scene(self): #审批不通过-任务质检页-切换场景 driver = self.driver testcase_title = '-*-*-*-*-*执行审批不通过-任务质检页-切换场景用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) InspectionPage().switch_status_to_approve_not_pass(driver) task_id = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[1]").text #获取要操作的子任务id task_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/a").text task_scene = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[3]").text logger.info([task_id, task_name, task_scene]) InspectionPage().inspection_check_action( driver) #调用质检结果查看操作函数,点击操作按钮切换当前标签页 driver.find_element_by_xpath( "//button[@onclick='recoverBtn()']").click() #点击编辑按钮 driver.find_element_by_xpath( "//button[@onclick='showMengban()']").click() #点击任务质检页-切换场景 time.sleep(1) driver.find_element_by_xpath( "//div[@class='change-mengban']/div/div/div[2]/ul/li[1]/button" ).click() #点击场景 scene_goal = driver.find_element_by_xpath( "//div[@class='change-mengban']/div/div/div[2]/ul/li[1]/button" ).text #获取准备切换的场景 driver.find_element_by_xpath( "//button[@class='am-btn am-btn-success change-btn-cancel']" ).click() #点击确认切换 time.sleep(1) after_change_scene = driver.find_element_by_css_selector( "#collectMsg > td:nth-child(3)").text #获取切换后的场景 self.assertEqual(after_change_scene, scene_goal) #比对准备切换的场景和切换后的场景,一样则判断用例执行正确 logger.info([task_id, task_name, after_change_scene])
def test_quality_inspection_task_source_search2(self): #质检-按任务来源-官方-搜索 driver = self.driver testcase_title = '-*-*-*-*-*执行质检-按任务来源-官方-搜索用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) driver.find_element_by_xpath( "(//button[@type='button'])[5]").click() #点击任务来源选择框 time.sleep(1) driver.find_element_by_xpath( "//div[@class='am-g']/div[4]/div/div/ul/li[2]/span").click() #选择官方 logger.info('选择搜索条件:' + driver.find_element_by_xpath( "//div[@class='am-g']/div[4]/div/div/ul/li[2]/span").text) time.sleep(1) self.assertEqual( u"", driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/span").text) self.assertEqual( u"待质检", driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text) logger.info([ driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/span").text, driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text ])
def test_check_status_search2(self): #质检-按检测状态-未检测-搜索 driver = self.driver testcase_title = '-*-*-*-*-*执行质检-按检测状态-未检测-搜索用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) driver.find_element_by_xpath( "(//button[@type='button'])[7]").click() #点击检测状态下拉框 time.sleep(1) driver.find_element_by_xpath( "//div[@class='am-g am-margin-top-sm']/div[2]/div/div/ul/li[3]/span" ).click() #点击选择未检测 logger.info('选择搜索条件:' + driver.find_element_by_xpath( "//div[@class='am-g am-margin-top-sm']/div[2]/div/div/ul/li[3]/span" ).text) time.sleep(1) task_id = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[1]").text #获取要操作的子任务id task_status = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text task_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/a").text point = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[13]/a[1]").text photo = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[13]/a[2]").text signal = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[13]/a[3]").text #check_mark = driver.find_element_by_xpath("//table[@id='dg']/tbody/tr/td[13]/a[4]").text list_check_status = [point, photo, signal] self.assertNotIn(u"", list_check_status) #比对结果不存在list里 logger.info([task_id, task_name, task_status, point, photo, signal])
def test_belong_to_team_search(self): #质检-按所属团队-搜索 driver = self.driver testcase_title = '-*-*-*-*-*执行质检-按所属团队-搜索用例*-*-*-*-*-' logger.info(testcase_title) InspectionPage().quality_inspection_menu(driver) driver.find_element_by_xpath( "(//button[@type='button'])[8]").click() #点击所属团队下拉框 time.sleep(1) driver.find_element_by_xpath( "//div[@class='am-g am-margin-top-sm']/div[3]/div/div/ul/li[97]/span" ).click() #点击选择奋斗 logger.info('选择搜索条件:' + driver.find_element_by_xpath( "//div[@class='am-g am-margin-top-sm']/div[3]/div/div/ul/li[97]/span" ).text) time.sleep(1) task_id = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[1]").text #获取要操作的子任务id task_status = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[6]/span").text task_name = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[4]/a").text task_team = driver.find_element_by_xpath( "//table[@id='dg']/tbody/tr/td[7]").text self.assertEqual(u"奋斗", task_team) logger.info([task_id, task_name, task_status, task_team])
def test_checkResult(self): """ check test report :return: """ get_url = url + self.path req = RunMain().run_main( self.method, get_url, self.query) # 根据Excel中的method调用run_main来进行requests请求,并拿到响应 data = json.loads(req.text) res = json.dumps(data, ensure_ascii=False, indent=1) print("url:" + get_url + "\n" + "query:\n" + self.query) print("\n接口返回数据:\n\n" + res + "\n") self.assertEqual(req.status_code, self.status_code) self.assertEqual(data['code'], self.code) self.assertEqual(data['msg'], self.msg) self.assertLessEqual(eval(self.data1), eval(self.data2)) #去除字符的双引号,断言 print("结果数据为:\n" + str(req.status_code) + "," + str(data['code']) + "," + str(data['msg'])) print("基线数据为:\n" + str(self.status_code) + "," + str(self.code) + "," + str(self.msg) + "\n") logger.info(req) logger.info(str(self.case_name)) logger.info(data) return res
def test_checkResult(self): cu.execute(self.sql) da = cu.fetchall() # print(len(data[0][0])) if len(da[0][0]) != 0: task_id = da[0][0] else: print("没有查到数据") # cu.close() get_url = url + "/tasks/" + task_id + self.path req = RunMain().run_main(self.method, get_url, self.query) data = json.loads(req.text) res = json.dumps(data, ensure_ascii=False, indent=1) print("url:" + get_url + "\n" + "query:\n" + self.query) print("\n接口返回数据:\n\n" + res + "\n") self.assertEqual(req.status_code, self.status_code) self.assertEqual(data['code'], self.code) self.assertEqual(data['msg'], self.msg) self.assertEqual(data['data'], task_id) print("结果数据为:\n" + str(req.status_code) + "," + str(data['code']) + "," + str(data['msg']) + "," + str(data['data'])) print("基线数据为:\n" + str(self.status_code) + "," + str(self.code) + "," + str(self.msg) + "," + str(task_id) + "\n") logger.info(req) logger.info(str(self.case_name)) logger.info(data) return res
def run_main(self, method, url=None, data=None, jsonData=None): #定义一个run_main函数,通过传过来的method来进行不同的get或post请求 result = None if method == 'post': result = self.send_post(url, data, jsonData=jsonData) logger.info(str(result)) elif method == 'get': result = self.send_get(url, data) logger.info(str(result)) elif method == 'put': result = self.send_put(url, data, jsonData=jsonData) logger.info(str(result)) elif method == 'delete': result = self.send_delete(url) logger.info(str(result)) else: print("method值错误!!!") logger.info("method值错误!!!") return result
def check_keys_value(self): if self.validate['assert_kes_value'] is not None: # print(type(self.validate['assert_kes_value'])) val_list = self.validate['assert_kes_value'] # print('jjjj {}'.format(val_list)) for i in val_list: # print('xxx种的类型为 {}'.format(type(i))) obj_key = list(i.keys())[0] logger.info('要断言的key为 {}'.format(obj_key)) obj_value = list(i.values())[0] logger.info('要断言的key的value值为 {}'.format(obj_value)) temp = self.response_data # print(type(temp)) # logger.info('接口返回的结果【用来断言】为 {}'.format(temp)) keys_value = get_target_value(obj_key, temp, []) # print(keys_value) assert obj_value in keys_value, ( 'assert_kes_value 断言-----接口中字段 {} 的值 {} 和预期结果的值 {} 不一致'. format(obj_key, keys_value, obj_value)) else: pass
def requests(self, httpMethod, url, data, headers): # 定义一个方法,传入需要的参数url和data # 参数必须按照url、data顺序传入 if httpMethod.lower() == ('post'): #.upper()小写转大写 try: if isinstance(data, str): #判断数据类型,类型为str则不需要转格式 result = requests.post(url=url, data=data, headers=headers, verify=False) else: result = requests.post(url=url, data=json.dumps(data), headers=headers, verify=False) return result except BaseException as e: print("post请求出现了异常:{0}".format(e)) elif httpMethod.lower() == ('get'): try: if isinstance(data, str): result = requests.get(url=url, params=data, headers=headers, verify=False) else: #数据格式转换 result = requests.get(url=url, params=json.dumps(data), headers=headers, verify=False) return result except Exception as e: print("get请求出现了异常:{0}".format(e)) logger.exception(format(e)) else: print("method值错误:", httpMethod) logger.info("method值错误:", httpMethod)