首页 > 其他分享 >JMeter + ant + Jenkins 接口测试持续集成

JMeter + ant + Jenkins 接口测试持续集成

时间:2024-05-09 09:55:39浏览次数:27  
标签:save jmeter ant Jenkins JMeter true saveservice

JMeter + ant + Jenkins 接口测试持续集成

操作系统:linux

环境变量 地址
jdk11 https://www.oracle.com/java/technologies/downloads/
jmeter 5.6 https://jmeter.apache.org/
ant 1.10.14 https://ant.apache.org/bindownload.cgi
Jenkins 2.414.1 https://mirrors.jenkins.io/

一、安装jdk并配置环境变量

1、下载jdk安装包

image-20231106165600204

2、将安装包移动到Linxu系统中

image-20231107110330323

3、解压jdk压缩包

​ 进入到压缩包所在目录下,使用tar命令,将压缩包进行解压。

tar -zxvf jdk-8u281-linux-x64.tar.gz

image-20231107110516180

4、将jdk添加到环境变量

vim /etc/profile
# 在最后插入

# java环境变量
export JAVA_HOME=/usr/local/java/jdk-11.0.21
export CLASSPATH=.:${JAVA_HOME}/lib:${JAVA_HOME}/jre/lib:$CLASSPATH

# PATH
export PATH=$PATH:${JAVA_HOME}/bin

image-20231107111322822

5、保存并退出,刷新环境变量

source /etc/profile

6、验证jdk环境变量

image-20231107111524600

二、安装jmeter并配置环境变量

1、下载jmeter安装包

image-20231107112857140

2、将安装包移动到Linux中

image-20231107113031623

3、解压jmeter压缩包

​ 进入到压缩包所在目录下,使用tar命令,将压缩包进行解压。

tar -zxvf apache-jmeter-5.6.2.tgz

image-20231107135604257

4、将jmeter添加到环境变量

vim /etc/profile
# jmeter环境变量
export JMETER_HOME=/usr/local/jmeter/apache-jmeter-5.6.2

# PATH
export PATH=$PATH:${JAVA_HOME}/bin:${JMETER_HOME}/bin

image-20231107140113299

5、保存并退出,刷新环境变量

source /etc/profile

6、验证jmeter环境变量

jmeter -v

image-20231107140315104

三、安装ant并配置环境变量

1、下载ant安装包

image-20231107141330751

2、将安装包移动到Linux中

image-20231107141429064

3、解压ant压缩包

tar -zxvf apache-ant-1.10.14-bin.tar.gz 

image-20231107141613398

4、将ant添加到环境变量

vim /etc/profile
# ant环境变量
export ANT_HOME=/usr/local/ant/apache-ant-1.10.14

# PATH
export PATH=$PATH:${JAVA_HOME}/bin:${JMETER_HOME}/bin:${ANT_HOME}/bin

image-20231107141956959

5、保存并退出,刷新环境变量

source /etc/profile

6、验证ant环境变量

image-20231107142412285

四、测试JMeter + ant

1、将 jmeter / extras 目录下的 ant-jmeter-1.1.1.jar 复制到 ant/ lib 目录中

image-20231107150437035

cp /usr/local/jmeter/apache-jmeter-5.6.2/extras/ant-jmeter-1.1.1.jar /usr/local/ant/apache-ant-1.10.14/lib/

image-20231107151018433

2、在 jmeter 目录下,创建 report 文件夹,并在其下创建 html、jtl、run 文件夹

​ 在jmeter目录下,使用mkdir命令创建目录。

mkdir report
mkdir report/html
mkdir report/jtl
mkdir report/run

image-20231107153418735

3、在 jmeter / report 目录下,创建 build.xml ,并填充以下代码

​ 在jmeter / report 目录下,使用vim命令创建/编辑 bulid.xml

vim build.xml

image-20231107154054776

​ 在build.xml,输入以下代码,并根据实际情况,调整目录信息

