多用户条件下 同一test case中的多个request不能保证全部被执行

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

多用户条件下 同一test case中的多个request不能保证全部被执行

Cook_yan
设置在一段时间内跑test case
一个case 里包含一个新增和一个删除请求
当整个测试结束后,一定还会有很多新建的记录没有被删除

我想让所有的请求都执行到,而不管这个时间的限制
请问这个问题怎么解决?

另外想请教下,这个测试时间的“duration”  具体意思是什么?
是只限制客户端发送请求的时间吗?
Reply | Threaded
Open this post in threaded view
|

Re: 多用户条件下 同一test case中的多个request不能保证全部被执行

Mavlarn
duration是一个测试执行的时间,默认是1分钟,当然可以根据需要设置大一点的时间。
如果想要控制执行次数,可以设置run count。

你说的这个问题,是说有一些删除操作没有被执行。正常情况下,一个test方法里面的多个request,是都会被执行的。即使设置的执行时间,也不可能一个方法执行到一般就停止的。

所以,很可能是你的删除的请求出错了,或者你的删除请求没有正确的返回处理结果,就是说,在没有正常删除的情况下,还是返回200的状态。你想判断删除操作是否成功,第一可以用http的返回状态,就像脚本模板里面的那样,判断是否返回200;还有一种方法是判断返回的结果的数据,比如用string的contain,或者json里面的数据等。
Reply | Threaded
Open this post in threaded view
|

Re: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行

Cook_yan

谢谢你的回复。
 
附件是log 总共330个请求,和测试脚本
167个create 返回201
163个delete 返回200
 
数据库里还是多出了数据,删除操作也有做return code 的检查。
 
做了多次测试都是这种情况
 
 
 

 
发件人: [hidden email]
发送时间: 2013-11-18 16:01
收件人: [hidden email]
主题: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行
duration是一个测试执行的时间,默认是1分钟,当然可以根据需要设置大一点的时间。
如果想要控制执行次数,可以设置run count。

你说的这个问题,是说有一些删除操作没有被执行。正常情况下,一个test方法里面的多个request,是都会被执行的。即使设置的执行时间,也不可能一个方法执行到一般就停止的。

所以,很可能是你的删除的请求出错了,或者你的删除请求没有正确的返回处理结果,就是说,在没有正常删除的情况下,还是返回200的状态。你想判断删除操作是否成功,第一可以用http的返回状态,就像脚本模板里面的那样,判断是否返回200;还有一种方法是判断返回的结果的数据,比如用string的contain,或者json里面的数据等。


If you reply to this email, your message will be added to the discussion below:
http://ngrinder.642.n7.nabble.com/test-case-request-tp1070p1071.html
To unsubscribe from 多用户条件下 同一test case中的多个request不能保证全部被执行, click here.
NAML

