jmeter性能测试脚本测试怎么自己写脚本

Jmeter 快速入门教程(四)--录制复杂web测试脚本 - kazhang的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园
Jmeter 快速入门教程(四)--录制复杂web测试脚本
& 10:22:54
/ 个人分类:
meter的功能简单,不需要有脚本语言的编写经验,纯图形界面添加场景, 用起来上手很快。但是如果手动添加每一个(http/https)请求,费时又费力。而且有可能最后手动编写的和实际发的请求有出入。1。web性能测试以及web http请求基本原理。再介绍录制jmeter脚本之前,我们先谈一下web性能测试。web就是调用http/https接口, 其实没有是什么复杂度可言。只是我们必须清楚,对于一个网站说,一个页面并通常不是只有一个http请求。如果需要测试一个rich web page,必须了解到这一点(测试http接口则简单的许多,只是单一的http接口请求)。例如这样一个页面(下面是html代码)如果向服务器请求上面的一个页面,则除了本身页面的请求本身,还有一个css和img的资源。这样打开这样一个页面,本需要有三个http请求。1. http1 -& get the web page (首先获取你要访问的页面的html代码)2. the web page contain two resources (假设该页面,有一个css资源和一个图片)3. then request &http2 and http3 to &get the css file and image respecitively. (则会继续发起获取css和图片的请求)所以这样就是发起了3个http请求,才完整的打开了一个页面。浏览器实际是这么做的,但浏览器作了很多优化。 (比如多线程[一般2-6个http connection,不同浏览器内核不同], &http keep-alive,缓存图片,css等资源)。说道这里,不得不佩服loadrunner的强大。他可以尽量模拟浏览器的这些行为,来保证测试的结果准确性。但这些参数都可以动态调整的。(通常我们录制的富web页面, 也就是rich webpage, 通常需要使用事务控制器来辅助我们进行度量数据, 关于事务控制器请访问)注意: 最新的jmeter-plugins 已经支持了webdriver sampler, &已经可以模拟浏览器的行为,更真实的模拟用户访问web的行为, 可以得到更真实的性能数据. 具体是否使用,还需要根据自己的测试场景进行判断. (作者目前并不建议盲目的使用, 需要慎重考虑. 原因: 用户体验方面的可以由其他工具完成, 而性能测试则专注于特定的问题&)具体资料信息,请访问&2。实际录制脚本好,那么我们现在就来实际录制脚本吧,并且体验一下真正一个页面的实际http请求过程。这里我们只谈http,https不在本文所讲范围内。录制脚本目前有2种方法,我们先介绍jmeter proxy方法。另一个是badboy录制的脚本转化为jmeter脚本,直接想了解badboy,请直接访问jmeterproxy 来了。1)启动jmeter,这个不多说了。2)选择测试计划,右键添加线程组(thread group)3)选择这个线程组,右键添加config element -〉 http默认请求4)在http默认请求单元,填入 name 为jakarta.apache.org. 这个是我们要录制的页面。其他地方不填5)然后选择刚才那个县城组,右键加入一个录制控制器。位于Add&Logic Controllers -& Recording Controller6) 选择WorkBench,右键加入 Non-Test Elements -& Http proxy server7)在http proxy server里, 的patterns to include 里,写入.*\.html &这个是正则表达式,意思是录制所有的html为后缀名的页面。 那么如果你要录制后缀名为jsp或者do的,则写入.*\.jsp &和 .*\.do 分别。8)对于url patterns to excllude的地方,是写入不想被录制的一些资源文件url(往往我们根据后缀名来进行区分)。比如不想录制http发起获取图片的请求,就需要写上*\.jpg 或者 *\.png 。 这些是否配置,视测试的具体场景而定。比如是否要测试静态图片等。9)为了调试录制的情况,我们选择http proxy server ,添加一个察看结果树监听器。这个以前我们曾经用过。10)回到http proxy server然后,选择开始启动。这样proxy server 就启动了。11)这样我们打开一个浏览器,将浏览器的**设置为jmeter proxy server 的ip和端口号。 因为proxy server 就在本地,所以就写localhost 和端口即可。12)设置好**后,用浏览器访问13)随便点击一些连接,然后回到jmeter 的窗口,你查看结果树就看到了录制的http请求了。14)这样的脚本,我们稍做修改,就可以使用了。云智慧压测实战分享之JMeter脚本录制实例
云智慧压测实战分享之JMeter脚本录制实例
& & 在前面的《云智慧压测实战分享之JMeter工具使用初探》中我们对JMeter的功能特点和常用元件做了简单介绍,接下来说说JMeter的脚本录制。JMeter有多种录制脚本方法,其中最常见的是通过第三方工具Badboy录制,另外还有JMeter自身设置(Http代理服务器+IE浏览器设置)来录制脚本,下面以压测宝为例来介绍下Badboy脚本录制过程。&
& & 注:使用JMeter的代理或是Badboy进行录制的时候,操作不能太快,不然容易造成录制失败。&
& & 1、打开Badboy工具,在地址栏目中输入被测试项目的地址。注意:Badboy启动默认是录制状态,为红色按钮,如图:
& & 录制完成后点击工具栏旁边黑色按钮,结束录制。&&
& & 2、选择“文件”--Export to JMeter…
& & 3、打开JMeter工具,选择“文件”--&“打开”选择刚才保存的文件(.jmx类型),将文件导入进来了。
& & 录制的脚本一定要添加HTTP Cookie Manager,否则脚本运行失败。&
& & 对于JMeter来说,一个测试计划只能有一个Cookie管理器,因为当多个Manager存在时,JMeter没有方法来指定使用哪个Manager,同时一个Cookie Manager中存储的Cookie也不能被其他Cookie Manager所引用,所以同一个测试计划中不建议使用多个Cookie Manager。&
& & JMeter压测实例&
& & 下面我们用几个JMeter压测实例来熟悉一下JMeter的使用。&
& & 1、使用JMeter进行http接口测试&
& & Jmter工具设计之初是用于性能测试的,它在实现对各种接口的调用方面已经比较成熟,因此可直接使用JMeter工具来完成对Http接口的测试。&
& & 1)、开发接口测试案例的整体方案:&
• 第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档;&
• 第二步:从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参数据以及明确的格式和检查点。&
• 第三步:和开发一起对接口测试案例进行评审。&
• 第四步:结合开发库,准备接口测试案例中的入参数据和出参数据,并整理成csv格式的文件。&
• 第五步:结合接口测试案例文档和csv格式的数据文档,做接口测试案例的自动化案例开发。&
& & 2)、接口自动化适用场景:&
& & 目前设计的自动化接口测试案例有两个运行场景:&
& & a. 测试前置、开发自测:一个新的自动化接口测试案例开发完成后,直接发给接口对应的开发,安排在开发本地环境执行,一旦开发确认完成接口开发,就开始执行接口测试案例,基本上可以实时拿到测试结果,方便开发快速做出判断。【开发本地运行的方式就是打开JMeter工具,导入JMX文件,开始执行即可。】&
& & b. 回归测试:开发本地测试通过后,或整个需求手工测试通过后,把自动化的接口测试案例做分类整理,挑选出需要纳入到回归测试中的案例,在持续集成环境重新准备测试数据,并把案例纳入到持续集成的job中来,这些用于回归的接口测试案例需要配置到持续集成平台自动运行。&
& & 3)、接口测试环境准备&
•  Jdk1.6或以上:http://www.oracle.com/technetwork/java/javase/downloads/index.html
•  JMeter,下载址址:http://jmeter.apache.org/download_jmeter.cgi
•  插件的下载安装地址:http://www.jmeter-plugins.org/&
& & 4)、创建工程:&
  a、打开JMeter:下载好JMeter后,双击bin目录下的jmeter.bat文件:
  b、添加线程组:在“测试计划”上点击鼠标右键--&添加--&threads(Users)--&线程组,添加测试场景设置组件,接口测试中一般设置为1个“线程数”,根据测试数据的个数设定“循环次数”。
  c、添加“HTTP Cookie管理器”:
  d、添加“Http请求默认值”组件,当被测系统有唯一的访问域名和端口时,这个组件很好用:
  e、在“HTTP 请求默认值”组件配置页面,填写被测系统的域名和端口,http请求的实现包版本以及具体协议类型,线程组里的所有“HTTP Sampler”可默认使用此设置。
