Jmeter+ant+Jenkins 接口自动化框架完整版

news2025/2/3 10:12:10

接口自动化测试单有脚本是不够的,我们还需要批量跑指定接口,生成接口运行报告,定位报错接口,接口定时任务,邮件通知等功能。
批量跑指定接口:我们可以利用ant批量跑指定目录下的Jmeter脚本
生成接口运行报告:使用Jmeter(extras目录下)自带的jmeter-results-detail-report_21.xsl样式文件
定位报错接口:使用扩展的jmeter-results-shanhe-me.xsl(可自行下载,我git地址也放了)样式文件,输出的信息比自带的jmeter-results-detail-report_21.xsl
接口定时任务:使用Jenkins的build periodically完成
邮件通知:使用Jenkins的Extended E-mail Notification插件

顺序从Jmeter-》Jmeter+ant-》Jmeter+ant+Jenkins穿插原理,逐渐过渡,二中讲的是基础(可跳过),三讲的是实践,遇到的问题以及扩展。

二、Jmeter+ant+Jenkins接口自动化框架搭建

1 Jmeter

1、E:\sample下有sample.jmx的脚本文件
2、追加E:\apache-jmeter-2.13\bin到path环境变量后
环境变量配置成功验证-》dos中输入jmeter,windows会直接打开jmeter
3、Dos命令:
cd /d e:
cd sample
jmeter -n -t sample.jmx -l log.jtl

-n 这是指定JMeter在非用户界面模式运行
-t 包含测试计划的JMX文件的名字
-l 记录取样结果的JTL文件的名字

这里要讲两句,我们做接口自动化还好,要是用Jmeter做负载测试时,建议写好性能脚本后,用NON GUI模式进行负载测试,即非图形化界面,也就是建议使用命令行运行!因为图形化界面会消耗资源,导致负载测试结果不精确,特别是用图形化界面时还把查看结果树给打开,查看结果树输出的结果很多,所以,写完负载测试脚本后尽量把查看结果树等调试插件给禁掉
我们启动Jmeter3.0以上版本,也有建议不要使用图形化界面进行负载测试的提示:
翻译:不要使用GUI模式进行负载测试,只用于测试创建和测试调试!

2 Jmeter+ant

1、下载ant后在window中设置ant环境变量:
ANT_HOME 新建:E:\Program Files\apache-ant-1.7.1
path 追加:%ANT_HOME%\bin
环境变量配置成功验证-》dos中输入ant,提示:Buildfile: build.xml does not exist!

2、将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制到Ant所在目录lib子目录之下,这样Ant运行时才能找到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"这个类,从而成功触发JMeter脚本

3、jmeter默认保存的是.csv格式的文件,所以我们先要设置一下bin/jmeter.properties文件内容,保存
jmeter.save.saveservice.output_format=xml
4、主要逻辑思路:
E:\jmeter\build下有build_smoke_report.xml文件
运行E:\jmeter\script_smoke下面的.jmx脚本,生成.jtl文件放入 E:\jmeter\report_smoke文件中
然后ant再利用指定的.xsl文件(build_smoke_report.xml定义)去解析.jtl文件,生成对应的html文件放入E:\jmeter\report_smoke中。
简写就是:跑完结果后,.xsl文件把.jtl文件转化成直观的html报告。

PS:XSL是什么
XSL是可扩展样式表语言(eXtensible Stylesheet Language)的外语缩写,是一种用于以可读格式呈现 XML(标准通用标记语言的子集)数据的语言。
易懂一点的说法:XSL可描述如何来显示 XML 文档,XSL 之于XML,就像CSS之于HTML。