<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run">
    <tstamp>
        <format property="time" pattern="yyyyMMddhhmmss" />
    </tstamp>
    <!-- 需要修改成自己jmeter的目录路径 -->
    <property name="jmeter.home" value="/usr/local/jmeter/apache-jmeter-5.6.2" />
    <property name="report.title" value="TestReport" />
    <!-- 需要修改成自己jmeter/report/jtl的目录路径 -->
    <property name="jmeter.result.jtl.dir" value="/usr/local/jmeter/apache-jmeter-5.6.2/report/jtl" />
    <!-- 需要修改成自己jmeter/report/html的目录路径 -->
    <property name="jmeter.result.html.dir" value="/usr/local/jmeter/apache-jmeter-5.6.2/report/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}.html" />

    <target name="run">
        <antcall target="test" />
        <antcall target="report" />
    </target>

    <target name="test">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
            <!-- 需要修改成自己jmeter/report/run的目录路径 -->
            <testplans dir="/usr/local/jmeter/apache-jmeter-5.6.2/report/run" 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>
        <!-- style需要修改成自己模板的路径,默认为jmeter自带的模板,也可以使用 -->
        <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="dateReport" expression="${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>
</project>

3、配置jmeter.properties文档

​ 将 jmeter.save.saveservice.output_format=csv 改成 xml,并取消注释

​ 将如下的 jmeter.save.saveservice 值全部改为 true,并取消注释

jmeter.save.saveservice.output_format=xml
...

...
jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
jmeter.save.saveservice.response_data=true
# Save ResponseData for failed samples
jmeter.save.saveservice.response_data.on_error=true
jmeter.save.saveservice.response_message=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.subresults=true
jmeter.save.saveservice.assertions=true
jmeter.save.saveservice.latency=true
# Only available with HttpClient4
jmeter.save.saveservice.connect_time=true
jmeter.save.saveservice.samplerData=true
jmeter.save.saveservice.responseHeaders=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.encoding=true
jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
jmeter.save.saveservice.sent_bytes=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.filename=true
jmeter.save.saveservice.hostname=true
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=true
jmeter.save.saveservice.idle_time=true

4、验证

​ 将在Windows系统调试好的脚本文件,移动到Linux系统的 jmeter / report / run 目录下。

image-20231107162806924

​ 然后在 jmeter / report 目录下,执行命令

ant run

image-20231107163128950

​ 执行完成后,jtl 目录中生成jmeter脚本的运行结果,html 目录中生成其html格式的报告。

image-20231107163314549

image-20231108151843953

image-20231107163453165

五、安装Jenkins

1、下载Jenkins

image-20231107163843952

image-20231107164258295

2、将Jenkins移入服务器,并创建 nohup.out 文件

vim nohup.out

image-20231107170137526

3、启动Jenkins服务

​ 在 jenkins 目录下,执行命令启动jenkins服务,使用的端口可自定义修改。

nohup java -jar jenkins.war --httpPort=8089 &

4、页面访问Jenkins

​ 在浏览器中输入地址:服务器ip + 端口,打开Jenkins网页。

image-20231108111507230

​ 若没有打开说明该端口的防火墙没有关闭,关闭防火墙后,即可打开网页。

5、服务器中查看密钥

​ 密钥有两种方法可以查看。

①在 jenkins 目录下的 nohup.out 文件中查看

image-20231108112159931

​ 在 jenkins 目录执行vim命令查看 nohup.out 文件,向下翻查找密钥。

vim nohup.out

image-20231108112313091

②根据 Jenkins 页面提示,在 /root/.jenkins/secrets 目录下的 initialAdminPassword 文件中查看

image-20231108111947132

vim /root/.jenkins/secrets/initialAdminPassword

image-20231108112052928

6、创建用户

​ 在网页中输入密钥后,Jenkins会让你选择是否安装插件,建议选择安装推荐的插件。若服务器在非互联网环境,安装插件需要从互联网环境下载后,传入服务器,再进行安装。

image-20231108112720860

​ 插件安装完毕后,就可以创建用户了。

