Allure趋势图本地显示

Allure趋势图本地显示Allure趋势图本地显示众所周知,allure趋势图在本地运行的时候,总是显示的空白,但与Jenkins集成后,生成的报告却显示了整个趋势如果不与Jenkins集成就真的没办法展示趋势图吗?答案是NO,没有趋势图我们就自己写????一、首先看下Jenkins集成allure展示的趋势图是什么样子的展示了每次运行的结果对应构建的次数点击可以跳转到对应的构建结果报告整体趋势一目了然二、研究Jenkins生成的allure报告有什么规律1、打开家目录中的.jenkins/jobs/te

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Allure趋势图本地显示

众所周知,allure趋势图在本地运行的时候,总是显示的空白,但与Jenkins集成后,生成的报告却显示了整个趋势

如果不与Jenkins集成就真的没办法展示趋势图吗?
答案是NO,没有趋势图我们就自己写?

一、首先看下Jenkins集成allure展示的趋势图是什么样子的

在这里插入图片描述

  1. 展示了每次运行的结果
  2. 对应构建的次数
  3. 点击可以跳转到对应的构建结果报告
  4. 整体趋势一目了然

二、研究Jenkins生成的allure报告有什么规律

1、打开家目录中的.jenkins/jobs/test (test是Jenkins上的任务名称)

image-20201215084020618.png

2、builds构建历史都在此文件夹中

在这里插入图片描述

3、进去每次构建的文件夹即可看到每次的构建结果

在这里插入图片描述

4、archive文件夹存放的就是每次生成的allure报告压缩包在这里插入图片描述

5、解压后,找到history-trend.json这个json里面存放的就是每次的构建结果,看名字就能得知历史趋势

在这里插入图片描述

6、分析history-trend.json文件的规律

  1. 整体的文件里面最外层是一个”列表”
  2. “列表”里面嵌套的是每次构建的历史,是一个”字典”
  3. 每一个”字典”里面又包含
    1. buildOrder:构建次数
    2. reportUrl:报告的url
    3. reportName:报告名称
    4. data:报告执行结果

7、再回过头看下我们自己生成的报告中的history-trend.json

1)使用命令allure generate test_allure_reports -o allure-reports --clean将报告转成一个静态工程
在这里插入图片描述

2)找到history-trend.json
在这里插入图片描述

3)history-trend.json文件里面数据只有data,并没有构建次数、报告url和报告名称

8、总结

  1. 每次生成报告的时候需要在history-trend.json文件更新之前运行的结果
  2. 并且要在history-trend.json文件中的每次生成报告的时候添加 构建次数报告url
  3. 添加构建次数是为了使得趋势图能够按照顺序展示
  4. 添加报告url是为了使得点击趋势图可以进行跳转,查看历史报告

三、正式开始改造报告

目标:

  • 每次的报告都要进行储存
  • history-trend.json里面的数据每次都要把历史的数据更新进去
  • history-trend.json数据里面的”字典”需要添加至少两个”key”:buildOrderreportUrlreportName(这个可要可不要)
  • 每次运行buildOrder要增1,reportUrl是报告要访问的url
  • history-trend.json数据要根据每个”字典”中的buildOrder从大到小进行排序
  • history-trend.json历史数据需要进行备份,方便新生成的报告进行历史数据写入

第一步:对每次生成的报告进行储存

# 生成Allure报告
# BASEDIR 是项目位置
# ALLURE_DIR是allure报告存放位置
# ALLURE_PATH 是根据当前时间戳生成allure报告
ALLURE_PATH = os.path.join(ALLURE_DIR, str(int(time())))
command = f'pytest {BASEDIR} -s --alluredir={ALLURE_PATH}'
os.system(command)

# 对生成的Allure报告进行进一步演进(生成一个相对独立的报告静态工程)
# ALLURE_PLUS_DIR 是存放要生成的报告
# buildOrder 是表示以构建次数为文件夹名称
command = f"allure generate {ALLURE_PATH} -o {os.path.join(ALLURE_PLUS_DIR,str(buildOrder))} --clean"
os.system(command)

第二步:获取历史数据和构建次数

def get_dirname():
    hostory_file = os.path.join(ALLURE_PLUS_DIR, "history.json")
    if os.path.exists(hostory_file):
        with open(hostory_file) as f:
            li = eval(f.read())
        # 根据构建次数进行排序,从大到小
        li.sort(key=lambda x: x['buildOrder'], reverse=True)
        # 返回下一次的构建次数,所以要在排序后的历史数据中的buildOrder+1
        return li[0]["buildOrder"]+1, li
    else:
        # 首次进行生成报告,肯定会进到这一步,先创建history.json,然后返回构建次数1(代表首次)
        with open(hostory_file, "w") as f:
            pass
        return 1, None

第二步:更新备份历史数据history.json和每个报告中的history-trend.json

