通过 taurus 在 Jenkins 管道中设置 Gatling 报告名称

Set Gatling report name in Jenkins pipeline througt taurus

我正在编写一个声明性的 jenkins 管道,但我遇到了 gatling 报告的问题:

平均响应时间趋势不正确,有没有办法用曲线代替下面的点云?

从我的 Jenkinsfile 中摘录:

stage('perf') {
  steps {
    bzt params: './taurus/scenario.yml', generatePerformanceTrend: false, printDebugOutput: true
    perfReport configType: 'PRT', graphType: 'PRT', ignoreFailedBuilds: true, modePerformancePerTestCase: true, modeThroughput: true, sourceDataFiles: 'results.xml'
    dir ("taurus/results") {
      gatlingArchive()
    }
  }
}

摘自我的scenario.yml:

modules:
  gatling:
    path:      ./bin/gatling.sh
    java-opts: -Dgatling.core.directory.data=./data

scenario.yml中,我尝试设置gatling.core.outputDirectoryBaseName

java-opts: -Dgatling.core.directory.data=./data -Dgatling.core.outputDirectoryBaseName=./my_scenario

在这种情况下,它仅将 gatling 替换为 my_scenario,但已经存在大量数据。

终于找到了解决这个问题的方法,但是并不简单,涉及到taurus代码的扩展

问题是 here,在 taurus 存储库中文件 gatling.py 的第 309 行。它明确添加前缀 'gatling-' 以查找加特林报告。

但是,文件 scenario.yml 中的参数 -Dgatling.core.outputDirectoryBaseName=./my_scenario 将此前缀更改为 my_scenario。下面我要介绍的是taurus的扩展方法,以便快速扩展。

创建文件 ./extensions/gatling.py 使用此代码扩展 class GatlingExecutor:

from bzt.modules.gatling import GatlingExecutor, DataLogReader

class GatlingExecutorExtension(GatlingExecutor):
    def __init__(self):
        GatlingExecutor.__init__(self)

    def prepare(self):
        # From method bzt.modules.gatling.GatlingExecutor:prepare, copy code before famous line 309
        # Replace line 309 by
        self.dir_prefix = self.settings.get('dir_prefix', 'gatling-%s' % id(self))
        # From method bzt.modules.gatling.GatlingExecutor:prepare, copy code after famous line 309

创建一个文件./bztx.py来包装命令bzt:

import signal
import logging
from bzt.cli import main, signal_handler

if __name__ == "__main__":
    signal.signal(signal.SIGINT, signal_handler)
    signal.signal(signal.SIGTERM, signal_handler)
    main()

更新文件 scenario.yml 使用新设置 属性 dir_prefix 并定义新的执行器 class:

modules:
  gatling:
    path:       ./bin/gatling.sh
    class:      extensions.GatlingExecutorExtension
    dir_prefix: my_scenario
    java-opts:  -Dgatling.core.directory.data=./data -Dgatling.core.outputDirectoryBaseName=./my_scenario

最后,通过调用新文件 bztx.py[=46= 替换 bzt 调用来更新 Jenkinsfile ]:

stage('perf') {
  steps {
    sh 'python bztx.py ./taurus/scenario.yml'
    perfReport configType: 'PRT', graphType: 'PRT', ignoreFailedBuilds: true, modePerformancePerTestCase: true, modeThroughput: true, sourceDataFiles: 'results.xml'
    dir ("taurus/results") {
      gatlingArchive()
    }
  }
}

仅此而已,对我有用。奖励:此解决方案提供了一种使用您自己的插件轻松扩展 taurus 的方法 ;-)