• Jenkins+Allure测试报告+飞书机器人发送通知


    一、前言

      之前讲了jenkins如何设置定时任务执行脚本,结合实际情况,本篇讲述在jenkins构建成功后,如何生成测试报告,以及推送飞书(因为我公司用的是飞书,所以是发送到飞书机器人)。

      本次实践搞了一天,踩了一些坑,其中有2个坑可参考如下:

      1、关于jenkins生成allure报告是空的:https://blog.csdn.net/qq_37159446/article/details/122233467

      2、如遇到构建报错:ValueError: option names {'--alluredir'} already added

      解决方案:

      pytest-allure-adaptor与allure-pytest的alluredir都被引用造成冲突
      pip3 uninstall allure-pytest
      module 'pytest' has no attribute 'allure'问题解决
      pip3 uninstall pytest-allure-adaptor
      pip3 install allure-pytest

    二、Jenkins生成Allure报告

    1、jenkins安装allure插件

      进入jenkins-系统配置-插件管理-可选插件,输入allure后搜索安装

     2、jenkins配置全局工具配置

      进入jenkins-系统管理-全局工具配置,配置allure

    3、jenkins配置项目的构建后操作

      进入构建项目的配置页面,选中构建后操作tab,增加构建后操作步骤选择 Allure Report

    Results path填写结果文件路径

     

    构建后操作tab点击高级,配置generate路径

     

     4、构建执行shell,如下图

    因为我的脚本中有job_url和job_name,所以shell命令后面要带上jenkins内置变量,如果不需要的话也可以不用后面那串,即直接写 python3 excute.py

    特别注意:服务器需要安装allure,具体怎么安装可看我之前的博客或者百度(pip3 install allure-pytest)

    5、附上Python项目结构图和excute.py代码

     

    # -*- coding:utf-8 -*-
    import pytest
    import os
    
    
    if __name__ == '__main__':
        # pytest执行脚本并生成测试结果文件到report/tmp目录下
        pytest.main(['-s','--alluredir','report/tmp'])
    
        # 将report/tmp目录下的结果文件生成html类型的测试报告文件到report/html目录下
        # -o report/html --clean 是为了清空已有的测试报告再生成
        os.system(r'allure generate report/tmp -o report/html --clean')

     6、附上jenkins构建控制台图和allure报告

     

     

     

     7、附上服务器的文件结构

     

    三、Jenkins发送飞书通知

      参考:https://blog.csdn.net/jialiu111111/article/details/122129334

    1、 在飞书群中添加自定义机器人,步骤截图如下:

    (因为飞书截图有水印,所以这里用别人的博客的图)

    图1

     图2

     

    图3

     

     图4

    2、将这个webhook地址保存起来,后面需要用到

    3、Python发送通知的脚本

      创建feishu.py脚本文件,需要将你的webhook地址拷贝到脚本中的url中,思路是找出jenkins的内置变量,将jenkins内置变量定义为python脚本系统变量(sys.argv[1])

    # -*- encoding: utf-8 -*-
    """
    @Author  : yijiayi
    @File    :feishu.py
    @Time    :2022/4/13 13:41
    @Remark :飞书通知
    """
    import sys
    import requests
    
    #定义python系统变量
    JOB_URL = sys.argv[1]
    JOB_NAME = sys.argv[2]
    
    # 飞书机器人的webhook地址
    url = 'https://open.feishu.cn/open-apis/bot/v2/hook/xxx4'
    method = 'post'
    headers = {'Content-Type':'application/json'}
    
    data = {
        "msg_type": "interactive",
        "card": {
            "config": {
                    "wide_screen_mode": True,
                    "enable_forward": True
            },
            "elements": [{
                    "tag": "div",
                    "text": {
                            "content": "用例已执行完成", # 这是卡片的内容,也可以添加其他的内容:比如构建分支,构建编号等
                            "tag": "lark_md"
                    }
            }, {
                    "actions": [{
                            "tag": "button",
                            "text": {
                                    "content": "查看测试报告", # 这是卡片的按钮,点击可以跳转到url指向的allure路径
                                    "tag": "lark_md"
                            },
                            "url": f"{JOB_URL}/allure/", # JOB_URL 调用python定义的变量,该url是服务器下的allure路径
                            "type": "default",
                            "value": {}
                    }],
                    "tag": "action"
            }],
            "header": {
                    "title": {
                            "content": JOB_NAME + "构建报告", # JOB_NAME 调用python定义的变量,这是卡片的标题
                            "tag": "plain_text"
                    }
            }
        }
    }
    res= requests.request(method=method,url=url,headers=headers,json=data)
    print(res)
    print(res.json())

    4、Jenkins项目中添加配置

    1)运行Python脚本语言需要一些环境,我使用Python3,安装Python3的工具

    2)在配置中的构建中 加上一行命令即可,如下图:

      我这里的testcase是项目目录下的,所以要结合你们项目实际情况变更

      shell的变量顺序要跟python定义的系统变量顺序一致,比如python脚本里定义的job_url在前面,那jenkins的shell命令就要将job_url写在前面

    python3 testcase/feishu.py $JOB_URL $JOB_NAME

    3)构建完成之后,飞书群里就能收到对应的消息,如下图:

      我这里就不截图我自己的飞书通知,因为有水印,所以用的是网上的图,具体接口中对应图里哪个字段,在上面的脚本代码中有注释

     

     
  • 相关阅读:
    [转]HSPICE软件的应用及常见问题解决
    Node.js基于Express框架搭建一个简单的注册登录Web功能
    Node.js开发Web后台服务
    mysql update 将一个表某字段设为另一个表某字段的值
    一个最简的Thinkphp3.2 操作Mongodb的例子
    MongoDB GUI( Robo 3T) Shell使用及操作
    Robomongo,Mongo可视化工具
    thinkphp mysql和mongodb 完美使用
    大型网站系统架构演化之路
    30个php操作redis常用方法代码例子
  • 原文地址:https://www.cnblogs.com/Chilam007/p/16135023.html
Copyright © 2020-2023  润新知