def update_trend_data(dirname, old_data: list):
    """ dirname:构建次数 old_data:备份的数据 update_trend_data(get_dirname()) """
    WIDGETS_DIR = os.path.join(ALLURE_PLUS_DIR, f"{str(dirname)}/widgets")
    # 读取最新生成的history-trend.json数据
    with open(os.path.join(WIDGETS_DIR, "history-trend.json")) as f:
        data = f.read()

    new_data = eval(data)
    if old_data is not None:
        new_data[0]["buildOrder"] = old_data[0]["buildOrder"]+1
    else:
        old_data = []
        new_data[0]["buildOrder"] = 1
    # 给最新生成的数据添加reportUrl key,reportUrl要根据自己的实际情况更改
    new_data[0]["reportUrl"] = f"{allure_url}/{dirname}/index.html"
    # 把最新的数据,插入到备份数据列表首位
    old_data.insert(0, new_data[0])
    # 把所有生成的报告中的history-trend.json都更新成新备份的数据old_data,这样的话,点击历史趋势图就可以实现新老报告切换
    for i in range(1, dirname+1):
        with open(os.path.join(ALLURE_PLUS_DIR, f"{str(i)}/widgets/history-trend.json"), "w+") as f:
            f.write(json.dumps(old_data))
    # 把数据备份到history.json
    hostory_file = os.path.join(ALLURE_PLUS_DIR, "history.json")
    with open(hostory_file, "w+") as f:
        f.write(json.dumps(old_data))
    return old_data, new_data[0]["reportUrl"]

第三步:调用顺序(需要使用os.system进行执行命令行)

ALLURE_PATH = os.path.join(ALLURE_DIR, str(int(time())))
command = f'pytest {BASEDIR} -s --alluredir={ALLURE_PATH}'
os.system(command)
# 先调用get_dirname(),获取到这次需要构建的次数
buildOrder, old_data = get_dirname()
# 再执行命令行
command = f"allure generate {ALLURE_PATH} -o {os.path.join(ALLURE_PLUS_DIR,str(buildOrder))} --clean"
os.system(command)
# 执行完毕后再调用update_trend_data()
all_data,reportUrl = update_trend_data(buildOrder, old_data)

四、看下实现后的效果

趋势图

在这里插入图片描述

报告截图

在这里插入图片描述

五、跟Jenkins进行对比(一毛一样)?

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164420.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sql Server配置管理器[通俗易懂]

    sql Server配置管理器[通俗易懂]一个是书里的,一个是我的,对比一下一:管理SQLServer2008服务开始—-所有程序—-MicrosoftSQLServer2008R2—-配置工具—-SQL Server配置管理器  …

    2022年7月21日
    11
  • java 长轮询_java – Spring中的长轮询[通俗易懂]

    java 长轮询_java – Spring中的长轮询[通俗易懂]我们有一个独特的案例,我们需要与外部API接口,这需要我们长时间轮询他们的端点以获得他们所谓的实时事件.问题是我们可能有多达80,000人/设备在任何给定时间点击此端点,监听事件,每个设备/人1个连接.当客户端从我们的Spring服务发出请求以对事件进行长轮询时,我们的服务随后会对外部API进行异步调用以对事件进行长轮询.外部API已定义最小长轮询超时可设置为180秒.所以在这里我们遇到一个带队列…

    2022年10月14日
    2
  • asp.net 微信分享到朋友圈,分享给朋友接口

    asp.net 微信分享到朋友圈,分享给朋友接口微信分享到朋友圈,分享给朋友说明:转载:http://www.cnblogs.com/ysyn/archive/2015/07/23/4665897.html、引言:  工作中开发微信网站,简称微网站。由于微网站的分享内容是系统自动选取的当前网址,客户需要改变分享的内容,即点击屏幕右上角的分享按钮,选择发送给朋友和发送到朋友圈,其中的内容和图片需要自定义。于

    2022年5月27日
    41
  • 激活成功教程软件_奇()怪()

    激活成功教程软件_奇()怪()这是博主的私人网站,里面收录了很多激活成功教程软件,以及一些奇奇怪怪的网站,这个网站已经经过国家工信部备案了,里面的内容博主都测试过才收录进来的,可以放下访问http://www.resourcestation.xyz…

    2022年10月12日
    1
  • docker安装RabbitMQ「建议收藏」

    docker安装RabbitMQ「建议收藏」docker安装RabbitMQ查看仓库里的RabbitMQdockersearchrabbitmq安装RabbitMQdockerpullrabbitmq这里是直接安装最新的,如果需要安装其他版本在rabbitmq后面跟上版本号即可启动RabbitMQdockerrun-d–hostnamemy-rabbit–namerabbit-p15672:15672-p5672:5672rabbitmq安装插件先执行dockerps拿到当前的镜像ID

    2022年5月24日
    39
  • MATLAB分段函数及应用实例

    MATLAB分段函数及应用实例简单实例:用matlab画分段函数        当x<0时 y=5*sin(x);        当x>=0且x<=5时y=x^2;        当x>5时y=(8-x)^2+16.x=-5:0.001:10;y=5*sin(x).*(x<0)+x.^2.*(x>=0&x<=5)+((8-x).^2+16).*(x>5);p…

    2022年6月7日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号