1 测试模型丰富

1、         支持线程模型(类似jmeter)、每秒启动用户速率(Caps)与每秒保持在线用户数

2、         多种并发模型:稳定速率、递增、递减、波浪型、振荡型、随机、波浪与振荡。

3、         测试场景开始时间定制

4、         测试场景停止条件定制:停止时间、失败数、失败率

2 线程模型(类似jmeter

类似jmeter的线程组,每个线程不断循环运行脚本,即运行完一个脚本,立即或者根据设置的循环时间运行下一个脚本,每个脚本使用不同的参数值,即可模拟不同用户或提交不同参数数据(注:免费license每个线程只能运行500次脚本)。

上图表示第1秒启动初始线程10个,然后每隔1秒(增加时间),再启动10个线程(增加线程),当总线程达到500个时停止增加线程,每个线程每1秒(配置了1000毫秒)循环运行脚本,如果前一个脚本在600毫秒运行完,则休眠400毫秒再运行下一个脚本;如果前一个脚本运行时间大于1秒,则下一个脚本立即运行。

如果不配置循环脚本时间或配置为0,则运行完一个脚本立即运行下一个脚本

 

一个Agent运行的总线程数不宜太多,根据系统的内存与CPU,防止线程太多导致并发太多或者工具内存溢出。

2.1 例子:每秒启动一个新线程循环运行脚本

       选择“线程模型”,并设置初始线程值为1

       该场景表示每秒启动一个新的线程(每个线程循环运行脚本),第1秒将有一个线程在运行,第2秒会再启动一个新的线程,一直到第100秒启动第100个线程,总共100个线程运行脚本(脚本也称为虚拟用户

2.1.1 查看每秒启动的脚本(虚拟用户数)及脚本成功运行的响应时间

可通过controller运行界面的右边指标监控项的“启动数(速率)每秒”与“用户脚本时间”

2.1.2 停止测试

       当启动的线程数(包括已经停止和在运行中的)达到100,则工具停止增加新的线程,即已经达到总线程数。如果需要可通过下面两种方式停止测试:

1)        手动点击停止

由于线程循环运行脚本,如果没有设置停止条件,则可以手动停止测试。点击停止按钮

2)        设置“结束运行”

可根据失败数或时间来设定停止测试条件

如上图设置10分钟自动停止循环脚本,即停止测试。

2.2 例子:每1分钟才增加一定个数新线程

选择“线程模型”,初始线程10个,然后每分钟增加5个线程。上面设置表示第1秒启动并运行10个新线程,然后到第60秒还是一直保持10个线程;第61秒再启动并运行5个新线程(这时的线程总数将为15个),第2分钟再启动5个新线程(此时总线程数20个)。

一直到总的线程数达到500后将停止增加新的线程,然后一直保持500个线程循环运行,直到停止条件或手动停止。

