首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

SoapUI LoadTest 多线程没法正确读取数据

2013-07-01 
SoapUI LoadTest 多线程无法正确读取数据问题描述:在LoadTest Setup Script中的以下代码ListString some

SoapUI LoadTest 多线程无法正确读取数据
问题描述:

在LoadTest Setup Script中的以下代码

List<String> someDataList = new ArrayList<String>();  //声明someDataList
racdb.eachRow("select * from table where rownum<10"){row ->  
    someDataList.add(row.ric);  //数据库中读取的数据插入someDataList
    log.info(row.ric)
}  
context.setProperty("someDataList",someDataList);  //设置属性someDataList的值


Test Case Groovy Script中读取该属性

file = new File(context.expand('c:\\aa.txt'))  //声明文件aa.txt,将someDataList的值打印在该文件中
def value = context.LoadTestContext.getProperty('someDataList')
file.append('value is: '+value)
file.append('ThreadIndex is: '+context.ThreadIndex)//记录线程number
file.append("RunCount is: "+context.RunCount) //记录testcase执行的次数

LoadTest中设置Treads为3。运行该loadtest发现在aa.txt文件中显示

value is: [973633X.DEU^B04, 0IZC.PO^L08, ALAN.F^G11, ATOAf.NS, ATOAol.NS, BOBE.P, 5192.JSA, 4534.BE^K03, ABEC.D]ThreadIndex is: 0RunCount is: 0value is: [973633X.DEU^B04, 0IZC.PO^L08, ALAN.F^G11, ATOAf.NS, ATOAol.NS, BOBE.P, 5192.JSA, 4534.BE^K03, ABEC.D]ThreadIndex is: 1RunCount is: 0value is: [973633X.DEU^B04, 0IZC.PO^L08, ALAN.F^G11, ATOAf.NS, ATOAol.NS, BOBE.P, 5192.JSA, 4534.BE^K03, ABEC.D]ThreadIndex is: 2RunCount is: 0value is: [973633X.DEU^B04, 0IZC.PO^L08, ALAN.F^G11, ATOAf.NS, ATOAol.NS, BOBE.P, 5192.JSA, 4534.BE^K03, ABEC.D]
。。。。。。。。。。。。。。
。。。。。。。。。。。。。。
value is: [973633X.DEU^B04, 0IZC.PO^L08, ALAN.F^G11, ATOAf.NS, ATOAol.NS, BOBE.P, 5192.JSA, 4534.BE^K03, ABEC.D]ThreadIndex is: 1RunCount is: 74value is: [973633X.DEU^B04, 0IZC.PO^L08, ALAN.F^G11, ATOAf.NS, ATOAol.NS, BOBE.P, 5192.JSA, 4534.BE^K03, ABEC.D]ThreadIndex is: 2RunCount is: 74value is: nullThreadIndex is: 0RunCount is: 81value is: nullThreadIndex is: 1RunCount is: 75

我的问题是

为什么threadIndex is:0 RunCount is 81开始,无法正确的读取value的值,此时aa.txt文件显示的valie is: null(在之前的所有线程的执行都可以正确的读取loadtest中设置的someDataList属性并且打印到aa.txt文件中)


[解决办法]
SoapUI LoadTest 多线程没法正确读取数据

这里默认的执行时间是60秒,当超过这个时间的时候,线程资源会释放,那么你的value就得不到了。

你可以调整这个执行时间的大小,比如你调整到5分钟,那么value=null的 runcount就不是80左右了,肯定往后了不少,反正value出现null的时候,差不多就是执行时间快要完成的时候。
[解决办法]
那你就判断一下
someDataList 是否为null就可以


def someDataList = context.LoadTestContext.getProperty("someDataList");
if (someDataList == null) {
   // 这里出错误的log,然后返回就可以了。
   file.append("error due to the thread will be interupte, can not get the properties from context..")
    return
} else {
    // 能够取得到值的时候,继续处理。
    int index = r.nextInt(someDataList.size()-1);  
}


热点排行