前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >22-性能测试持续集成

22-性能测试持续集成

作者头像
zx钟
发布2021-05-27 11:38:09
8510
发布2021-05-27 11:38:09
举报
文章被收录于专栏:测试游记测试游记

CICD持续集成持续交付

CICD

CI:持续集成

CD:持续交付

Jenkins

持续集成与持续交付落地的一个工具

Devops

性能测试持续集成与持续交付的解决方案

jenkins + ant + jmx

jenkins

持续集成工具

ant:maven

测试、编译代码

jmx

jmeter编写的脚本

CLI模式

命令行的模式运行jmeter脚本

真正做性能测试时,要用CLI模式「命令行模式」

命令行模式,能够产生出更大的请求压力

脚本:50个线程数,向服务器发起登录接口请求50 * rps = 每秒钟总共向服务器发起的请求数

  • GUI:50 * 35 = 1750一部分资源用于图形界面
  • CLI:50 * 45 = 2250这样服务器收到的请求更多,单位时间服务器处理的事务数更大,服务器的压力就会更大

命令参数

运行jmeter

代码语言:javascript
复制
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

示例:jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

jmeter

命令名称

-n

non gui 也就是启用CLI模式

-t

测试计划,jmx脚本名称 可以带路径。默认是jmeter的bin路径

-l

输出性能结果到文件。一般为「jtl」、「csv」格式文件

  • 文件推荐为jtl格式
  • 文件必须不存在,不能追加到文件中,如果文件已经存在,执行时候会报错

-e

转换

-o

输出到文件夹。

把前面的jtl文件转换为html报告到文件夹中

文件夹必须为空,如果文件夹中有内容,执行也会报错

执行CLI命令

  1. 进入jmeter的bin文件夹,打开命令终端
  • 因为jmeter没有配置环境变量,所以需要使用jmeter命令的时候,必须要进入jmeter所在文件夹下

例如在mac下运行:

代码语言:javascript
复制
(base) 192:bin zhongxin$ ./jmeter -n -t ./text/易捷支付-性能场景-1.jmx -l ./text/load1.jtl -e -o ./text/load1
  1. 端口区间:4445-4455

命令行

测试报告

通过CTL模式,已经生成了HTML报告

测试报告

APDEX

用户满意度指数

时间图
吞吐量图

吞吐量

从图中可以看出,每60秒记录一次数据。我们可以通过修改reportgenerator.properties来改变它的取点间隔.最小值为1000

代码语言:javascript
复制
# Defines the overall granularity for over time graphs
# Granularity must be higher than 1000 (1second) otherwise Throughput graphs will be incorrect
# see Bug 60149
jmeter.reportgenerator.overall_granularity=60000

GUI重新生成html报告:只在5.1.1版本以上才可以

生成报告

选择

  • Result file:选择刚才执行生成的jtl文件
  • user.properties file:选择jmeter.properties
  • Output directory:选择一个空文件夹放置报告
查看重新生成的报告

新报告

jenkins+ant配置

安装jenkins

由于临时使用,使用Docker进行安装

代码语言:javascript
复制
192:jenkins-server root# pwd
/Users/zhongxin/jenkins-server
192:jenkins-server root# docker run -d -v ${pwd}:/var/jenkins_home -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
9f5819f72b36e3b5d8d6e0ea1f8d7ac8f8f119d4bdba1b7454928395d7e1dcd6
192:jenkins-server root# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                                                                      NAMES
9f5819f72b36   jenkins/jenkins:lts   "/sbin/tini -- /usr/…"   36 seconds ago   Up 33 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   laughing_matsumoto
192:jenkins-server root# docker exec laughing_matsumoto tail /var/jenkins_home/secrets/initialAdminPassword
b44d7ac5745c4ca68b48ea42c7f65260
192:jenkins-server root# docker exec laughing_matsumoto mkdir /tmp/ant
192:jenkins-server root# docker cp /Users/zhongxin/Downloads/apache-ant-1.9.14/ 9f5819f72b36:/tmp/ant
192:jenkins-server root# docker cp /Users/zhongxin/Downloads/apache-jmeter-5.1.1 9f5819f72b36:/tmp/ant

安装插件

  1. manage jenkins -> manage plugins 搜索ant并安装
  2. manage jenkins -> global tool Configuration -> 找到Ant的入口 -> 填入解压后的ant路径

ant路径

  1. 新建自由项目任务

