接口测试很难吗?学会JMeter+Ant接口自动化搭建及实践
liuian 2024-12-05 14:27 17 浏览
JMeter是Apache组织的开放源代码项目,能做接口测试、功能测试和性能测试。它能够对HTTP和FTP服务器进行压力和性能测试,也可以对数据库进行同样的测试(通过JDBC),还能以多种形式展现测试结果。
然而,在使用JMeter进行测试过程中,不可避免遇到两个痛点:"运行测试脚本"和"生成测试报告"。前者主要是需要不断重复运行脚本,且当脚本数量较多或进行并发测试时,JMeter GUI界面容易宕机、卡死等,这种情况下就需要重复使用命令执行脚本;后者则是需要手工整理数据、分析测试结果然后生成测试报告。
因此,本文采用JMeter+Ant(一个将软件编译、测试、部署等步骤联系在一起加以自动化的工具)搭建自动化测试环境,用以解决测试过程中的痛点,通过此环境可以实现:
(1)自动重复运行脚本(2)自动生成测试报告(3)自动发送邮件。
大体的逻辑如下:
1、配置build.xml文件,Ant通过XML文件进行构建,通过调用target就可以执行各种task,每个task实现了特定接口对象。因此,通过Ant可以实现批量执行。
2、Ant通过测试结果(jtl文件)构建生成HTML测试报告,并输出在指定路径下,避免了手工整理测试报告。
3、根据build.xml文件中配置的的邮件信息,将HTML测试报告自动发送到指定的邮箱。
JDK安装
JMeter依赖Java环境,故需要先安装JDK并配置好环境变量。
Java环境变量配置
1、创建JAVA_HOME(JDK安装目录)。如:C:\Program Files (x86)\Java\jdk1.8.0_231
2、创建CLASSPATH,.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)
3、编辑Path,把值放在最面?%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
验证JDK
CMD命令行输入java -version,显示如图,表示安装成功。
JMeter安装
下载成功后,解压缩到建立的文件夹路径中(如:D:\Apache\JMeter)。
JMeter环境变量配置
1、创建JMETER_HOME,填写JMeter文件所属路径(如:D:\Apache\JMeter)
2、修改CLASSPATH,添加;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-1.2.jar;
3、修改Path,添加%JMETER_HOME%\bin
点击JMeter目录下bin文件夹中的jmeter.bat就可以打开JMeter,具体界面如下:
添加常用插件
注:官网下载的JMeter不包含一些常用插件。
将plugins-manager-xxx.jar、JMeterPlugins-Extras.jar、JMeterPlugins-Standard.jar和JMeterPlugins-Standard-1.4.0.zip解压后的jar包放入D:\Apache\JMeter目录下的lib\ext目录,重启JMeter。
打开有如下页面,则成功安装。
JMeter相关配置修改
1、修改默认语言和jvm参数(根据电脑配置进行修改),编辑JMeter.bat如下:
2、编辑JMeter.peoperties使用第三方模块生成详细报告:
Ant安装
下载成功后,解压Ant压缩包到建立的文件夹路径(如:D:\Apache\Ant)。
Ant环境变量配置
1、创建ANT_HOME,填写Ant所属路径(如D:\Apache\Ant?)
2、修改CLASSPATH,添加;%ANT_HOME%\lib
3、修改Path,添加;%ANT_HOME%\bin
验证Ant
CMD命令行输入ant,如下图所示表示安装成功。
Ant配置及相关使用操作
1、将D:\Apache\JMeter\extras下面的ant-jmeter-1.1.1.jar包复制到D:\Apache\Ant\lib目录下。
2、将jmeter.results.shanhe.me.xsl和jmeter-results-detail-report_21.xsl分别放在D:\Apache\JMeter\extras目录下。
3、(发送邮件所需jar包)下载activation-1.1.1.jar、commons-email-1.5.jar和javax.mail.jar放到D:\ Apache\ant\lib。
4、在本地任意创建目录testcases(如:D:\testcases),并在其目录下创建report文件夹和build.xml文件,复制以下内容到build.xml文件中:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录 -->
<property name="jmeter.home" value="D:\Apache\jmeter" />
<property name="report.title" value="测试报告" />
<!-- jmeter生成jtl格式的结果报告的路径 -->
<property name="jmeter.result.jtl.dir" value="D:\testcases\report" />
<!-- jmeter生成html格式的结果报告的路径 -->
<property name="jmeter.result.html.dir" value="D:\testcases\report" />
<!-- zip文件路径 -->
<property name="zip.dir" value="D:\testcases" />
<!-- 生成的报告的前缀 -->
<property name="ReportName" value="testcases" />
<!-- 报告名称 -->
<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" />
<property name="zipname" value="${zip.dir}/${ReportName}${time}.zip" />
<!-- 邮件配置信息 -->
<property name="mail_host" value="smtp.163.com" />
<property name="mail_port" value="465" />
<property name="username" value="testcases@163.com" />
<property name="password" value="123456789" />
<property name="mail_from" value="dtestcases@163.com" />
<property name="mail_to" value="testcases@163.com,testcases2@163.com" />
<property name="mailsubject" value="测试报告" />
<!-- 输出生成的报告名称和存放路径 -->
<echo message="${jmeter.result.jtlName}" />
<echo message="${jmeter.result.htmlName}" />
<echo message="${jmeter.result.html.dir}" />
<echo message="${zip.dir}" />
<echo message="${zipname}" />
<!-- 加载jar包,解决时间显示问题 -->
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar" />
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar" />
</path>
<target name="all">
<antcall target="test" />
<antcall target="report" />
<antcall target="summary-report" />
<antcall target="zip" />
<!-- 打包zip -->
<antcall target="sendEmail" />
<!-- 发送邮件 -->
</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 将需要执行的jmx写在includes中 -->
<testplans dir="D:\testcases" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml" />
<!-- 这里就是jmeter.properties修改的部分 -->
</jmeter>
</target>
<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.html.dir}/summary-report.html" style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
<!-- 这里是第三方模板,修改jmeter.properties后生成的报告有详细的请求、响应、错误信息等 -->
<param name="Date Report" 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>
<target name="summary-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="dateReport" expression="${report.datestamp}" />
</xslt>
</target>
<!-- zip配置 -->
<target name="zip">
<echo>
打包zip文件
</echo>
<zip destfile="${zipname}" duplicate="preserve">
<zipfileset dir="${jmeter.result.html.dir}" includes="**/*.*" prefix="测试报告" />
</zip>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${zip.dir}">
<include name="*.zip" />
</fileset>
</copy>
</target>
<!-- 配置发送邮件报告 -->
<target name="sendEmail">
<echo>
发送测试报告
</echo>
<loadfile property="email_content" srcFile="${jmeter.result.htmlName}" encoding="UTF-8" />
<mail mailhost="${mail_host}" ssl="true" user="${username}" password="${password}" mailport="${mail_port}" subject="${mailsubject}" messagemimetype="text/html" messagefileinputencoding="UTF-8" tolist="${mail_to}">
<from address="${mail_from}" />
<message charset="UTF-8">
${email_content}
</message>
<!-- 附件 -->
<attachments>
<fileset dir="${jmeter.result.html.dir}">
<include name="*.zip" />
</fileset>
</attachments>
</mail>
</target>
</project>
5、打开CMD命令行,切换到testcases目录下执行ant命令;或在testcases目录编写ant.bat文件执行,文件内容如下:
@echo
call ant -buildfile build.xml -l logfile
pause
注:执行日志存放在testcase目录下的logfile文件中。
附:报告及邮件
1、概略报告
2、详细报告
3、邮件及附件
请关注+私信回复:“测试”就可以免费拿到Python自动化测试学习路线及软件测试西学习资料包,快速让自己变强!
- 上一篇:理解ANTLR的是怎么工作的?
- 下一篇:一文读懂jar包的小秘密
相关推荐
- GCI: Another key public good for international community
-
MembersofadelegationofhighschoolstudentsfromtheU.S.stateofWashingtonposeforaphotoa...
- kube on kube 实现思路分享(kube-scheduler)
-
这里的kubeonkube,是指建立K8s元集群,纳管其他业务K8s集群,通过声明式API管理集群的创建、增删节点等。参考https://github.com/kubean-i...
- China and India hold the key to a more inclusive global future
-
ByMayaMajueranLead:AsChinaandIndiamark75yearsofdiplomaticties,theircooperationcouldse...
- 日本真子公主的婚礼又要提上日程了吗?未婚夫:债务问题已解决
-
日本明仁天皇将于今年3月31日退位,德仁皇太子即将成为新一任的天皇。在平成时代最后的倒计时中,明仁天皇的孙女真子公主的婚事却又一次进入了人们的视野。(viaTheTelegraph)关注日本皇室的...
- kratos源码分析系列(1)(kvm源码解析与应用 pdf)
-
https://github.com/go-kratos/kratos是b站开源的一个微服务框架,整体来看它结合grpc生态中的grpc-gateway,以及wire依赖注入和众多常用的trace,m...
- 【2.C#基础】6.循环语句(c#循环语句例子)
-
6.循环语句当需要多次执行同一个处理时,就需要用到循环语句。一般情况下,循环的流程图如下:6.1while循环C#中的while循环语句在给定的条件为真的情况下会重复执行目标语句。格式如下:...
- 使用 Google Wire 在 Go 中进行依赖注入
-
关注点分离、松耦合系统和依赖反转原则等概念在软件工程中是众所周知的,并且在创建良好的计算机程序过程中至关重要。在本文中,我们将讨论一个同时应用了这三个原则的技术,称为依赖注入。我们将尽可能地实践,更加...
-
- 用 Golang封装你的API(golang封装dll)
-
每日分享最新,最流行的软件开发知识与最新行业趋势,希望大家能够一键三连,多多支持,跪求关注,点赞,留言。@头条创作挑战赛本文探讨了在用Golang封装你的API的过程以及几个不同的编程步骤。我做了一个非常有限的时间来证明如何为客户正在开...
-
2025-05-09 20:03 liuian
- Terraform 实战 | 万字长文(terrify是什么意思中文)
-
Terraform是什么Terraform(https://www.terraform.io/)是HashiCorp旗下的一款开源(Go语言开发)的DevOps基础架构资源管理运维工具,可...
- Go 语言入门:环境安装(go语言安装 window)
-
一、前言这里不同于其他人的Go语言入门,环境安装我向来注重配置,比如依赖包、缓存的默认目录。因为前期不弄好,后面要整理又影响这影响那的,所以就干脆写成文章,方便后期捡起。二、安装1.安装包htt...
- Go语言进阶之Go语言高性能Web框架Iris项目实战-项目结构优化EP05
-
前文再续,上一回我们完成了用户管理模块的CURD(增删改查)功能,功能层面,无甚大观,但有一个结构性的缺陷显而易见,那就是项目结构过度耦合,项目的耦合性(Coupling),也叫耦合度,进而言之,模块...
- 如何将Go项目与Docker结合实现高效部署
-
在现代软件开发中,使用Docker部署应用程序已经成为一种标准实践。本文将深入探讨如何将Go项目与Docker结合,实现高效、可靠的部署过程。通过详细的步骤和丰富的示例,你将能够迅速掌握这一流程。准备...
- 五分钟轻松熟悉一个k8s Operator应用制作
-
简介:operator是一种kubernetes的扩展形式,可以帮助用户以Kubernetes的声明式API风格自定义来管理应用及服务,operator已经成为分布式应用在k8s集群部...
- 程序员的副业秘籍!一款可以快速搭建各类系统的后台管理系统
-
系统简介这是一个基于Gin+Vue+ElementUI(或ArcoDesign、AntDesign)的系统快速开发平台,采用了前后端分离,旨在帮助用户快速完成各类系统的基础功能搭建。平...
- 使用 Go 语言开发区块链钱包的项目目录结构设计
-
在开发区块链钱包时,项目的目录结构应该清晰、模块化,确保代码的可维护性和扩展性。基于Go的惯例,结合区块链钱包的功能需求,以下是一个较为合理的目录结构示例:1.目录结构blockchain-wa...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
python使用fitz模块提取pdf中的图片
-
《人人译客》如何规划你的移动电商网站(2)
-
Jupyterhub安装教程 jupyter怎么安装包
-
- 最近发表
-
- GCI: Another key public good for international community
- kube on kube 实现思路分享(kube-scheduler)
- China and India hold the key to a more inclusive global future
- 日本真子公主的婚礼又要提上日程了吗?未婚夫:债务问题已解决
- kratos源码分析系列(1)(kvm源码解析与应用 pdf)
- 【2.C#基础】6.循环语句(c#循环语句例子)
- 使用 Google Wire 在 Go 中进行依赖注入
- 用 Golang封装你的API(golang封装dll)
- Terraform 实战 | 万字长文(terrify是什么意思中文)
- Go 语言入门:环境安装(go语言安装 window)
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- table.render (33)
- uniapp textarea (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- react-admin (33)
- vscode切换git分支 (35)
- vscode美化代码 (33)
- python bytes转16进制 (35)