压测工具笔记(二)之JMeter

打开jmeter.log查看其他具体原因

@TOC

jmeter命令行执行脚本 jmeter打开脚本报错jmeter命令行执行脚本 jmeter打开脚本报错


jmeter命令行执行脚本 jmeter打开脚本报错


jmeter命令行执行脚本 jmeter打开脚本报错


Y维度实际上是对性能测试进行了一个划分,Y1是负责模拟用户请求的部分,Y2是负责验证结果正确的部分,因为这两部分同时需要线程组,所以是相交的。

JMeter是Apache下的一个项目,一个功能强大压力测试工具

JMeter是一个纯ja写的开源软件,用来测试可变行为和性能。起初它设计的目的是测试Web应用,但是现在已经扩展到其它的测试

JMeter既提供了GUI界面方便用户使用也提供了命令行的方式让用户作

JMeter可以支持测试的应用/服务/协议有很多,目前主要介绍HTTP请求

接口测试的 主体流程 :创建测试,中创建线程组,线程组中创建线程HTTP请求,进行测试

关闭前需要保存我们设置好的测试

问题: 保存测试脚本时只保存了Testplan下的部分,导致生成的测试脚本只是“testplan”下面的某些元素,,不包括需要运行测试所需的“TestPlan”元素。

解决方案: 在保存测试脚本时,保存整个测试,以下两种方式

2.鼠标选中测试,直接点击工具栏上的“保存测试”按钮

使用下来的感官是:工具功能强大,但是GUI做的是真的low,连自适应都没有。

相对来讲Windows风格的界面是友好的一个了 选项-->-外观->Windows

参考:

JMeter篇02:JMeter内部原理

方法如下:

上一篇文章 ,我们介绍了JMeter的安装6、 。

在使用JMeter这款工具之前,首先要了解JMeter是如何工作的,也就是JMeter的内部原理,理解了原理,我们才能更好地使用工具。

X维度实际上是描述的是不同的组件,这些组件是的个体,我们依靠这些组件完成性能测试中负载的模拟,这些组件分别是:

JMeter是以线程的方式运行的,通过线程组来驱动多线程运行测试脚本,对被测发起负载,每一个负载机上都可以运行多个线程组。

JMeter的场景运行,基于作方式,可以分为两种:

基于运行架构,也可以分为两种,即(本地化运行或称单机运行)、远程运行,不论是GUI模式还是非GUI模式,都支持本地运行与远程运行。

远程运行的逻辑是:

至于JMeter中的其他元件,都是为这些要素服务的。

学习完JMeter的基础原理后,我们再来看下JMeter的工作目录,更好地了解JMeter。JMeter的工作目录下主要有以下的文件夹/文件:

本篇文章框架性地介绍了JMeter的组成及运行原理,实际上与大多数的性能测试工具原理上是相似的,比较理论化,虽然这些理论比较枯燥,但这是后续学习JMeter的一个基础,有了理论,才能更好地实践。

同时JMeter也支持远程运行,弥补单台机器负载不够的情况。

在jmeter编写beanshell 怎么调试

2. 左边树将出现测试、工作台Linux中能创建的线程个数 : 本回答介绍的在Linux中对创建线程个数影响的一些配置两根。

一般以#!/bin/sh开头(不是必须要写,但一定要单独一行),指定执行这个脚本的shell程序(也可以用#!/bin/zsh或其他),然后就是堆命令了。Linux的shell脚本支持很多功能,加上Linux高度模块化的命令,完全可以用shell脚本写出复杂的程序。以上只是简单介绍如何开始写shell脚本,如果要写复杂的脚本,还需要深入学习相关知识(如if--fi、case--esac等结构)。当然,还需要给脚本加上可执行权限(chmod +x ./file.sh),否则可以用sh ./file.sh方式执行脚本(这里的sh是执行脚本所需shell,命令也可以是zsh ./file.sh或其他)。

jmeter 压力测试脚本怎么写

2/6

1. 运行jmeter

JMeter的运行逻辑主要是:

3. 选择测试,按右键-》添加-》threads(users)线程组

在”循环次数”设置不选择永远,循环次数设置1。

4. 现在先介绍如何设置登录请求,选择线程组,右键――添加――》sampler-―》 请求。

命令行执行Ant构建Jmeter,一直报Ja(TM) Platform SE binary 已停止工作

作系统的缺省配置可以满足大部分用户的JMeter是通过线程组的设置来完成场景设置的,有些复杂场景还需要与逻辑配合。JMeter 线程组实际上是建立一个线程池,JMeter根据用户的设置进行线程池的初始化,及在运行时做各种异常处理。日常使用,而性能测试往往会突破这些作系统默认的配置。常见的包括文件、端口限制等。本文以CentOS为例,介绍如何优化这些配置。