build_smoke_report.xml文件中的内容如下:

 
  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <project name="ant-jmeter-test" default="run" basedir=".">

  3. <tstamp>

  4. <format property="time" pattern="_yyyy_MMdd_HHmmss" />

  5. </tstamp>

  6. <!-- 需要改成自己本地的 Jmeter 目录-->

  7. <property name="jmeter.home" value="E:\apache-jmeter-2.13" />

  8. <property name="report.title" value="接口测试"/>

  9. <!-- jmeter生成jtl格式的结果报告的路径-->

  10. <property name="jmeter.result.jtl.dir" value="E:\jmeter\report_smoke" />

  11. <!-- jmeter生成html格式的结果报告的路径-->

  12. <property name="jmeter.result.html.dir" value="E:\jmeter\report_smoke" />

  13. <property name="detail" value="_detail" />

  14. <!-- 生成的报告的前缀-->

  15. <property name="ReportName" value="SmokeReport" />

  16. <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />

  17. <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />

  18. <target name="run">

  19. <antcall target="test" />

  20. <antcall target="report" />

  21. </target>

  22. <target name="test">

  23. <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />

  24. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">

  25. <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->

  26. <testplans dir="E:\jmeter\script_smoke" includes="*.jmx" />

  27. <property name="jmeter.save.saveservice.output_format" value="xml"/>

  28. </jmeter>

  29. </target>

  30. <path id="xslt.classpath">

  31. <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>

  32. <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>

  33. </path>

  34. <target name="report">

  35. <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>

  36. <xslt

  37. classpathref="xslt.classpath"

  38. force="true"

  39. in="${jmeter.result.jtlName}"

  40. out="${jmeter.result.htmlName}"

  41. style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">

  42. <param name="dateReport" expression="${report.datestamp}"/>

  43. </xslt>

  44. <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->

  45. <copy todir="${jmeter.result.html.dir}">

  46. <fileset dir="${jmeter.home}/extras">

  47. <include name="collapse.png" />

  48. <include name="expand.png" />

  49. </fileset>

  50. </copy>

  51. </target>

  52. </project>

Dos切换到E:\jmeter\build目录下运行:ant –f build_smoke_report.xml
提示:BUILD SUCCESSFUL代表build_smoke_report.xml文件运行成功
E:\jmeter\script_smoke目录下会生成.jtl和.html文件

3 Jmeter+ant+Jenkins

1、 命令行切换到jenkins.war的根目录,输入 java -jar jenkins.war
2、 浏览器输入地址http://localhost:8080显示界面,安装成功

3、新建一个构建自由风格的软件项目并配置

4、设置定时任务,这里是设置每周一到周五的8点30分运行次JOB。
定时构建语法:

  • * * * * *(五颗星,中间用空格隔开)

第一颗*表示分钟,取值0~59
第二颗*表示小时,取值0~23
第三颗*表示一个月的第几天,取值1~31
第四颗*表示第几月,取值1~12
第五颗*表示一周中的第几天,取值0~7,其中0和7代表的都是周日

4、构建->增加构建步骤->Invoke Ant->高级(需要去Jenkins的系统配置->Global Tool Configuration配置ant的地址),Build File中输入E:\jmeter\build\build_smoke_report.xml,保存

5、立即构建,运行成功,查看console output控制台输入的日志
出现BUILD SUCCESSFUL表示编译成功,跟dos运行ant –f build_smoke_report.xml效果一样

三、扩展的分割线

1·执行多个目录的jmx脚本

 
  1. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">

  2. <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->

  3. <testplans dir="E:\jmeter\script_smoke" includes="*.jmx" />

  4. <property name="jmeter.save.saveservice.output_format" value="xml"/>

  5. </jmeter>

改成

 
  1. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">

  2. <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->

  3. <testplans dir="E:\jmeter\script_smoke" includes="*.jmx" />

  4. <testplans dir="E:\jmeter\script_smoke_two" includes="*.jmx" />

  5. <property name="jmeter.save.saveservice.output_format" value="xml"/>

  6. </jmeter>

2.生成多个html报告

我这里是生成两个,一个简单的汇总报告,一个详细的报告(用于定位接口报错)
build_smoke_report.xml文件只利用jmeter-results-detail-report_21.xsl生成了一个html报告,想利用jmeter-results-shanhe-me.xsl生成第二个
添加属性值

 
  1. <property name="detail" value="_detail" />

  2. <property name="jmeter.result.jtlNamedetail" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />

  3. <property name="jmeter.result.htmlNamedetail" value="${jmeter.result.html.dir}/${ReportName}${time}${detail}.html" />

并且将

 
  1. <target name="report">

  2. <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>

  3. <xslt

  4. classpathref="xslt.classpath"

  5. force="true"

  6. in="${jmeter.result.jtlNamedetail}"

  7. out="${jmeter.result.htmlNamedetail}"

  8. style="${jmeter.home}/extras/jmeter-results-shanhe-me.xsl">

  9. <param name="dateReport" expression="${report.datestamp}"/>

  10. </xslt>