3 速率每秒(Caps/s

即每秒启动并运行一定个数的脚本(虚拟用户),相当于每秒集合N个用户并一起运行。

每个脚本只运行一次,与上面的“线程模型”不一样。因此这里可以控制每秒启动的脚本数(虚拟用户数)

3.1 例子:每秒启动一个新虚拟用户(脚本)

       选择“速率/秒”,并设置速率值为1。上图只显示前10秒的曲线,后面省略。

       该场景表示每秒启动一个新的虚拟用户(即脚本),第1秒将有一个虚拟用户在运行(在线数),第2秒会再启动一个新的虚拟用户,如果第1个虚拟用户还在运行,此时用户在线数将变为2,如果第1个虚拟用户(脚本)已经停止,则第2秒只有一个在线数。

       当启动的用户数(包括已经停止和在运行中的)达到100,则工具停止增加新的用户,即已经达到总用户数,等还在运行中的虚拟用户运行完,测试场景结束。

       运行过程可通过controller运行界面右边指标监控项的“启动数(速率)每秒”与“用户脚本时间”

3.2 例子:每秒启动新虚拟用户数(脚本)不断增加

选择“递增”与“速率/秒”,上面设置表示第1秒启动并运行1个新虚拟用户,第2秒启动并运行2个新虚拟用户(之前第1秒的已经启动的虚拟用户跟第2秒没关系,如果第1秒的虚拟用户还在运行,则此时的在线数为第1秒和第2秒之和),……,第10秒集合10用户启动并运行。

运行过程可通过controller运行界面右边指标监控项的“启动数(速率)每秒”与“用户脚本时间”

4 在线用户数每秒(Vuser/s

即每秒保持多少个虚拟用户(一个虚拟用户即一次脚本)在线,如果在线数(即在运行中的虚拟用户)达到要求,则不需要启动并运行新的虚拟用户。该模型目的是让系统在某时刻维持一定的运行用户数,因为如果使用速率/秒,无法精确控制在线数(有的用户运行快就结束,有的用户运行慢才结束)。

4.1 例子:每秒保持10个虚拟用户在线

       选择“在线用户数/秒”,并设置速率值为10。则第1秒运行集合10个用户启动并运行;第2秒如果没有用户结束,则不再启动新的用户;第3秒假设有4个用户结束,则立即启动并运行4个新用户,让在线数一直保持10个用户;……….

即每秒是否启动新的虚拟用户,是根据当前秒还存在多少虚拟用户在运行,如果存在虚拟用户达到条件,则不需要增加新的虚拟用户。

当启动的用户数(包括已经停止和在运行中的)达到100,则工具停止增加新的用户,即已经达到总用户数,等还在运行中的虚拟用户运行完,测试场景结束。

运行过程可通过controller运行界面右边指标监控项的“启动数(速率)每秒”与“用户脚本时间”

4.2 例子:不断增加在线用户数,测试系统最大在线数

选择“递增”与“用户数/秒”,上面设置表示第1秒启动并运行10个用户;第2秒启动并运行5个用户,使在线数保持15个;……,第10秒根据当前在运行的用户个数,启动并增加到50用户。

4.3 例子:不同时间运行保持同的用户数在运行中

4.3.1 1秒运行100用户,第2秒运行200用户,第3100用户

总用户数1000可以用来控制运行多长时间,如果每个虚拟用户(即脚本)执行时间小于1秒,则100+200+100+200+100+200+100刚好为1000,则第7秒测试停止。如果每个虚拟用户执行时间大于1秒,则整个测试场景运行时间根据用户执行时间不一样而不一样,只要当总共启动的虚拟用户数达到1000,则测试场景停止。

4.3.2 110分钟运行100用户,第210分钟运行200用户,第310分钟运行100用户

变换频率改为600秒,总用户数100000可以用来控制运行多长时间。

5 kylinPET集合点

集合点的用处意义非常大,它可以设置多个虚拟用户等待到一个点,同时触发一个事务。以达到模拟真实环境下同时多个用户操作,同时模拟负载,实现性能测试的最终目的。例如,秒杀业务。

kylinPET支持集合点,需要在Scripter为脚本添加集合点,然后在Controller设置启用集合点。

6 设置启动时间

 

可通过“开始”设置什么时候开始运行场景,如控制在晚上10点开始运行。

7 设置结束时间(即运行多长时间)

可通过 “结束”设置什么时候结束测试场景,看通过第4个设置测试场景运行多长时间停止。可以设置当多少个用户或百分比用户失败时停止,满足测试场景按需停止。

8 重用TCP连接

Agent每秒运行的脚本数(虚拟用户数)过多时,将产生大量的TCP连接,由于系统TCP关闭存在一个时间(默认几十秒,系统环境配置),因此可能测试只运行几分钟甚至几十秒就出现bind port失败日志,导致TCP连接失败。尤其是脚本只有几个请求(如http接口测试),且响应时间很快(几十毫秒),会出现这种情况。

工具看通过配置支持TCP重用,即不同的脚本(虚拟用户)共用TCP连接,如果需要模拟真实用户(每个用户是新的TCP),则可以禁用。

9 基于目标场景设置并发模型

根据系统的场景目标,如支持多少用户同时在线、脚本(虚拟用户)运行时间在合理范围、或者CPU达到多少、请求数达到多少、吞吐量、TPS达到多少等等目标。kylinPET通过阈值可以实现。

9.1 阈值行为介绍

阈值配置在controller界面的按钮

9.1.1 Pause(暂停增加用户/线程)

暂停增加用户在下面1)和3)场景下,还是会增加虚拟用户,只是维持在最后达到阈值时刻的用户数或线程数,维持那时刻的并发数继续运行。

