liangjz 发表于 2008-8-13 22:33:13

测试工具loadrunner扩展开发的一点感想

最近在应用VC6,大量采用win32 api扩展Loadrunner8.0/8.2的一些外围功能,做到自动调节面向资源消耗目标的合适(临界)并发数,碰到了几个相当棘手问题。

(1) 在loadrunner controller design 界面上编程实现更改并发用户数
(2) 确保安全停止在运行的loadrunner但不破坏已存在结果文件,如res.lrr等等

由于没有loadrunner源代码以及很detail的介绍Loadrunner内部结构的资料,为了突破这些点,耗费了相当的力气。
如果我们换成对JMeter的外围扩展内,在一堆结构清晰的代码面前,突破这些功能难度可能陡降:)

经过这些天的尝试,对扩展黑盒工具的难度有一个更加清晰的认知,实践才知道水有多深:)

下面简单介绍下如何做到编程更改loadrunner并发数的几个思路

   1)EnumWindows/GetWindowText 结合spy++,硬编码检索到窗口层次关系,获取classname=GridControl、windows caption=GridClass的控件,然后利用grid控件的行、列改写数据。

可是classname=GridControl仅仅是注册窗口时的一个友好名字,并非真正实现类。这个实现这个控件的类是什么呢? 这下卡壳了。

从安全工程师哪边拿到LookingGlass.exe、FABERTOYS(进程管理).EXE等工具,企图嗅探出ocx但未果。

其他难度、实现成本比较高、非常笨拙操控grid的方式还有: 利用IDAPro动态调试或者进程注入修改对应内存内容,这个有时间再琢磨下。

    2)修改loadrunner 场景设计文件.lrs的GroupChief内容

由于loadrunner controller designed 界面大量选项,每一个选项可能都对loadrunner结果产生敏感影响。为了弄清楚每一个选项对应文件内容,很土也很管用的方法
一次只更改一个,然后对比变化,最后跟踪发现groupchief 段才是loadrunner 并发数关键所在。

lrs文件格式不是Ini 格式,是mercury自有格式,我们要做的事情就是fgets逐行读取,然后填充入自定义的数据结构(偶采用了链表)。

增加、删除修改并发数就是减少ChiefSettings所在的段,最后用fwrite将数据结构回填。

最后第二个方法成功实现需求。

不过综合权衡下,如果loadrunner升级lrs数据结构,第二种方法是相当脆弱的。

哈,要是偶遇一个mercury工具研发工程师问到grid控件实现类并把头文件和lib给我,然后彻底解决这个问题该多好啊:)

liming_oicq 发表于 2008-8-14 08:58:55

很好很深奥

鬼师爷 发表于 2008-8-14 09:55:15

完全看不懂,有点像哗众取宠,把问题简单话,不要拽那么多深奥的词汇,有必要么

qiguojie 发表于 2008-8-14 11:12:42

谢谢,扩展了一些思路

liangjz 发表于 2008-8-14 13:44:05

回复 1# 的帖子

说简单就是如何编程实现修改 loadrunner并发数。

上面的用词都是标准汉字,
用的技术是windowsapi,可以google慢慢琢磨,
有不大明白的欢迎讨论。

aks5201314 发表于 2008-8-14 14:03:53

更改loadrunner的并发用户数,很强!:lol

liangjz 发表于 2008-8-15 10:10:43

只要留神,肯定会有LOADRUNNER扩展的需求

liangjz 发表于 2008-8-22 20:33:17

不知道其他朋友是否有扩展LOADRUNNER的需求?

mansart 发表于 2008-8-22 23:24:12

佩服斑竹,羡慕斑竹,向斑竹学习

云层 发表于 2008-8-23 09:22:26

:L 一头大牛又飞过了眼前

jackei 发表于 2008-9-18 11:07:55

说实话,感觉有点掉进技术的陷窝里了,有点本末倒置的感觉。。。

AJan1000 发表于 2008-9-18 12:41:18

原帖由 liangjz 于 2008-8-13 22:33 发表 http://bbs.51testing.com/images/common/back.gif
最近在应用VC6,大量采用win32 api扩展Loadrunner8.0/8.2的一些外围功能,做到自动调节面向资源消耗目标的合适(临界)并发数,碰到了几个相当棘手问题。

(1) 在loadrunner controller design 界面上编程实现更 ...

LZ你的意思是指:
目前你想修改并发数,是想读取Controller上的控件对象,读取行和列内容并修改,或者是想读取结果文件lrr当中数据,读取后再修改么?

想问一下,LR实现并发的时候,是通过读取临时结果文件当中的数据来实现的么,
也就是说目前在Controller当中设置的选项,LR都是把选项内容存放在临时结果文件当中,然后再读取文件当中内容?:o
页: [1]
查看完整版本: 测试工具loadrunner扩展开发的一点感想