关于Tsung脚本无法停止的问题
最近,利用tsung测试cm的时候,脚本是这样配置的:
<load>
28 <arrivalphase phase="1" duration="2" unit="second">
29 <users maxnumber="19" arrivalrate="10" unit="second"></users>
30 </arrivalphase>
31 </load>
32 <options>
33 <option name="global_number" value="13">
34 </options>
35
36 <sessions>
37 <session probability="100" name="raw" type="ts_raw">
38
45 <transaction name="login">
46 <request subst="true">
47 <raw data=" 119 1 %%_sessionID%%<iq><sessionid>%%_sessionID%%</sessionid><login>hanhy,hanhy123<login></iq>" ack="local"></raw>
48 </request>
49 </transaction>
50 <for from="1" to="3" incr="1" var="counter">
51 <transaction name="sendmsg">
52 <!--for from="1" to="2" incr="1" var="counter"-->
53 <request subst="true">
54 <raw data=" 124 3 %%_sessionID%%<message><sessionid>%%_sessionID%%</sessionid><content>tsungMsg%%_counter%%</content></message>" ack="local"></raw>
55 </request>
56 <!--thinktime min="2" max="10" random="true"/-->
57 <!--/for-->
58 </transaction>
59 </for>
60
61 <thinktime value="3"/>
也就是说,业务流程是:先登录,登录完以后,发3条消息,然后,在系统驻留3s,脚本结束。但是,执行了一上午脚本却仍然没有结束,此时通过看tsung的log,tsung已经停止了发送,CM也停止了接收与发送消息。首先,我们分析一下脚本没有结束的几种可能:
1、虽然消息发送结束,是否还在thinktime之内
2、脚本里的某个参数设置是不是不误
3、服务端是不是出现了错误
下面,咱们看一下脚本:
先看一下thinktime的设置,thinktime=3,意味着最后一个request在正确处理的情况下,用户在系统内停留3s,用户应该不会有明显的感知。所以,我将问题定位在最后一个请求:
<request subst="true">
54 <raw data=" 124 3 %%_sessionID%%<message><sessionid>%%_sessionID%%</sessionid><content>tsungMsg%%_counter%%</content></message>" ack="global"></raw>
55 </request>
现在看一下这个request中的各个参数,subst是获取动态参数的,剩下的就是ack了,根据Tsung官方的解释:
- ack="local" as soon as a packet is received from the server, the request is considered as completed. Hence if you use a local ack with a request that do not require a response from the server, it will wait forever (or until a timeout is reached)
每个request中,ack的值均为local,这意味着在这个请求发出以后,一定要等服务器的响应,直到收到响应以后,这个请求才算结束。
Ok,这个暂时可以作为原因之一。再看tsung.dump文件,可以看到
Send:1442885664.692798:<0.90.0>: 119 1 6197146762302455809<iq><sessionid>6197146762302455809</sessionid><login>hanhy,hanhy123<login></iq>
Recv:1442885664.732048:<0.90.0>:<iq><login>1<login></iq>^@
Send:1442885664.733678:<0.90.0>: 124 3 6197146762302455809<message><sessionid>6197146762302455809</sessionid><content>tsungMsg1</content></message>
Recv:1442885664.770652:<0.90.0>:86<message><sessionid>6197146762302455809</sessionid><content>tsungMsg1</content></mes^@
Send:1442885664.772076:<0.90.0>: 124 3 6197146762302455809<message><sessionid>6197146762302455809</sessionid><content>tsungMsg2</content></message>
最后一条消息发出后,始终没有收到 recv。现做如下验证:将ack的值改为no_ack,再运行脚本,果然脚本在数秒内即运行结束。是不是这样就可以解决问题了呢?
也就是说,我们在发出消息后,不管是不是回应,只要成功发送即可。这是不是我们想要的结果?我觉得,如果你要考量事务响应时间这个指标,这样做是不妥的。所以,我们应该追踪一下这个问题,tsung的日志记录是显示发送出去了,但是,服务端究竟收到没有这个请求?那么问题来了,继续抓包!!!进一步验证问题究竟出在哪儿,如果服务端收到请求了,没有给出响应,那么这是服务端的一个bug,如果服务端给出了响应,是tsung没有收到,那么在客户端也开启抓包,继续追踪。
关于Tsung脚本无法停止的问题的更多相关文章
- Tsung脚本中使用动态参数(一)---直接在脚本里编写Erlang代码
杀死一个程序猿,只要改三次需求.同理,杀死一个接口自动化测试人员,只要改三次接口数据处理方式.我目前的状态,改了一次接口数据处理方式,有一种胸闷的感觉. 因为改需求,所以,要改脚本.T_T.所以,才有 ...
- 2.Jmeter 如何在jsr223 脚本中停止测试任务
Jmeter 如何在jsr223 脚本中停止测试任务 在可以直接引用ctx的变量的processor中可以执行如下脚本即可. (例如jsr223 postprocessor中) ctx.getEngi ...
- Linux shell脚本启动 停止 重启jar包
最近做的微服务jar包想弄在持续集成中自动化部署,所以首先得有一个操作jar包的脚本 只需将jar文件的路径替换到APP_NAME的值就可以了,其他不用改 注意:window编辑的shell文件,通过 ...
- linux脚本启动停止一个jar
###########################启动########################### #!/bin/sh ####定义一个函数在当前文件夹下读取所有jar文件 functi ...
- 脚本 启动/停止 jar包服务
windows (.bat): @set port=8692 @echo %port% for /f "tokens=5" %%i in ('netstat -aon ^| fin ...
- linux下lampp的启动和停止脚本
今天试着写了lampp的启动停止脚本,和上一篇的tomcat的启动停止有一点小区别,就是lampp启动之后有很多的进程号,如果按照tomcat的停止脚本写就会出错,下面做细细的介绍 1.lampp的停 ...
- 一个脚本可以一直运行 ignore_user_abort
php中ignore_user_abort函数的用法 PHP中的ignore_user_abort函数是当用户关掉终端后脚本不停止仍然在执行,可以用它来实现计划任务与持续进程,下面会通过实例讨论ign ...
- 两个shell脚本
脚本1停止lampp #!/bin/bash #set -xv 开启调试模式? count=`ps -ef|grep lampp|grep -v "grep"|wc -l` # ...
- linux添加开机自启动脚本示例详解
linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的; 一.在/etc/rc.local中添加如果不想将脚本粘来粘去,或创建链接什么的,则:step1. 先修改好脚本,使其所有 ...
随机推荐
- 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(一)
CCOA是驰骋又一款对外开源的软件.集成了CCFlow(流程设计器.表单设计器)CCIM与GPM(权限系统管理),能够说,CCOA集中了驰骋开源的全部产品.同一时候,CCOA本身也具有一些功能.能够帮 ...
- redis的sort命令
1.简单描述 sort命令可以对list.set和sorted set的元素进行排序,然后显示排序的结果,不影响这些类型里面存储的数据的排序.就是说sort可以对list的元素排序,但是执行lrang ...
- 使用Flink时遇到的问题(不断更新中)
1.启动不起来 查看JobManager日志: WARN org.apache.flink.runtime.webmonitor.JobManagerRetriever - Failed to ret ...
- XSS注入,js脚本注入后台
曾经一度流行sql注入,由于现在技术的更新,已经看不到这问题了,但是又出来新的安全问题,XSS攻击,他的原理就是在前端提交表单的时候,在input标签当中输入js脚本,通过js脚本注入后台,请看下图. ...
- 开始连载啦~每周2更共11堂iKcamp课|基于Koa2搭建Node.js实战项目教学(含视频)| 课程大纲介绍
- C++11 新知识点
翻了下新版的C++ Primer,新的C++ 11真是变化很大,新增了很多语法特性.虽然已经很久没在写C++了,但一直对这门经典语言很感兴趣的,大致看了看前几章基础部分,总结下新特性备个忘吧.估计也很 ...
- Spring之AOP二
在Spring之AOP一中使用动态代理将日志打印功能注入到目标对象中,其实这就是AOP实现的原理,不过上面只是Java的实现方式.AOP不管什么语言它的几个主要概念还是有必要了解一下的. 一.AOP概 ...
- CSS line-height概念与举例
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/37 定义 两行文字基线之间的距离. 基线的大体位置 基线的位置可 ...
- ArcGIS Runtime SDK是什么?
如上图,Runtime SDK是什么东西?居然还有安卓.苹果手机.Mac.QT的版本? 是不是意味着ArcGIS的编辑数据和空间分析可以通过编程的方法在每个平台上满地跑了? 答案是:是,也不是. 1. ...
- 测试xss
<script>window.onload=function(){ alert('加载完毕');}</script>