pytest allure smtp自动化测试

文件目录:

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 = 'kx113578@163.com'  # 发件人邮箱账号
        self.my_pass = '########'  # 发件人邮箱密码,此处为授权码
        self.my_user = '1135790024@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测试报告:

邮件通知:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值