pytest 测试结果发送企业微信

文章讲述了如何在Pytest执行完成后,通过修改conftest.py文件,实现测试用例的通过、失败和错误数量的统计,并将结果发送到企业微信,同时提及负责人。涉及的方法包括重写pytest_terminal_summary和pytest_sessionfinish钩子函数。
摘要由CSDN通过智能技术生成

Pytest执行用例之后,将结果发送到企业微信,告知具体用例通过个数和失败个数,并@对应负责人

1、获取Pytest执行的结果

方法1.conftest.py中重写pytest_terminal_summary方法

import time

from utils.send_WeChat import Enterprise_WeChat_notification


def pytest_terminal_summary(terminalreporter, exitstatus, config):
    total = terminalreporter._numcollected
    passed = len(terminalreporter.stats.get('passed', []))
    failed = len(terminalreporter.stats.get('failed', []))
    error = len(terminalreporter.stats.get('error', []))
    skipped = len(terminalreporter.stats.get('skipped', []))
    wechat = Enterprise_WeChat_notification(total=total, passed=passed, failed=failed, error=error,
                                            skipped=skipped)  # 获取企业微信,暂时不需要看
    print("total:", terminalreporter._numcollected)
    # terminalreporter._sessionstarttime 会话开始时间
    duration = time.time() - terminalreporter._sessionstarttime
    print('total times:', duration, 'seconds')
    wechat.send()  # 企业微信发送消息,暂时不需要看

方法2.conftest.py中重写pytest_sessionfinish方法

def pytest_sessionfinish(session):
    # with open(f"{project_path}/config/environment.properties", "r") as f:
    #     r = f.readlines()
    # r[0] = f"Runtime={time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}\n"
    # r[1] = f"Platform={sys.platform}\n"
    # r[2] = f"python.Version={platform.python_version()}"
    # with open(f"{project_path}/config/environment.properties", "w") as fw:
    #     fw.writelines(r)
    # os.system(f"cp {project_path}/config/environment.properties {project_path}/report/result")
    # cmd = "{} generate {} -o {} -c".format(report_action.allure, result_dir, allure_report)
    # # cmd_server = f"{report.allure} open -h 127.0.0.1 -p 3333 {allure_report}"
    # subprocess.call(cmd, shell=True)
    # logger.info("allure报告生成完毕!")
    terminalreporter = session.config.pluginmanager.get_plugin('terminalreporter')
    total_case = terminalreporter._numcollected
    pass_case = len([i for i in terminalreporter.stats.get('passed', []) if i.when != 'teardown'])
    fail_case = len([i for i in terminalreporter.stats.get('failed', []) if i.when != 'teardown'])
    error_case = len([i for i in terminalreporter.stats.get('error', []) if i.when != 'teardown'])
    skip_case = len([i for i in terminalreporter.stats.get('skipped', []) if i.when != 'teardown'])
    pass_rate = round((len(terminalreporter.stats.get('passed', [])) / (total_case - skip_case) * 100), 2)
    # run_time = round((time.time() - terminalreporter._sessionstarttime), 2)
    duration = round((time.time() - terminalreporter._sessionstarttime), 2)
    wechat = Enterprise_WeChat_notification(passed=pass_case, failed=fail_case, error=error_case, skipped=skip_case,
                                            total=total_case, duration=duration)
    wechat.send()  # 企业微信发送消息ss
    # logger.info("测试结果发送完毕!")

该方法名称固定,是pytest 执行用例之后,固定执行的方法,其中terminalreporter 类中的stats中存放用例执行之后的各种数据,失败和成功的个数也是从里面获取
这样有了数据之后,就可以准备企业微信了。

2、Python发送消息到企业微信

简单的说:
1、在企业微信中添加群机器人,获取webhook地址,webhook就是一个url,通过post请求访问
2、编辑想要发送的消息,一种是文本类型,一种是Markdown类型(更好看)
3、最后通过post请求该企业微信的url

import requests

from utils.const import WECHAT_URL


class Enterprise_WeChat_notification():
    def __init__(self, total, passed, failed, error, skipped):
        self.url = WECHAT_URL
        self.header = {'Content-Type': 'application/json'}
        message = "自动化已完成,总共 {}条,通过 <font color=\"info\">{}条</font>,失败 <font color=\"warning\">{}条</font>,error <font color=\"red\">{}条</font>,skipped <font color=\"blue\">{}条</font>".format(
            total, passed, failed, error, skipped)
        self.payload = {
            "msgtype": "markdown",
            "markdown": {
                "content": message,

            }
        }
        self.remind = {
            "msgtype": "text",
            "text": {
                "mentioned_list": ["人1", "人2"],
                "mentioned_mobile_list": ["123456", "654321"]
            }
        }

    def send(self):
        requests.post(url=self.url, headers=self.header, json=self.payload)
        requests.post(url=self.url, headers=self.header, json=self.remind)

3、用例颜色

<font color = red>1.我是文本 红色red</font>
<font color = blue>2.我是文本 蓝色</font>
<font color = pink>3.我是文本 粉红</font>
<font color = purple>4.我是文本 紫色</font>
<font color = black>5.我是文本 黑色</font>
<font color = Orange>6.我是文本 橙色</font>
<font color = gray>7.我是文本 灰色</font>
<font color = green>8.我是文本 绿色</font>
<font color = #FF0000>8.我是文本 红色#FF0000</font>

您可以使用pytest插件pytest-html来生成测试报告,并通过邮件或其他方式将测试结果发送给相关人员。 首先,您需要安装pytest-html插件。您可以使用以下命令进行安装: ``` pip install pytest-html ``` 安装完成后,在运行pytest测试时,添加`--html`选项,指定生成测试结果报告的文件名和路径。例如: ``` pytest --html=report.html ``` 这将生成一个名为`report.html`的测试结果报告。 如果您想将测试结果发送给相关人员,您可以使用Python的smtplib模块来发送邮件。以下是一个简单的示例,展示如何使用smtplib发送包含测试结果报告的邮件: ```python import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.application import MIMEApplication # 邮件发送者和接收者的信息 sender_email = "your_email_address" receiver_email = "recipient_email_address" password = "your_email_password" # 构造邮件 msg = MIMEMultipart() msg['From'] = sender_email msg['To'] = receiver_email msg['Subject'] = "Test results" body = "Please find attached the test results." msg.attach(MIMEText(body, 'plain')) with open("report.html", "rb") as f: attach = MIMEApplication(f.read(),_subtype="html") attach.add_header('Content-Disposition','attachment',filename=str("report.html")) msg.attach(attach) # 发送邮件 server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(sender_email, password) text = msg.as_string() server.sendmail(sender_email, receiver_email, text) server.quit() ``` 请注意,您需要在代码中替换`sender_email`,`receiver_email`和`password`为您自己的信息。此外,您还需要在您的电子邮件提供程序中启用SMTP访问权限,以便通过Python代码发送电子邮件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值