【接口自动化之发送钉钉消息】

一、前言

一般做接口自动化发送报告都是用测试框架自带或者allure测试报告,这种报告内容较为详细,但是执行用例次数多时,每次都要打开报告阅读,既费时又费力。其实我们只看成功数、失败数,通过率等主要信息,那我们怎么做才能每次构建后快速看到执行结果信息呢?那就是我们工作经常用到的钉钉了,系好安全带,咋们开车啦。

二、钉钉群自定义机器人配置及发送消息代码

  1. 钉钉群自定义机器人配置如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  1. 钉钉消息发送支持html、文本 (text)、链接 (link)、markdown(markdown)、ActionCard、FeedCard消息类型,下方只列出actionCard发送消息代码,其他格式只是请求参数略有变化,详情请到 钉钉官网查看,代码如下:
# coding=utf-8
# @Author : 梗小旭
# @Time   : 2022-10-31
# @File   : send_dingding_msg.py

import requests
from conf.setting import setting

def send_dingding_msg(content: str):
    """
    支持以html、markdown语法的格式发送消息给钉钉群
    :param content: 消息内容
    :return:
    """
    url = f"https://oapi.dingtalk.com/robot/send?access_token={setting.DING_ACCESS_TOKEN}"  # 配置文件中的access_token,对应钉钉群配置的Webhook信息
    headers = {'Content-Type': 'application/json'}

    data = {
        "msgtype": "actionCard",
        "actionCard": {
            "title": "接口自动化测试报告",
            # 要发送的内容【支持markdown】【!注意:content内容要包含机器人自定义关键字,不然消息不会发送出去,这个案例中是“接口自动化”字段】
            "text": content,
            "btnOrientation": "1",
            "btns": [
                {"title": "查看详情",
                 "actionURL": "https://www.dingtalk.com/"}  # 测试报告地址,可以更改为allure报告地址
            ]
        },
        "at": {
            # 要@的人
            # "atMobiles": mobile_list,
            # 是否@所有人
            "isAtAll": True
        }
    }

    res = requests.post(url=url, headers=headers, json=data)

    return res

三、pytest_terminal_summary钩子函数

  1. 当使用pytest框架执行完用例后,想要拿到用例的执行结果时,使用pytest_terminal_summary钩子函数可以拿到执行结果数据,源代码如下:
    在这里插入图片描述
    参数解释
    terminalreporter:内部终端报告器对象
    exitstatus:返回给操作系统的返回码
    config:pytest的config对象

  2. 在conftest.py文件中添加pytest_terminal_summary,代码如下:

# coding=utf-8
# @Author : 梗小旭
# @Time   : 2022-10-31
# @File   : conftest.py

import time
from common.send_dingding_msg import send_dingding_msg

def pytest_terminal_summary(terminalreporter, exitstatus, config):

    total = terminalreporter._numcollected
    passed = len([i for i in terminalreporter.stats.get('passed', []) if i.when != 'teardown'])
    failed = len([i for i in terminalreporter.stats.get('failed', []) if i.when != 'teardown'])
    error = len([i for i in terminalreporter.stats.get('error', []) if i.when != 'teardown'])
    skipped = len([i for i in terminalreporter.stats.get('skipped', []) if i.when != 'teardown'])
    success_rate = round(passed / total,4) * 100
    duration = time.time() - terminalreporter._sessionstarttime
    content = f"""
### ✨接口自动化报告✨
- <font color="#444444">用例总数:{total}</font>
- <font color="#66FF66">成功数:{passed}</font>
- <font color="#FF5511">失败数:{failed}</font>
- <font color="#FF0000">错误数:{error}</font>
- <font color="#FFFF33">跳过数:{skipped}</font>
- <font color="#444444">成功率:▓▓▓▓▓▓▓▓▓▓▓ {success_rate} %</font>
- <font color="#444444">执行时间:{round(duration,2)} s</font>
    """

    send_dingding_msg(content)

四、运行用例及结果展示

  1. 新建test_demo文件,代码如下:
# coding=utf-8
# @Author : 梗小旭
# @Time   : 2022-10-31
# @File   : test_demo.py

import pytest


def test_01():
    assert 1 == 1


def test_02():
    assert 1 == 2


@pytest.mark.skip("跳过")
def test_03():
    assert 2 == 2

if __name__ == '__main__':
    pytest.main(["-s","-q","test_demo.py"])

  1. 执行用例完成后,钉钉消息报告如下:
    在这里插入图片描述
  2. 一份简单的消息报告就好了,大家可以根据自己情况更改报告样式,如果文件对你有用,赶快学起来吧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值