&  f、在“线程组”里添加“HTTP 请求”的Sampler
&   g、在HTTP请求设置页面,录入被测接口的详细信息,包括请求路径,对应的请求方法,以及随请求一起发送的参数列表:
  h、设置检查点:在被测接口对应的“HTTP 请求”上,添加“响应断言”
  i、在设置页面上添加对相应结果的正则表达式存在性判断即可:
&  j、添加监听器:方便查看运行后的结果
& & 上述步骤完成了一个简单测试实例的创建,复杂测试实例均在此基础上扩展完成。使用JMeter工具开发的接口测试案例,一个子系统建议放在同一个“测试计划”中,流程测试可以通过“线程组”来区分,这样也便于设定不同的测试数据个数。比较独立的接口,可以统一放在一个线程组内,顺序完成测试。&&
& & 流程性接口的测试:如果要测试的接口可以组成一个流程,只需要顺序添加多个“HTTP 请求”的Sampler,各请求之间可以提取需要在上下文传递的数据作为参数,以保证流程中数据的一致性。&
& & 2、JMeter分布式测试&
& & 在使用JMeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑(CPU和内存)可能无法支持,这时可以使用JMeter提供的分布式测试的功能。&
& & 1)、JMeter分布式执行原理:&
& & JMeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。&
& & 执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。&
& & 执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。&
& & 2)、执行机(slave)配置:&
  a、slave机上需要安装JMeter,具体如何安装这里不详细介绍了。
  b、添加环境变量:JMETER_HOME=D:\B_TOOLS\apache-jmeter-2.13,此处为你JMeter的路径
  c、启动bin目录下的:jmeter-server.bat,启动成功如下图:
  d、上图上标红的IP和端口会在master里配置时用到。IP就是slave机器IP,端口默认是1099,端口也可以自定义,这里我自定义为1000,这个后面会讲。&
  e、多台slave的话,重复1~4步骤就好。 &&