image-20231108132952049

​ 创建完成后,就可以使用Jenkins了。

image-20231108133503498

六、Jmeter + ant + Jenkins 持续集成

1、点击 Mange Jenkins -> Plugins 进入插件管理页面

image-20231108144830031

2、点击 Available plugins,在检索框输入:HTML,勾选 HTML Publisher 插件,点击右侧的 Install 安装插件

image-20231108145243737

3、安装成功后,返回首页点击 New Item (因为我把翻译插件关闭了,所以显示为纯英文)

image-20231108141208244

4、创建 Freestyle project

image-20231108141415566

5、勾选 Discard old builds ,配置参数。若不勾选,build数量会越来越多,占用内存

image-20231108142750149

6、勾选 Build periodically ,配置参数。图中参数为:每日11点(服务器时间),进行build

image-20231108143215152

7、在 Build Steps 添加 Invoke Ant 组件,并进行配置;Build Filebuild.xml 文件路径

image-20231108144230682

8、在 Post-build Actions 添加 Publish HTML reports 组件,并进行配置;HTML directory to archivejmeter/report/html 目录,Index page[s] 为 执行 build.xml 生成的html文件名

image-20231108151957527

9、在 Post-build Actions 添加 Editable Email Notification 组件,并进行配置;Project Recipient List 为接收邮件的邮箱,多个邮箱使用英文逗号进行分割,Content Type 选择 HTML (text/html)Default Subject 为邮件标题,Default Content 为邮件内容。

<div>${FILE, path="/usr/local/jmeter/apache-jmeter-5.6.2/report/html/TestReport.html"}</div>

其中 path 为执行 build.xml 生成的html文件路径

image-20231108153404765

点击该组件下方的 Advanced Settings ,将 Triggers 下的 Failure - Any 删除,因为该策略只会在build失败时才会发送邮件。我们再在 Triggers 下添加新的策略 Always ,该策略在执行完build后总是会发送邮件,配置如下。

image-20231108155013779

配置完成后,点击 Save 保存即可。

10、接下来,点击首页的 Manage Jenkins -> System 进入到系统设置页面

image-20231108160544752

11、设置 Extended E-mail Notification 信息,下面以QQ邮箱为例。

SMTP server:smtp.qq.com

SMTP Port:465

​ 如果使用其他邮箱,可自行查询该邮箱的 SMTP serverSMTP Port

image-20231108165233025

​ 添加发送邮件的邮箱,填写 Kind、Scope、Username、PasswordKind、Scope 如下图选择,Username 为邮箱的地址,Password 指的不是邮箱密码,而是邮箱的授权码。

image-20231110153831590

获取邮箱授权码,以QQ邮箱为例:

①登录QQ邮箱网页版

②点击 设置 -> 账号

image-20231110154911117

③下滑找到 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

image-20231110153540996

④点击 开启服务,因为我已经开启过了,所以显示的是管理服务。当然开启过了也可以点击下方的 继续获取授权码 来获得新的授权码

​ 填写完成后,在 Credentials 选择刚刚填写的邮箱,并勾选 Use SSL

image-20231110155257955

Default user e-mail suffix:@qq.com

Charset:UTF-8

Default Content Type:HTML(text/html)

Default Reclplents:默认收件人邮箱

image-20231110160243323

12、接下来配置 E-mail Notification

SMTP server:smtp.qq.com

Default user e-mail suffix -> 用户名:邮箱

Default user e-mail suffix -> 密码:邮箱授权码

SMTP Port:465

Charset:UTF-8

image-20231110163540994

​ 最后我们来测试一下,能否正常发送邮件给他人。

image-20231110163807095

​ 勾选 Test configuration by sending test e-mail ,填写接收测试邮件的邮箱,点击 Test configuration

image-20231110164157462

​ 可以看到邮件已成功发送。我们点击 Save 保存即可。

实现最终效果

