python 接口自动化unittest+DingtalkChatbot钉钉机器人消息封装

python 接口自动化unittest+DingtalkChatbot机器人消息封装


安装DingtalkChatbot:

pip install DingtalkChatbot

钉钉配置机器人:
智能群助手
在这里插入图片描述
给机器人取一个名字~
webhook需要保存好,需要传入钉钉DingtalkChatbot()方法内
在这里插入图片描述
在这里插入图片描述
自定义关键词,这里需要注意一下,自定义关键词内的文案在msg内一定要有,否则无法触发机器人报警
在这里插入图片描述

在这里插入图片描述

钉钉模块内有很多种类型的消息场景,我的目的是接口自动化巡检,所以只需要消息场景就可以,其他的场景感兴趣的可以查一下场景字段参数~
在这里插入图片描述
把自己想要的日志内容写在msg内,并且单独封装一个方法获取需要的消息参数内容

# WebHook地址
from dingtalkchatbot.chatbot import DingtalkChatbot


class DingDing:
    def __init__(self):
        self.yhn = "9z7_66n6cmbqy"
        self.webhook = "https://oapi.dingtalk.com/robot/send?access_token=6e3cc2451e89506e630b5be62de31ef28501a32bd2ef1181aaaa968527624b9b"
        
    def run_error(self, *args):
        xiaoding = DingtalkChatbot(self.webhook)
        xiaoding.send_text(
            msg=f'监测预警,测试用例数量:{args[0]},用例异常数量: {args[1]}'
                f'\n测试用例名称:{args[2]}\n日志内容:{args[3]}'
                f'\n链接地址:{args[4]} 请注意及时处理!',
            at_dingtalk_ids=[self.yhn],
            is_at_all=False
        )

    def run_normal(self, *args):
        xiaoding = DingtalkChatbot(self.webhook)
        xiaoding.send_text(
            msg=f'监测预警,接口自动化case执行完毕\n测试用例数量:{args[0]},用例异常数量: {args[1]}'
                f'\n测试报告地址:{args[2]} 请关注~',
            at_dingtalk_ids=[self.yhn],
            is_at_all=False
        )

    def run_trigger(self, list_dict, if_print=True):
        """
        触发钉钉机器人
        :param list_dict: case_list列表
        :param if_print: 是否需要过滤测试通过的case True为是不会触发机器人 False不会过滤
        :return:
        """
        for dict_list in list_dict:
            kwargs = dict_list
            errorCount = kwargs["error_count"]
            testRun = kwargs["testRun"]
            case_name = kwargs["case_name"]
            error = kwargs["error"]
            fail_count = kwargs["failure"]
            count = errorCount + fail_count
            # todo 缺少报告地址获取
            report_url = "完善中,后期替换~"
            if count != 0:
                if error != "":
                    self.run_error(testRun, count, case_name, error, report_url)
                elif not if_print:
                    error = "当前case执行通过"
                    self.run_error(testRun, errorCount, case_name, error, report_url)
            else:
                return self.run_normal(testRun, errorCount, report_url)

书接上回,上一章写的是html报告与unittest执行方法的封装,我的目的是获取到一些报告内的用例名称/错误参数/执行用例数量/与用例异常数量,通过机器人发送到群内,所以需要取出数据,然后传给钉钉机器人方法

下面是接着上一章的两个方法获取下来result参数内容,然后通过字典的形式储存,因为是多条case,所以每执行一条需要在list内储存一份,这样每条case的数据就都有了,然后再通过封装好的

DingDing().run_trigger(result_list_dict, True)

钉钉的方法把参数带入,这里需要注意的一点就是,error异常与fail失败是分开的数量,所以要分别储存,然后相加数量来判断是否有异常case~

def run_dingDing(way, run_list, test_py=None):
    result_list_dict = []
    global result
    if way == 1:
        result = run_py(run_list)
    elif way == 2:
        result = run_case(test_py, run_list)
    error_count = result.error_count
    testRun = result.testsRun
    failure = result.failure_count
    result_list = list(result.result)
    for rel in result_list:
        dict_result = {
            "error_count": error_count,
            "testRun": testRun,
            "failure": failure,
            "case_doc": rel[1]._testMethodDoc,
            "case_name": rel[1]._testMethodName,
            "error": rel[3]
        }
        result_list_dict.append(dict_result)
    #     print(f"dict_result{dict_result}")
    # print(f"result_list_dict{result_list_dict}")
    DingDing().run_trigger(result_list_dict, True)
    return result_list_dict


if __name__ == '__main__':
    file_list = ["test_shiyan.py", "MeetSpringFestival.py"]
    # run_py(file_list)
    case_list = ["test_case_01", "test_case_02"]
    # run_case(test_sample, case_list)
    dingDing_list = [2, case_list, test_sample]
    run_dingDing(*dingDing_list)

下期会加入定时任务,定时执行接口自动化巡检触发钉钉~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值