& & 3)、调度机(master)配置:
  a、脚本:简单的一个访问压测宝的脚本: 
  b、找到JMeter的bin目录下jmeter.properties文件,修改如下配置,IP和Port是slave机的IP以及自定义的端口(这里端口我自定义为100,后面会讲如何自定义):
        remote_hosts=10.13.223.202:.225.12:1000
    多台slave之前用","隔开,我这配置了2台,可以看到标红的这个就是上面截图slave的IP和Port.
  c、打开JMeter,选择运行,有运程启动、运程全部启动两个选项:
  d、选择远程启动--&10.13.225.12:1000
    a) master结果,这里我只启动了10.13.225.12:1000这一台slave,所以只有一个结果(线程数和循环次数都是1):
    b) slave控制台信息:
  e、选择远程启动--&远程全部启动:
    a) master结果,全部启动,我配置了2台slave,所以有两次执行结果:
4)、自定义端口:
  上面其实已经实现了JMeter的分布式测试,这部分主要介绍下如何自定义slave端口:
  a、slave:在slave机的JMeter的bin目录下,找到jmeter.properties文件,修改如下两个配置项,比如我这里修改为1888:
      server_port=1888
      server.rmi.localport=1888
  b、启动slave机上的jmeter-server.bat,如下图,端口已经修改为:1888
  c、master:修改master机器的jmeter.properties文件:
      remote_hosts=10.13.223.202:.225.12:1888
  d、重启jmeter.bat,如下图,端口已经变了:
& & 5)、其它说明:
  a、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。
  b、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。
  c、每台机器上安装的JMeter版本和插件最好都一致。&
