性能测试学习之路 (四)jmeter 脚本开发实战(JDBC &JMS &接口脚本 & 轻量级接口自动化测试框架)
1、业务级脚本开发
登录脚本->思路:在线程组下新建两个HTTP请求,一个是完成访问登录页,一个是完成登录的数据提交。
步骤如下:
1) 访问登录页
2) 提交登录数据的HTTP
PS:对于业务级的脚本建议更加真实地模拟用户的请求操作。
2、接口级脚本开发
1) 单接口测试方法
- 启动Jmeter
- 新建线程组
- 在线程组下新建一个HTTP请求
- 在HTTP请求中填入接口信息,包括地址、参数、请求方法(GET)等
- 新建一个查看结果数监听器
- 运行脚本验证结果,优化脚本(比如可以对参数进行参数化)
2) 接口依赖的测试方法
接口依赖->思路:建立2个接口,把接口1中接口响应的字段传递到接口2的入参中。
比如:列表页获取书名ID,获取的书名ID作为进入书名详情页的入参。
具体步骤:
- 新建一个HTTP请求,命名为点击书名
- 新建一个HTTP请求,命名为原创列表页随机选择一个书名
- 提取点击书名接口中的响应数据good_id字段的值,在点击书名下面建立正则表达式来完成。其中正则表达式,通过取出书名ID的值,后续用这个值在需要的时候填入${good_id}即可使用。
- 在原创列表页随机选择一个书名接口的showid入参出替换为变量${good_id}即可。
- 我们可以来看查看结果数,看出请求成。
3、JDBC脚本开发
所谓的单SQL语句是指:一次只运行一条SQL语句。大致实现步骤如下:
- 复制mysql-connector-java.jar包到JMeter安装目录下的lib子目录中。
- 在线程组下新建一个配置元件中的JDBC Connection Configuration,并填入必要的信息。
- 新增一个取样器-JDBC请求,用于JDBC连接。
- 建议一个监控器-查看结果数。
SQL查询语句中的条件是固定值,如何设置为变量,步骤:
- 测试计划中新增一个用户定义的变量,取名为user_name,值为pro_test
- 在JDBC请求中,修改Query Type为Prepared Select Statement
- 修改查询条件中的条件为?,用于占位符
- Parameter value添加用户自定义的变量,变量为测试计划中变量的值
- Parameter types中的参数类型,取决于测试计划->用户定义的变量类型。
多SQL语句测试与单SQL语句的区别:
- 在Database Connection Configuration中的Database URL字段末尾加上 ?allowMultiQueries=true。
- 在JDBC Request的Query Type选择Update Statement,并在Query里写入两条插入的SQL语句。
4、JMS Point-to-Poibt脚本开发
1、JMS
JMS:Java Message Service,即Java消息服务应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行一步通信。通俗的讲,JMS是一个标准或者是一个协议,用于企业级应用的消息传递。
发送者和接受者。接受者从队列中获取消息,且在成功接收消息之后需向队列应答成功。发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,都不会影响消息被发送到队列。
消息队列。每个消息都被发送到一个特定的队列。队列保留着消息,直到他们被消费或超时。
每个消息只有一个消费者,一旦被消费,消息就不在消息队列中了。
2、ActiveMQ
ActiveMQ是开源消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者。消息生产者将消息发送至消息服务,消息消费者则从消息服务接收这些消息。这些消息的传送操作是使用一组实现了ActiveMQ应用编程接口的对象来执行的。
ActiveMQ工作模式中的部分解释如下:
- ActiveMQ客户端使用Connection Factory 对象创建一个连接,向消息服务发送消息以及从消息服务接收消息均是通过此连接来进行。
- Connection是客户端与消息服务的活动连接。大多数客户端均使用一个链接来进行所有的消息传送
- Session 是一个用于生成和使用消息的单线程上下文。它用于创建发送消息的生产者和接收消息的消费者 ,并为所发送的消息定义发送顺序。
- 客户端使用Message Producer向指定的物理目标发送消息。
- 客户端使用Message Consumer对象从指定的物理目标接收消息。消费者可以支持同步或异步消息接收。异步使用可通过想消费者注册MessageListener来实现。
3、JMS Point-to-Point脚本开发
场景:对中间件进行性能测试,可以使用工具Jmeter中的JMS。
JMS Point-to-Point脚本开发:
1、找到ActiveMQ官网,下载对应操作系统的ZIP包,解压后进入bin目录,找到activemq.bat,运行即可。
2、ActiveMQ启动完成后,在浏览器地址栏中访问http://127.0.0.1:8161/admin/,默认用户名、密码都是admin。
3、ActiveMQ解压后的文件夹,找到activemq-all-5.15.12.jar,复制到Jmeter目录下的lib子目录中。
4、建立线程组->Sampler->JMS Point-to-Pint,然后填写必要的JMS资源信息。
5、添加一个查看结果数,然后运行JMeter,查看结果请求成功后,返回到对应的ActiveMQ控制台,就可以看到我们发送的消息已经进入了队列。
JMS Point-to-Pint 参数填写内容如下:
名称 |
值 |
描述 |
QueueConnectionFactory |
ConnectionFactory |
这是连接 ActiveMQ 的默认 JNDI 入口。 |
JNDI Name Request Queue |
Q.REQ |
在 JNDI 属性中定义的 JNDI 名称 |
JNDI Name Reply Queue |
Q.RPL |
在 JNDI 属性中定义的 JNDI 名称 |
Communication Style |
Request Response |
代表在 JMeter 外部运行的服务并响应请求。 此服务必须监听请求队列并将消息发送到由消息引用的队列.getJMSReplyTo() |
Content |
test |
内容 |
JMS Properties |
ActiveMQ 不需要设置 |
|
InitialContextFactory |
org.apache.activemq.jndi.ActiveMQInitialContextFactory |
ActiveMQ 的标准 InitialContextFactory |
queue.Q.REQ |
example.A |
定义了一个名为 Q.REQ 的 JNDI 队列请求指向了 example.A |
queue.Q.RPL |
example.B |
定义了一个名为 Q.RPL 的 JNDI 队列请求指向了 example.B |
Provider URL |
tcp://localhost:61616 |
ActiveMQ 地址和端口 |
5、Jmeter轻量级接口自动化测试框架
大致思路如下:JMeter完成接口脚本,Ant完成脚本执行并收集结果生成报告,最后利用Jenkins完成整体脚本的自动集成运行。
环境安装:
1.jdk1.7 配置环境变量(参考前面的分页)
2.jmeter解压到本地,ant解压到本地
3.Ant解压到本地,并配置环境变量
ANT_HOME:D:\jmeter\apache-ant-1.9.6
Path:%ANT_HOME%\bin;%ANT_HOME%\lib
CALSSPATH:%ANT_HOME%lib;
4.cmd中验证Ant安装成功
5.将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制到Ant所在目录lib子目录下
6、报告模板xls文件,放到jmeter目录中的extras文件夹里
7、创建如下脚本目录结构
jmeter_test(主目录文件)
result_log(测试报告及日志)
html(测试报告生成目录)
jtl(存放jtl文件的目录)
script(存放jmeter的jmx文件)
build.xml(核心配置文件)
8、在jmeter中完成项目的接口脚本,调试成功,保存到上面的script目录。
9.build.xml来设置运行时的具体配置
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="F:\jmeter所存放的本地路径" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="F:\jmeter-test\result\jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="F:\jmeter-test\result\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="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}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
<testplans dir="F:\jmeter-test\script" 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="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>
10.cmd目录下运行切换到D:\jmeter_test,输入命令:ant,执行后等待时间,出现BUILD SUCCESSFUL
11、查看报告
12.集成到Jenkins大概步骤:
12.1系统管理-系统设置中,配置jdk和ant
JDK别名:随便自己填,不过最好还是按照实际的写吧
JAVA_HOME:这个是本机JDK的安装路径(路径错误,会有红点提示你),自动安装:不推荐使用
后面Ant与Maven的配置是一样的,JDK去oracle官网下载,Ant与Maven去apache官网下载
Ps:每个文本框后面都有个问号,点击问号就会出现帮助信息
12.2系统管理-系统设置中,配置邮件通知
上图,配置发件人地址System Admin e-mail address:Jenkins邮件发送地址,如果你这个没有配置,发邮件的时候,会报错
配置邮件通知
这个就非常的简单了,根据的的邮箱提供者的参数配置就行了。
Ps:小技巧:用户默认邮件后缀配置了后,以后你填写邮件地址只需要@之前的就行了
12.3项目构建
12.3.1新建自由风格构建任务。在已运行的Jenkins主页中,点击左侧的新建Job进入如下界面
这时,需要为新的构建任务指定一个名称。(这里输入的任务名称为:接口test)这里有几种的任务类型可供选择,鉴于初步介绍,先选择构建一个自由风格的软件项目。对于其他的类型,经常使用的是拷贝已存在任务;这主要为了能在现有的任务基础上新建任务。点击OK按钮
12.3.2构建触发器
Build after other projects are built:在其他项目构建完成后才执行构建:指定的项目完成构建后,触发此项目的构建。
Poll SCM :这是CI 系统中常见的选项。当您选择此选项,您可以指定一个定时作业表达式来定义Jenkins每隔多久检查一下您源代码仓库的变化。如果发现变化,就执行一次构建。例如,表达式中填写0,15,30,45 * * * *将使Jenkins每隔15分钟就检查一次您源码仓库的变化。
Build periodically :此选项仅仅通知Jenkins按指定的频率对项目进行构建,而不管SCM是否有变化。如果想在这个Job中运行一些测试用例的话,它就很有帮助。
12.3.3增加构建步骤,ant执行命令
Ant Version选择你Ant配置的那个名字,注意不要选择default
如果你的构建脚本build.xml不在workspace根目录、或者说你的构建脚本不叫build.xml。那么需要在高级里设置Build File选项的路径,指明你的脚本。注意:是相对路径
12.3.4邮件通知设置
选择Add post-build action,然后选择E-mail Notification,在Recipients中输入收件人邮件地址,如果用多个收件人用“,”英文逗号隔开
12.3.5构建完成后,保存页面信息
12.4运行
回到jenkins主界面,点击项目运行
13.邮件收到的信息
无异常,构建成功的信息
附录:
1、linux 下ant+jmeter的使用
A.安装:离线和在线安装两种,我是选的离线安装。
从http://ant.apache.org下载tar.gz版的ant,复制到usr路径下
进行解压:tar -xzvf apache-ant-1.9.6.tar.gz
vi /etc/profile 编辑ANT_HOME路径:
export ANT_HOME=/usr/apache-ant-1.9.2
export PATH=$PATH:$ANT_HOME/bin
source /etc/profile使配置生效,执行 ant -version,测试ant是否生效。
B.jmeter 将jmeter文件夹拷贝到linux机器,我放到/opt/soft/jmeter路径,chmod 777 /opt/soft/jmeter/bin/jmeter.sh. 测试jmeter是否linux可用。
C.su jenkins用户,执行ant,测试能否正确执行和生成对应文件。注意权限
性能测试学习之路 (四)jmeter 脚本开发实战(JDBC &JMS &接口脚本 & 轻量级接口自动化测试框架)的更多相关文章
- 性能测试学习之路 (一)认识jmeter(性能测试流程 && 性能测试通过标准 &&jmeter体系结构)
性能测试是通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各项性能指标进行测试. 1 性能测试技能树 性能测试是一项综合性的工作,致力于暴露性能问题,评估系统性能趋势.性能测试工作实质 ...
- 性能测试学习之路 (二)jmeter详解(jmeter执行顺序 && 作用域 && 断言 && 事务 &&集合点 )
1 Jmeter 工作区介绍 jmeter工作区分为3个部分:目录树.测试计划编辑区域.菜单栏. 2 Jmeter 执行顺序规则 Jmeter执行顺序规则如下: 配置元件 前置处理器 定时器 采样器s ...
- ReactNative新手学习之路04 组件化开发轮播图swiper支持安卓和IOS
react native 新手之路04 组件化开发轮播图swiper支持安卓和IOS npm install react-native-carousel --save git 地址Properties ...
- Redis——学习之路四(初识主从配置)
首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...
- Java学习之路(四):面向对象
Java中的面向对象 概念:面向对象的原本的意思是“”万物皆对象“” 面向对象思想的特点: 是一种更符合我们思想习惯的思想,将复杂的事情简单化 使我们角色发生了转换,将我们从执行者变成了指挥者 面向对 ...
- 《Python3网络爬虫开发实战》PDF+源代码+《精通Python爬虫框架Scrapy》中英文PDF源代码
下载:https://pan.baidu.com/s/1oejHek3Vmu0ZYvp4w9ZLsw <Python 3网络爬虫开发实战>中文PDF+源代码 下载:https://pan. ...
- 性能测试学习第五天-----Jmeter测试脚本&基础元件使用
JMeter简介:一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具.具有高可扩展性.支持Web(HTTP/HTTPS).SOAP.FTP.JAVA等多种协 ...
- 性能测试学习之路 (三)jmeter常见性能指标(相关术语、聚合报告 && 服务器性能监控配置 && 图形结果 && 概要报告)
1 性能测试目的 性能测试的目的:验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,以优化软件. 最后起到优化系统的目的性能测试包括如下几个方面: 1.评估系统的能力:测试 ...
- 性能测试学习第七天-----JMeter之linux环境部署篇
一.linux获取动态ip或静态ip: 1. virtualbox 加载linux虚拟机镜像文件,加载时重置全部网卡,加载后网络选择“桥接网络”--本机当前使用网卡: 2. ifconfig ...
随机推荐
- 修改centos6启动动画(plymouth方式)
centos6默认的启动动画是一个白蓝色的进度条,背景全黑色,现在需要对centos的启动动画进行定制 在查询了一些资料以后,发现有一个软件是可以对启动动画进行定制的,名字叫plymouth 这个在c ...
- android开发导包升级到androidx踩坑记录【转载】
最近一直在做安卓开发,奈何手中的资料比较老,资料上的一些Import经常没有,十分让人头疼. 感谢简书上的[张晴天天天天天]做的整理. 在这里也记录一下备用. 升级Android Studio后,在 ...
- Jar 和 war 区别
jar包:对于学习java的人来说应该并不陌生.我们也经常使用也一些jar包.其实jar包就是java的类进行编译生成的class文件就行打包的压缩包而已.里面就是一些class文件.当我们自己使用m ...
- Vue单元测试vue2-jest-coverage的package.json 配置
依赖的版本很重要,不要出错了 devDependencies:{ "babel-core": "^6.26.3", "babel-jest" ...
- 《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”
<Machine Learning in Action>-- Taoye给你讲讲决策树到底是支什么"鬼" 前面我们已经详细讲解了线性SVM以及SMO的初步优化过程,具体 ...
- iOS Transform坐标变化
在使用CGContext时,由于Quartz 2D与UIKit坐标不一致,所以需要对context进行再一次的变化,达到预期的效果. 1. 不同坐标原点介绍 在Quartz 2D中,坐标原点在画布的左 ...
- Linux 入侵痕迹清理技巧
清除history历史命令记录 vim ~/.bash_history //编辑history记录文件,删除部分不想被保存的历史命令 history -c //清除当前用户的history命令记录 H ...
- php 序列化和反序列化的作用及使用
1.序列化是什么意思呢? 序列化就是把本来不能直接存储的数据转换成可存储的数据,并且不会丢掉数据格式 serialize(); 2.反序列化是什么意思呢? 其实就是字面的意思,把序列化的数据,转换成我 ...
- sqlilab less28 less28a
less-28 less-28a 二者相差不大 单引号小括号包裹,黑名单过滤--,#,空格,union空格select(不区分大小写) less-28的黑名单 less-28a的黑名单 %a0,不被 ...
- java开发两年了,连个java代理模式都摸不透,你怎么跳槽涨薪?
前言 代理模式(Proxy Pattern),23种java常用设计模式之一.代理模式的定义:代理类对被代理对象提供一种代理以控制对这个对象的访问.代理类主要负责为委托类预处理消息.过滤消息.把消息转 ...