Q21:如何修复位图无法稳定的错误?
软件QA经理突然要求我建立一个验证位图的testcase。在testcase记录时,我选择了验证整个窗口,在testcase运行时出现了一个可怕的错误:”*** Error: Bitmap failed to stabilize”。整个QA team都无法在SilkTest的文档里面找到这个问题的解决办法,其中的一个同事还在QA经理办公室里面看到了解雇整个QA的通知书。
描述的这个位图错误发生在被验证的窗口不稳定的情况下:例如,某些东西在屏幕上频繁地变化。自动测试工具在指定的时刻无法得到被测窗口将无法捕捉到稳定的位图副本并且产生一个E_BITMAP_NOT_STABLE异常。
你们的QA工程是可以采用不同的方法捕捉到稳定的位图。
用下面的代码将各选项设置为0
Agent.SetOption (OPT_BITMAP_MATCH_COUNT, 0)
Agent.SetOption (OPT_BITMAP_MATCH_TIMEOUT, 0)
Agent.SetOption (OPT_BITMAP_MATCH_INTERVAL, 0)
Q22:解释一下DOM扩展相对于VO扩展的优点
在silktest中文档对象模型Document Object Model (DOM)浏览器扩展比可视对象Virtual Object (VO)浏览器扩展有以下一些优点:
l记录器可以像QA工程录制时那样显示一个矩形来高亮控件。
lDOM扩展能够识别文字的大小和对象实际的名字。
l对于浏览器的大小和文字大小的设置没有依赖。
l对没有边框的表格支持得比较好
lDOM扩展相对于VO扩展能够提供更多的类和属性。
Q23:如何用4Test代码设置代理服务器?
在准备QA面试前我准备写一段代码来为IE6设置代理服务器,迄今为止我找到了两个windows注册表键用来为我的windows xp机器设定代理服务器。
可以将下面的键值设置成1或者0从而启用或者取消代理服务器。
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ProxyEnable
可以用下面的键值来设置代理服务器的ip地址和端口号。
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ProxyServer
那么我接下来该怎么做呢?
下面的代码可以满足你的需要。顺便说一下,在你修改注册表示后,确定你已经将其备份了并且确定你们公司有人知道如何在出现问题后恢复注册表,或者只在测试的环境下使用该代码。
[ ] // Turns on specified proxy
[ ] // sProxyName -> ip:port
[+] configureProxyServer(STRING sProxyName)
[ ]
[ ] integer iKey = HKEY_CURRENT_USER
[ ] string sPath = “Software/Microsoft/Windows/CurrentVersion/Internet Settings/”
[ ] string sProxyServer = “ProxyServer”
[ ] string sProxyEnable = “ProxyEnable”
[ ] string sProxyOn = “REG_DWORD: 0x00000001”
[-] do
[ ] SYS_GetRegistryValue(iKey, sPath, sProxyServer, TRUE)
[ ] SYS_SetRegistryValue(iKey, sPath, sProxyServer, sProxyName)
[-] except
[ ] Reg_CreateValue(iKey, sPath, sProxyServer, serverName)
[ ]
[-] do
[ ] SYS_GetRegistryValue(iKey, sPath, sProxyServer, TRUE)
[ ] SYS_SetRegistryValue(iKey, sPath, sProxyEnable, sProxyOn)
[-] except
[ ] Reg_CreateValue(iKey, sPath, sProxyEnable, sProxyOn)
[ ]
[ ]
Q24:silktest自动测试工具的局限是什么?
Silktest自动测试有如下的局限:
Silktest可能无法识别某些window frames
偶尔会很难激活应用的窗口。
如果将测试系统迁移到其他浏览器或者操作系统上,可能会需要进行一些修改。
Silktest有时可能会因为不同实现技术的原因无法识别一个窗口或者是页面。
Tag的值可能重复地改变。
在对一些基于web的应用进行功能测试时,silktest经常将链接识别成简单的文本。
Q25:如何修复explorer6_Dom[1]错误?
我们有一部分其他QA team用4Test写的回归测试脚本,用来测试我们的web应用。在测试脚本执行的时候错误:***Error: Window ‘[MainWin]$explorer6_Dom[1]并非每次都出现,最让人头疼的就是该错误时隐时现。我们QA team没有人能够从文档上找到答案。我们曾经尝试从写脚本的team寻求帮助,但是他们也没有任何线索。
一个解决Error: Window ‘[MainWin]$explorer6_DOM[1]的方法是,确认IE的Enable Third Party Browser Extensions选项是被选中的。你可以在 Tools/Internet Options/Advanced选项找到它,不要忘了重起机器哦。
Q26:如何解决*** Error: Application not ready的错误?
在对web应用进行自动化回归测试期间,QA工程按下一个浏览器控件时,出现下面的错误:*** Error: Application is not ready Occured in WaitForReady
QA工程师只能咕哝着上面的错误信息,因为该错误在QA lab里面的一台计算机上时隐时现。而上个月同样的4Test脚本在测试前一版本该应用时却能在所有的计算机上正常运行。
看来你的web应用花了太长时间进行响应,所以silktest超时了。这种情况下的常用解决办法是增加超时的值。测试开发人员可以设置单个脚本的超时值或者进行全局的设置。
第一个需要检查的值是4Test agent的OPT_APPREADY_TIMEOUT选项,该值表示agent等待应用程序就绪的秒数。
第二个需要检查nInvoke Timeout,它是silktest等待主窗口出现的秒数。
Q27:如何为web应用设置正确的浏览器扩展?
下面的步骤描述了如何设置web应用的浏览器扩展?
· 运行silktest程序
· 运行Internet Explorer.
· 在IE地址栏输入web个的URL,并且保持该web应用页面不被最小化。
· 切换至silktest窗口。
· 在silktest菜单里面选择Workflow->Basic。
· 在workflow栏按下enable Extensions选项。
· Enable Extensions对话框将出现,在大多数情况下,正在运行的web应用都将在对话框中被列出。
· 选择你要测试的那个web应用,点击select.
· 按照要求的那样重启你的web应用,然后在test extension setting窗口中点击test按钮。
· silktest窗口将出现一个内容为”Configuration of your Internet Explorer 6 application is complete”的对话框,这样你就成功地完成了设置。
Q28: 如何进行安装测试?
QA部门被分配了我们产品的安装测试任务。我作为一个测试工程师准备开发4Test脚本用来识别安装光盘的正确路径并且加载安装程序。你能给我一些如何 做这类测试的建议么?
识别光盘驱动器区符需要用到API函数GetDriveType(),请看下面的代码:
[-] dll “kernel32.dll”
[ ] long GetDriveTypeA(inout String strDrive)
[ ]
[-] testcase GetDriveName() appstate none
[ ] GetCDDriveLetter()[ ]
[ ]
[-] String GetCDDriveLetter()
[ ] integer i
[ ]
[-] for i=67 to 90
[ ] String strDrive=chr(i)+”:/”
[-] if GetDriveTypeA(strDrive)==5
[ ] print(strDrive)
[ ] return(chr(i))
[ ] return ” “
从安装光盘加载程序可以使用下面的4Test脚本
use “bwcompat.inc”
[-] testcase LaunchFromCD () appstate none
[ ] STRING sStart = “{GetCDDriveLetter ()}:/{strPathToSetupFile.Exe}”
[ ] App_Start (sStart)
App_Start在随silktest交付的bwcompat.inc里面有描述。
Q29:如何在4Test脚本文件里面隐藏密码?
我们的QA team正在做从Winrunner到silktest的移植,不过在记录Web应用的用户名和密码的过程中遇到了一个问题。Winrunner记录密码时采用加密的格式,但是silktest以平常的文本格式记录。有什么办法可以隐藏密码么?
无法使用4Test脚本隐藏密胺。不过QA工程师可以采用其他语言,例如Perl或者是Python来绕过这个问题。更进一步的解决方法是永远不要用你自己的帐户来进行测试,你可以创建一个有权访问应用的帐号来进行测试。
更新:silktest2006R2现在支持密码的加解密了。密码可以进行加密,所以它们不会显示在记录测试的脚本中。函数Decrypt()和Encrypt()已经被加入4Test语言用来支持密码的加密。
Q30:一个testcase有哪些重要的方面?
下面是一些testcase重要的方面,它们不仅适用于silktest8.0,还适用于其他的自动测试工具,例如Mercury的winrunner8.2和quick test pro9.0。手动测试可能需要一点不同的方法,不过下面的定义仍然适用于B/S或者C/S结构的应用。
为了使测试用例能够正确的工作,待测软件在QA工程师开始执行测试前必须是处于稳定状态的。这个稳定状态叫做基本状态。恢复系统的任务就是在待测应用失效或者是崩溃后能够维护应用的基本状态。
每个自动测试用例是独立的,它将要执行自己的启动过程,驱动应用进入QA工程需要的待测状态,然后执行测试用例,然后再返回应用的基本状态。QA team和测试用例不应该依赖于其他测试用例是否成功完成。而且测试用例的执行结果也不应该依赖于其执行顺序。如果一个测试用例依赖与前一个测试用执行某些启动动作,那么如果在启动过程中出现了错误导致失败或者更糟糕的情况下,应用程序崩溃了,那么一系列的测试用例将会失败,因为它们无法获得开始执行所需要的状态。
一个测试用例要有一个单独的目标,一个单独的测试测试用例需要验证待测系统的某个特定的方面。当QA团队在这种方式下设计一个自动测试用例成功或者失败了,都可以轻松的确定任何一个团队成员测试的目标应用的某一个方面成功还是失败了。如果一个测试用例包含了不止一个目标,那么可能会产生很多的的结果。
简而言之,自动测试用例的重点在于:
测试用例一般总是从基本状态开始,然后返回基本状态。
测试用例必须是独立于其他测试用例的。
测试用例应该只包含一个测试目标。