& & 3、搭建持续集成接口测试平台&
下面介绍最后一个实例,搭建持续集成接口测试平台(Jenkins+Ant+JMeter)。&
1)、环境准备:
JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html
Ant:http://ant.apache.org/bindownload.cgi
Jenkins:http://jenkins-ci.org/&
& & 2)、Jemter脚本准备:
& & a、脚本目录:D:\B_TOOLS\apache-jmeter-2.13\demo
b、脚本内容:都是访问压测宝或google首页
Script_yacebao.jmx  &
Script_google.jmx
3)、ANT的build.xml代码准备:
&1&?xml version="1.0" encoding="UTF-8"?&
&3&project name="ant-jmeter-test" default="run" basedir="."&
&4&tstamp&
&5&format property="time" pattern="yyyyMMddhhmm"/&
&6&/tstamp&
&8&property environment="env"/&
&9&property name="ReportName" value="TestReport"/&
10&!-- 需要改成自己本地的JMeter 目录--&
11&property name="jmeter.home" value="D:\B_TOOLS\apache-jmeter-2.13"/&
12&!-- jmeter生成jtl、html格式的结果报告的路径--&
13&property name="jmeter.result.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}"/&
14&!-- 生成的报告的前缀--&
15&property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl"/&
16&property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html"/&
18&target name="run"&
19&echo message="start..."/&
20&antcall target="clean"/&
21&antcall target="test"/&
22&antcall target="report"/&
23&/target&
25&target name="clean"&
26&mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}"/&
27&/target&
29&target name="test"&
30&taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/&
31&jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"&
32&!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本--&
33&testplans dir="D:\B_TOOLS\apache-jmeter-2.13\demo" includes="*.jmx"/&
35&property name="jmeter.save.saveservice.output_format" value="xml"/&
36&/jmeter&
37&/target&
39&target name="report"&
40&xslt in="${jmeter.result.jtlName}"
41 & & & & & & &out="${jmeter.result.htmlName}"
42 & & & & & & &style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"/&
43&!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝--&
44&copy todir="${jmeter.result.dir}"&
45&fileset dir="${jmeter.home}/extras"&
46&include name="collapse.png"/&
47&include name="expand.png"/&
48&/fileset&
50&/target&
51&/project&
4)、配置Jenkins Job并运行:
a、job配置如下:
b、在job的workspace目录下会生成结果报告:
c、TestReport.html:
& & 5)、配置发送邮件功能&
a、自已写一个发送邮件的功能并打成sendmail.jar包,放在job的workspace目录中
b、jenkins增加构建步骤
  a)进入到测试报告的目录
  b) 调用sendmail.jar命令发送邮件