解决方案

将文件夹增加写入权限

配置build.xml的value值和jmeter脚本名称一致。

如何使用Jmeter录制脚本

用来提供对静态数据配置的支持。例CSV Data Set config可以将本地数据文件形成数据池(Date Pool)。

1、使用Jmeter自身的,创建一个线程组。

2、再创建一个。

3、设置浏览器,设置完成后,在浏览器中访问需要录制的web项目地址,即可录Z维度只有一个(Listener),用来负责结果的收集,不仅可以放在线程组之内,也可以放在线程组之外,所以与它们是相交的。制脚本。

JMeter测试配置优化指南

经常有客户问XMeter君,就是单个JMeter能支持多少虚拟用户?这个问题其实很难给出一个很准确的。因为虚拟用户本身是一个抽象的概念,每个虚拟用户可以是模拟不同的协议。就像如果用于在实际的请求发出之前对即将发出的请求进行特殊处理。例当中有SessionID一类的信息时,可以通过该处理器填充发出请求实际的SessionID。别人问某个容器能装多少东西这种问题,因为东西本身不确定的话,你也无法给出一个确定的。当然了,容器大小本身是确定的,我们只能说在给定的容器的范围内,是否有一些方式来优化,能够让一个容器装下更多的一个确定的东西。毕竟有的时候如果把所有潜能发挥出来,还是很可观的呢。那言归正传,XMeter君带大家来看看JMeter有哪些地方可以优化。

计算资源主要指的就是CPU,不同的测试脚本对CPU的使用可能会有很大的别。在编写、执行测试脚本的时候可以考虑下面的一些问题。

1)JMeter脚本在运行过程中应该避免循环执行大量计算的工作:比如测试脚本中每个虚拟用户循环使用了BeanShell对数据进行处理,如果真的有此需求的话,建议使用扩展function。读者可以参考XMeter君写的 这篇文章 来线程组能设置以多少个线程并发做压力测试。比较BeanShell和原生function的处理效率。或者准备数据的部分是不是只需要执行一次?比如将这部分逻辑放在“只执行一次”里。

2)JMeter在UI模式下运行也会消耗更多的CPU资源,建议脚本调试通过之后,实际运行测试的时候通过在命令行下来运行测试脚本

存储主要指的就是内存。JMeter是由Ja实现的,而Ja应用吃内存大家都觉得是很正常,但是这部分是否有优化的空间呢?是肯定的。JMeter和普通的Ja应用程序一样,启动后使用的内存主要包括两个部分栈和堆。

1)栈空间主要用于分配在方法调用过程中压入栈的方法调用的参数值等。栈空间的使用是和线程数目基本上成正比的,Ja 8中缺省每个线程会分配1MB的栈空间。如果使用的是32位的系统,由于一个进程的寻址空间为4GB,设系统还需要留1GB的内存空间,那么就算把所有的内存都分配给栈,多也就是能创建3000个线程。当然,如果是使用了64位的系统的话,基本上就没有这个限制了(实际上还受限于作系统的一些软配置,本文稍后会提及)。如你的测试脚本(实际上取决于插件的实现)并没有递归等复杂的栈调用,那么可以把每个线程所需的栈空间调小。调每线程栈空间的使用可以通过打开jmeter.sh/jmeter.bat,通过加入下面的语句来解决,例子中的配置的意思是每线程使用400KB的栈空间,比缺省的1MB节省了约60%,对于需要创建大量的线程的JMeter来说,节省的空间还是比较可观的。但是实际上在运行过程中,栈空间的使用也不完全是线性的,JVM或者作系统可能在某些地方还是共享了一些栈空间,具体的节省下来的栈空间需要通过试验才能得到准确的数值。

2)堆则包括分配对象实例所需要的静态变量、类变量等。这部分所用的内存取决于插件的实现,比如每个Sampler所依赖的对象的大小等。这部分空间的调整可以通过设置Xmx参数来实现。做法还是通过打开jmeter.sh/jmeter.bat,下面的例子的意思是上来就在堆空间上分配15GB内存,可以使用的堆的空间的大小也是15GB。

在自己实现JMeter插件的时候应该仔细考虑以上的问题,比如避免在Sampler中再单独启动线程,因为这么做会使每个虚拟用户创建额外的一个线程,从而可能导致在同样的配置下,你实现的插件创建少一半的虚拟用户!比较好的做法是所有虚拟用户通过一个线程来处理,不过这样也会导致多线程之间数据使用的冲突等问题,读者需要根据自己的情况酌情处理。针对堆空间的使用,如果有比较占存储空间的类变量,可能尽量多线程共享一份数据(比如通过静态变量等),而不是每线程创建自己的实例,当然还是需要考虑多线程访问的时候变量保护的问题。

