pytest allure smtp自动化测试
程序员文章站
2022-04-10 20:57:21
...
文件目录:
student_detail.xls
demo1.py
import time import pytest import os import sys from utils.emailhandler import EmailHandler sys.path.append("../../") from utils.loghandle import logger from settings.config import ALLURE_COMMAND from utils.excelhandler import ExcelHandler class TestLogin(): @pytest.mark.parametrize("case", ExcelHandler().list1) def test_01(self, case): print(case) logger().info("{}执行成功".format(case)) def test_02(self): print("这是执行了test_02") def teardown_class(self): # 生成allure报告 try: # popen可以执行cmd命令 os.popen(ALLURE_COMMAND) logger().warning("allure报告生成成功") except: logger().warning("输入报告错误") #发送邮件 time.sleep(5) EmailHandler().send_email() if __name__ == '__main__': pytest.main(["-s", "./demo1.py"])
config.py
import os import datetime BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) print(BASE_DIR) result_path = os.path.join(BASE_DIR, 'reports', 'result') # ------------ allure 相关配置 ----------- allure_html_path = os.path.join(BASE_DIR, 'reports', 'allure_html') ALLURE_COMMAND = 'allure generate {} -o {} --clean'.format(result_path, allure_html_path) TEST_CASE_REPORT_PATH = os.path.join(BASE_DIR, 'reports', 'report.html') # ---------------- 日志相关 -------------------- # 日志级别 LOG_LEVEL = 'debug' LOG_STREAM_LEVEL = 'debug' # 屏幕输出流 LOG_FILE_LEVEL = 'info' # 文件输出流 # 日志文件命名 LOG_FILE_NAME = os.path.join(BASE_DIR, 'log', datetime.datetime.now().strftime('%Y-%m-%d') + '.log')
emailhandler.py
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.utils import formataddr from settings.config import TEST_CASE_REPORT_PATH from utils.loghandle import logger class EmailHandler(): def __init__(self): self.my_sender = 'aaa@qq.com' # 发件人邮箱账号 self.my_pass = '########' # 发件人邮箱密码,此处为授权码 self.my_user = 'aaa@qq.com' # 收件人邮箱账号,我这边发送给自己 def email_content(self): with open(TEST_CASE_REPORT_PATH,"rb") as f: return f.read() def send_email(self): f = self.email_content() ret = True try: #创建一个带附件的实例 message = MIMEMultipart() msg = MIMEText('这是接口测试结果……', 'plain', 'utf-8') # 这里面写的是发送的是html message['From'] = formataddr(["ke1", self.my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号 message['To'] = formataddr(["ke2", self.my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号 message['Subject'] = "美丽商城接口测试" # 邮件的主题,也可以说是标题 message.attach(msg) # 邮件正文内容 #添加附件 att1 = MIMEText(f, 'html', 'utf-8') att1["Content-Type"] = 'application/octet-stream' # 这里的filename可以任意写,写什么名字,邮件中显示什么名字 att1["Content-Disposition"] = 'attachment; filename="report.html"' message.attach(att1) #发送邮件 server = smtplib.SMTP_SSL("smtp.163.com", 465) # 发件人邮箱中的SMTP服务器,端口是25 server.login(self.my_sender, self.my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码 server.sendmail(self.my_sender, [self.my_user, ], message.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 server.quit() # 关闭连接 except Exception: # 如果 try 中的语句没有执行,则会执行下面的 ret=False ret = False logger().info("邮件发送失败") logger().info("邮件发送成功") return ret if __name__ == '__main__': EmailHandler().send_email()
excelhandler.py
import xlrd class ExcelHandler(): def __init__(self): rb = xlrd.open_workbook(r"D:\code\day01\excel\student_detail.xls") rt = rb.sheet_by_name("Sheet1") self.list1 = [] for row in range(1, rt.nrows): self.list1.append(rt.row_values(row)) if __name__ == '__main__': print(ExcelHandler().list1)
loghandle.py
import logging from settings import config class LoggerHandler: """ 日志操作 """ _logger_level = { 'debug': logging.DEBUG, 'info': logging.INFO, 'warning': logging.WARNING, 'error': logging.ERROR, 'critical': logging.CRITICAL } def __init__(self, log_name, file_name, logger_level, stream_level='info', file_level='warning'): self.log_name = log_name self.file_name = file_name self.logger_level = self._logger_level.get(logger_level, 'debug') self.stream_level = self._logger_level.get(stream_level, 'info') self.file_level = self._logger_level.get(file_level, 'warning') # 创建日志对象 self.logger = logging.getLogger(self.log_name) # 设置日志级别 self.logger.setLevel(self.logger_level) if not self.logger.handlers: # 设置日志输出流 f_stream = logging.StreamHandler() f_file = logging.FileHandler(self.file_name,encoding="utf-8") # 设置输出流级别 f_stream.setLevel(self.stream_level) f_file.setLevel(self.file_level) # 设置日志输出格式 formatter = logging.Formatter( "%(asctime)s %(name)s %(levelname)s %(message)s" ) f_stream.setFormatter(formatter) f_file.setFormatter(formatter) self.logger.addHandler(f_stream) self.logger.addHandler(f_file) @property def get_logger(self): return self.logger def logger(log_name='接口测试'): return LoggerHandler( log_name=log_name, logger_level=config.LOG_LEVEL, file_name=config.LOG_FILE_NAME, stream_level=config.LOG_STREAM_LEVEL, file_level=config.LOG_FILE_LEVEL ).get_logger if __name__ == '__main__': logger().debug('aaaa') logger().info('aaaa') logger().warning('aaaa')
pytest.ini
[pytest] addopts = -s --html ./reports/report1.html --alluredir ./reports/result test_paths = ./cases python_classes = Test* python_files = demo*.py python_functions = test*
生成的reports目录:
生成的日志:
allure测试报告:
pytest-html测试报告:
邮件通知:
推荐阅读
-
基于pytest+requests+allure 进行接口自动化测试
-
接口自动化pytest+allure框架基本理解-pytest(五)
-
Pytest自动化测试框架学习(三)
-
Pytest接口自动化测试框架搭建模板
-
python+pytest/unittest+yaml+ddt+allure/HTMLTestRunner生成测试报告
-
Python Pytest自动化测试 error与failed的区别
-
pytest自动化测试fixture的作用域实例化顺序及可用性
-
python自动化之如何利用allure生成测试报告
-
自动化测试框架[Cypress结合Allure生成测试报告]
-
使用pytest+allure报告框架生成丰富的测试报告