loadrunner11破解脚本正确,场景运行中提示出错是不是结果就没有意义了?

LoadRunner脚本开发脚本,开发,脚本开发
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
LoadRunner脚本开发
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口LoadRunner性能测试中的遇到的问题及解决方案 - lei123的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园 - Powered by X-Space
LoadRunner性能测试中的遇到的问题及解决方案
& 16:25:01
/ 个人分类:
出现error问题及解决方法总结&&&
16:59:37&&& 一、Step download timeout (120 seconds)&&&   这是一个经常会遇到的问题,解决得办法走以下步骤:&&&   1、 修改run time setting中的请求超时时间,增加到600s,其中有三项的参数可以一次都修改了,HTTP-request connect timeout,HTTP-request receieve timeout,Step download timeout,分别建议修改为600、600、5000;run time setting设置完了后记住还需要在control组件的option的run time setting中设置相应的参数;&&&   2、 办法一不能解决的情况下,解决办法如下:&&&   设置runt time setting中的internet protocol-preferences中的advaced区域有一个winlnet replay instead of sockets选项,选项后再回放就成功了。切记此法只对系统起作用,此法来自zee的资料。&&&   二、问题描述Connection reset by peer&&&   这个问题不多遇见,一般是由于下载的速度慢,导致超时,所以,需要调整一下超时时间。&&&   解决办法:Run-time setting窗口中的‘Internet Protocol’-‘Preferences’设置set advanced options(设置高级选项),重新设置一下“HTTP-request connect timeout(sec),可以稍微设大一些”;&&&   三、问题描述connection refused&&&   这个的错误的原因比较复杂,也可能很简单也可能需要查看好几个地方,解决起来不同的方式也不同;&&&   1、 首先检查是不是连接weblogic服务过大部分被拒绝,需要监控weblogic的连接等待情况,此时需要增加acceptBacklog,每次增加 25%来提高看是否解决,同时还需要增加连接池和调整执行线程数,(连接池数*Statement Cache Size)的值应该小于等于数据库连接数最大值;&&&   2、 如果方法一操作后没有变化,此时需要去查看服务器操作系统中是否对连接数做了限制,AIX下可以直接vi文件limits修改其中的连接限制数,还有 tcp连接等待时间间隔大小,wiodows类似,只不过wendows修改注册表,具体修改方法查手册,注册表中有TcpDelayTime项;&&&   四、问题描述open many files&&&   问题一般都在压力较大的时候出现,由于服务器或者应用中间件本身对于打开的文件数有最大值限制造成,解决办法:&&&   1、 修改操作系统的文件数限制,aix下面修改limits下的nofiles限制条件,增大或者设置为没有限制,尽量对涉及到的服务器都作修改;&&&   2、 方法一解决不了情况下再去查看应用服务器weblogic的commonEnv.sh文件,修改其中的nofiles文件max-nofiles数增大,应该就可以通过了,具体就是查找到nofiles方法,修改其中else条件的执行体,把文件打开数调大;修改前记住备份此文件,防止修改出错;&&&   五、问题描述has shut down the connection prematurely&&&   一般是在访问应用服务器时出现,大用户量和小用户量均会出现;&&&   来自网上的解释:&&&   1& 应用访问死掉&&&   小用户时:程序上的问题。程序上存在的问题&&&   2& 应用服务没有死&&&   应用服务参数设置问题&&&   例如:&&&   在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的元素的AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%&&&   Java连接池的大小设置,或JVM的设置等&&&   3& 数据库的连接&&&   在应用服务的性能参数可能太小了&&&   数据库启动的最大连接数(跟硬件的内存有关)&&&   以上信息有一定的参考价值,实际情况可以参考此类调试。&&&   如果是以上所说的小用户时:程序上的问题。程序上存在数据库的问题,那就必须采用更加专业的工具来抓取出现问题的程序,主要是程序中执行效率很低的语句,weblogic可以采用introscope定位,期间可以注意观察一下jvm的垃圾回收情况看是否正常,我在实践中并发500用户和 600用户时曾出现过jvm锯齿型的变化,上升下降都很快,这应该是不太正常的;&&&   六、问题描述Failed to connect to server&&&   这个问题一般是客户端链接到服务失败,原因有两个客户端连接限制(也就是压力负载机器),一个网络延迟严重,解决办法:&&&   1、 修改负载机器的tcpdelaytime注册表键值,改小;&&&   2、 检查网络延迟情况,看问题出在什么环节;&&&   建议为了减少这种情况,办法一最好前就完成了,保证干净的网络环境,每个负载机器的压力测试用户数不易过大,尽量平均每台负载器的用户数,这样以上问题出现的概率就很小了。&&& loadrunner error 分析(转)&&&
16:57:54&&& 分析原则:&&&&&&& ?? 具体问题具体分析(这是由于不同的应用系统,不同的测试目的,不同的性能关注点)&&&&&&& ?? 查找瓶颈时按以下顺序,由易到难。&&&&&&& 服务器硬件瓶颈-〉网络瓶颈(对局域网,可以不考虑)-〉服务器操作系统瓶颈(参数配置)-〉中间件瓶颈(参数配置,数据库,服务器等)-〉应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等)&&&&&&& 注:以上过程并不是每个分析中都需要的,要根据测试目的和要求来确定分析的深度。对一些要求低的,我们分析到应用系统在将来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了。&&&&&&& ?? 分段排除法 很有效&&& 分析的信息来源:&&&&&&& ??1 根据场景运行过程中的错误提示信息&&&&&&& ??2 根据测试结果收集到的监控指标数据&&& 一.错误提示分析&&& 分析实例:&&& 1 ??Error: Failed to connect to server "10.10.10.30:8080": [10060] Connection&&&&& ??Error: timed out Error: Server "10.10.10.30" has shut down the connection prematurely&&&&& 分析:&&& ??A、应用服务死掉。&&&&&& (小用户时:程序上的问题。程序上处理数据库的问题)&&& ??B、应用服务没有死&&&&&& (应用服务参数设置问题)&&&&&&& 例:在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的 AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%&&& ??C、数据库的连接&&&&&& (1、在应用服务的性能参数可能太小了 2、数据库启动的最大连接数(跟硬件的内存有关))&&& 2& Error: Page download timeout (120 seconds) has expired&&& 分析:可能是以下原因造成&&& ??A、应用服务参数设置太大导致服务器的瓶颈&&& ??B、页面中图片太多&&& ??C、在程序处理表的时候检查字段太大多&&& 二.监控指标数据分析&&& 1.最大并发用户数:&&& 应用系统在当前环境(硬件环境、网络环境、软件环境(参数配置))下能承受的最大并发用户数。&&& 在方案运行中,如果出现了大于3个用户的业务操作失败,或出现了服务器shutdown的情况,则说明在当前环境下,系统承受不了当前并发用户的负载压力,那么最大并发用户数就是前一个没有出现这种现象的并发用户数。&&& 如果测得的最大并发用户数到达了性能要求,且各服务器资源情况良好,业务操作响应时间也达到了用户要求,那么OK。否则,再根据各服务器的资源情况和业务操作响应时间进一步分析原因所在。&&& 2.业务操作响应时间:&&& ?? 分析方案运行情况应从平均事务响应时间图和事务性能摘要图开始。使用“事务性能摘要”图,可以确定在方案执行期间响应时间过长的事务。&&& ?? 细分事务并分析每个页面组件的性能。查看过长的事务响应时间是由哪些页面组件引起的?问题是否与网络或服务器有关?&&& ?? 如果服务器耗时过长,请使用相应的服务器图确定有问题的服务器度量并查明服务器性能下降的原因。如果网络耗时过长,请使用“网络监视器”图确定导致性能瓶颈的网络问题&&& 3.服务器资源监控指标:&&& 内存:&&&&&&& 1 UNIX资源监控中指标内存页交换速率(Paging rate),如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。也可能是内存访问命中率低。&&&&&&& 2 Windows资源监控中,如果Process\Private Bytes计数器和Process\Working Set计数器的值在长时间内持续升高,同时Memory\Available bytes计数器的值持续降低,则很可能存在内存泄漏。&&& 内存资源成为系统性能的瓶颈的征兆:&&&&&&& 很高的换页率(high pageout rate);&&&&&&& 进程进入不活动状态;&&&&&&& 交换区所有磁盘的活动次数可高;&&&&&&& 可高的全局系统CPU利用率;&&&&&&& 内存不够出错(out of memory errors)&&& 处理器:&&&&&&& 1 UNIX资源监控(Windows操作系统同理)中指标CPU占用率(CPU utilization),如果该值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。如果服务器专用于SQL Server,可接受的最大上限是80-85%&&&&&&& 合理使用的范围在60%至70%。&&&&&&& 2 Windows资源监控中,如果System\Processor Queue Length大于2,而处理器利用率(Processor Time)一直很低,则存在着处理器阻塞。&&& CPU资源成为系统性能的瓶颈的征兆:&&&&&&&&& 很慢的响应时间(slow response time)&&&&&&&& CPU空闲时间为零(zero percent idle CPU)&&&&&&&& 过高的用户占用CPU时间(high percent user CPU)&&&&&&&& 过高的系统占用CPU时间(high percent system CPU)&&&&&&& 长时间的有很长的运行进程队列(large run queue size sustained over time)&&& 磁盘I/O:&&&&&&& 1 UNIX资源监控(Windows操作系统同理)中指标磁盘交换率(Disk rate),如果该参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。&&&&&&& 2 Windows资源监控中,如果 Disk Time和Avg.Disk Queue Length的值很高,而Page Reads/sec页面读取操作速率很低,则可能存在磁盘瓶径。&&& I/O资源成为系统性能的瓶颈的征兆 :&&&&&&&& 过高的磁盘利用率(high disk utilization)&&&&&&& 太长的磁盘等待队列(large disk queue length)&&&&&&& 等待磁盘I/O的时间所占的百分率太高(large percentage of time waiting for disk I/O)&&&&&&& 太高的物理I/O速率:large physical I/O rate(not sufficient in itself)&&&&&&& 过低的缓存命中率(low buffer cache hit ratio(not sufficient in itself))&&&&&&& 太长的运行进程队列,但CPU却空闲(large run queue with idle CPU)&&& 4.数据库服务器:&&& SQL Server数据库:&&&&&&& 1 SQLServer资源监控中指标缓存点击率(Cache Hit Ratio),该值越高越好。如果持续低于80%,应考虑增加内存。&&&&&&& 2 如果Full Scans/sec(全表扫描/秒)计数器显示的值比1或2高,则应分析你的查询以确定是否确实需要全表扫描,以及SQL查询是否可以被优化。&&&&&&& 3 Number of Deadlocks/sec(死锁的数量/秒):死锁对应用程序的可伸缩性非常有害,并且会导致恶劣的用户体验。该计数器的值必须为0。&&&&&& 4 Lock Requests/sec(锁请求/秒),通过优化查询来减少读取次数,可以减少该计数器的值。&&& Oracle数据库:&&&&& 1 如果自由内存接近于0而且库快存或数据字典快存的命中率小于0.90,那么需要增加SHARED_POOL_SIZE的大小。&&&&&&& 快存(共享SQL区)和数据字典快存的命中率:&&&&&& select(sum(pins-reloads))/sum(pins) from v$&&&&&&& select(sum(gets-getmisses))/sum(gets) from v$&&&&&&& 自由内存:&&& select * from v$sgastat where name=’free memory’;&&& 2 如果数据的缓存命中率小于0.90,那么需要加大DB_BLOCK_BUFFERS参数的值(单位:块)。&&&&& 缓冲区高速缓存命中率:&&&&&&& select name,value from v$sysstat where name in ('db block gets’,&&&&&&& 'consistent gets','physical reads') ;&&&&&&&&&&&&& Hit Ratio = 1-(physical reads / ( db block gets + consistent gets))&&& 3 如果缓冲区申请的值较大,则应加大LOG_BUFFER参数的值。&&&&&&& 日志缓冲区的申请情况 :&&&&&&&& select name,value from v$sysstat where name = 'redo log space requests' ;&&& 4 如果内存排序命中率小于0.95,则应加大SORT_AREA_SIZE以避免磁盘排序 。&&&&&& 内存排序命中率 :&&&&&&&& select round((100*b.value)/decode((a.value+b.value), 0, 1, (a.value+b.value)), 2)from v$sysstat a, v$sysstat b where a.name='sorts (disk)' and b.name='sorts (memory)'&&&&&&&&&&&& 注:上述SQL Server和Oracle数据库分析,只是一些简单、基本的分析,特别是Oracle数据库的分析和优化,是一门专门的技术,进一步的分析可查相关资料。&&&&&&& (另)&&& 造成HTTP-500错误,可能存在的原因之个人实践总结&&& 1、运行的用户数过多,对服务器造成的压力过大,服务器无法响应,则报HTTP500错误。&&& 减小用户数或者场景持续时间,问题得到解决。&&& 2、该做关联的地方没有去做关联,则报HTTP500错误。进行手工或者自动关联,问题得到&&& 解决。&&& 3、录制时请求的页面、图片等,在回放的时候服务器找不到,则报HTTP500错误,若该页&&& 面无关紧要,则可以在脚本中注释掉,问题将会得到解决。例如:有验证码的情况下,尽&&& 管测试时已经屏蔽了,但是录制的时候提交了请求,但回放的时候不存在响应。&&& 4、参数化时的取值有问题,则报HTTP500错误。可将参数化列表中的数值,拿到实际应用&&& 系统中进行测试,可排除问题。&&& 5、更换了应用服务器(中间件的更换,如tomcat、websphere、jboss等),还是利用原&&& 先录制的脚本去运行,则很可能报HTTP500错误。因为各种应用服务器处理的机制不一样&&& ,所录制的脚本也不一样,解决办法只有重新录制脚本。&&& 6、Windows xp2 与ISS组件不兼容,则有可能导致HTTP500错误。对ISS组件进行调整后问&&& 题解决。&&& 7、系统开发程序写的有问题,则报HTTP500错误。例如有些指针问题没有处理好的,有空&&& 指针情况的存在。修改程序后问题解决。&&& 录制脚本中碰到两个问题&&&
18:17:34&&& 1. web_url("indexAction.do") highest severity level was "ERROR", 834156 body bytes, 3480 header bytes, 288 chunking overhead bytes&&& 经过查找后,网上资料是&&& 方法一:&&& 1, 打开recording options,在internet protocol下的recording中选择recording level为HTML-based script,点击HTML Advanced,选择script. type为A script. containing explicit.即可。&&& 2, 选择使用URL_based script录制。&&& 方法二:&&& 取消选中run time settings-browser emulation-download non-html resources.解决&&& 2.Error -27727: Step download timeout (240 seconds) has expired when downloading resource(s)&&& ??A、应用服务参数设置太大导致服务器的瓶颈&&& ??B、页面中图片太多&&& ??C、在程序处理表的时候检查字段太大多&&& 修炼成高手的十个步骤(转)&&&
16:19:46&&&&&&& VBscrīptQTP实用VBscrīpt作为测试脚本语言,因此需要掌握很多VBscrīpt的知识:&&&&&&&&&&& /vbscrīpt/default.asp&&&&&&&&&&& MS' VBscrīpt Guide.&&&&&&& 自动化框架&&&&&&&&&&& TestAutomation Frameworks&&&&&&&&&&& Choosing a
Automation Framework&&&&&&&&&&& Totally Data-Driven Automated &&&&&&&&&&& Seven Steps to Test Automation Success&&&&&&& QTP的Tutorial帮助文档Sources:'\help\QTTutorial.pdf' or '\help\Tutorial.chm' in QTP Install folder.&&&&&&& QTP的用户指南Sources:'\help\QTUsersGuide.pdf' or '\help\MainUsersGuide.chm' in QTP Install folder.&&&&&&& COM/DCOM技术主要是Excel, Word, Outlook等相关的COM技术:&&&&&&&&&&& MS Internet Explorer&&&&&&&&&&& MS Excel&&&&&&&&&&& MS Outlook&&&&&&& SQL&&&&&&&&&&& w3schools' SQL tutorial&&&&&&&&&&& MS SQLServer-thisandthis&&&&&&&&&&& OracleDB&&&&&&& XML&&&&&&&&&&& w3schools' XML tutorial&&&&&&& HTML, DOM测试WEB应用程序时必须了解:&&&&&&&&&&& w3schools' HTML tutorial&&&&&&&&&&& w3schools' DHTML tutorial&&&&&&&&&&& A Beginner's Guide to the XML DOM&&&&&&&&&&& DOM tutorials&&&&&&& HP的QTP Knowledge Base包含很多实用的QTP技术:&&&&&&&&&&& HP Self-solve Knowledge Search&&&&&&& 一些有用的网站&&&&&&&&&&& &&&&&&&&&&& Easy way to automate testing&&& QTP相关的25个小技巧(转)&&&
21:13:25&&& 1.Q:runaction后面能不能接变量(动态调用action,所以从数据库取数据做action名字了,但是调用总是找不到)?&&&&&& A:脚本中原有RunAction "testbase [case1]", oneIteration&&& 把引号中的内容放到Global表中的第22行,然后将代码修改为:&&& datatable.getsheet("Global")&&& datatable.setcurrentrow(22)&&& strLogin=DataTable("ActionName","Global")&&& RunAction strLogin, oneIteration&&& help中也有相关帮助&&& 如:&&& Syntax&&& RunAction ActionName, [IterationMode , IterationRange , Parameters]&&& ActionName : String : The name of the action&&& 2.Q:QTP8.2中调用VB函数的问题(用VBscrīpt写了一些测试脚本需要的几个通用函数,有没有办法可以用类似include的方式进行调用,而不需要每次都把这些函数Copy到新的脚本中)?&&&&&& A:程序开头加上ExecuteFile "..\..\..\project\DeVariable.vbs"&&& 3.Q:QTP如何做回归测试(300多个TestCase,TD是否可以管理) ?&&&&&& A:TD可以实现,可以生成测试集,一个测试集可以包含若干个测试脚本&&& QTP8.2本身提供一个工具Test Batch Runner但是运行完没有报告。&&& MI有另一个工具叫MTM(multitestmanager)&&& 4.Q:qtp自动截图功能&&& A:具体可参考此帖:/cgi-bin ... d=17663&fpage=1&&& 5.Q:在QTP中如何设置使用别的浏览器(XP系统,用IE访问程序时,每次总提示屏蔽安装ActiveX插件,需要手动安装.但把这个过程录制到QTP后,回放一次是成功的。当我给某个输入框参数化了好多数据后,回放过程中,某些就会失败.&&& 可能有两个方面可以解决这问题1、每个动作设置延迟时间 2、设置为用别的浏览器。)&&& (失败的提示信息是&& object not visible)&&&&&& A:1.延迟可用WAIT X(X单位是秒)&&& 2.可以安装插件添加新的浏览器&&&&&& SystemUtil.Run "file” "params" "dir" "op'' "mode"&&&&&& QTP运行可执行文件的方法及其参数&&&&&&& ps: 建议是用IE浏览器,或者IE内核浏览器做测试&&& 6.Q:checkpoint 检查网页,是否能实现只要网页出现乱码就返回错误报告?&&&&&& A:Text not displayed能解决问题&&& 关于 Text Checkpoint 的总结。&&& 1)Text Checkpoint 的检查部分分为三个部分。Checked Text 、Text Before 、Text After。在默认的情况下,Checked Text执行的是精确检查,其余两个部分执行的是模糊检查。Text Before(After)检查的内容可以比实际的内容少。但是不能有和是实际内容不相符的地方,否则就失败。&&& 2) Exact match选项。如果选择了这个选项,三部分完全都进行精确检查。个人觉得和只检查checked Text部分没有区别。&&& 3) Text not displayed。这个选项本质上就是一个结果取反的过程。就是把检查的结果给反过来,把pass变成Fail,Fail变成pass。我觉得这样就很容易理解。&&& 7.Q:WSH的应用方法&&&&&& A:WSH 实际上是一个脚本语言的运行环境,它之所以具备强大的功能,是在于其充分挖掘了脚本语言的潜力。因此,如果抛开脚本语言而空谈 WSH ,那实际上就没有了意义。而如果再展开来讲述脚本语言,显然就离开了今天的主题。&&& 在这种情况下,只好采取一种折衷的方法:给大家推荐几个脚本文件利用 WSH 执行任务的实例,希望大家能通过这些例子对 WSH 的使用有一个初步的认识。&&&   脚本文件的编写十分方便,你可以选用任意一个文字编辑软件进行编写,编写完成后,只需将它保存为 WSH 所支持的文件名就可以了(如.js 文件和.vbs 文件)。最常用的就是记事本编辑器,下面的实例都是以它作为工具编写的。&&& 打开记事本编辑器,在上面编写如下内容:&&&   Wscrīpt.Echo("走近 WSH")&&&   将它保存为以 .vbs 或 .js 为后缀名(千万不要写成了 .txt)的文件并退出记事本。双击执行这个文件。&&&   这一次,我们要利用 WSH 完成一次创建十个文件夹的。代码如下:&&&   dim objdir&&&   set ōbjdir=wscrīpt.createobject("scrīpting.filesystemobject")&&&   for k=1 to 10&&&   anewfolder="c:\chapter" & k&&&   objdir.createfolder(anewfolder)&&&   next&&& 同样,将它存为 .vbs 文件并退出。运行后,我们会发现,C 盘根目录下一次性多出了十个新文件夹。&&& 最后,再举一个在服务器上的运用。下面的代码将帮助你重新启动指定的 IIS 服务:  ' define a constant for stopped services&&&   Const ADS_SERVICE_STOPPED = 1&&& ' get an ADSI object for a computer&&&   Set ōbjComputer = GetObject("WinNT://MYCOMPUTER,computer")&&& ' get an object for a service&&&   Set ōbjService = objComputer.GetObject("Service","MYSERVICE")&&& ' check to see if the service is stopped&&&   If (objService.Status = ADS_SERVICE_STOPPED) Then&&& ' if the service is stopped, then start it&&&   objService.Start&&&   End If&&& 将它以 startsvc.vbs 为名保存在 C: 盘根目录。并通过如下命令执行:Cscrīpt C:\STARTSVC.VBS。运行后,经你指定的 IIS 服务项将被重新开启。&&& 其实,在 Windows 的 samples 目录下,有个 WSH 文件夹,那里面有不少很具代表性的 .vbs 和. js 脚本文件。&&& 此外,利用 WSH 还可以自己编写脚本文件来提高网络管理方面的效率。&&& 8.Q;从EXCEL中导出数据进行测试&&& datatable.AddSheet("51sheet")&&& datatable.ImportSheet "f:\test.xls","testsheet","51sheet"&&& Dim i,RowCount '定义两个变量&&& i=0&&& RowCount=datatable.GetSheet("51sheet").GetRowCount '设置RowCount等于51sheet中的行数。&&& msgbox RowCount&&& Do while i&rowcount&&& i=i+1 '第一次进入循环,执行这句后,i=1&&& 'datatable.getsheet("51sheet").setcurrentrow(i)&& 这句话被我注释掉了,正确的写法应该是下面这样,分开写。&&& datatable.getsheet("51sheet")&&& datatable.setcurrentrow(i)&&& '执行过上面两句后,CurrentRow是第一行。&&& tempData=DataTable.GetSheet("51sheet").GetParameter("Name").Value&&&&&&&&&&&&&&&&&&&& '现在,我们调用msgbox看看下面这种调用方法得到的是什么值?没错,是第一行的值,下一次循环呢?&&& '得到的是第二行的值么?&&& msgbox "GetParameter-Name:"&tempData '这里弹出我们要看的值。&&& '下面我们用另外一种方法来得到。&&& msgbox "GetParameter-i:"&DataTable.GetSheet("51sheet").GetParameter(1).Value '这里我用GetParameter(1)去得到sheet中第一列的值。&&& loop&&& 9.Q:关于dtGlobalsheet与dtGlobalsheet&&& 1) dtGlobalsheet只有一个,它的index值比较特殊,它有两个index值,一个是1还有一个是内置的默认的1000。&&& 你可以用1或者1000去引用它都是正确的。当然了,如果你用dtGlobalsheet来引用它也是正确的。这个sheet的Name叫做"Global"。注意:SheetName是区分大小写的。&&& 2) dtLocalsheet可以用index:1001来引用,当然,也可以用2来引用。至于自定义的sheet嘛,你就只能用index:3来引用了。&&& 它没有内置的默认的类似前两个那样的index值。&&& 3) datatable这个对象只有一个。就是所有sheet的集合。或许你把它理解为excel文件比较好。&&& dtsheet呢?就是其中的每个sheet。所不同的就是MI为他们做了一些默认值。在我们的应用中,可能会有多个action,如:actiion1,actiion2,actiion3&&& 这些action也分别对应有各自默认的LoaclSheet.即:actiion1,actiion2,actiion3。&&& 如果每个action中,我们都只用到一个sheet,那就好办了,在每个action中都可以用localsheet来引用,但是如果我们有两个及两个以上的sheet.那么就比较容易乱套了。&&& 10.Q:移动当前位置的行&&& For i=1&& to 3&&& datatable.getsheet("Global")&&& datatable.setcurrentrow(i)&&& DataTable("C","Global") = DataTable("nodename","Global") ‘把表Global中的nodename字段中的内容取出来。&&& Next&&& 11.Q:如何能记录到页面的校验码?(Output value能不能得到web页面的校验码,一般的校验码是由图片随即生成的 ,用QTP怎么录脚本在登陆前得到校验码并输入到校验码一栏)&&& A:1)一个很简单的方法:测试时叫开发屏蔽掉检验码的功能后,再录制脚本。检验码的功能可以手工很简单测试出来。&&&&&&& 2)想得到图片的校验码,唯一的方法就是跟程序员拿程序,然后自己在脚本里面写FUCNTION!&&&&&&&&&& 其它就要手动输入了!&&& 12.Q:QTP正则表达式的帮助&&& A: QTP regular expression usage.doc (到Google里勾吧)&&& 13.自动测试实施计划&&& 1)分析实施可能存在的风险:就是决定是否实施, 用成本 时间 效果 。。&&& 2)制定实施的时机:也就是在什么阶段&&& 3)研究所要测试的功能 性能&&& 4)分析在测试中可能遇到的问题 和困难&&& 5)预估所需要的人时和相应的硬件&&& 7)确定负责人员和相关测试人员&&& 6)制定详细的测试计划 方案&&& 7)最后是执行计划&&& 14.Q:一个Action里如何调用在另一个Action中定义的函数、过程(或变量、常量)&&& 例如:&&& -----------------------------------&&& 'Action_A&&&&&& Public strURL&&&&&&&&&& ...&&& ... ......&&& Function QueryList()&&&&&&&&&& ...... ......&&&&&&&&&& ...... ......&&& End Function&&& ------------------------------------&&& 'Action_B&&& '如何调用 QueryList函数和strURL&&& A:1)可以把这些变量和Function放在vbs文件作为resource文件共享,在每个Action中添加该文件.&&&&&&& 如果function中出现控件调用,那么必须确保该控件在相应的Action的object repository中是存在的.&&&   2)定义一个可被调用的ACTION里面唯一的放一个FUNCTION&&& 15.Q:如何管理QTP的源代码?(QTP生成的源代码比较多,而且和环境控件都有关,假如需要多人同时开发, 请问如何管理源代码?)&&& A: 一个是代码你可以通过vss,cvs等来进行管理&&&&&&& 一个是通过td或者qc的基于用例的代码管理&&&&& 其实第一种方法是基于版本控制来进行的,第二种方法是基于用例管理进行的&&&&&&& 角度不同,管理方法也不同,不过团队协作需要的大家分工明确,进度控制。代码管理可以借鉴开发的方法。&&& 16:Q:脚本不能回放,IE中的AtiveX设置有问题??&&& A: TOOL---OPTIONS----Ative screen&&&&&&& 然后点开advanced..,把LOAD&& ACTIVEX CONTROLS打勾&&&&&&& TOOL---OPTIONS----Ative screen&&&&&&& 然后点开advanced..,run scrīpts--&disabled!&&& 17.Q: 如何参数化link&&& Browser("Browser").Page("Page").Sync&&& Browser("Browser").Navigate "/cgi-bin/index.php"&&& Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Sync&&& Set tags=Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Object.links&&& Dim i,j, arr()&&& i=0&&& For Each element in tags&&& If Ucase(element.tagname)="A" and left(element.InnerText,1)="[" Then&&& ReDim Preserve arr(i+1)&&&&&&&&&& arr(i)=element.InnerText&&& i=i+1&&& end if&&& Next&&&&&&& For j=0 to i&&& Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").SetTOProperty "Text",arr(j)&&&&&&&&&&&& Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").Click&&& Browser("Browser").Back&&& Next&&& 这段代码先是打开一个空的页面,然后输入url.&&& 到达论坛首页。&&& 然后得到所有版面的名称,也就是link的名称。&&& 存到数组里面。&&& 然后使用SetTOProperty更换录制时候录下的link的属性。&&& 这时候再click&&&&&&& 18. Q:QTP 在Debug狀態,在Export View 區域不能寫入任何東西&&& A: 如果你的目的是在debug过程中修改已执行过的命令,可以在Debug view的Command中执行命令,如重新执行已经执行过的命令,修改变量的值等等。&&& 如:Window("Flight Reservation").WinEdit("Name:").Set "51testing"&&& 已经执行,如果现在想修改“51testing”为“testing”,可以在command中执行&&& Window("Flight Reservation").WinEdit("Name:").Set "testing"&&& 19.Q:动态变化值如何获取&&& A:VAL=Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").GetROProperty("Value")&&& Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").select val&&& 20.Q:如何一一获得Table中 某栏 link 的 text?&&& A:通过上面link 的. 我终于融会贯通,完成了我的问题: 与大家共享:&&& //////////////////////////////////////////////////////////////////////////////////////&&& Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Image("Tplus").Click&&& Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Image("Tplus_2").Click&&& Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Link("开课设置").Click&&& Browser("Login").Page("Page").Frame("main").WebList("drpStatus").Select "任意"&&& Browser("Login").Page("Page").Frame("main").WebButton("查找").Click&&& Browser("Login").Page("Page").Sync&&& Dim finded,findCode,Nowout&&& 'define a constrat for find&&& findCode = 110901&&& finded = false&&& Function MaxPage(pageString)&&& 'msgbox pageString&&& Dim ilen,i,j&&& ilen = len(pageString)&&& i=ilen&&& While i&0&&&&&&&&&& j = mid(pageString,i,1)&&&&&& 'msgbox j&&&&&& If instr("",j)&0 Then&&&&&&&&&&&&& MaxPage = j&&&&&& 'msgbox MaxPage&&&&&& Exit function&&&&&& End If&&&&&& i=i-1&&& Wend&&& End Function&&&&&&& Dim trowcount,maxp&&& trowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCount&&& msgbox "Rowcount: "&trowcount&&& Nowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(trowcount,1)&&& Nowout = trim(Nowout)&&& maxp = MaxPage(Nowout)&&& msgbox "max page: "& maxp&&& Dim nowPage,checkid&&& For nowPage = 1 to maxp&&& If&& finded Then&&&&&& Exit for&&& End If&&&&&& ' link to the 当前所需page&&&&&& If nowpage&1 Then&&& Browser("Login").Page("Page").Frame("main_8").Link("[2]").SetTOProperty "Text","["&nowpage&"]"&&& Browser("Login").Page("Page").Frame("main_8").Link("[2]").Click&&& Browser("Login").Page("Page").Sync&&& end if&&&&&& ' Get the rowcount of table in now page&&& trowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCount&&& msgbox "Rowcount: "&trowcount&&&&&& 'link every record in the table of the page&&& for i = 2 to trowcount&& - 2&&& Nowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(i,2)&&& 'msgbox i&": "&Nowout&&& checkid = "dgCourse:_ctl" &(i+1)& ":_ctl0"&&& Browser("Login").Page("Page").Frame("main_8").WebCheckBox("dgCourse:_ctl3:_ctl0").SetTOProperty "name",checkid&&& Browser("Login").Page("Page").Frame("main_8").WebCheckBox("dgCourse:_ctl3:_ctl0").Set "ON"&&& Browser("Login").Page("Page").Frame("main_8").Link("0901").SetTOProperty "Text",Nowout&&& Browser("Login").Page("Page").Frame("main_8").Link("0901").Click&&& Browser("开课设置详细信息").Page("开课设置详细信息").Sync&&& 'wait(1)&&& msgbox "begun"&&& msgbox findCode&&& msgbox Nowout&&& msgbox "finished"&&& If&& trim(findCode) = trim(Nowout) Then&&&&&&&&&& finded = true&&& msgbox "find is ok!"&&& wait(2)&&& Exit for&&& End If&&& Browser("开课设置详细信息").Close&&& Browser("Login").Page("Page").Sync&&&&&& next&&& Next&&& 21.Q:网页下拉框的选择&&& A:For i =1 to 10&&& Randomize&&& IndexNum=Int((10 - 5 + 1) * Rnd + 5)&&& Browser("Mercury Tours").Page("Find Flights_2").WebList("arrive").Select "#"&IndexNum&&& wait(3)&&& Next&&& Sub ChildObjects_Example()&&& 'The following example uses the ChildObjects method to find all the&&& 'list objects on a Web page, and then to select an item in each list.&&& Set ōDesc = Descrīption.Create()&&& oDesc("micclass").Value = "WebList"&&& Set Lists = Browser("Mercury Interactive").Page("Mercury Interactive").ChildObjects(oDesc)&&& NumberOfLists = Lists.Count()&&& For i = 0 To NumberOfLists - 1&&& Lists(i).Select i + 1&&& Next&&& End Sub&&& 22.Q:将测试数据单独拿出来&&& A:取得一个&&& Browser("Browser").Page("").WebList("fid").GetItem (1)&&& 取得全部&&& Browser("Browser").Page("").WebList("fid").GetROProperty("all items")&&& 以下可以在自带的例子中实现&&& Window("Flight Reservation").WinComboBox("Fly From:").Select "Frankfurt"&&& a=window("Flight Reservation").wincombobox("Fly From:").GetItem(1)&&& reporter.ReportEvent 2,"下拉列表的值",a&&& 23.Q:和TD连接&&& A:在QTP中不是有个Quality Center Connection,选择服务器连接,服务器处输入类似http://computer_name/tdbin,其中computer_name为服务器的名字,连接后在测试结果中添加defect就可以与TD相连了。&&& 24:Q:处理Windows弹出窗口&&& A:IF Not Window("Flight Reservation").Exist(1) Then&&& 'Calling&& open flight&&&&&&&&&&&&&&& If not Dialog("Login").Exist(1)&& Then&&&&&&&&&& Browser("管理系统").Dialog("Microsoft Internet Explorer").WinButton("确定").Click&&&&&&& End If&&& 25.Q:查询结果的比较&&& 这是查询一个字段的,对查询结果多页的情况也涉及了,其实应该把所有查询字段联合起来的,也就是改改sql语句和判断条件。&&& [i]Set Conn = CreateObject("ADODB.Connection")&&& Set Rs = CreateObject("ADODB.Recordset")&&& Conn.Open "Descrīption=kml-DRIVER=SQL SSERVER=KML-IT;UID=PWD=APP=QuickTest PWSID=KML-MICHELLE;DATABASE&&&&&&& 翻页功能测(转)&&&
21:12:22&&& 1、首页、上一页、下一页、尾页。&&&   2、总页数,当前页数&&&   3、指定跳转页&&&   4、指定每页显示条数&&&   当然,有一些是少于多少页,全部以数字的形式显示,多于多少页后,才出现下一页的控件。本文暂且用以上四点来做为通用的用例来设计吧。&&&   对于1翻页链接或按钮的测试,主要要检查的测试点有:&&&   1、有无数据时控件的显示情况&&&   2、在首页时,首页和上一页是否能点击&&&   3、在尾页时,下一页和尾页是否能点击&&&   4、在非首页和非尾页时,四个按钮功能是否正确&&&   5、翻页后,列表中的记录是否仍按照指定的排序列进行了排序&&&   对于2总页数,当前页数,主要要检查的测试点有:&&&   1、总页数是否等于总的记录数/指定每页条数&&&   2、当前页数是否正确&&&   对于3指定跳转页,主要要检查的测试点有:&&&   1、是否能正常跳转到指定的页数&&&   2、输入的跳转页数非法时的处理&&&   对于4指定每页显示条数,主要要检查的测试点有:&&&   1、是否有默认的指定每页显示条数&&&   2、指定每页的条数后,列表显示的记录数,页数是否正确&&&   3、输入的每页条数非法时的处理&&&&&&&   分析完上面的测试点,应该可以进行用例的设计了。&&& LoadRunner的脚本回放问题解决(转)&&&
19:29:40&&& 在运行脚本回放过程中,有时会出现错误,这在实际测试中是不可避免的,毕竟自动录制生成的脚本难免会有问题,需要运行脚本进行验证,把问题都解决后才加入到场景中进行负载测试。下面结合常用的协议(如Web、Web Services协议)录制的脚本进行回放时出现的问题介绍一下解决的方法。&&&   需要注意的是,回放脚本时出现的错误有时是程序自身的原因导致的,因此在解决脚本回放问题前必须保证程序录制出的脚本是正确的。&&&   1.LoadRunner超时错误:在录制Web协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同。&&&   错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。&&&   错误分析:对于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送一个请求到服务器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。&&&   解决办法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在“Runtime Setting”&“Internet Protocol:Preferences”&“Advanced”区域中设置一个“winlnet replay instead of sockets”选项,再回放是否成功。&&&   错误现象2:Action.c(81):Continuing after Error -27498: Timed out while processing URL=http://172.18.20.70:7001/workflow/bjtel/leasedline/ querystat/ subOrderQuery.do&&&   错误分析:这种错误常常是因为并发压力过大,服务器端太繁忙,无法及时响应客户端的请求而造成的,所以这个错误是正常现象,是压力过大造成的。&&&   如果压力很小就出现这个问题,可能是脚本某个地方有错误,要仔细查看脚本,提示的错误信息会定位某个具体问题发生的位置。&&&   解决办法:例如上面的错误现象问题定位在某个URL上,需要再次运行一下场景,同时在机器上访问此URL。如果不能访问或时间过长,可能是服务器或者此应用不能支撑如此之大的负载。分析一下服务器,最好对其性能进行优化。&&&   如果再次运行场景后还有超时现象,就要在各种图形中分析一下原因,例如可以查看是否服务器、DNS、网络等方面存在问题。&&&   最后,增加一下运行时的超时设置,在“Run-Time Settings”&“Internet Protocol:Preferences”中,单击“options”,增加“HTTP-request connect timeout” 或者“HTTP-request receive”的值。&&&   2.LoadRunner脚本中出现乱码:在录制Web协议脚本时出现中文乱码,在回放脚本时会使回放停止在乱码位置,脚本无法运行。&&&   错误现象:某个链接或者图片名称为中文乱码,脚本运行无法通过。&&&   错误分析:脚本录制可能采用的是URL-based scrīpt方式,如果程序定义的字符集合采用的是国际标准,脚本就会出现乱码现象。&&&   解决办法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在“Recording Options”的“Advanced”选项里先将“Surport Charset”选中,然后选中支持“UTF-8”的选项。&&&   3.LoadRunner HTTP服务器状态代码:在录制Web协议脚本回放脚本的过程中,会出现HTTP服务器状态代码,例如常见的页面-404错误提示、-500错误提示。&&&   错误现象1:-404 Not Found服务器没有找到与请求URI相符的资源,但还可以继续运行直到结束。&&&   错误分析:此处与请求URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。&&&   解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。&&&   错误现象2:-500 Internal Server Error服务器内部错误,脚本运行停止。&&&   错误分析:服务器碰到了意外情况,使其无法继续回应请求。&&&   解决办法:出现此错误是致命的,说明问题很严重,需要从问题的出现位置进行检查,此时需要此程序的开发人员配合来解决,而且产生的原因根据实际情况来定,测试人员无法单独解决问题,而且应该尽快解决,以便于后面的测试。&&&   4.LoadRunner请求无法找到:在录制Web协议脚本回放脚本的过程中,会出现请求无法找到的现象,而导致脚本运行停止。&&&   错误现象:Action.c(41): Error -27979: Requested form. not found [MsgId: MERR-27979]&&&   Action.c(41): web_submit_form. highest severity level was "ERROR",0 body bytes, 0 header bytes [MsgId: MMSG-27178]"&&&   这时在tree view中看不到此组件的相关URL。&&&   错误分析:所选择的录制脚本模式不正确,通常情况下,基于浏览器的Web应用会使用“HTML-based scrīpt”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的Javascrīpt/VBscrīpt代码、基于浏览器的应用中使用HTTPS安全协议,这时则使用“URL-based scrīpt”模式进行录制。&&&   解决办法:打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HTML-based scrīpt”,单击“HTML Advanced”,选择“scrīpt Type”为“A scrīpt containing explicit”。然后再选择使用“URL-based scrīpt”模式来录制脚本。&&&   5.LoadRunner不执行检查方法:在录制Web协议脚本中添加了检查方法Web_find,但是在脚本回放的过程中并没有执行。&&&   错误现象:在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,但是在回放过程中并没有对设置的检查点进行检查,即Web_find失效。&&&   错误分析:由于检查功能会消耗一定的资源,因此LoadRunner默认关闭了对文本以及图像的检查,所以在设置检查点后,需要开启检查功能。&&&   解决办法:打开运行环境设置对话框进行设置,在“Run-time Settings”的“Internet Protocol”选项里的“Perference”中勾选“Check”下的“Enable Image and text check”选项。&&&   6.LoadRunner回放Web Services协议脚本错误:LoadRunner 8.0版本在录制Web Services协议的脚本时正常,但在回放时会出现错误,提示停止脚本运行。&&&   错误现象:利用LoadRunner 8.0版本来录制Web Services协议的脚本没有任何错误提示,回放脚本时会出现如下错误提示“Error:server returned an incorrectly formatted SOAP response”。&&&   错误分析:出现此错误的原因是LoadRunner8.0在录制Web Services协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为&?xml version="1.0"encoding="zh_cn" ?&,所以才会有此错误提示。&&&   解决办法:下载两个补丁,分别为“LR80WebServicesFPI_setup.exe”和“lrunner_web_ services_patch_1.exe”安装上即可。&&& 利用GetObject("WinMgmts:")获取系统信息(转)&&&
16:52:07&&& 用WMI对象列出系统所有进程:&&& ----Instance.vbs----&&&& 程序代码&&& Dim WMI,objs&&& Set WMI = GetObject("WinMgmts:")&&& Set bjs = WMI.InstancesOf("Win32_Process")&&& For Each obj In objs&&& Enum1 = Enum1 + obj.Description + Chr(13) + Chr(10)&&& Next&&& msgbox Enum1&&&&&&& 获得物理内存的容量:&&& -----physicalMemory.vbs-----&&&&&&&& 程序代码&&& strComputer = "."&&& Set wbemServices = GetObject("winmgmts:\\" & strComputer)&&& Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguration")&&& For Each wbemObject In wbemObjectSet&&& WScript.Echo "物理内存 (MB): " & CInt(wbemObject.TotalPhysicalMemory/1024)&&& Next&&&&&&& 取得系统所有服务及运行状态&&& ----service.vbs----&&&& 程序代码&&& Set ServiceSet = GetObject("winmgmts:").InstancesOf("Win32_Service")&&& Dim s,infor&&& infor=""&&& for each s in ServiceSet&&& infor=infor+s.Description+" ==& "+s.State+chr(13)+chr(10)&&& next&&& msgbox infor&&& CPU的序列号:&&& ---CPUID.vbs---&&&& 程序代码&&& Dim cpuInfo&&& cpuInfo = ""&&& set moc = GetObject("Winmgmts:").InstancesOf("Win32_Processor")&&& for each mo in moc&&& cpuInfo = CStr(mo.ProcessorId)&&& msgbox "CPU SerialNumber is : " & cpuInfo&&& next&&&&&&& 硬盘型号:&&& ---HDID.vbs---&&&& 程序代码&&& Dim HDid,moc&&& set moc =GetObject("Winmgmts:").InstancesOf("Win32_DiskDrive")&&& for each mo in moc&&& HDid = mo.Model&&& msgbox "硬盘型号为:" & HDid&&& next&&&&&&& 网卡MAC物理地址:&&& ---MACAddress.vbs---&&&& 程序代码&&& Dim mc&&& set mc=GetObject("Winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration")&&& for each mo in mc&&& if mo.IPEnabled=true then&&& msgbox "网卡MAC地址是: " & mo.MacAddress&&& exit for&&& end if&&& next&&&&&&& 测试你的显卡:&&&& 程序代码&&& On Error Resume Next&&& Dim ye&&& Dim yexj00&&& set yexj00=GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_VideoController")&&& for each ye in yexj00&&& msgbox "型 号: " & ye.VideoProcessor & vbCrLf & "厂 商: " & ye.AdapterCompatibility & vbCrLf & "名 称: " & ye.Name & vbCrLf & "状 态: " & ye.Status & vbCrLf & "显 存: " & (ye.AdapterRAM\1024000) & "MB" & vbCrLf & "驱 动(dll): " & ye.InstalledDisplayDrivers & vbCrLf & "驱 动(inf): " & ye.infFilename & vbCrLf & "版 本: " & ye.DriverVersion&&& next&&&&&&& 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/SImonJ07/archive//1817967.aspx&&& QTP-使用技巧(转)&&&
10:45:29&&& 1.runaction 后面能不能接变量(动态调用action,所以从数据库取数据做action名字了,但是调用总是找不到)?&&&&& A:脚本中原有RunAction "testbase [case1]", oneIteration&&&&&&& 把引号中的内容放到Global表中的第22行,然后将代码修改为:&&&&&&& datatable.getsheet("Global")&&&&&&& datatable.setcurrentrow(22)&&&&&&& strLogin=DataTable("ActionName","Global")&&&&&&& RunAction strLogin, oneIteration&&&&&&&&& help中也有相关帮助&&&&&&& 如:&&&&&&& Syntax&&&&&&& RunAction ActionName, [IterationMode , IterationRange , Parameters]&&&&&&& ActionName : String : The name of the action&&&& 2.QTP8.2 中调用VB函数的问题(用VBscrīpt写了一些测试脚本需要的几个通用函数,有没有办法可以用类似include的方式进行调用,而不需要每次都把这些函数Copy到新的脚本中)?&&&&& A:程序开头加上ExecuteFile "..\..\..\project\DeVariable.vbs"&&&& 3.QTP 如何做回归测试(300多个TestCase,TD是否可以管理) ?&&&&& A:TD可以实现,可以生成测试集,一个测试集可以包含若干个测试脚本&&&&&&& QTP8.2本身提供一个工具Test Batch Runner但是运行完没有报告。&&&&&&& MI有另一个工具叫MTM(multitestmanager)&&&& 5.在QTP中如何设置使用别的浏览器(XP系统,用IE访问程序时,每次总提示屏蔽安装ActiveX插件,需要手动安装.但把这个过程录制到QTP后,回放一次是成功的。当我给某个输入框参数化了好多数据后,回放过程中,某些就会失败.&&&&&&& 可能有两个方面可以解决这问题1、每个动作设置延迟时间 2、设置为用别的浏览器。)&&&&&&& (失败的提示信息是& object not visible)&&&&& A:1.延迟可用WAIT X(X单位是秒)&&&&&&& 2.可以安装插件添加新的浏览器&&&&&&&&&& SystemUtil.Run "file” "params" "dir" "op'' "mode"&&&&&&&&&& QTP运行可执行文件的方法及其参数&&&&&&&& ps: 建议是用IE浏览器,或者IE内核浏览器做测试&&&& 6.checkpoint 检查网页,是否能实现只要网页出现乱码就返回错误报告?&&&&& A:Text not displayed能解决问题&&&&&&& 关于 Text Checkpoint 的总结。&&&&&&& 1)Text Checkpoint 的检查部分分为三个部分。Checked Text 、Text Before 、Text After。在默认的情况下,Checked Text执行的是精确检查,其余两个部分执行的是模糊检查。Text Before(After)检查的内容可以比实际的内容少。但是不能有和是实际内容不相符的地方,否则就失败。&&&&&&& 2) Exact match选项。如果选择了这个选项,三部分完全都进行精确检查。个人觉得和只检查checked Text部分没有区别。&&&&&&& 3) Text not displayed。这个选项本质上就是一个结果取反的过程。就是把检查的结果给反过来,把pass变成Fail,Fail变成pass。我觉得这样就很容易理解。&&&& 7.WSH 的应用方法&&&&& A:WSH 实际上是一个脚本语言的运行环境,它之所以具备强大的功能,是在于其充分挖掘了脚本语言的潜力。因此,如果抛开脚本语言而空谈 WSH ,那实际上就没有了意义。而如果再展开来讲述脚本语言,显然就离开了今天的主题。&&&& 在这种情况下,只好采取一种折衷的方法:给大家推荐几个脚本文件利用 WSH 执行任务的实例,希望大家能通过这些例子对 WSH 的使用有一个初步的认识。&&&   脚本文件的编写十分方便,你可以选用任意一个文字编辑软件进行编写,编写完成后,只需将它保存为 WSH 所支持的文件名就可以了(如.js 文件和.vbs 文件)。最常用的就是记事本编辑器,下面的实例都是以它作为工具编写的。&&&& 打开记事本编辑器,在上面编写如下内容:&&&   Wscrīpt.Echo("走近 WSH")&&&   将它保存为以 .vbs 或 .js 为后缀名(千万不要写成了 .txt)的文件并退出记事本。双击执行这个文件。&&&   这一次,我们要利用 WSH 完成一次创建十个文件夹的工作。代码如下:&&&   dim objdir&&&   set ōbjdir=wscrīpt.createobject("scrīpting.filesystemobject")&&&   for k=1 to 10&&&   anewfolder="c:\chapter" & k&&&   objdir.createfolder(anewfolder)&&&   next&&&& 同样,将它存为 .vbs 文件并退出。运行后,我们会发现,C 盘根目录下一次性多出了十个新文件夹。&&&&&&& 最后,再举一个在服务器上的运用。下面的代码将帮助你重新启动指定的 IIS 服务:  &&& ' define a constant for stopped services&&&   Const ADS_SERVICE_STOPPED = 1&&&& ' get an ADSI object for a computer&&&   Set ōbjComputer = GetObject("WinNT://MYCOMPUTER,computer")&&&& ' get an object for a service&&&   Set ōbjService = objComputer.GetObject("Service","MYSERVICE")&&&& ' check to see if the service is stopped&&&   If (objService.Status = ADS_SERVICE_STOPPED) Then&&&& ' if the service is stopped, then start it&&&   objService.Start&&&&   End If&&&& 将它以 startsvc.vbs 为名保存在 C: 盘根目录。并通过如下命令执行:Cscrīpt C:\STARTSVC.VBS。运行后,经你指定的 IIS 服务项将被重新开启。&&&& 其实,在 Windows的 samples 目录下,有个 WSH 文件夹,那里面有不少很具代表性的 .vbs 和. js 脚本文件。&&& 此外,利用 WSH 还可以自己编写脚本文件来提高网络管理方面的效率。&&& 8.从 EXCEL 中导出数据进行测试&&& datatable.AddSheet("51sheet")&&& datatable.ImportSheet "f:\test.xls","testsheet","51sheet"&&& Dim i,RowCount ' 定义两个变量&&& i=0&&& RowCount=datatable.GetSheet("51sheet").GetRowCount ' 设置 RowCount 等于 51sheet 中的行数。&&& msgbox RowCount&&& Do while i&rowcount&&& i=i+1 ' 第一次进入循环,执行这句后, i=1&&& 'datatable.getsheet("51sheet").setcurrentrow(i)&& 这句话被我注释掉了,正确的写法应该是下面这样,分开写。&&& datatable.getsheet("51sheet")&&& datatable.setcurrentrow(i)&&& ' 执行过上面两句后, CurrentRow 是第一行。&&&& tempData=DataTable.GetSheet("51sheet").GetParameter("Name").Value&&&&&&&&&&&&&&&&&&& ' 现在,我们调用 msgbox 看看下面这种调用方法得到的是什么值?没错,是第一行的值,下一次循环呢?&&& ' 得到的是第二行的值么?&&& msgbox "GetParameter-Name:"&tempData ' 这里弹出我们要看的值。&&& ' 下面我们用另外一种方法来得到。&&& msgbox "GetParameter-i:"&DataTable.GetSheet("51sheet").GetParameter(1).Value ' 这里我用 GetParameter(1) 去得到 sheet 中第一列的值。&&& loop&&&& 9.关于 dtGlobalsheet 与 dtLocalsheet&&& 1) dtGlobalsheet 只有一个,它的 index 值比较特殊,它有两个 index 值,一个是 1 还有一个是内置的默认的 1000 。&&& 你可以用 1 或者 1000 去引用它都是正确的。当然了,如果你用 dtGlobalsheet 来引用它也是正确的。这个 sheet 的 Name 叫做 "Global" 。注意: SheetName 是区分大小写的。&&& 2) dtLocalsheet 可以用 index:1001 来引用,当然,也可以用 2 来引用。至于其它自定义的 sheet 嘛,你就只能用 index:3 来引用了。&&& 它没有内置的默认的类似前两个那样的 index 值。&&& 3) datatable 这个对象只有一个。就是所有 sheet 的集合。或许你把它理解为 excel 文件比较好。&&& dtsheet 呢?就是其中的每个 sheet 。所不同的就是 MI 为他们做了一些默认值。在我们的应用中,可能会有多个 action, 如: actiion1,actiion2,actiion3&&& 这些 action 也分别对应有各自默认的 LoaclSheet. 即: actiion1 , actiion2 , actiion3 。&&&& 如果每个 action 中,我们都只用到一个 sheet ,那就好办了,在每个 action 中都可以用 localsheet 来引用,但是如果我们有两个及两个以上的 sheet. 那么就比较容易乱套了。&&&& 10.移动当前位置的行&&& For i=1& to 3&&& datatable.getsheet("Global")&&& datatable.setcurrentrow(i)&&& DataTable("C","Global") = DataTable("nodename","Global") ‘把表Global中的nodename字段中的内容取出来。&&& Next&&&& 11.如何能记录到页面的校验码?(Output value能不能得到web页面的校验码,一般的校验码是由图片随即生成的 ,用QTP怎么录脚本在登陆前得到校验码并输入到校验码一栏)&&&&&& A:1)一个很简单的方法:测试时叫开发屏蔽掉检验码的功能后,再录制脚本。检验码的功能可以手工很简单测试出来。&&&&&&&& 2)想得到图片的校验码,唯一的方法就是跟程序员拿程序,然后自己在脚本里面写FUCNTION!&&&&&&&&&&& 其它就要手动输入了!&&&& 13. 自动测试实施计划&&&&&& 1)分析实施自动化测试可能存在的风险:就是决定是否实施, 用成本 时间 效果 。。&&&&&& 2)制定实施的时机:也就是在什么阶段&&&&&& 3)研究所要测试的功能 性能&&&&&& 4)分析在测试中可能遇到的问题 和困难&&&&&& 5)预估所需要的人时和相应的硬件&&&&&& 7)确定负责人员和相关测试人员&&&&&& 6)制定详细的测试计划 方案&&&&&& 7)最后是执行计划&&& 14. 一个Action里如何调用在另一个Action中定义的函数、过程(或变量、常量)&&&&&& 例如:&&&&&& -----------------------------------&&&&&& 'Action_A&&&&&&&& Public strURL&&&&&&&&&&&&& ...... ......&&&&&&& Function QueryList()&&&&&&&&&&& ...... ......&&&&&

我要回帖

更多关于 loadrunner11破解 的文章

 

随机推荐