新建项目

  • 构建环境中点击「增加构建步骤」选择「Invoke Ant」
  • 选择Ant Version为全局配置中的名称

构建

  • 点击「高级」 选择Build File文件/Users/zhongxin/Downloads/性能测试VIP课用文件/02.jmeter/apache-jmeter-5.1.1/extras/build.xml

修改build位置

  • 修改build.xml

Ant编译、部署jmx文件,就是根据build.xml来执行的

build.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project name="接口性能监控" default="all" basedir=".">  
 <tstamp>
        <format property="time" pattern="yyyyMMddhhmm" />
    </tstamp>
    <property name="encoding" value="UTF-8" />
    <!-- 需要改成自己本地的 Jmeter 目录-->  
    <property name="jmeter.home" value="/tmp/ant/apache-jmeter-5.1.1/" />
    <property name="report.title" value="接口性能监控"/>
    <!-- jmeter生成jtl格式的结果报告的路径--> 
    <property name="jmeter.result.jtl.dir" value="${jmeter.home}/work/resultLog/jtl" />
    <!-- jmeter生成html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="${jmeter.home}/work/resultLog/html" />
    <!-- 生成的报告的前缀-->  
    <property name="ReportName" value="TestReport" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />

    <target name="all">
        <antcall target="test" />
        <antcall target="report" />
        <antcall target="mail" />
    </target>

    <target name="test">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
            <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->
            <testplans dir="${jmeter.home}/bin/text" includes="*.jmx" />

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

    <path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    </path>


    <target name="report">
        <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
        <xslt 
              classpathref="xslt.classpath"
              force="true"
              in="${jmeter.result.jtlName}"
              out="${jmeter.result.htmlName}"
              style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">

              <param name="showData" expression="${show-data}"/>

              <param name="dateReport" expression="${report.datestamp}"/>
              <param name="titleReport" expression="${report.title}:${report.datestamp}"/>

       </xslt>

                <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
    </target>
    <property name="mail_from" value="发送邮件的地址" />
    <property name="password" value="邮箱密码" />
    <!--mail_to:发送列表,多个之间逗号间隔 -->

    <property name="mail_to" value="接收邮件地址" /> 
    <property name="mailport" value="25" />
    <!--邮箱需要开通smtp服务-->
    <property name="mailhost" value="smtp邮件服务器地址" />

    <target name="mail">

        <loadfile property="report" srcFile="${jmeter.result.htmlName}" encoding="${encoding}" />
        <mail from="${mail_from}" tolist="${mail_to}" mailport="${mailport}" mailhost="${mailhost}" user="${mail_from}" password="${password}" subject="TestReport-${ant.project.name}" messagemimetype="text/html">
            <message>
                            本轮构建的结果如下:
                            ${report}                          
                   </message>
        </mail>
    <delete file="${jmeter.result.htmlName}" />
    </target>
</project>

注意需要实现新建下面两个文件夹

代码语言:javascript
复制
<!-- jmeter生成jtl格式的结果报告的路径--> 
<property name="jmeter.result.jtl.dir" value="${jmeter.home}/work/resultLog/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="${jmeter.home}/work/resultLog/html" />

jmeter.properties中添加

代码语言:javascript
复制
jmeter.save.saveservice.output_format=xml

运行输出

遇到的问题

代码语言:javascript
复制
BUILD FAILED
/tmp/ant/apache-jmeter-5.1.1/extras/build.xml:20: The following error occurred while executing this line:
/tmp/ant/apache-jmeter-5.1.1/extras/build.xml:26: taskdef class org.programmerplanet.ant.taskdefs.jmeter.JMeterTask cannot be found
 using the classloader AntClassLoader[]

把文件apache-jmeter-5.1.1/extras/ant-jmeter-1.1.1.jar复制到apache-ant-1.9.14/lib目录下

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CICD持续集成持续交付
    • CICD
      • Jenkins
        • Devops
        • 性能测试持续集成与持续交付的解决方案
          • jenkins
            • ant:maven
              • jmx
              • CLI模式
              • 命令参数
                • jmeter
                  • -n
                    • -t
                      • -l
                        • -e
                          • -o
                          • 执行CLI命令
                            • 测试报告
                              • APDEX
                              • 时间图
                              • 吞吐量图
                          • jenkins+ant配置
                            • 安装jenkins
                              • 安装插件
                                • build.xml
                                  • 遇到的问题
                                  相关产品与服务
                                  容器服务
                                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档