1)        如果选择“线程模型”,通过该配置可以达到某个指标值后维持目前的线程个数并发一直运行,如果需要停止,可以手动点击停止按钮或设置停止时间等条件。

线程模型介绍参照“2.线程

2)        如果选择“速率/秒”,则暂停增加用户,相当于停止运行

3)        如果选择“在线用户数/秒”,而且是“递增”模型,则暂停增加用户,表示不再递增虚拟用户(脚本),保持目前每秒在线用户数一直运行,直到手动点击停止或运行的用户数达到总的用户数。

9.1.2 Stop 停止运行)

停止运行,表示不再增加任何虚拟用户,目前在运行的虚拟用户停止后,测试则停止。线程模型也不在循环运行脚本。

9.2 阈值例子介绍

例如上图指标:

1)        在线数(同时在运行的虚拟用户数):在01000的合理范围,即不能超过1000虚拟用户同时在线,超过则暂停增加虚拟用户(脚本),

2)        事务时间(脚本里自定义的事务):在03000毫秒范围是正常范围,超过则暂停增加用户

3)        CPU:在080范围,如果超过则停止执行,即不再增加用户,如果“线程模型”也停止运行

CPU、内存等资源需要在服务器安装monitor,且controller配置与monitor连接成功

4)        用户脚本时间:该指标为虚拟用户(即脚本)的执行时间,假设脚本执行时间在05000毫秒为合理范围,超过则暂停增加用户。如果选择“线程模型”则该指标表示不在增加线程,但目前已经运行的线程仍然循环执行脚本。

5)        HTTP请求数:在01000的合理范围,表示工具每秒发出的请求数(包括所有虚拟用户汇总的一秒总请求),超过则暂停增加用户。

9.3 例子1:目标是系统支持每秒1000用户(脚本或TPS)、每个脚本时间不超过1

假设脚本是几个或一个接口(不是网页),每个接口正常处理时间几十到几百毫秒。根据系统的发展预测,系统需要到达每秒能处理1000个脚本,且时间在1秒范围内才认为通过,而且能够保持1小时。

工具实现该目标有下面两种方法

9.3.1 使用每秒保持1000用户数方式

选择“用户数/秒”,然后总用户数1小时3600*1000,速率即可控制每秒保持1000用户数

当出现一个虚拟用户(脚本)失败则停止运行

然后再通过脚本时间阈值设置超过1000毫秒则停止运行,因为超过1000毫秒则不符合目标了,达不到目标场景;

运行过程可以通过界面指标查看曲线

运行结束可以通过用户详情查看每个脚本(虚拟用户的运行情况),即时间

 

如果是测试接口,需要模拟TCP长连接,可以重用TCP,可以在controller界面“设置”查看启用TCP重用。如果是模拟用户,建议不启用,因为每个用户都是自己的TCP。(Jmeter由于调用的是库,因此jmeter无法控制TCP,使用的是重用TCP,因为调用的库自己使用了TCP重用)

9.3.2 线程模型(类似Jmeter),通过并发线程方式

选择“线程模型”,然后总用户数即为线程数,速率即可控制每秒启动多少线程,通过每秒启动1个线程方式慢慢递增,也可以立即启动1000个线程达到总线程数。

然后设置线程循环脚本时间为1000毫秒,表示1秒只运行一次脚本,因为目标是11000个脚本,如果不设置1000毫秒,则可能一个线程运行一个脚本花费200毫秒,则1秒内可能就运行了5个脚本,1000个线程就一秒运行了5000个脚本,与目标不一致。