改为

 
  1. <target name="report">

  2. <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>

  3. <xslt

  4. classpathref="xslt.classpath"

  5. force="true"

  6. in="${jmeter.result.jtlName}"

  7. out="${jmeter.result.htmlName}"

  8. style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">

  9. <param name="dateReport" expression="${report.datestamp}"/>

  10. </xslt>

  11. <xslt

  12. classpathref="xslt.classpath"

  13. force="true"

  14. in="${jmeter.result.jtlNamedetail}"

  15. out="${jmeter.result.htmlNamedetail}"

  16. style="${jmeter.home}/extras/jmeter-results-shanhe-me.xsl">

  17. <param name="dateReport" expression="${report.datestamp}"/>

  18. </xslt>

如果知道XML的一些语法,应该一下就能看明白,我们只是加了一个标签,然后把里面用到的属性值定义好。好吧,不懂XML语法也能看懂,哈哈。

PS:
使用jmeter-results-shanhe-me.xsl的一些前置操作
1、下载style文件:jmeter.results.shanhe.me.xsl
2、把下载的文件放到jmeter的extras目录下。
3、修改jmeter.properties文件如下部分,我这里都修改成true,这样执行完脚本后就会保存这些结果到.jtl文件里面,重启jmeter生效:
 
  1. jmeter.save.saveservice.data_type=true

  2. jmeter.save.saveservice.label=true

  3. jmeter.save.saveservice.response_code=true

  4. # response_data is not currently supported for CSV output

  5. jmeter.save.saveservice.response_data=true

  6. # Save ResponseData for failed samples

  7. jmeter.save.saveservice.response_data.on_error=false

  8. jmeter.save.saveservice.response_message=true

  9. jmeter.save.saveservice.successful=true

  10. jmeter.save.saveservice.thread_name=true

  11. jmeter.save.saveservice.time=true

  12. jmeter.save.saveservice.subresults=true

  13. jmeter.save.saveservice.assertions=true

  14. jmeter.save.saveservice.latency=true

  15. jmeter.save.saveservice.connect_time=true

  16. jmeter.save.saveservice.samplerData=true

  17. jmeter.save.saveservice.responseHeaders=true

  18. jmeter.save.saveservice.requestHeaders=true

  19. jmeter.save.saveservice.encoding=false

  20. jmeter.save.saveservice.bytes=true

  21. jmeter.save.saveservice.url=true

  22. jmeter.save.saveservice.filename=true

  23. jmeter.save.saveservice.hostname=true

  24. jmeter.save.saveservice.thread_counts=true

  25. jmeter.save.saveservice.sample_count=true

  26. jmeter.save.saveservice.idle_time=true

3.XSL文件的定制

其实XSL语法跟XML挺像的,多看看我们可以进行定制,如定义接口排序,扩展性能指标,那样我们性能测试也能利用这个生成报告,响应时间超过3秒的接口标黄显示,直观显示接口响应的性能状态,主要还是看公司的业务需求。

我会把扩展后的XSL也放到git地址,有需要的可以参考。

4.与Jenkins的集成

我们会用到两个插件,可到Jenkins的系统管理-》管理插件-》可选插件中搜索安装

4.1 HTML Publisher plugin

安装好HTML Publisher plugin之后,会在新建或者编辑项目时,在【增加构建后操作步骤】出现【Publish HTML reports】的选项

这样我们就可以在Jenkins中进行接口自动化测试报告的查看

4.2 Performance plugin

安装好HTML Publisher plugin之后,会在新建或者编辑项目时,在【增加构建后操作步骤】出现【Publish Performance test result report】的选项

