Action.c(11):Error:lrdo_server_attach:"OCIServerAttach"return-code=OCI_ERROR,error-code=24309:
Action.c(11):Error:ORA-24309:已连接至服务器
Action.c(11):server_attach:ERROR,return-code=LRDE2009.ServerHandle=OraSrv1,ServerID="customs"
Abortwascalledfromanaction.
解决办法:1)将登陆SQL*Plus的操作录制在vuser_init中;2)同时录制退出SQL*Plus的操作
2、测试压力上来以后,会有好多Vuser出现Error,具体报错如下:
Action.c(37):Error:lrdo_ora8_exec:"OCIStmtExecute"return-code=OCI_ERROR,error-code=00054:
解决方法:把lrd_ora8_exec(OraSvc1,OraStm,0,0,&uliRowsProcessed,0,0,0,0,0);
改为:lrd_ora8_exec(OraSvc1,OraStm,0,0,&uliRowsProcessed,0,0,0,0,1);
3、测试压力上来以后,会有好多Vuser出现Error,具体报错如下:
Action.c(13):Error:lrdo_server_attach:"OCIServerAttach"return-code=OCI_ERROR,error-code=12514:
解决办法:开启数据库服务器监听,启动数据库服务器。
4、测试压力上来以后,会有好多Vuser出现Error,具体报错如下:
Action.c(26):Error:Cinterpreterruntimeerror:Action.c(26):Error--Unresolvedsymbol:lrd_session_begin.
解决办法:在vuser_init中添加#include"lrd.h"
5、测试压力上来以后,会有好多Vuser出现Error,具体报错如下:
Startingiteration1.
StartingactionAction.
Action.c(13):Error:lrdo_server_attach:"OCIServerAttach"return-code=OCI_ERROR,error-code=12541:
Action.c(13):Error:ORA-12541:TNS:没有监听器
Action.c(13):server_attach:ERROR,return-code=LRDE2009.ServerHandle=OraSrv1,ServerID="lr"
解决办法:启动数据库服务器,开启listener。如果需要使用isqlplus的话,开启服务:$isqlplusctlstart
6、测试压力上来以后,会有好多Vuser出现Error,具体报错如下:
Action.c(13):Error:ORA-12514:TNS:监听进程不能解析在连接描述符中给出的SERVICE_NAME
解决办法:检查压力机Oracle客户端解析文件tnsnames.ora,确保正确配置了这个文件。
检查测试的数据库服务器,确保正确配置了监听,并已经开启。
7、使用Controller产生负载,最后测试数据只有以下4条性能曲线:RunningVusers、TransResponseTime、Trans/Sec(Passed)、TotalTrans/Sec(Passed)、其余的Throughput、HTTPResponsesperSecond、Connections等等性能统计项均显示为灰色,没有统计数据
解决办法:因为sqlplus.exe是一个win32程序,那么在测试的过程中只统计上面的四项,它不会统计Throughput这些Web测试才有的性能曲线。
所以,如果想对数据库服务器测试的更全面,这个时候就要使用isqlplus来发出查询。
1)在DBserver上启动isqlplus服务:isqlplusctlstart
2)启动VuGen,在客户端(压力机)启动isqlplus的Web页面
OK!录制完成之后,产生压力执行测试。顺利结束之后,可以看到如下曲线已经抓取出来了:
Throughput、HTTPResponsesperSecond、Connections
剩余的工作就是如何分析性能数据了。
2.这是一家国企,面试过程让我很郁闷,基本上就三个问题:有没有做过开发;会不会性能测试和自动化测试;懂不懂数据库。结果可想而知啦,以狼狈的失败而告终。
3.是一个规模比较小的外企,在南京的分公司,面试过程也比较简单,先只是问了些技术上的东西,我想目前测试方面可能还没有什么比较好的考察方法,所以也问不出比较难的问题,无非就是平常的工作流程;测试人员所具备的素质等等。我记得有一个问题印象比较深:如果发现了bug,这个bug该不该是由谁决定?我当时的回答是在我现在的公司是由经理决定的,对方就问我:“那你认为是应该由谁决定呢?”我回答是测试人员,对方肯定了我的答案,但是我后来想想这个问题并没有绝对正确的答案,要看情况的。最后做了份英翻中的卷子,这个难度不大。
4.这也是一个比较大的国内企业,但我面试的是他的子公司,况且正在狂招人,所以难度不大。基本上只要本科有点工作经验的,估计都能进。面试时我很紧张,对方三个人,先开始也只是问了些流程方面的东西,我记得有两个问题我印象比较深。第一,为何要离开现在的公司,我回答是现在只有我一个人做测试,也没有人带,也没有人交流。对方很犀利,说原来没有测试的话,你应该更好做啊?完全可以自己规定流程和规范,按照自己的方式来做,应该会做的更好。然后对方总结了我的缺点,喜欢被动的执行任务,不习惯主动学习。(我觉得总结的很对)。第二,是一个技术上的问题,我现在的公司做视频会议的,对方问我如何判断视频交互过程中视频效果不好是带宽限制的,还是程序导致的?这个问题把我问傻了,平常工作中的确没注意过这方面,一般都是开发说好就好,说不好就不好,我也没问过如何判断好不好。这次面试让我感觉到自己问题很多,也坚定了我要换一个公司的信心。最后虽然通过了面试,但我知道依自己的水平是不够的。面试我的人跟我讲,出来是对的,工作一年多可能没有压力,退步了,讲的很诚恳。这个面试官让我比较佩服,一眼就能看出人的问题。
什么妨碍我们进步北京宅急送快运公司总裁陈平
二、不知道什么是“悟”。有些人虽然很善于倾听,但不走脑子。左耳朵进,右耳朵出。没有把改变自己需要的有效信息在脑子里过滤沉淀,知识再好,意见再对,不悟就不是自己的。悟的越深,改变的就越迅速,越彻底。不悟什么都白搭。
四、“拉不出屎来赖茅坑”。虽说勇于承认错误但找出一大堆客观原因,一会儿天不凑巧啊,一会儿有人使坏,就是看不到自己的问题。本来应该是改变自己,却去改变别人,那还不乱弹琴?
五、缺乏改变的勇气。对于每一个人来说,改变是一件很痛苦的事,改变是一种煎熬,改变是自我折磨,改变更是意志的考验。孙悟空如果不是在炼丹炉里烟熏火烤49天,哪来他火眼金睛的本领?猪八戒受不了痛苦,所以他想变得漂亮一些都不行,何谈变成人了。现实生活中也有不少的人,把床改变一下位置就睡不着觉,要是把席梦思改变成硬板床,那还不要了他的命?
固执己见,执迷不悟,都是改变的死敌。障碍改变的因素因人而异,各有不同。我认为这里面还有一个天性的问题。有的人自己和自己较劲,天天都在变,有的人“响鼓不用重锤”,暗示一下,很快就变。有的人任你嘴皮说破,恨不得把心掏给他,就是不见他改变。难怪“江山易改,本性难移”这句话到处流行,所以,不要奢望人人都能改变,人人一夜之间都会改变,自己改变和改变别人有时也要认“麻袋底绣不出花”、“朽木不可雕”这个理。
往进步一面的改变不易,往落后一面的改变相对易,不管你是变好还是变坏,内因是变化的根据,外因是变化的条件。内因起决定作用。假如认识到了这一点,如何改变,改变到什么程度,内外因的平衡关系就不难掌握了。三、不敢承认错误。你要说不改变是因为不知道错了还情有可原,问题是许多人明知道错就是不承认自己错。这样的人,一类是固执,“厕所里的石头——又臭又硬”,另一类是虚荣,“鸭子死了——嘴还硬”。唯恐承认错了被别人看不起或受到批评,更怕承担责任。殊不知,这是在放弃和拒绝进步的机会。
昨天从51testing论坛看到一道题目,很有意思,如果是面试时突然提问,可能还真不太好回答。
“给你一个软件,你测试了一个月都没有发现bug,这说明什么?你怎么办?”
当时看到这个题目,也颇为一惊,一时之间真不知道如何回答,因为的确没有遇到过这样的情况。坛子里的回答五花八门,有的说“说明软件已经没有bug了”,也有的讲“需要补充新的测试用例”云云,都不太认同。
其实上面的问题属于极端情况,对于一个新软件和有经验的测试工程师来讲,很少会遇到,至少我的经验是这样。更常见的情况可能是,测试员和程序员长期在项目间合作,程序员渐渐习惯了测试员的用例思维,他在写代码的时候,根据以前多次修改BUG的经验,已经在自觉的规避可能出错误的代码写法,从而写出的代码更规范更可靠。由于程序员在主动规避测试员可能发现的错误,测试员如果还按照惯性思维去测试,当然就不太容易再发现BUG了。
.....................
阿炳“噢”了一声,若有所思。
“我爱人的老家在无锡乡下,太湖边上,离你们乌镇不远。这河水应该是先流到太湖,然后再往下流,才流到你们乌镇。太湖边上的人家都以捕鱼为生,我岳父是当地出了名的好手。到了冬天,鱼都沉入湖底,出去捕鱼的人经常无功而返,唯独我岳父,从来不会空手回来,他的竹篓里总是装着别人想不到的大鱼,或者其它水鲜。”
“为什么?”
“因为我岳父在冬天捕鱼有个绝活儿,就是他能从水面上冒出的纷繁凌乱的水泡中,一眼认出哪些水泡是冬眠的鱼吐出来的,哪些不是。知道鱼在哪里就好办了,只要将鱼网对着“鱼泡”铺天盖地撒下去,鱼便成了瓮中之鳖……”
其实,阿炳搜寻敌台给安在天的感觉就是这样,他不但能从众多水泡中看出哪些是鱼泡,而且还能从各式各样的鱼泡中分辨出各式各样的鱼。换句话说,他不但知道哪些水泡下面有鱼,而且还知道是什么鱼,是鲤鱼,还是鲫鱼……
安在天继续说:“……有一年冬天,我岳父照常去湖里捕鱼,但接连几天,都看不到湖面上冒出‘鱼泡’。我岳父因此认为湖里的大鱼都被他抓完了,从此就呆在家里,靠吃鱼干过日子。但是有一天,他去湖边随便走,不经意地发现成群的大鱼在岸边的浅水区里游来游去……”
阿炳惊讶地:“真的?”
“真的。这就是说,湖里还有很多的大鱼,只不过这些大鱼都变狡猾了,它们知道假如沉在湖底的话,总有一天要被我岳父识破‘秘密’,抓走,所以都离开湖底,游出深水区,来到岸边的浅水区。岸边虽然寒冷,但空气充足,用不着使劲儿呼吸就可以存活,不使劲儿呼吸就不会冒出气泡,不冒气泡,我岳父自然就找不着它们。”
“后来呢?”
“后来,我岳父知道了这些鱼新的秘密,就又把它们都抓走了。”
阿炳感叹着:“你岳父本事真大……”
安在天就这样让阿炳明白了:我们至少还有一部分敌台没有找到,为什么找不到呢?是因为它们“像狡猾的大鱼一样”躲起来了,躲到我们想不到的地方,我们需要一种新的办法去寻找它们。
阿炳站了起来:“我们回去上班吧。”
安在天试探地:“你愿意试一试吗?”
阿炳:“我想试……”
................
我想以上的比喻用来回答这个问题再合适不过了。当然BUG不像鱼,没有鱼那样会思考会变“狡猾”,但BUG的主人即程序员比鱼可聪明“狡猾”多了。
回到本文开始的问题,测试工程师已经按照惯性思维测试了一个月,还没有发现BUG,这并不能说明BUG真的没有了,只能说明BUG隐藏的更深了。我想此时就应该借用安在天岳父的做法,积极转换思维方式,发现自己惯性思维测试的盲点,经常和“高手”交流,拓展自己的思维方法,必要时可邀请其他有经验的测试工程师一起进行,我想这也是β测试和随机测试能够存在的重要缘由之一了。
以上仅代表本人观点!
1、你是否真正的给与了开发人员、老板帮助,让他们真正体会到了你存在的价值?
2、你是否只限于找找bug,而没有从流程改进上,从与开发人员的协作上更多地发挥作用?
6、作为一个测试主管,你是否能够主动为自己的team争取利益,带领team不断进行质量意识宣传,培养公司全体人员的质量素质?
7、作为一个测试主管,你是否能够带领你的团队,为大家建立一个规范、高效的测试流程,建立一个与开发人员非常顺畅、和谐的合作氛围?
8、你是否经常和开发人员、产品经理打成一片,一起出去吃饭,游玩。(不要小看这个,知心话往往在这时候说。)
9、作为一个测试主管,你是否有意识的将自己team的产出进行记录和总结,并展现给所有人,让大家了解你们的工作方式、方法、流程和取得的成果。
10、你是否能够主动让开发人员来给组内人员进行技术培训,并主动为开发人员培训测试技巧?
11、你是否除了测试工作,还主动参与到产品改进、开发流程改进、测试流程改进等工作中,更多地发挥你的作用?是否能够经常提出一些建设性意见,来优化和改进测试、开发等工作,让大家觉得越来越好?
12、你是否把测试工作做得非常优秀,大大超出了老板的期望?
13、作为一个测试主管,你是否能让人觉得你的测试团队是一个朝气蓬勃的、不断向上的、团结快乐的、人才济济的、为公司发展贡献了很大力量的团队?
你的价值何在?你能为别人带来的收益是什么?谁都尊重强者,谁都喜欢能给他帮助的人。如果这些你都做到了,不可能不被重视。
1生产随机数列第一种方法
CODE:
randomize'更新反回的数据funcationrand(k,n)n=int((k-1)*rnd+1)rand=nendfuncation
第二种方法
n=randomnumber.value(1,255)
2当运行到表中的某一行,自动导出表中的所有数据
row=datatable.getcurrentrowifrow="5"thendatatable.export("d:\data.xml")endif
3
webedit("txtpass").setsecure"sdsdf...."
如果参数化密码,可以直接在数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set
4如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
'判断一个窗口是否存在if(Dialog(dialog_name).exist=true)thenelseendif'判断一个窗口是否激活if(window("window_name").active=true)thenelseendif
导入一个EXCEL表datatable.Import(excel_name)'将该excel文件中的表全部导入datatable.ImportSheet(excel_name,sheet_name)'导入excel中名字为sheet_name的sheet表导出一个EXCEL表datatable.ExportSheet(excel_name,sheet_name)或datatable.ExportSheet(excel_name,sheet_index)获取表中当前的行数datatable.GetCurrentRow获取表中总行数datatable.GetRowCount返回EXCEL中表的数量DataTable.GetSheetCount获取运行的表中的某个值或者设置该值DataTable.Value(colume_name,sheet_name)'获取colume_name列中的当前光标处的值DataTable.value(colume_name,sheet_name)=New_Value'设置新值
DataTable.GetSheet(sheet_name).GetParameter(colume_name).valueByRow(n)
判断当前光标是否处于最后一列iRow=datatable.getCurrentRowif(dataTable.value(sheet_name).GetParameter(colume_name).ValueByRow(iRow)<>expected_value)thenforiRow=0toiRow window的方法和属性window(win_name).active ifbrowser("web_name").dialog("dialog_name").exist(1)then'如果不出现=falseerror_message=browser("web_name").dialog("diaglog_name").static("用户密码错误!".getRoproperty("text")iferror_message<>(datatable.value("error_info"))thenmsgbox(error_message)endifbrowser("web_name").dialog("diaglog_name").closeendif 5datatable.value("num")只在global形式下的一种省略形式;完整形式是: datatable.value("num",dtlocalsheet) -----向某一列的单元格赋值: datatable.value("column_name",dtlocalsheet)="nanjing" -----取得某一行具体值: datatable.setcurrentrow(n)msgbox(datatable.getsheet("global").getparameter("column_name").Rawvalue)或者kk=datatable.Rawvalue("column_name","action1") ----在run-time时,动态添加表格与数据 kk=datatable.addsheet("sheet_name").addparameter("column_name","value").name; 6简化代码,明晰结构的方式with--endwith结构: withDialog("name")c1=.button("b_name").click'//等价于Dialog("name").button("b_name").clickendwith 7wintreeview一些操作 选择一个条目:wintreeview.select(item)'根是0根的名称:wintreeview.getitem(0) 8数据库检查点模块: subdatabase_checksetcon=createobject("adodb.connection")con.open"Description=IBM_ODBC;DRIVER=SQLServer;SERVER=IBM;UID=sa;"&_"PWD=123456;APP=QuickTestPro;WSID=IBM;DATABASE=IBM_table"'access方式:con.open"DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ=d:\test.mdb"'Orocle方式:con.open"DRIVER={OracleinOraHome92};SERVER=CESHI;UID=CND_TEST;PWD=CND;DBQ=CESHI;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;"setrecord=createobject("adodb.recordset")sql="select*fromibm_one_table"record.opensql,conDOif(record("ibm_table_column")="kai")then'//查找表格中有多少kainum=num+1;endifrecord.movenextloopuntilrecord.eof=truerecord.closesetrecord=nothingcon.closesetcon=nothingendsub 9换行符 vbcr----chr(13)回车符vblf----chr(10)换行符vbcrlf----chr(13)+chr(10)结合 10Runfromstep有两种方式: 在KeywordView模式会从本步骤运行到所有action结束在expertview模式仅会将本action运行结束 11对于属性是变化的,有时可以把该属性从识别对象里删除,来解决识别问题 12对系统文件的操作 -------从系统的文件中获取信息及删除文件get_file_infor("c:\she.mpg")functionget_file_infor(url)dimfso,fsetfso=createobject("scripting.filesystemobject")setf=fso.getfile(url)f.name:f.size:f.type:f.datacreated'///获取文件信息fso.deletefile(url)'/////删除文件endfunction--------获取文件夹里所有文件信息get_folder_infor("c:\kai")functionget_folder_infor(folder)dimfso,f,f1,nsetfso=createobject("scripting,filesystemobject")setf=fso.getfolder(folder)setfc=f.filesforeachf1infcselectcasef1.namecase"kai.mpg","she.mpg","dd.mp3"'//检查文件夹里是否含有这些文件endselectnextendfunction 13等待某个对象出现方法 y=......waitproperty("visible",true,10000) 14防程序中断方法 OnerrorresumenextOnerrorgotohandle 15数组的应用: name=array(1,2,"aa","bb")name(2)="aa" 16正则表达式应用模板 17返回一个字符串在另一字符串中的位置 instr(string1,string2) 18有时回放出现找不到对象时,可能不是由于你的代码问题,而是由于你的操作系统等设置问题; 举例说明1:比如:你录制一个选择磁盘中的文件动作会录制为:.winlistview("").drap46,99.winlistview("").draponitem"she.mp3"下次录制的时候,如果你的系统文件改为不显示扩展名,下次执行的时候,QTP就找不到she.mp3,只能找到she;举例说明2:有时由于不同操作系统以及不同的ie,导致有些窗口不能识别,比如在2000下弹出的网页对话框的标题是:“web对话框",而在2003上是”网页对话框" 19"is+*"类型function isarray'是否是数组isconnected'判断QTP是否连接到TDisdate'是否是合法的日期类型isempty'判断是否初始化isNull'判断是否为空值isNumeric'判断是否是数字型isobject'判断是否一个功能对象isready'判断设备是否准备就绪isRootFolder'是否是根目录 1、拆分语句split例:取得当前日期后拆分riqi=date()my=split(riqi,"-")riqi=my(1)&"月"&my(2)&"日"datatable("riqi",DtGlobalSheet)=riqi本地表:DataTable("a",dtLocalSheet)riqi=year(date)&"-"&Right("0"&month(date),2)&"-"&Right("0"&Day(Date),2) 2、取得表格中某行某列的值GetCellData例:飞机票取票价shuA=Browser("Welcome:MercuryTours").Page("BookaFlight:Mercury").WebTable("NewYorktoZurich").GetCellData(3,3) 3、取距某年某月某日的天数datediff例:计算距2008-08-08奥运天数datediff("d",now,"2008-8-8") 4、描述性编程text:=例:取得某页面上某文字的链接Browser("").Page("").Link("text:=娱乐").Click或neirong="娱乐"Browser("").Page("").Link("text:="&neirong).Click strCopy="软件测试."SetōbjIE=CreateObject("InternetExplorer.Application")objIE.Navigate("about:blank")objIE.document.parentwindow.clipboardData.SetData"text",strCopyobjIE.Quit wait1Setting.WebPackage("ReplayType")=2Setōbj=createobject("wscrīpt.shell")obj.sendkeys"{TAB}"wait2obj.sendkeys"^v"wait1Setting.WebPackage("ReplayType")=1 6.使用MultiTestManager添加文件时可以直接往里拖的哦。 7.函数:新建记事本,改名为public.vbs例:functionZHIRSSZHIRSS="RSS行业资讯分类维护"endfunction使用语句executefile"d:\zhaopin\case\denglu.vbs"或设置QTPtest/settings/resources/+函数目录 8.设置动作循环:右击/actiongcallproperties/runonallrows 9.设置动作允许被调用:右击/actionproperties/general/reusableaction打勾 10.QTP与MTM连接:Tools/option/run/allowothermercuryproductstorun... 11.插入已存在的动作1)insert/calltocopyofaction...复制可修改2)insert/calltoexistingofaction...复制不可修改 12.QTP报告自动跳出设置:Options>Run>Viewresultswhenrunsessionends 13.判断表格是否存在:IfBrowser("数商3.0后台管理系统").Page("Page").Frame("main_5").WebTable("标题").Existthenreporter.ReportEvent0,"pass","系统显示了所有的资讯列表!"elsereporter.ReportEvent1,"fail","系统没有显示资讯列表!"endif 14.获取表格行数:Browser("数商3.0后台管理系统").Page("Page").Frame("main_5").WebTable("标题").RowCount 15.注释脚本存在位置:qtp/dat/ActionTemplate.mst 16取本地文件名称FunctionShowFileList(folderspec)Dimfso,f,f1,fc,sSetfso=CreateObject("scrīpting.FileSystemObject")Setf=fso.GetFolder(folderspec)Setfc=f.FilesForEachf1infcs=s&f1.names=s&""NextShowFileList=sEndFunctionwenjian=ShowFileList("D:\下载\本地下载1\") 17.取本地文件删除:del=DeleFile("D:\下载\本地下载1\")FunctionDeleFile(folderspec)Dimfso,f,f1,fc,sSetfso=CreateObject("scrīpting.FileSystemObject")Setf=fso.GetFolder(folderspec)Setfc=f.FilesForEachf1infcf1.deleteNextEndFunction 18.sousuo2=Browser("Browser").Page("Page_4").Check(CheckPoint("2007-11-0814:21"))If(sousuo2)eqv(true)Thenreporter.ReportEvent0,"",""elsereporter.ReportEvent1,"",""EndIf 19.取参数化数据的行数,只在某几行进执行某些语句row=datatable.GetSheet(3).getcurrentrowIfrow=3Orrow=4Then 20.单选框置灰zhihui=Browser("下载中心--新增下载文件").Page("下载中心--新增下载文件_4").WebRadioGroup("downloadType").GetROProperty("disabled")Ifzhihui=1ThenEndIf 29.取树结构SetDesc=descrīption.createDesc("micclass").value="WebTable"SetList=Browser("Browser").Page("Page").Frame("main").ChildObjects(Desc)yuqi=List(0).GetROProperty("innertext")msgboxyuqiyuqi=split(yuqi,"")msgboxyuqi(1) 30.关闭所有IESystemUtil.CloseProcessByName("iexplore.exe") 31.创建actiontemplate.当希望在每一个新建action时都增加一些头部说明,比如作者、创建日期、说明等,用actiontemplate来实现最简单快捷。方法:用记事本等文本编辑器,输入如下类似的内容:'Company:xxxx'Author:xxx'Product:xxx'Date:xx然后将文件保存为ActionTemplate.mst,并存放到QTP安装目录下的dat目录。 33.获取图片的名称ObjectName=Browser(…).Page(…).Image("Find").GetProperty("Name") 34.检查某个对象是否存在,如果存在弹出对话框说明对象存在。IfBrowser("Browser").Page("Page").Applet("login.html").JavaEdit("username").ExistThenMsgBox("Theobjectexists.")Endif 35.同步点Browser("数商3.0制作平台").Dialog("MicrosoftInternetExplorer").WaitProperty"visible",True,120000设置test/testsettings/objectsynchronizationgtimeout一致 36.视图框显示为乱码时:调整原页面编码,在QTP/tools/changeactivescreen 37.添加附件:Browser("**").Page("**").WebFile("filePath").ClickBrowser("**").Dialog("**").WinEdit("文件名(N):").Set"D:\**.jpg"Browser("下载中心--新增下载文件").Dialog("选择文件").WinButton("打开(O)").Click添加相应的对象 38.在图片上右击添加:tools/webeventrecordingconfiguration/customsettingswebedit/event/add/onblur,onchange,onfocus,onpropertychan,onsubmitwebdlement/event/add/onclick,onmousedown,onmouseup/listenalways 39.数据执行保护方法一、右击我的电脑/高级/性能/设置/数据执行保护/为除下列选定程序之外的所有程序和服务启用DEP/添加被保护的程序。方法二、C:/BOOT.INT修改noexecute=alwaysoff 40.在图片上右击添加:tools/webeventrecordingconfiguration/customsettingswebedit/event/add/onblur,onchange,onfocus,onpropertychan,onsubmitwebdlement/event/add/onclick,onmousedown,onmouseup/listenalways 41.去掉前后空格Iftrim(mingcheng)=trim(yuqi)Then 42.分类树问题解决SetDesc=descrīption.createDesc("micclass").value="WebTable"SetList=Browser("Browser").Page("Page").Frame("main").ChildObjects(Desc)yuqi=List(0).GetROProperty("innertext")msgboxyuqiyuqi=split(yuqi,"")msgboxyuqi(1) 43.引用自定义环境变量Environment.LoadFromFile"D:\询价\case\环境\huiyuan.xml" 44.环境变量有2种,一种是QTP的内置变量,一种是用户自定义的变量。内置变量是可以直接就可以用,自定义环境变量需要在菜单中选择“文件”——>“设置”——>“环境”,在变量类型中选择“用户自定义”,然后进行添加,可以对添加的变量全部导出,导出的文件为.xml格式的文档。既然可以导出,那么必然可以导入.xml文件,你可以在该对话框中的选中“从外部文件导入”,然后添加其文件路径即可。(当然这些操作都可以直接使用脚本来实现,如:Environment.LoadFromFile(“FileName”))例如:在桌面建立一个Var.xml,如下- 46.Browser("creationtime:=1").close两个页面title相同无法识别时使用描述必编辑Browser("creationtime:=1").page(title:=****).WebEdit("name:=***").Set"***"或Browser("creationtime:=1").page(index:=1).WebEdit("index:=0").Set"***" 47.场景恢复:当某些提示框会在不定期时有提示时,如果自动点击确定或某些按钮1、tools/recoveryscenarilmanager,制作相应的提示框和要点击的按钮,并保存2、test/settings/recovery,添加刚保存的.qrs 48.输入验证码,先提示一个输入框,在输入框内输入验证码,点击[确定],把输入的验证码框Dimaa=InputBox("输入名字") 49.对象库中对象名称不分为_2,_3...设置:tool/options/web/page/framoptions/crateanewpagetestobjectfor为differenttestobjectdescrīptonscrestanewframe.testobjectfor为differenttestobjectdescrīptions 50.验证测试输入框输入的最大允许字数功能的正确 QTP脚本代码中编写Setaa=Browser("Browser").Page("Page").Frame("main").WebEdit("PayTypeName")ifkonglen(aa,20)eqvtruethenreporter.ReportEvent0,"添加支付方式,支付方式输入框允许输入的最大字符功能正确",""elsereporter.ReportEvent1,"添加支付方式,支付方式输入框允许输入的最大字符功能错误",""endif 此函数的功能为:验证测试输入框输入的最大允许字数功能的正确,函数可写在public.vbs中Functionkonglen(duixiang,guifanshu)duixiang.Clickwait1Setting.WebPackage("ReplayType")=2Setōbj=createobject("wscrīpt.shell")i=0ōld="a"xin="b"whileold<>xinōld=duixiang.GetROProperty("value")i=i+1wait0,20obj.sendkeys"1"wait0,20xin=duixiang.GetROProperty("value")wend'msgboxiIfi-1=guifanshuThenkonglen=trueelsekonglen=falseEndIfSetting.WebPackage("ReplayType")=1EndFunction 51.超时设置:Setting("DefaultTimeout")=1000000 52.共享对象库:SetApp=CreateObject("QuickTest.Application")App.Test.Settings.Resources.ObjectRepositoryPath="path" 53.取颜色browser("b").page("p").Object.currentStyle“:.color54.显示行号设置:Tools--->EditorOptions...-->General-->Showlinenumber, 55.不同数据库检查点手动SQL写法QTP插入数据库检查点,手动指定SQL语句的写法。一、SQLServer格式(本地无需安装SQLServer)connectionstring(连接字符串):1.本地没有创建数据源的方式DRIVER=SQLServer;SERVER=数据库IP地址;UID=用户名;PWD=密码;APP=MicrosoftOffice2003;WSID=本地主机名;DATABASE=数据库名 实例:DRIVER=SQLServer;SERVER=10.160.11.10;UID=sa;PWD=sa;APP=MicrosoftOffice2003;WSID=RJHLJUN;DATABASE=dcwork 2.本地已创建数据源的方式DSN=数据源名称;UID=用户名;PWD=密码;APP=MicrosoftOffice2003;WSID=数据库的主机名;DATABASE=数据库名 实例:DSN=LocalServer;UID=sa;PWD=sa;APP=MicrosoftOffice2003;WSID=RJDCWORKTEST;DATABASE=dcwork 3.SQL语句实例(从数据库表HR_LANGUAGE_TYPE中,查询字段语言名称LANGUAGE_NAME,条件语言名称=中文,按语言名称升序排序结果)source(SQL语句):SELECTHR_LANGUAGE_TYPE.LANGUAGE_NAMEFROMdcwork.dbo.HR_LANGUAGE_TYPEHR_LANGUAGE_TYPEWHERE(HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')ORDERBYHR_LANGUAGE_TYPE.LANGUAGE_NAME 二、DB2格式:(本地至少安装DB2Run-TimeClientLite)connectionstring(连接字符串):1.本地没有创建数据源的方式DRIVER={IBMDB2ODBCDRIVER};UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=数据库名; 实例:DRIVER={IBMDB2ODBCDRIVER};UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK; 2.本地已创建数据源的方式DSN=数据源名称;UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=DCWORK; 实例:DSN=DWCORKDB2;UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK; 3.SQL语句实例source:SQL语句SELECTHR_LANGUAGE_TYPE.LANGUAGE_NAMEFROMDB2ADMIN.HR_LANGUAGE_TYPEHR_LANGUAGE_TYPEWHERE(HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')ORDERBYHR_LANGUAGE_TYPE.LANGUAGE_NAME 三、Oracle格式:(本地需要安装OracleODBCDRIVER)connectionstring(连接字符串):1.本地没有创建数据源的方式DRIVER={OracleinOraHome92};SERVER=数据库服务名;UID=用户名;PWD=密码;DBQ=数据库名;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O; 实例:DRIVER={OracleinOraHome92};SERVER=DCWORK;UID=DCWORK;PWD=DCWORK;DBQ=DCWORK;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O; 2.本地已创建数据源的方式DSN=数据源名称;UID=用户名;PWD=密码;DBQ=数据库名;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0; 实例:DSN=dcworkoracle;UID=DCWORK;DBQ=DCWORK;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0; 3.SQL语句实例source:SQL语句SELECTHR_LANGUAGE_TYPE.LANGUAGE_NAMEFROMDCWORK.HR_LANGUAGE_TYPEHR_LANGUAGE_TYPEWHERE(HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')ORDERBYHR_LANGUAGE_TYPE.LANGUAGE_NAME 四,mysqlSetConn=CreateObject("ADODB.Connection")str="DRIVER={MySQLODBC3.51Driver};SERVER=192.168.1.100;DATABASE=wp_blog;userid=zzz;password=123456"Conn.openstrSetRs=CreateObject("ADODB.Recordset")sql="select*from`wp_blog`.`blg_webcategory`limit0,5000;"Rs.opensql,conn,1,3If(notRs.eof)thenRs.MoveFirstMsgBoxRs(0)MsgBoxRs(1)MsgBoxRs(2)MsgBoxRs(3)endif Rs.closeSetRs=NothingConn.closeSetConn=Nothing 五.access SetConn=CreateObject("ADODB.Connection")str="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:/db1.mdb"Conn.openstrSetRs=CreateObject("ADODB.Recordset") 56.*.xmlEnvironment.LoadFromFile"D:\新建文件夹\a.xml"Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").SetEnvironment("HuiYuanB") nowTime=dateadd("n",+10,time())Browser("号码百事通个人助理").Page("号码百事通个人助理").WebEdit("delayTime").SetnowTime riqi=dateadd("d",+10,date())riqi2=year(riqi)&"-"&Right("0"&month(riqi),2)&"-"&Right("0"&Day(riqi),2)MsgBox(riqi2) 60.请教在QTP中的截图函数如何使用?我想实现如下功能在测试中出错时能截图记录当时的情况,请高手指教QTP截图函数是那个呢?如何使用,最好给示例代码。object.CaptureBitmapFullFileName,[OverrideExisting] '捕获当前屏幕(截图)PublicFunctionQTP_Capture(pathway)DimdatestampDimfilenamedatestamp=Now()filename=Environment("TestName")&"_"&datestamp&".png"filename=Replace(filename,"/","")filename=Replace(filename,":","")filename=pathway+"\"+""&filenameDesktop.CaptureBitmapfilenameEndFunction 函数调用FilePath=Environment("TestDir")'设置环境变量,当前路径QTP_Capture(FilePath&"\Pictures") 由于一般web上面的编辑控件,QTP都识别成WebElement对象,所以在编辑框中输入的内容,QTP没有录制下来,以下代码实现了WebElement的赋值:DimMyWebElementSetMyWebElement=Browser("知识库管理系统").Page("知识库管理系统").Frame("Frame").WebElement("WebElement").ObjectMyWebElement.innerHTML="替换成要输入的内容即可" QTP提供全局错误处理模式,有Popupmessagebox,Processnextactioniteration,Stoprun,Processnextstep这四种。 QTP也提供OnErrorResumtNext/OnErrorgoto0的局部错误处理模式。可以在局部范围内实现Processnextstep的效果,忽略错误继续执行后续步骤。这个局部错误处理模式,象局部变量优先于全局变量并且只在本函数内有效一样,优先级高于全局错误处理模式,同时只在本函数局部范围(Action本身也可以看成是个函数)内生效。它不会影响外层函数的错误处理模式,但会改变局部范围内调用的子孙函数,将子孙函数的错误处理模式改为StopRun! 四种全局错误处理模式的区别在于: 经过上述分析,我们可以得到结果,我们的主控Test,全局错误处理模式使用Stoprun模式,同时在主控函数里使用OnErrorResumtNext/OnErrorgoto0的局部错误处理模式来调用Case函数。这样使得Case函数和其子函数里发生错误时,会停止执行,并层层返回到主控函数这里,并由主控函数来拦截错误,记录错误。然后主控函数就可以正常的继续执行下一个Case函数了,不用担心会导致整个Test停止执行。 主控函数调用Case函数的详细过程如下: 面试中,怎样巧妙回答你的缺点 面试中,有些求职者,尤其是女性,被别人提到自身的缺点或是不愿触及的问题时,常会不由自主地摆出防御姿态,甚至反击对方。这是不对的,别忘了,你只是一个候选人,自以为是振振有词地驳倒主考官,只会使你误入过分自信的陷阱,招致“狂妄自大”的评价。那如何化解面试中的“缺点”难题呢? 坦然承认博得认同 如果自己有缺点,最好的办法就是坦然地承认它。为自己的缺点找足理由也无济于事,重要的是如何使对方在感情上认同你对待自身缺点的态度。比如,主考官这样问:“你为什么曾留级1年?”你应该很诚实地承认自己的缺点,可以这样回答:“我也觉得留级很不应该,当时我担任社团的负责人,投入到社团活动上的精力太多,反而忽略了自己当学生的本分,等我察觉到这个错误时,我已经留级了。虽然我花在社团的心血,也带给我不少的收获,可是每想到自己因此而留级,就觉得很惭愧,我一直都为此事耿耿于怀,更不愿重蹈覆辙。”这种情况下,主考官通常会认为你是个知错就改的人,而且会认同你的处境,心存好感地继续听你说下去。 消除误会缩短距离 有的“缺点”并不是缺点,而是误会造成的,这时,你应及时澄清,消除对方的传统看法,缩短与对方的心理距离。一个毕业生到一个普通公司去求职面试,在介绍自己时说:“我的父亲是高干,但他对我的要求很严格,家中虽有保姆,但我自己的事都是亲自动手做,我的生活能力很强,也从不依赖父亲的职权,所以,到你们公司去,你们受的苦我都能吃……”这位求职者抓住自己的家庭出身容易引起别人产生不能吃苦的看法这个关键点,从自己的父亲对自己的严格要求入手,谈到自己对家庭出身的看法和对生活所采取的态度,以致让对方了解自己吃过苦、能吃苦的品质,和用人单位的观点相一致。这样一来,就缩短了与用人单位的距离,使他们觉得你在各方面都和自己一样。 明谈缺点实论优点 有的考官常常对那些表现令人满意的考生提出令人尴尬的问题:“从事某项工作你有什么主要缺点或不足?”有的考生连连摇头,回答说没有,甚至有人反问:“您说呢?您能给我指出来吗?”等等;有的考生不假思索,脱口说些类似于“我的缺点就是散漫,不愿受纪律的约束”等从事某项工作的致命缺点。遇到这种情况,应该既不掩饰回避,也不要太直截了当,可以联系大学生的共同弱点(比如缺乏实践经验、社会阅历较浅等),再结合本专业的发展趋势对自己知识结构、专业知识的挑战及个性中的缺憾(如过分追求完善,可能开拓精神不够;或过于追求工作效率,小心谨慎不足等等),讲讲自己正在克服和能够改正的一些弱点,谈谈理想与现实中的差距,讲那些表面是缺点但对某项工作有益的个性。相当于说:“我很丑可是我很温柔”、“我很笨,但是我很忠于职守”等等,既体现了谦逊好学的美德也正面回答了这一难题。 人无完人,孰能无过?一个人有缺点并不可怕,可怕的是不敢承认它、改正它,反而强词夺理。从辩证的角度看,缺点与优点是相互转化的,前提是正确地认识缺点,实实在在地改正缺点。 面试:你就是这样被“刷”掉的 要找到一份好的工作,必须天时、地利、人和。但在实际案例中,我们常常发现,一些条件很好的人,却始终无法顺利通过最后一道关卡。深究其原因,他们总是忽略了一些重要的细节,使得求职路一直走得不顺畅,一次次被主考官“枪毙”,一次次“死”在招聘会的面试场上。 “死”因一:不切实际 叙述人:夏磊,男,23岁 专业:工科 面试岗位:机械工程师 夏磊参加了很多的招聘会,大大小小加起来有十多场。在上海市举办的招聘会上,主考官对他非常满意,于是开始谈最后的薪资。夏磊觉得今年找工作的情况那么严峻,自己能找到一份就不错了,怎么还能讨价还价呢?于是他回答:“无所谓,都可以!”主考官马上阴沉着脸,请他回去等通知,就再也没有了消息。 点评:薪资是你对自己水平的一个衡量标准,也是对你工作满意程度的回报。一个连自己薪资都无所谓的人,还能期望他对以后的工作和公司有干劲吗? “死”因二:不自信 叙述人:王洁,女,24岁 专业:法律 面试岗位:招商顾问 在招聘会上,我看上了一个日商投资的外贸公司。我特意重新打扮了一番来给自己增加自信。一排看似威严的人士簇拥着老板模样的人坐在会场上方,原来是日本老板亲自面试。一看这架势,我的心跳不由自主地加速起来。突然想起学长以前的经验,心里开始暗自念着:要谦逊、谦逊…… 主考官的第一个问题就把我呛住了。“我们招的是专科学历,你是本科,怎么会来应聘这个岗位?”我支支吾吾地回答:“我觉得你们公司挺好的,也比较适合我的专业。”“我们公司好在哪里?这里工作压力很大,平时要经常加班,你可以适应吗?试用期只有基本工资800元,其他什么福利也没有,能接受吗?”在等待是否进入复试的空档,我长长地嘘了一口气。终于等到了“宣判”的时刻,主考官面带微笑地告诉我:“小姑娘,你的条件不错,不过以后再去面试要自信点……” 点评:缺乏自信的人会让人有学习能力差、推诿塞责的联想,肯定不受用人单位欢迎。 “死”因三:抢风头 叙述人:李魁,男,23岁 专业:国际贸易 应聘岗位:营销企划 参加学校里的招聘会时,我杀入了一家国内知名企业的面试现场,据说投简历的就有数百人,最后杀进面试的只有30多人。当时我们被分成三人一组回答面试官的问题,我觉得要脱颖而出必须表现得更积极。所以在回答问题的时候,我总是抢在别人前面,比别人多说两句。 面试官问:“如果你的同事中有不好沟通的人,你怎么办?”别人还没有说话,我就抢着回答:“最重要的是工作,每个人都有自己的个性,不需要去勉强。”整个面试下来,有2/3的问题都是我回答的,而且越说越顺根本忘了要收敛。一个星期后我收到通知,被客气地告知不需要参加复试了。因为公司觉得我不注重团体合作精神,太急于表现自己,不是他们需要的人才。 点评:自信和骄傲有时就在一线之间,骄傲的人令人生厌,没有团队合作的概念,不合群,用人单位绝不会喜欢一个单打独斗的独行侠。 “死”因四:选地区 叙述人:康林,男,22岁 专业:文科 面试岗位:经理 “我的首选是出国,其次是留京,再不行就去广州。”中国人民大学新闻学院的康林说。目前班里45名学生都还没人打算到基层,身边的同学动过“去西部”念头的也不多,大多数人还是瞄准了北京、上海等大城市。虽然国家鼓励下基层的政策已为数不少,然而调查发现,优惠政策仍难以解除学生的重重疑虑。“下基层?就算不担心收入少,也会被嘲笑‘没本事’。 尤其是对于一些来自农村的大学生,如果不能留在大城市就感到无颜面对家人。” 点评:这并不仅仅是“面子”问题,基层特别是西部地区发展相对落后,收入水平与发达地区相比差别较大,城乡转换成本过高,大学生担心“下去容易上来难”。这里面也有基层本身的观念问题,有对人才的排挤以及旧有体制问题。 “死”因五:学生气 叙述人:杜鹃,女,23岁 专业:会计学 面试岗位:外事 上周,我接到了自己心仪已久的那家知名高薪企业的面试通知时,心里既高兴又紧张,赶紧跟妈妈交换了一下意见:该公司开出的各方面条件都很不错。于是,我做了很多专业上的准备,然后去面试。 除了我,其他闯入面试的都是男生。考场是一个很小的会议室,中间是一张圆桌。 “根据你的性格特点,我们想把你安排在外事部门,不过户口方面可能还需要再争取。”我左思右想,轻轻咬着下唇说:“要不,我跟爸爸妈妈商量一下。” 主考官也突然愣了一下,“好吧。”他微笑着说:“不过要记得,以后你参加面试的时候,不要说‘和爸爸妈妈商量’,因为这样会显得你没有主见,明白吗?” 点评:凡事依靠父母的是学生,而非职场中人。 第一:微软公司软件测试简介 微软的软件测试人员分为两类:测试工具软件开发工程师和软件测试工程师。测试工具软件开发工程师主要负责编写测试工具代码,并利用测试工具对软件进行测试;或者开发测试工具为软件测试工程师服务。软件测试工程师主要负责理解产品的功能要求,然后对其进行测试,检查软件有没有错误,决定软件是否具有稳定性,并写出相应的测试规范和测试案例。 在微软内部,软件测试人员与软件开发人员的比率一般为1.5~2.5左右,微软软件开发的实践过程已经证明这种人员结构的合理性。 微软认为,测试人员的任务就是站在使用者的角度上,通过不断地使用和攻击刚开发出来的软件产品,尽量多地找出产品中存在的问题。微软在测试时主要考虑以下几个问题:(1)测试要考虑到所有的出错可能性。同时要做一些不是按常规做的、非常奇怪的事。(2)除了漏洞之外,测试还应考虑性能问题,保证软件运行良好,非常快,没有内存泄露,不会出现软件运行越来越慢的情形。(3)测试要考虑软件的兼容性。微软测试中使用的测试文档主要包括以下几种: 测试计划包括内容:1)概述2)测试目标和发布标准3)计划将测试的领域4)测试方法描述5)测试进度表6)测试资源7)配置范围和测试工具 (2)测试规范。测试规范是指微每一个在测试计划中确定的产品领域所写的文档,用来描述该领域的测试需求。编写测试规范,需要参照项目经理写的产品规范,开发人员写的开发计划。每个领域都应该有一份详细的测试规范,所以还需要参照测试计划。测试规范包括的内容:1)背景信息2)被测试的特性3)功能考虑4)测试考虑。5)测试想定 (3)测试案例。测试案例是指描述如何测试某一个领域的文档,这些文档符合测试规范中的需求说明。根据测试规范的测试想定(scenario)开发,根据测试反馈信息,对于没有考虑到的新问题,不断添加测试案例。测试案例没有固定格式,只要清楚表明了测试步骤和需要验证的事实,使得任何一位测试人员都可以根据测试案例的描述完成测试 (4)测试报告。测试管理人员以测试报告的形式向整个产品开发部门报告测试结果及发现的缺陷或错误。撰写测试报告的目的是为了让整个产品开发部门了解产品开发的进展情况,以使缺陷或错误能够迅速得到修复。测试报告的格式并无定式,要求能够完整、清楚地反映当前的测试进展情况,要易懂,不要使人迷惑或产生误解。 (5)缺陷或错误报告。测试人员以缺陷或错误报告的形式向开发人员报告所发现的缺陷或错误。撰写缺陷或错误报告的目的是为了使缺陷或错误能够得到修复,测试人员的缺陷或错误报告撰写的好坏会直接影响到开发人员对缺陷或错误的修复。一份缺陷或错误报告应该包括的几个要点:1)缺陷或错误名称2)被测试软件的版本3)优先度与严重性4)报告测试的步骤5)缺陷或错误造成的后果6)预计的操作结果7)其他信息 第二:面试试题分析 这个题目考察你的经验、想象力和思维的敏捷性。所以考官希望你源源不断地说出各种各样的测试用例,一直不停顿,直到他(她)满意为止。通常要十到十五分钟。选择简单物品其实增加了问题的难度。 一般有测试经验的应试者可以从“基本功能测试”、“可用性测试”、“安全测试”、“压力测试”、“性能测试”等等角度思考,想出足够的测试用例并不难。 还有人提出用户试用测试用例,比如由公司组织一个晚会,晚会上提供各种免费的饮料,让大家试用这种纸杯。测试人员在晚会中观察并向来宾收集意见。 这个问题显然没有标准答案。但要想用你的答案打动考官则需要一定的经验和素质。