1)设定每个进程可以打开的文件描述符的数量,由于在Linux中一个socket连接也是文件描述符,而性能测试过程过程中往往测试的时候也需要生成一个socket连接,因此该参数的设置会影响到模拟的虚拟用户数。

2)设置系统可用的socket端口号,每台机器多可用的端口号为65535,在测试机器上可能某些系统的端口已经被占用,因此用户可以设置可用的端口号段来增加可用的端口。如下例所示可用的端口号为15000至61000,那么多的可用端口号数目为46000个。如果需要设置Docker容器中的该配置,需要在特权模式下才能对其进行配置,否则该项配置是只读的(docker run --privileged)

4)提高线程的使用限制。pid_max用于控制作系统线程ID的值,该值会影响可以创建的的线程数目。max_map_count单进程mmap的限制会影响当个进程可创建的线程数,需要将该值也提高以支持创建更多的线程。

通过上文的介绍,读者可以对JMeter运行环境做一些比较常见的优化。针对不同的测试,读者还是需要分析不同的场景,针对压力发起机的实际情况分别进行优化,以提高单台机器上模拟的并发用户数目。如果使用XMeter平台,我们对压力机已经进行了配置优化,避免测试人员纠结于类似的底层系统的配置,只需将精力放在测试业务逻辑的编写和调试,执行的事情交给XMeter平台就可以了,因此能极大地提高测试的工作效率。

什么限制了创建Ja线程的数量 :本文中介绍了更改栈大小的配置对生成的线程个数的影响

Ja栈大小的设置 :与上文类似,介绍如何设置Ja的栈大小

Jmeter八大可执行元件的执行顺序

JMeter中一个脚本,就是一个测试,也是一个管理单元。JMeter的请求模拟、并发数(即设置的线程数,一个线程代表一个虚拟用户)的设置都在脚本文件中一起设置。

1、 配置元件

2、 定时器

用于作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。

3、 前置处理器1.在文件菜单中单击“保存测试”或“保存测试为”选项;

4、 后置处理器

用于对Sampler发出请求后得到的响应数据进行处理,一般用于提取响应中的特定数据。

5、 断言

用于检查测试中得到的响应数据是否符合预期。断言一般用来设置检查点,验证测试过程中的数据交互是否与预期一致。

用来对测试结果数据进行处理和可视化显示的一系列原件。图形结果、查看结果树、聚合报告等都是比较常用的原件。

7、 取样器--Sampler

是性能测试中向发送请求,记录响应信息,记录响应时间的小单元。每一种不同类型的Sampler可以根据设置的参数向发送不同的请求。

8、 逻辑

逻辑的作用域只对其子的sampler有效,作用是控制采样器的执行顺序。分为两类元件:一类用于控制Test Plan中Sampler发送请求的逻辑顺序,常用的有 如果(If)、Swirch Controller、Runtime Controller、循环等。另一类用来对Test Plan中的脚本进行分组,方便Jmeter统计执行结果以及脚本运行时的控制。如事务、吞吐量等。

Jmeter如何控制线程执行?

在自己实现插件的时候,需要考虑实现比较高效的一些算法,如果一个比较的算法导致耗费额外的CPU,上千个线程累计起来是非常可观的,所以在插件实现一些偏计算的方面模拟的时候,一定要做到精打细算。

1/6 分步阅读

从防火墙内的压力测试到基于云计算的压力测试,再到用户视角的外部压测,云智慧的压测宝就是第三代压力测试产品。而Apache JMeter作为一款大名鼎鼎的开源压力测试产品。

测试场景是测试过程中通常尽量模拟真实系统环境及用户作而设计的场景,场景设计源于用户的真实作,设计原则是贴近于用户实际作,组合用户的各种作到场景中来。

3/3)tcp_tw_reuse表示可以复用处于TIME_WAIT状态的连接,对于在性能测试过程中可能产生的大量临时的短连接,该选项可以重用连接,而不用等待连接的完全释放,从而能提高支持的并发用户数目。tcp_tw_recycle用于回收处于TIME_WAIT状态的连接,也可以提高连接的使用率。6

4/6

可以随意设置,可以为空,但是为了以后方便使用,这里写上有意义的备注,和编程里的注释的目的是一样。

5/6

在取样器错误后要执行的的动作:就是线程组内某一个请求出错后的异常处理方式,继续:某一线程的某一请求出错后,继续运行,就是忽略本次错误继续执行;Start_NextThread loop:进行下一次线程循环,类似于for循环中的continue。

6/6

某一线程某一请求失败后,停止所有线程,也就时停止本次测试,但不时立即停止测试,是在本场景中其他线程执行迭代结束后,停止本次测试。