sh1-api-ngrinder1-legacy-0.log (67K) Download Attachment
script.py (2K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行

Cook_yan
In reply to this post by Mavlarn

谢谢你的回复
 
请查看附件的log和相应的测试case。我是按时间测试的,测试时间30秒。
 
1 。我从“net_1”开始递增创建,  log里最后一条创建记录是“net_193”, 而我数据库里的最后一天记录已经到了198
说明在log没能记录齐我所有的请求信息。是否是在“2013-11-18 16:35:52,143 INFO  received a stop message ”之后就停止记录了,而实际还有进程在后台跑?
 
 
2 在log里面
create 记录193条
delete 记录191条
这里已经少删除2条记录
并且数据库里还有8条数据没有被删除,'net_192'~'net-198'
 
 
 

 
发件人: [hidden email]
发送时间: 2013-11-18 16:01
收件人: [hidden email]
主题: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行
duration是一个测试执行的时间,默认是1分钟,当然可以根据需要设置大一点的时间。
如果想要控制执行次数,可以设置run count。

你说的这个问题,是说有一些删除操作没有被执行。正常情况下,一个test方法里面的多个request,是都会被执行的。即使设置的执行时间,也不可能一个方法执行到一般就停止的。

所以,很可能是你的删除的请求出错了,或者你的删除请求没有正确的返回处理结果,就是说,在没有正常删除的情况下,还是返回200的状态。你想判断删除操作是否成功,第一可以用http的返回状态,就像脚本模板里面的那样,判断是否返回200;还有一种方法是判断返回的结果的数据,比如用string的contain,或者json里面的数据等。


If you reply to this email, your message will be added to the discussion below:
http://ngrinder.642.n7.nabble.com/test-case-request-tp1070p1071.html
To unsubscribe from 多用户条件下 同一test case中的多个request不能保证全部被执行, click here.
NAML

script.py (2K) Download Attachment
sh1-api-ngrinder1-legacy-0.log (76K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行

Mavlarn
In reply to this post by Cook_yan
我看你的日志,应该是设置的运行时间。用这种方式运行的话,时间到了以后,是在执行线程内触发一个异常,来让执行线程退出、所以,这种方式不能保证一个test方法会执行完成,特别是你这个测试方法,每个请求的执行时间是300多毫秒,一个方法有2个请求,就要700多ms,在这么长的等待时间里,线程很容易被停掉。

我刚才说正常情况下,方法会执行完成,确实是没有考虑到这种执行时间很长的情况。

如果你要求一定执行完成,可以使用run count,根据每个方法所用的时间,大概估算一个执行次数。

再说明一下,你这个测试里面,等待目标服务器的时间很长,你使用10台agent,才打到这么一点tps,meigeagent机器是使用率都非常低。可以试着增加每个agent的虚拟用户,如果是jython的脚本,在IO等待时间较长的情况下,可以执行几百个虚拟用户(进程数 * 线程数),如果使用groovy类型的脚本,虚拟用户数可以达到几千个。
Reply | Threaded
Open this post in threaded view
|

Re: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行

Cook_yan

谢谢你的回复。
 
我觉得每一个线程的终止判断条件里面应该包含下面这个条件:
我所发送的所有请求都已经收到response,而且时间到了,再终止。如果时间到了没有收到response,则等待response,但这之后的response不算在测试结果内。
 
另外我是在虚拟机上做的测试,而且还有很多人在上面工作,所以性能方面会比较差。
 
 
 

 
发件人: [hidden email]
发送时间: 2013-11-18 17:54
收件人: [hidden email]
主题: Re: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行
我看你的日志,应该是设置的运行时间。用这种方式运行的话,时间到了以后,是在执行线程内触发一个异常,来让执行线程退出、所以,这种方式不能保证一个test方法会执行完成,特别是你这个测试方法,每个请求的执行时间是300多毫秒,一个方法有2个请求,就要700多ms,在这么长的等待时间里,线程很容易被停掉。

我刚才说正常情况下,方法会执行完成,确实是没有考虑到这种执行时间很长的情况。

如果你要求一定执行完成,可以使用run count,根据每个方法所用的时间,大概估算一个执行次数。

再说明一下,你这个测试里面,等待目标服务器的时间很长,你使用10台agent,才打到这么一点tps,meigeagent机器是使用率都非常低。可以试着增加每个agent的虚拟用户,如果是jython的脚本,在IO等待时间较长的情况下,可以执行几百个虚拟用户(进程数 * 线程数),如果使用groovy类型的脚本,虚拟用户数可以达到几千个。


If you reply to this email, your message will be added to the discussion below:
http://ngrinder.642.n7.nabble.com/test-case-request-tp1070p1074.html
To unsubscribe from 多用户条件下 同一test case中的多个request不能保证全部被执行, click here.
NAML
Reply | Threaded
Open this post in threaded view
|

Re: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行

Cook_yan
In reply to this post by Mavlarn

另外 还有个问题
能不能在script中从某个地方获取一个自己设置自己用的全局变量
 

 
发件人: [hidden email]
发送时间: 2013-11-18 17:54
收件人: [hidden email]
主题: Re: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行
我看你的日志,应该是设置的运行时间。用这种方式运行的话,时间到了以后,是在执行线程内触发一个异常,来让执行线程退出、所以,这种方式不能保证一个test方法会执行完成,特别是你这个测试方法,每个请求的执行时间是300多毫秒,一个方法有2个请求,就要700多ms,在这么长的等待时间里,线程很容易被停掉。

我刚才说正常情况下,方法会执行完成,确实是没有考虑到这种执行时间很长的情况。

如果你要求一定执行完成,可以使用run count,根据每个方法所用的时间,大概估算一个执行次数。

再说明一下,你这个测试里面,等待目标服务器的时间很长,你使用10台agent,才打到这么一点tps,meigeagent机器是使用率都非常低。可以试着增加每个agent的虚拟用户,如果是jython的脚本,在IO等待时间较长的情况下,可以执行几百个虚拟用户(进程数 * 线程数),如果使用groovy类型的脚本,虚拟用户数可以达到几千个。


If you reply to this email, your message will be added to the discussion below:
http://ngrinder.642.n7.nabble.com/test-case-request-tp1070p1074.html
To unsubscribe from 多用户条件下 同一test case中的多个request不能保证全部被执行, click here.
NAML
Reply | Threaded
Open this post in threaded view
|

Re: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行

Mavlarn
在你的脚本中有几个成员变量:
SUCCESS_CODE=200
USERNAME="admin"
这些成员变量相当于类的静态变量,可以在当前的进程中所以的线程里面使用,因为每个线程执行测试方法就是执行TestRunner里面的def __call__(self)。

但是,你要是想设置一个所有进程都能够使用的变量,有一个办法,就是在测试结果中设置自定义的字段,参考:
http://www.cubrid.org/wiki_ngrinder/entry/user-defined-statistic-in-ngrinder
大概意思就是,可以在测试结果中,手动添加一个自定义的字段,他会被记录到上一个测试的结果里面。这个值在写的过程中可以保证线程安全,但是,读的话,很可能就会有问题。
这个值最后会被保存在测试报告的csv数据文件中。
Reply | Threaded
Open this post in threaded view
|

Re: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行

Matt
In reply to this post by Cook_yan
这是在测试脚本加参数的说明文档,你可以参考一下:
<a href="http://">
http://www.cubrid.org/wiki_ngrinder/entry/how-to-pass-a-parameter-to-the-script

这里有更多关于nGrinder 的使用说明文档。
<a href="http://">http://www.cubrid.org/wiki_ngrinder
Reply | Threaded
Open this post in threaded view
|

Re: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行

Cook_yan
In reply to this post by Mavlarn

哈  谢谢啊
 

 
发件人: [hidden email]
发送时间: 2013-11-18 19:07
收件人: [hidden email]
主题: Re: Re: 多用户条件下 同一test case中的多个request不能保证全部被执行
在你的脚本中有几个成员变量:
SUCCESS_CODE=200
USERNAME="admin"
这些成员变量相当于类的静态变量,可以在当前的进程中所以的线程里面使用,因为每个线程执行测试方法就是执行TestRunner里面的def __call__(self)。

但是,你要是想设置一个所有进程都能够使用的变量,有一个办法,就是在测试结果中设置自定义的字段,参考:
http://www.cubrid.org/wiki_ngrinder/entry/user-defined-statistic-in-ngrinder
大概意思就是,可以在测试结果中,手动添加一个自定义的字段,他会被记录到上一个测试的结果里面。这个值在写的过程中可以保证线程安全,但是,读的话,很可能就会有问题。
这个值最后会被保存在测试报告的csv数据文件中。



If you reply to this email, your message will be added to the discussion below:
http://ngrinder.642.n7.nabble.com/test-case-request-tp1070p1077.html
To unsubscribe from 多用户条件下 同一test case中的多个request不能保证全部被执行, click here.
NAML