def send_mail(self): """发送邮件""" # 第三方SMTP服务 mail_host = settings.MAIL_HOST # 设置服务器 mail_user = settings.MAIL_USER # 用户名 mail_pass = settings.MAIL_TOKEN # 口令 # 设置收件人和发件人 sender = settings.SENDER receivers = settings.RECEIVERS # 接收邮箱可以设置你的qq或者其它邮箱 # 创建一个带附件的实例对象 message = MIMEMultipart() # 邮箱主题、收件人、发件人 subject = settings.THEME # 邮件主题 message["Subject"] = Header(subject, "utf-8") message["From"] = Header("{0}".format(sender), "utf-8") message["To"] = Header("{0}".format(";".join(receivers)), "utf-8") # 邮件正文内容 send_content = settings.SEND_CONTENT content_obj = MIMEText(send_content, "plain", "utf-8") # 第一个参数为邮件内容 message.attach(content_obj) # 构造附件 att = MIMEText(_text=self._get_zip_file(), _subtype="base64", _charset="utf-8") att["Content-Type"] = "application/octet-stream" att["Content-Disposition"] = 'attachment;filename="{}"'.format(settings.SEND_FILE_NAME) # 邮件附件中显示什么名字 message.attach(att) try: smtp_obj = smtplib.SMTP() smtp_obj.connect(mail_host, 25) # 25 为 SMTP端口号 smtp_obj.login(mail_user, mail_pass) smtp_obj.send_message(sender, receivers, message.as_string()) smtp_obj.quit() logger().info("邮件发送成功") print("邮箱发送成功") except smtplib.SMTPException as er: logger().error("email end error:{0}".format(er))
def update_mysql(self, sql): """ 执行SQL,修改 """ logger().info("正在向{0}发送请求:{1}".format(config.get("host"), sql)) self._public_mysql(sql) logger().info("{0}修改成功:{1}".format(config.get("host"), sql))
def delete_mysql(self, sql): """ 执行SQL,删除 """ logger().info("正在向{0}发送请求:{1}".format(config.get("host"), sql)) self._public_mysql(sql) logger().info("{0}删除成功:{1}".format(config.get("host"), sql))
def get_allure_report(self): """生成报告""" # os.system(ALLURE_COMMAND) 运行cmd命令,但是不安全 logger().info("正在生成测试报告......") print(settings.ALLURE_COMMAND) subprocess.call(settings.ALLURE_COMMAND, shell=True) logger().info("生成测试报告成功......")
def insert_mysql(self, sql): """ 执行SQL,新增 """ logger().info("正在向{0}发送请求:{1}".format(config.get("host"), sql)) self._public_mysql(sql) logger().info("{0}新增成功:{1}".format(config.get("host"), sql))
def get_excel(self): """ 获取excel数据,定义title,将值与title拼接成字典返回 :return: """ title = self.sheet.row_values(0) data_list = [dict(zip(title, self.sheet.row_values(row))) for row in range(1, self.sheet.nrows)] logger().info("读取Excel成功,数据已返回") return data_list
def get_allure_report(self): """ 生成报告 """ # os.system(ALLURE_COMMAND) # subprocess.Popen(ALLURE_COMMAND, shell=True) logger().info('正在生成测试报告.....') subprocess.call(settings.ALLURE_COMMAND, shell=True) logger().info('生成测试报告成功.....') '''
def test_case(self, item): logger().info("正在进行断言...") except_data, result = RequestsOperate( current_case=item, all_excel_data_list=excel_data_list).get_response_msg() allure.dynamic.title(item.get('title')) allure.dynamic.description( "<b style='color:red'>请求的url:</b>{0}<hr />" "<b style='color:red'>预期值:</b>{1}<hr />" "<b style='color:red'>实际执行结果:</b>{2}<hr />".format( item["url"], item["except"], result)) assert not DeepDiff(except_data, result).get("values_changed", None) logger().info("完成断言,{0}-{1}".format(except_data, result))
def _send_msg(self): """发请求""" logger().info("正在向{0}发送请求,{1}".format(self.current_case.get("url"), self.current_case)) response = requests.request( method=self.current_case.get("method"), url=self.current_case.get("url"), data=self._check_request_data(), params=self._check_request_params(), cookies=self._check_request_cookies(), headers=self._check_request_headers(), ) self._write_cookies(response) return json.loads(self.current_case.get("except")), response.json()
def test_case(self, item): logger().info('正在进行断言.....') except_date, result = RequestsOperate(current_case=item, all_excel_data_list=excel_data_list).get_response_msg() # print(DeepDiff(except_date, result)) allure.dynamic.title(item['title']) allure.dynamic.description( "<b style='color:red'>请求的url:</b>{}<hr />" "<b style='color:red'>预期值: </b>{}<hr />" "<b style='color:red'>实际执行结果: </b>{}<hr />".format(item['url'], item['except'], result) ) assert not DeepDiff(except_date, result).get('values_changed', None) logger().info('完成断言,{}'.format(except_date, result))
def test_case(self, item): logger().info("正在进行断言...") except_data, result = RequestsOperate( current_case=item, all_excel_data_list=excel_data_list).get_response_msg() allure.dynamic.title(item.get('title')) allure.dynamic.description( "<b style='color:red'>请求的url:</b>{0}<hr />" "<b style='color:red'>response预期值:</b>{1}<hr />" "<b style='color:red'>实际执行结果:</b>{2}<hr />" "<b style='color:red'>code预期值:</b>{3}<hr />" "<b style='color:red'>实际执行结果:</b>{4}<hr />".format( item["url"], item["except"], result, json.loads(item["except"]).get("code"), result.get("code"))) assert result.get("code") == json.loads(item["except"]).get("code") logger().info("完成断言,{0}-{1}".format(except_data, result))
def get_excel(self): """ 获取Excel数据 """ # l = [] title = self.sheet.row_values(0) # print(title) # for row in range(1, self.sheet.nrows): # l.append(dict(zip(title, self.sheet.row_values(row)))) # return l # print(1111, self.sheet.nrows) l = [ dict(zip(title, self.sheet.row_values(row))) for row in range(1, self.sheet.nrows) ] logger().info('读取Excel 成功,数据已返回') return l
def send_mail(self): # 第三方 SMTP 服务 mail_host = settings.MAIL_HOST # 设置服务器 # 勿动 mail_user = settings.MAIL_USER # 用户名 mail_pass = settings.MAIL_TOKEN # 口令 # 设置收件人和发件人 sender = settings.SENDER receivers = settings.RECEIVERS # 创建一个带附件的实例对象 message = MIMEMultipart() # 邮件主题、收件人、发件人 subject = settings.THEME # 邮件主题 message['Subject'] = Header(subject, 'utf-8') message['From'] = Header("{}".format(sender), 'utf-8') # 发件人 message['To'] = Header("{}".format(';'.join(receivers)), 'utf-8') # 收件人 # 邮件正文内容 send_content = settings.SEND_CONTENT content_obj = MIMEText(send_content, 'plain', 'utf-8') # 第一个参数为邮件内容 message.attach(content_obj) # 构造附件 att = MIMEText(_text=self._get_zip_file(), _subtype='base64', _charset='utf-8') att["Content-Type"] = 'application/octet-stream' att["Content-Disposition"] = 'attachment; filename="{}"'.format( settings.SEND_FILE_NAME) # # filename 为邮件附件中显示什么名字 message.attach(att) try: smtp_obj = smtplib.SMTP() smtp_obj.connect(mail_host, 25) # 25 为 SMTP 端口号 smtp_obj.login(mail_user, mail_pass) smtp_obj.sendmail(sender, receivers, message.as_string()) smtp_obj.quit() logger().info('邮件发送成功') except smtplib.SMTPException as e: logger().error('email send error: {}'.format(e))
def exec_sql_file(self, sqlPath): """ 执行SQL文件,对数据初始化 """ db = pymysql.connect(**config) cursor = db.cursor() try: with open(u'../conf/{0}'.format(sqlPath), 'r+') as f: sql_list = f.read().split(';')[:-1] # sql文件最后一行加上; sql_list = [ x.replace('\n', ' ') if '\n' in x else x for x in sql_list ] # 将每段sql里的换行符改成空格 ##执行sql语句,使用循环执行sql语句 for sql_item in sql_list: print(sql_item) cursor.execute(sql_item) except BaseException as e: logger().warning("运行sql[{0}]时出现错误,错误代码:{1}".format(sql_item, e)) finally: cursor.close() db.commit() db.close()
def check_zip(self): """打包""" try: logger().info("正在打包测试报告......") BASE_DIR = os.path.join(settings.BASE_DIR, "report") start_zip_dir = os.path.join(BASE_DIR, "allure_result") # 要压缩文件夹的根路径 zip_file_name = 'allure_report.zip' # 为压缩后的文件起个名字 zip_file_path = os.path.join(BASE_DIR, zip_file_name) f = zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) for dir_path, dir_name, file_names in os.walk(start_zip_dir): # 要是不replace,就从根目录开始复制 file_path = dir_path.replace(start_zip_dir, '') # 实现当前文件夹以及包含的所有文件 file_path = file_path and file_path + os.sep or '' for file_name in file_names: f.write(os.path.join(dir_path, file_name), file_path + file_name) f.close() logger().info("打包测试报告完成......") except Exception as er: logger().error("打包测试报告失败:{0}".format(er))
def select_mysql(self, sql): """ Sql查询 """ try: db = pymysql.connect(**config) cursor = db.cursor() logger().info("正在向{0}发送请求:{1}".format(config.get("host"), sql)) cursor.execute(sql) message = self._get_dict_data_sql( cursor, cursor.fetchall()) # 入参1:sql对象,入参2:select返回结果 db.commit() logger().info("{0}查询成功:{1},结果是:{2}".format(config.get("host"), sql, message)) return message except Exception as e: db.rollback() logger().warning("运行{0}-{1}方法时出现错误,错误代码:{}".format( config.get("host"), sql, e)) finally: cursor.close() db.close()