设置运行1小时

 

通过阈值设置停止测试条件,通过脚本时间阈值设置超过1000毫秒则停止运行,因为超过1000毫秒则不符合目标了,达不到目标场景;另外,如果出现一个脚本失败,也是达不到目标场景。

运行过程可通过controller运行界面右边指标监控项的“启动数(速率)每秒”与“用户脚本时间”观察运行情况

 

运行结束可以通过用户详情查看每个脚本(虚拟用户的运行情况),即时间

如果是测试接口,需要模拟TCP长连接,可以重用TCP,可以在controller界面“设置”查看启用TCP重用。如果是模拟用户,建议不启用,因为每个用户都是自己的TCP。(Jmeter由于调用的是库,因此jmeter无法控制TCP,使用的是重用TCP,因为调用的库自己使用了TCP重用)

 

9.4 例子2:测试服务器系统最大能支持多少用户

对系统进行摸底,测试系统能支持多大的并发用户数,每个业务系统根据自己的规格需求,自定义配置。下面简单介绍一般需要包括:

1、  脚本执行时间在合理范围,一般需要考虑2-5-8规格,即2秒非常好,5秒用户还可以忍受,8秒用户体验就比较差。当然,每个系统由于业务不同,可能时间不同。

2、  服务器CPU占用不能超过70%,否则即使用户数再大,也认为超过质量范围。

3、  虚拟用户不存在失败,即失败数不能大于1

下面介绍两种实现方式:

9.4.1 使用递增线程方式(即线程模型)

选择“线程模型”,然后设置总线程数,速率即可控制每秒启动多少线程,通过每秒启动1个线程方式慢慢递增

 

通过阈值设置停止测试条件,通过事务时间阈值设置超过5000毫秒则停止运行,因为超过5000毫秒则不符合目标了,达不到目标场景;另外,如果出现一个脚本失败,也是达不到目标场景。

 

运行过程可通过controller运行界面右边指标监控项的“启动数(速率)每秒”与“用户脚本时间”观察运行情况

 

运行结束可以通过用户详情查看每个脚本(虚拟用户的运行情况),即时间

9.4.2 使用递增虚拟用户方式(即模型用户数/秒)

选择“在线用户数/秒”, 且是递增方式,下图表示每秒保持的在线用户数一直递增

当出现一个虚拟用户(脚本)失败则停止运行

然后再通过脚本时间阈值设置超过合理范围(举例5000毫秒)则停止运行

运行过程可以使用界面的指标曲线查看

运行结束可以通过用户详情查看每个脚本(虚拟用户的运行情况),即时间

9.5 例子3:负载场景--递增到某个指标后维持目前在线数(线程后/虚拟用户数)一直运行一段时间

某些场景可能需要在一定的负载情况下运行,看系统在一定的条件下运行是否会出现问题。例如下面目标:

1、  CPU一直处于高负荷,如80%

2、  TPS达到每秒一定的值后,维持当前负载一直测试

3、  脚本或事务响应时间达到某个指标

4、  吞吐量达到某个指标

9.5.1 使用线程模型

选择“线程模型”,然后设置总线程数,速率即可控制每秒启动多少线程,通过每秒启动1个线程方式慢慢递增

 

 

然后再通过阈值设置设置一些目标条件,注意,这里选择的是“暂停增加用户”,下图举例,如果包括CPU 80%也可以添加到阈值(需要在服务器安装monitor,且controller配置与monitor连接成功)

 

运行过程可以使用界面的指标曲线查看

运行结束可以通过用户详情查看每个脚本(虚拟用户的运行情况),即时间

 

9.5.2 使用递增虚拟用户方式(即模型用户数/秒)

选择“在线用户数/秒”, 且是递增方式,下图表示每秒保持的在线用户数一直递增

 

然后再通过阈值设置设置一些目标条件,注意,这里选择的是“暂停增加用户”

运行过程可以使用界面的指标曲线查看

运行结束可以通过用户详情查看每个脚本(虚拟用户的运行情况),即时间