daerduo2006 发表于 2008-12-9 17:36:14

等待楼主的,继续爆料。。。

Wangsonghui 发表于 2008-12-9 23:51:04

这个问题我也碰到过,但是我认为是自定义的DLL设计的问题。
首先,LR的虚拟用户可以设置为以独立线程运行还是独立进程运行。
其次,如果以独立线程运行,那么DLL只被加载一次,也就是白加载到主进程的地址空间里;你的虚拟用户是各个不同的线程,他们都访问同样的主进程的地址空间中的DLL拷贝,所以你要吧DLL设计为线程安全的。
最后,如果是以独立进程运行,那么就不需要考虑线程安全了。

wuyu702 发表于 2008-12-10 10:14:53

我是新手,,看不懂。。学习了

winmeeasy 发表于 2008-12-10 10:47:54

To 楼主:
你所说的不是Loadrunner的bug,是你的用法不对。LoadRunner在跑虚拟用户的时候是每50个用户会启动一个进程(LR说明书有,通过任务管理器也能观察到),楼主代码里面在写日志文件的时候用的是线程锁而不是进程锁,因此50个用户不会出问题,100个用户由于启动了两个进程在并发时当然有可能出问题。
另外,你用的是UDP,我敢肯定你的发包程序本身就不是线程安全的,要是你改成TCP还会出更多的错误。用写DLL方式测C/S的时候,DLL里面申请的变量(包括socket),一定要做到线程安全才行,请参考核心编程的线程本地存储TLS这一节,否则会出意想不到的错误。
还有,写DLL的时候还要在dllmain函数里面对DLL_PROCESS_ATTACH,DLL_THREAD_ATTACH,DLL_THREAD_DETACH,DLL_PROCESS_DETACH单独进行处理。

winmeeasy 发表于 2008-12-10 10:53:02

原帖由 zengyixun 于 2008-12-2 17:46 发表 http://bbs.51testing.com/images/common/back.gif
LR做c/s是挺烦的,一个测试工具这么多bug,是不是他们公司自己的测试做得不好造成的,让我们怎么相信他们呢,呵呵,我这几天也在测UDP的的应用,send是还简单的啦,我都没有你的烦恼,如果你这种只关系到服务器的话, ...
to zengyixun:当你真正理解了LoadRunner的运行机制后就不会有这种想法了:) ,LR测C/S要饶不少弯,不过用熟了以后比直接写测试代码还是要快得多,并且比较稳定,事后数据分析功能强。

Wangsonghui 发表于 2008-12-10 13:11:35

原帖由 winmeeasy 于 2008-12-10 10:47 发表 http://bbs.51testing.com/images/common/back.gif
To 楼主:
你所说的不是Loadrunner的bug,是你的用法不对。LoadRunner在跑虚拟用户的时候是每50个用户会启动一个进程(LR说明书有,通过任务管理器也能观察到),楼主代码里面在写日志文件的时候用的是线程锁而不是进 ...
细心!

拉丁心情 发表于 2008-12-10 15:15:24

果然强人多哈 我也在慢慢学:hug:

stardust 发表于 2008-12-10 15:37:05

呵呵,这个帖子含金量高,应该加精不能沉!

sqlserveroracle 发表于 2008-12-10 16:39:31

回复 24# 的帖子

你这个内容:50个用户会启动一个进程,这个信息很重要,但是static CMutex sCSFile;//共享互斥访问,CMutex就是进程锁,不是线程锁(MSDN上面说的很明白)。。。。。。。
但我不知道为什么Loadrunner50个用户就会启动一个进程而不是线程,我写程序启动可以启动500个线程都没事,为什么那样做呢?
好,即使按照你所说的,那如果dll是线程安全的,那么我还要设计进程安全,这不是很麻烦。。。。。。。

sqlserveroracle 发表于 2008-12-10 17:48:22

回复 26# 的帖子

CMutex就是线程和进程都是安全的,我晚上再回去试试................

zengyixun 发表于 2008-12-10 18:37:40

是的,我也就是开开玩笑随便一说,因为无论LR,Winrunner,QTP还是以前用IBM 的工具,感觉工具自身的稳定性都不是太好,不过最核心的问题,人家还是解决了的!原来每50个就会启一个进程,这就解释了LZ的疑惑了!多谢winmeeasy,我这人就是立场不坚定!:lol

winmeeasy 发表于 2008-12-10 19:44:31

原帖由 sqlserveroracle 于 2008-12-10 16:39 发表 http://bbs.51testing.com/images/common/back.gif
你这个内容:50个用户会启动一个进程,这个信息很重要,但是static CMutex sCSFile;//共享互斥访问,CMutex就是进程锁,不是线程锁(MSDN上面说的很明白)。。。。。。。
但我不知道为什么Loadrunner50个用户就会启 ...
CMutex是进程锁(上面的帖子我说错了,sorry:) ),static CMutex sCSFile;创建的是匿名进程锁,当LR启动两个进程时,每个进程拥有的锁可能不是同一个了(很有可能是两个匿名进程锁)你应该在构造函数里面指定唯一名字,这样可以保证LR启动的进程用的是同一把锁。其实用Win32的CreateMutex在进程attach的时候创建要更好些。

phoenixtest 发表于 2008-12-10 20:19:35

经典,强烈要求加精

经典,强烈要求加精

Sunny_Jane 发表于 2008-12-10 22:19:27

LR8.1 运行脚本时会自动退出会不会是BUG

我用LR8.1 运行脚本时会自动退出操作系统windowsXP sp2IE6.0

yifeiluodi 发表于 2008-12-12 14:57:09

学习一下,看是什么问题 我们的脚本最多也执行过 36小时 但是也没有出现LZ描述的类似的问题或许测试场景活 测试环境不一样

fmsbai5 发表于 2008-12-12 16:56:58

LR的弊端

LR的弊端:1.录制不准确,可能遗漏真正的性能点;2.没有录制事务间的通信。

Wangsonghui 发表于 2008-12-12 22:16:24

原帖由 fmsbai5 于 2008-12-12 16:56 发表 http://bbs.51testing.com/images/common/back.gif
LR的弊端:1.录制不准确,可能遗漏真正的性能点;2.没有录制事务间的通信。
我觉得不能光靠录制的吧,因为只有你知道你自己关注什么东西啊,所以主要还是要自己写

南翔塞燕 发表于 2008-12-17 14:18:46

学习了

Tesherlock 发表于 2009-2-20 14:43:27

高手如云,学习了~ :victory:

kxcai 发表于 2009-4-15 19:37:29

留名
真是质量贴
我也有同步异步问题
但是java的,因为不确定read的大小,所以很难判断是否read完
这样会一直阻塞下去
就无法测并发了
页: 1 [2] 3
查看完整版本: 30个小时发现loadrunner严重的bug