& & 由build3.xml的第12、13行可知,报告文件生成目录为:${env.WORKSPACE}/results/${env.BUILD_ID},所以这里要先cd到具体执行的那个build_id目录下。&
& & 可以把上面的两行命令写在成一个批处理文件,例如第1步有个sendmail.bat文件就是,然后调用时直接写sendmail.bat就好了。&
& & 持续集成接口测试平台(Jenkins+Ant+JMeter)就此搭建成功,以上是关于Jmeter脚本录制和压测的几个实例,接下来为您带来进阶的《云智慧压测实战分享之JMeter场景设置与监控》,敬请期待。
编 辑:孔垂帅
公司必须持续不断的、永恒的促进组织血液流动,增强优秀干部..
CCTIME推荐
CCTIME飞象网
CopyRight &
By CCTIME.COM
京ICP备号&& 京公网安备号
公司名称: 北京飞象互动文化传媒有限公司
未经书面许可,禁止转载、摘编、复制、镜像Jmeter简单介绍与搭配Jenkins实现自动化测试实践Jmeter简单介绍与搭配Jenkins实现自动化测试实践青烟王国百家号Bioneck 岂安科技研发工程师负责 Stalker 项目的部分研发与测试工作,编程爱好者,乐于使用代码解决生活中的重复工作。最近有个需要依靠 Jmeter+Jenkins 实现自动化测试后部署的需求,于是看了看Jmeter的资料,这里给大家分享下。Jmeter简介Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试,它最初被设计用于 Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性, JMeter 允许使用正则表达式创建断言。Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl 脚本,java 对象,数据库和查询,FTP 服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。&&&&Jmeter安装Jmerter 是基于 java的,所以安装 Jmeter 之前必须先安装 JDK 依赖,JDK 安装的方法网上许多这里就不多介绍了(建议安装8.0以上版本)。安装好 java 后到 Jmeter 官网下载对应系统的压缩包解压到本地任意位置就可以使用了,这里我建议下载3.0以上版本的 Jmeter,因为从3.0开始 Jmeter 可以直接生成可视化的 HTML 报告,不再需要安装插件来生成。Jmeter测试组件(1)负载发生器:用于产生负载,通常以多线程或是多进程的方式模拟用户行为。(2)用户运行器:通常是一个脚本运行引擎,用户运行器附加在线程或进程上,根据脚本要求模拟指定的用户行为。(3)资源生成器:用于生成测试过程中服务器、负载机的资源数据。(4)报表生成器:根据测试产生的数据生成报表,提供可视化的数据显示方式。Test Plan (测试计划):用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就说本次的性能测试的所有内容是于基于一个计划的。下面看一下一个计划下面都有哪些主要的功能模块(右键单击“测试计划”弹出菜单)。Threads (Users)线程 用户虽然有三个添加线程组的选项,名字不一样, 创建之后,其界面是完全一样的。之前的版本只有一个线程组的名字。现在多一个 setUp theread Group 与 terDown Thread Group。setup thread group可用于执行预测试操作,这种类型的线程执行测试前进行定期线程组的执行。teardown thread group.可用于执行测试后动作,这种类型的线程执行测试结束后执行定期的线程组。thread group(线程组).这个就是我们通常添加运行的线程。通俗的讲一个线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。测试片段测试片段是在2.5版本之后新加的一个选项。测试片段元素是控制器上的一个种特殊的线程组,它在测试树上与线程组处于一个层级。它与线程组有所不同,因为它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。组成控制器JMeter 有两种类型的控制器:取样器(sample)和逻辑控制器(Logic Controller),用这些原件来驱动处理一个测试。取样器(Sample)取样器(Sample)是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的 sampler ,如 HTTP Request Sampler 、 FTP Request Sample 、TCP Request Sample 、JDBC Request Sampler 等,每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。逻辑控制器(Logic Controller)逻辑控制器,包括两类元件,一类是用于控制 test plan 中 sampler 节点发送请求的逻辑顺序的控制器,常用的有 如果(If)控制器 、switch Controller 、Runtime Controller、循环控制器等。另一类是用来组织可控制 sampler 来节点的,如 事务控制器、吞吐量控制器。配置元件(Config Element)配置元件(config element)用于提供对静态数据配置的支持。CSV Data Set config 可以将本地数据文件形成数据池(Data Pool),而对应于 HTTP Request Sampler 和 TCP Request Sampler 等类型的配置原件则可以修改 Sampler 的默认数据。(例如,HTTP Cookie Manager 可以用于对 HTTP Request Sampler 的cookie 进行管理)定时器(Timer)定时器(Timer)用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端 QPS 的手段。类似于 python 中的 sleep。JMeter 定义了 Bean Shell Timer、Constant Throughput Timer、固定定时器等不同类型的 Timer。前置处理器(Per Processors)用于在实际的请求发出之前对即将发出的请求进行特殊处理。例如,HTTP URL 重写修饰符则可以实现URL重写,当 RUL中有 sessionID 一类的 session 信息时,可以通过该处理器填充发出请求的实际的 sessionID 。后置处理器(Post Processors)用于对 Sampler 发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据。例如,正则表达式提取器 则可以用于提取响应数据中通过匹配正则表达式获得的数据。断言(Assertions)断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。监听器(Listener)监听器可以用来对测试结果数据进行处理和可视化展示的一系列元件。 图行结果、查看结果树、聚合报告。都是我们经常用到的元件。以上就是 Jmeter 的基本组成元件,我们用到的绝大部分测试计划就是依靠以上元件完成。接下来我就根据我们的项目测试实例来实际演示一下以上元件的用法,目前项目的测试需求主要是业务测试,如果需要压力测试只需要把检查数据正确性的步骤去掉,简单的测试流程为向一个接口 get 请求将数据传输过去后,检查日志和数据库中是否有正确的数据。这是我配置好后的测试计划:添加线程组一个测试请求是基于一个线程组完成的。一个测试计划必须有一个线程组。测试计划添加线程组非常简单。在测试计划右键弹出下拉菜单(添加--&Threads(Users)---&线程组)中选择线程组即可。jmeter 中 每个测试计划至少需要包含一个线程组,当然也可以在一个计划中创建多个线程组,多个线程组在测试计划下面是并行执行的,也就是说这些线程组是同时被初始化并同时执行线程组下的 Sampler。线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。准备时长: 设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。循环次数:每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。在这里,因为是检查数据正确性只需要运行一次,所以全部设置为1。添加参数添加参数常用读取 CSV 文件将文件内容设置为变量,我比较喜欢的是添加Beanshell元件,编写java脚本直接生成数据。在线程组上右键菜单选择添加---&配置元件---&CSV Data Set Config 就能添加 CSV文 件读取。主要设置的参数有:FileName: 填写被读取的 CSV 文件地址和文件名。File Encoding: 默认为 ANSI。Varible Names: 定义文本文件中的参数名,以逗号分隔例如 a,b,c,定义后可在脚本在以 Shell 变量的同样的方式引用。Delimiter: 定义分隔符,用于将变量分开,这里定义的某个分隔符,则在 Variable Names 用这里定义的分隔符,例如 a,b,c 那么分隔符就是“,”。Recycle on EOF: 设置为 True 后,允许循环取值。Stop Thread on EOF: 当 Recycle on EOF 为 false 并且 Stop Thread on EOF为true,则读完 csv 文件中的记录后,停止运行。Sharing Mode: 设置是否线程共享。添加 Beanshell 需要在线程组上右键菜单选择添加---&Sampler---&Beanshell Sampler 就能添加 Beanshell 脚本文件读取。beanshell 十分强大,除了生成参数外也可以 import java 的包来完成许多复杂的逻辑,这里就不细说了。参数设置后可以在后续的元件中以 $ {参数名}的形式调用。添加HTTP请求生成参数后在线程组上右键菜单(添加---&Sampler---&HTTP请求)选择 HTTP 请求。对于 jmeter 来说,取样器(Sampler)是与服务器进行交互的单元。一个取样器通常进行三部分的工作:1.向服务器发送请求2.记录服务器的响应数据3.记录相应时间信息HTTP Sampler 中可以设置的参数很多,这里就说一下一些经常使用的:名称:本属性用于标识一个取样器,建议使用一个有意义的名称。注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。协议:向目标服务器发送 HTTP 请求时的协议,可以是 http 或者是 https ,默认值为 http 。服务器名称或 IP :HTTP 请求发送的目标服务器名称或IP地址。端口号:目标服务器的端口号,默认值为80 。方法:发送HTTP请求的方法,可用方法包括 GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE 等。路径:目标 URL 路径(不包括服务器地址和端口)。Content encoding :内容的编码方式,默认值为 iso8859。自动重定向:如果选中该选项,当发送 HTTP 请求后得到的响应是302/301时,JMeter 自动重定向到新的页面。同请求一起发送参数 : 在请求中发送 URL 参数,对于带参数的 URL ,jmeter 提供了一个简单的对参数化的方法。用户可以将 URL 中所有参数设置在本表中(如图中 ${did}就是调用之前生成的参数),表中的每一行是一个参数值对(对应 RUL 中的 key1=value1)。在这里添加好参数后就可以进入下一步,检查数据。添加数据库连接与数据库操作要连接数据库首先需要下载不同数据库对应的 JDBC 驱动包,这里我使用的是 mysql,所以下载入 mysql-connector-java.jar,下载后将 jar 包放到Jmeter所在目录的 lib 文件夹中就可以了。然后选择配置元件中的 JDBC Connection Configuration 添加数据库连接配置。大部分配置读使用默认就可以,主要配置连接数据库部分:Variable Name: 变量名称。需要唯一标识。与 JDBC 取样器中的相对应,决定 JDBC 取样的配置。简单理解就是在 JDBC request 的时候确定去哪个绑定的配置。MaxNumber of Connection: 数据库最大链接数PoolTimeout: 数据库链接超时,单位 msIdle Cleanup Interval (ms): 数据库空闲清理的间隔时间,单位 msTransaction Isolation:事务间隔级别设置,主要有如下几个选项:(对 JMX加解密) TRANSACTION_REPEATABLE_READ 事务重复读、TRANSACTION_READ_COMMITTED 事务已提交读 、TRANSACTION_SERIALIZABLE 事务序列化 、TRANSACTION_READ_UNCOMMITTED 事务未提交读、TRANSACTION_NODE 事务节点 、DEFAULT 默认、编辑Keep-Alive: 是否保持连接Max Connection age (ms):最大连接时长,超过时长的会被拒绝Validation Query:验证查询,检验连接是否有效(数据库重启后之前的连接都失效,需要验证查询)Database URL:如 jdbc:mysql://localhost:3306/test 表示本地数据库,3306 端口,数据库名称为 testJDBCDriver Class: JDBC 的类,如 com.mysql.jdbc.Driver ,不同数据库使用把不同累,可以参考 Jmeter 的文档。配置好后就可以配置具体的数据库操作。选择 Sampler 添加 JDBC Request。Variable Name:数据库连接元件名称,填写对应 JDBC Name,Query Type:选择对应的数据库操作,路 select,update 等。Query:具体的数据库查询语句,可以直接将参数写道 SQL 语句中,也可以使用占位符:?,将参数写到下方的 Parameter velaues 中,Parameter Types: 参数类型variable names: 返回结果的参数名,使用方法与读取 csv 文件获得的参数相同获取到数据库查询结果后就可以检查数据正确性了数据检查需要检查的是 JDBC request 回来的数据,所以断言元件需要在数据库操作的内层。断言的种类有许多,这里就选择最常用的响应断言右键 JDBC Request ,选择添加----&断言---&响应断言。断言的设置是比较简单的:apply to:是应用范围,设定匹配的范围Main sample and sub-samples: 匹配范围为当前父取样器,及子取样器Main sample only :仅当前父取样器Sub samples only: 仅子取样器JMeter Variable:变量值进行匹配,这里需要检查的是 JDBC Request 返回的值所附的变量,所以选择这一项,注意:变量名_x的形式意思是取数据返回结果的第x行。要测试的响应文字:针对响应数据不同部分进行匹配(1) 响应文本:响应服务器返回的文本内容,http 协议排除 header 部分(2) 响应代码:匹配响应代码,比如 http 请求中‘200’代表成功(3) 响应信息:匹配响应信息,处理成功返回‘成功’或者“ok”字样(4) Response Header: 匹配响应头中的信息匹配规则:包括:响应内容包括需要匹配的内容就算成功匹配:响应内容要完全匹配匹配内容,不区分大小写equals:完全相等,区分大小写substring:响应内容包括匹配内容即为成功。可以通过添加断言结果来查看断言的执行情况。如果接口响应数据可以与断言匹配上,则测试用例通过,否则不通过。查看通过结果就需要添加监听器了(Listener)添加监听器Jmeter 有许多种类型的监听器,比如查看图形结果、聚合报告等,因为这个测试是业务测试,所以这里就选择查看结果树,针对每个元件的运行结果进行查看。选择监听器---&响应断言执行测试用例就可以看到测试结果了。查看结果树,通过的测试通常为绿色。红色则代表失败了。可以查看到取样器结果,请求,响应数据,或是把测试结果写入到文件中。测试计划配置完成之后,可以选择左上角的文件---&保存测试计划为...,来将测试计划保存到想要的地方。以上就是 Jmeter 的大概使用方式与介绍。我们经常需要 Jenkins 实现一键部署,但是有时候我们可能会因为失误导致部署时的代码不一定是可用的,这时候就可以使用 Jmeter 添加到 Jenkins 中,保证部署时的代码是通过了测试用例的。接下来介绍 Jmeter 与 Jenkins 搭配使用实现自动化测试部署。使用在添加 Jmeter 测试任务之前,Jenkins 需要首先安装两个插件,以方便我们对 Jmeter 的测试结果进行处理:HTML Publisher plugin:可以让我们方便的在 Jenkins 中直接打开 Jmeter 的结果进行查看。Performance Plugin:可以将测试结果的 log 以图表的形式整合到 Jenkins 中,还能根据测试结果的错误率与波动率修改 Jenkins 的 job 状态。安装好插件以后就可以添加测试任务了,选择新建---&构建一个自由风格的软件项目。接下来进入 Jenkins 配置页面。根据需要配置好相应的源码管理,触发器和环境后,添加构建,这里 Jmter 运行在 windows 中所以添加 windows shell,如果需要在 Linux 中构建可以选择对应 Shell,使用的命令如下图,该命令是跨平台的,不管 win,unix 还是 mac 都可以使用。命令格式为: -n -t &测试脚本文件路径& -l &日志保存路径& -e -o-n 非 GUI 模式 -& 在非 GUI 模式下运行 JMeter-t 测试文件 -& 要运行的 JMeter 测试脚本文件-l 日志文件 -& 记录结果的文件,文件必须不存在-e 设置测试完成后生成测试报表-o 指定报表生成文件夹,文件夹必须为空或者不存在-r 分布式远程执行 -& 指定远程slave节点执行测试任务-R 设置分布式服务器列表 -& 配置远程服务器ip列表-H 代理主机 -& 设置 JMeter 使用的代理主机-P 代理端口 -& 设置 JMeter 使用的代理主机的端口号接下来配置构建后操作:选择添加构建后操作,在列表中首先是选择 Publish HTML Reports。选择增加。HTML directory to archive 中指定 Jmeter 生成报告的相对路径。剩余配置一般默认就可以了。接下来继续添加构建后操作,选择 Publish Performance test result report:source data files:日志文件所在的相对路径。evaluation mode:选择判断模式,一般来说选择 standard mode (标准模式), 标准模式中可以选择 relative threshold(相对阀值)或者 error threshold (相对错误数),这里因为是只执行一次的业务测试,所以选择 error threshold,并在下方配置1次测试失败就将 job 状态改为 failed。如果是测试数量较多,且容忍一定的错误率可以选择 relative threshold,根据错误的百分比来修改 job 状态。这里配置好以后就可以添加自己的后续部署任务了,再次选择增加构建后操作,选择 trigger parameterized build on other projects。填写测试结束后需要部署的项目,并选择 job 状态为什么时才会触发这个构建。以上就是一个完整的根据测试结果自动部署任务了,接下来我们保存,选择立即构建。构建完成后的结果如图选择 HTML report 可以查看 HTML 报告(如果使用新版本的 Jenkins,因为 Jenkins 的安全策略默认不加载 js,css 等文件,所以需要在 jenkins 设置中执行脚本命令行:System.setProperty(&hudson.model.DirectoryBrowserSupport.CSP&,& default-src 'self';&),执行完毕后重新构建就可以正常打开 HTML 报告。*这个命令重启后失效)在 HTML 报告中可以看到测试结果的详细信息。首页是测试结果的总览,可以看到测试的错误率等,选择左边栏可以查看更详细些的请求时间,吞吐率等信息。配置一个自动化测试及部署任务就是这么简单,希望能够帮助到各位。谢谢阅读。(●''●)推荐阅读UX 必备:我的 MAC 版图片管理器推荐与使用对比从入门到不放弃:多浏览器的自动化测试(1)-本地测试从入门到不放弃:多浏览器的自动化测试(2)-云服务测试CSO进击之路:初来乍到,业务安全新官上任做点啥本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。青烟王国百家号最近更新:简介:SUV视频、SUV车型介绍、最酷的出行路线。作者最新文章相关文章

我要回帖

更多关于 jmeter性能测试脚本 的文章

 

随机推荐