​ ①根据设置的 Build periodically,即每日11点启动任务,从而达到使用 jmeter 执行 jmeter/report/run 目录下的所有 jmx 文件,并生成测试结果存于 jmeter/report/jtl 目录中,最后发送html格式测试结果邮件到接收邮箱中。

​ ②除了通过 Build periodically 设置的每日启动,也可以手动启动,可以点击任务的 build 按钮启动

image-20231110170632527

标签:save,jmeter,ant,Jenkins,JMeter,true,saveservice
From: https://www.cnblogs.com/test-gang/p/18181447

相关文章

  • 编程:java 发送email程序:通用版本:借鉴“蚂蚁小哥 <[email protected]>”的文章
     1packagecom.alibaba.otter.canal.adapter.launcher.loader;23importjava.text.SimpleDateFormat;4importjava.util.*;5importjavax.mail.*;6importjavax.mail.internet.*;78publicclassJavaxJavaMailClient{910private......
  • Semantic Kernel-1
    入门SemanticKernel:OneApi集成与HelloWorld  合集-AI(2) 1.一键接入大模型:One-Api本地安装配置实操05-072.入门SemanticKernel:OneApi集成与HelloWorld05-08收起 引言从这一章节开始正式进入我们的 SemanticKernel 的学习之旅了。什么是SemanticKer......
  • Pass Asistant演示视频
     ......
  • jmeter无图形界面执行测试并生成报告
    一.命令行:jemeter-n-txxx.jmx-lMMM.jtl-e-oNNN二.命令行参数解释:2.1运行参数-n无图形界面执行-t指定要执行的脚本路径xxx.jmx,必须指定,格式为jmx文件(-txxx.jmx)-l指定运行过程中生成数据文件路径,必须指定,格式为jtl文件,文件名随......
  • Docker+Jenkins自动化测试实践
    前期介绍:基于Python+unittest的接口自动化测试框架,打算使用Docker容器技术+jenkins持续集成的能力实现接口自动化测试的持续集成前提:了解jenkins的使用Docker简介概念虚拟化:一种资源管理技术(虚拟机、内存管理、硬盘分区管理)Docker是什么:虚拟化技术的一种,虚拟容器技术,模......
  • antd在form中一个select设置另一个select
    需求:所属网络(select)变化的时候,对应空投合约(select)也跟着变化。 constonChainChange=(chainId:any)=>{setCurrChainId(chainId)constcurrOptions=extraObj.airdropContractFormOptions.map((item:any)=>{if(item.network_id===chainId){......
  • python 构建jenkins job
    学习文档:https://www.cnblogs.com/hujinzhong/p/14593293.htmlhttps://blog.csdn.net/qq_45939519/article/details/121052408官方文档:API参考—PythonJenkins1.8.0文档(python-jenkins.readthedocs.io) 使用Python-Jenkins—PythonJenkins1.8.0文档 impor......
  • jmeter以命令行模式运行:非GUI界面
    *`-n`:表示非GUI模式运行:命令行模式运行jmeter脚本*`-t`:要执行的jmeter脚本(JMX):a.默认执行当前路径下的脚本,b.或执行指定路径下的脚本*`-l`:生成结果文件(JTL):a.默认在当前路径下生成JTL文件,b.或在指定路径下生成JTL文件*`-e`:生成HTML报告*`-o`:HTML报告的文件夹路径......
  • Ant Design
    AntDesignofReact(antd)中的表单form如何设置两个formItem之间的间距?margin-bottom:24px;用antdesign的form时候,设置行垂直间距没啥用magin是透明的,没有颜色,padding是有颜色的model注意设置z-index固定侧边栏:style="{overflow:'auto',height:'100vh',positio......
  • Jenkins发版时报错Failed to instantiate [io.seata.spring.annotation.GlobalTransac
    Failedtoinstantiate[io.seata.spring.annotation.GlobalTransactionScanner]:Factorymethod'globalTransactionScanner'threwexception;nestedexceptionisjava.lang.ExceptionInInitializerError一开始以为是seata配置有问题,但最近也没有动过,直接执行发版脚本就没事......