仔细的朋友可以发现,我们使用HTML Publisher plugin用到了html文件,并且目录是指定的,难道每次每次生成的接口测试结果都要被覆盖?不存在的,当一个接口变动时,可通过接口历史响应,判断接口性能变化。使用HTML Publisher plugin用到了jtl文件名字是指定的,难道也要覆盖?也不存在的,这里放一下我的解决方案。

 
  1. timestamp=`date +%Y%m%d%H%M%S`

  2. pwd

  3. rm -f ./*.html

  4. mkdir /jmeter/report/$timestamp

  5. cp /jmeter/report/*.jtl /jmeter/report/$timestamp/

  6. cp /jmeter/report/*.html /jmeter/report/$timestamp/

  7. cp /jmeter/report/R*.html ./

  8. rm -f /jmeter/report/latest/*.jtl

  9. rm -f /jmeter/report/latest/*.html

  10. cp /jmeter/report/*.jtl /jmeter/report/latest/

  11. cd /jmeter/report/latest

  12. mv -f *.jtl latest.jtl

  13. rm -f /jmeter/report/*.jtl

  14. mv -f /jmeter/report/*.html /jmeter/report/latest

思路:每次生成的两个html文件和jtl文件都放到类似20170831102019(时间戳)的目录下,保证每次的接口测试结果都能保存。
结果保存了,但是每次的jtl文件名字是不一样的,就算把jtl文件名字改成一致的,目录也是不同的,于是我们新建了一个latest目录,每次执行接口测试都保证latest目录的html和jtl文件是最新的,并且把jtl文件的名字改成latest.jtl,完美达到我们的要求。只要思想不滑坡,办法总比困难多。

4.3 Jenkins不显示html的CSS样式

说到这里,会有一个问题,就是Jenkins默认不显示html的CSS样式,所以界面很丑,如图:

网上一致的解决方法:jenkins->系统管理->脚本命令行,执行命令:

 
  1. System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","sandbox allow-scripts; default-src 'none';script-src 'unsafe-inline' http://code.jquery.com/jquery-2.1.0.min.js; img-src dohko.hpeswlab.net 'self' data: ; style-src 'unsafe-inline' 'self';");

  2. 或 System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

重新运行下job生成html,就会正常显示。

但是,每次重启Jenkins,都需要再运行一次,咋搞,不太智能。
我们理解一下网上解决方法的原理,就是执行一段Groovy script,并且要在JOB开始前执行,然后我们知道有个Groovy plugin,可以执行Groovy脚本,那么,我们,就。。。搞起来

html报告显示正常的结果:

4.4 jenkins配置自动发送邮件

1.开通163的SMTP服务,需要发一条短信,163会给让你设置一个密码(不是你的163邮箱密码哦)
2.安装 Email Extension Plugin 插件
3.进入系统管理--系统设置
注意自带邮箱插件->邮件通知 对应插件E-mail Notification的配置
扩展插件->Extended E-mail Notification对应插件Editable Email Notification的配置
系统设置中邮件通知和Extended E-mail Notification(配置项多一些)的配置基本一致

JOB页面使用Extended E-mail Notification插件的配置图:

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1427555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上传upload及显示img图片预览、删除

上传图片文件a-upload html部分 <div className="clearfix"><a-upload:custom-request="customRequest"listType="picture-card":fileList="fileList":onPreview="handlePreview":on-remove="del">&…

【算法与数据结构】300、674、LeetCode最长递增子序列 最长连续递增序列

文章目录 一、300、最长递增子序列二、674、最长连续递增序列三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、300、最长递增子序列 思路分析&#xff1a; 第一步&#xff0c;动态数组的含义。 d p [ i ] dp[i] dp[i…

什么是接口的幂等性,如何保证接口的幂等性?

✅作者简介&#xff1a;大家好&#xff0c;我是Leo哥&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo哥的博客 &#x1f49e;当前专栏&#xff1a; Java ✨特色专栏&#xff1a; MyS…

如何在Windows部署GoLand并通过SSH远程连接Linux服务器

文章目录 1. 安装配置GoLand2. 服务器开启SSH服务3. GoLand本地服务器远程连接测试4. 安装cpolar内网穿透远程访问服务器端4.1 服务器端安装cpolar4.2 创建远程连接公网地址 5. 使用固定TCP地址远程开发 本文主要介绍使用GoLand通过SSH远程连接服务器&#xff0c;并结合cpolar内…

想好新年去哪了吗?合合信息扫描全能王用AI“留住”年味

还有不到十天&#xff0c;除夕就要到了。近几年春节假期中&#xff0c;有人第一次带着孩子直击海面冰风&#xff0c;坐船回老家&#xff1b;也有人选择“漫游”国内外&#xff0c;在旅行中迎接新春的朝气。合合信息旗下扫描全能王APP通过AI扫描技术&#xff0c;提供了一种全新的…

白皮书发布,石油石化数字孪生加速

近日&#xff0c;《数字石化 孪生智造——石油石化数字孪生白皮书》发布。白皮书聚焦石油石化行业发展机遇&#xff0c;剖析数字孪生技术在行业中的案例实践与应用场景&#xff0c;展望石油石化企业未来孪生发展新态势。 当前&#xff0c;国家大力推动减污降碳协同增效&#x…

【机器学习】基于K-近邻的车牌号识别

实验四: 基于K-近邻的车牌号识别 1 案例简介 ​ 图像的智能处理一直是人工智能领域广受关注的一类技术&#xff0c;代表性的如人脸识别与 CT 肿瘤识别&#xff0c;在人工智能落地的进程中发挥着重要作用。其中车牌号识别作为一个早期应用场景&#xff0c;已经融入日常生活中&…

vue2使用echarts自定义tooltip内容

先上最终效果图 # 实现过程&#xff1a; 一、下载引入echarts 下载 npm install echarts --save在main.js中引入 import * as echarts from "echarts"; Vue.prototype.$echarts echarts;二、使用 <template><div id"myechart" style"…

[香橙派开发系列]使用蓝牙和手机进行信息的交换

文章目录 前言一、HC05蓝牙模块1.HC05概述2.HC05的连接图3.进入HC05的命令模式4.常用的AT指令4.1 检查AT是否上线4.2 重启模块4.3 获取软件版本号4.4 恢复默认状态4.5 获取蓝牙的名称4.6 设置蓝牙模块的波特率4.7 查询蓝牙的连接模式4.8 查询模块角色 5.连接电脑6.通过HC05发送…

Python爬虫的基本原理

我们可以把互联网比作一张大网&#xff0c;而爬虫&#xff08;即网络爬虫&#xff09;便是在网上爬行的蜘蛛。把网的节点比作一个个网页&#xff0c;爬虫爬到这就相当于访问了该页面&#xff0c;获取了其信息。可以把节点间的连线比作网页与网页之间的链接关系&#xff0c;这样…

C#——三角形面积公式

已知三角形的三个边&#xff0c;求面积&#xff0c;可以使用海伦公式。 因此&#xff0c;可以执行得到三角形面积公式的计算方法代码如下&#xff1a; /** / <summary>* / 三角形面积公式* / </summary>* / <param name"a">边长a</param>*…

在idea中使用maven编译包,直接打包到远程环境上去了

执行指令 mvn clean install编译包的结果指向远程环境上去了 报错信息 No SSH configuration for 修改idea远程连接配置&#xff0c;改回编包打包到本地。 settings -> Build,Execution,Deployment -> Run Targets 删除掉这部分配置即可。 如果想改成直接编包到远程…

latex表格使用总结

参考博客 https://blog.csdn.net/TH_guan/article/details/124878398 测试了一下latex里面表格的用法 \documentclass{article} \usepackage{booktabs} % 导入三线表需要的宏包 \usepackage{booktabs} % 导入三线表需要的宏包 \usepackage{longtable}% 导入跨页表格所需宏包 …

【打赏】完美运营的最新视频打赏系统

完美运营的最新视频打赏系统优于市面上95%的打赏系统&#xff0c;与其他打赏系统相比&#xff0c;功能更加强大&#xff0c;完美运营且无bug。支付会调、短链接生成、代理后台、价格设置和试看功能等均没有问题。 以上为原简介&#xff0c;经测试验证。成功搭建并可以正常进入…

【GitHub项目推荐--大语言模型课程】【转载】

Large Language Model Course Large Language Model Course&#xff08;大型语言模型课程&#xff09;是一个开源项目&#xff0c;该课程分为三个部分&#xff1a; LLM 基础&#xff1a;涵盖了数学、Python 和神经网络的基础知识。 LLM 科学家&#xff1a;专注于学习如何使用…

DBeaver连接ClickHouse,时间少了8小时

文章目录 业务场景问题描述解决办法 业务场景 表字段time&#xff0c;类型为Datetime&#xff0c;插入时间格式为“yyyy-MM-dd HH:mm:ss” 问题描述 插入表中的时间比正常给的时间少了8小时。如&#xff0c;给定时间为&#xff1a; 2024-01-30 14:52:08 在表中显示的时间为&…

生物素-PEG4-酪胺,Biotin-PEG4-TSA,应用于酶联免疫吸附实验

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;生物素-PEG4-酪胺&#xff0c;Biotin-PEG4-Tyramide&#xff0c;Biotin-PEG4-TSA 一、基本信息 产品简介&#xff1a;Biotin PEG4 Tyramine is a reagent used for tyramine signal amplification (TSA) through ca…

前端通过nginx,访问一个文件夹里面的全部数据,nginx 咋配置

目录 1 问题2 实现 1 问题 前端通过nginx,访问一个文件夹里面的全部数据&#xff0c;nginx 咋配置 2 实现 location /logs {alias /mnt/www/logs/;autoindex on; }

【Git】03 图形化工具

文章目录 一、右击菜单二、打开仓库三、可视化所有分支历史四、总结 一、右击菜单 二、打开仓库 三、可视化所有分支历史 四、总结 图形化工具了解一下&#xff0c;要懂得在哪里能找到。

echarts条形图添加滚动条

效果展示: 测试数据: taskList:[{majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {maj…