Q121 :我想要测试 windows2003 上的 remote 应用,但是每次都得到如下的错误
我想要测试 windows2003 上的 remote 应用,但是每次都得到如下的错误:
"*** Error: Bad channel to agent call" .
我的host 和agent 机器都是windows2003. 我已经改变了网络选项,设置为tcp/ip 和端口2965. 而且我还改变了在runtime 选项中agent 名字,将其设置为ip 地址,network 设为tcp/ip. 而且,我还enable 了相关的extensions。谁能告诉我是否还遗漏了什么,或者我还需要做什么,或者有人遇到过同样的问题么?
答案:试着用remote recording 然后用SilkTest 提供的工具来回放,同样,agent 名和ip 地址需要被设置在host 机器的runtime 选项中。使用connect() 来连接target 机器。在连接之后,你不在需要host 安装的机器上的agent 了。所以,host 机器上agent 是否是local 已经无所谓了。如果你不使用connect(), 你需要在host 的runtime 选项中提到remote 机器名(我想是这样,但我没有试过)。。现在让我们再看remote 机器,即使我们没有安装host 在remote 机器上( 只安装了agent) ,你的脚本一样能跑。在remote 机器上的host 不会被用,所以remote 机器上的设置无所谓。只有remote agent 会被用到,remote agent 上的网络设置需要被enable 。
如果你在agent 选项中使用“localhost ”,记录和回放会被本地完成。例如:silk host 会用本地agent 来做这些事情。但是如果你使用"ipaddress:port" ,silk host 会用remote agent 来做这些事情。
下面是一个例子,它完成了在remote 机器192.168.240.102 上调用notepad ,然后关闭它。
[ ] const wMainWindow = Notepad
[ ]
[-] window MainWin Notepad
[ ] tag "*Notepad*"
[ ]
[ ] const sCmdLine = "C:/WINNT/system32/NOTEPAD.EXE"
[ ]
[-] main ()
[ ]
[ ] Connect ("192.168.240.102 ")
[ ]
[ ] Notepad.Invoke ()
[ ] Sleep (2)
[ ]
[-] if Notepad.Exists ()
[ ] Print ("Notepad invoked at remote")
[ ] Notepad.SetActive ()
[ ] Notepad.TypeKeys ("")
[ ] Sleep (2)
[-] else
[ ] LogError ("Notepad not invoked")
122.我在执行多个testcase。假如在第一个case中有一个函数返回string。如何将其返回值用在第二个case中?
答案1: 在testcase之前申明一些全局变量,例如gPersonReferenceNumber然后将其传进testcase里面。
void TestScriptSetup()
SetAppState ("YOURAPPSTATE")
gPersonReferenceNumber = CreateMinimalTestPerson()
testcase CallGlobalReference() appstate none
string sPersonString = gPersonReferenceNumber
TestScriptSetup()会在CallGlobalReference()之前执行,如果有必要你也可以将其包含进你的复原系统中。
CreateMinimalTestPerson()会返回一个和PersonID相关的string。
答案2:
1. 使用全局变量存储你的值。
2. 让testcase返回值,然后在其后的testcase中使用。
答案3:
把该值放入ini文件或者注册表中
答案4:
通过Sys_SetEnv()设置环境变量,然后用sys_GetEnv()读取出来使用。全局变量也可以,但是当你从testplan里面调用testcase,全局变量会被重置。另外一个可选择的办法是把他们存入文件,然后使用。
124.如何同时通过silktest启动两个web应用?
我正在测试一个web应用的登录功能,在第一个窗口中登录成功,第二窗口应该显示用户已经登录的错误信息。
但是由于silktest中recovery system的限制,我只能启动一个应用窗口。如何能同时启动两个呢?
答案:
Browser.Invoke ()
Browser.LoadPage ("URL for login screen")
Browser.WaitForReday ()
// Do login
Browser.Invoke ()
Agent.SetOption (OPT_VERIFY_UNIQUE, FALSE)
Browser.LoadPage ("URL for login screen")
Browser.WaitForReday ()
// Attempt to login and verify the message
Agent.SetOption (OPT_VERIFY_UNIQUE, TRUE)
Browser.TypeKeys ("")
125.如何将绝对路径转换成为相对路径?
我需要在silktest project中使用相对路径。如何把绝对路径转换成为相对路径呢?(我的目的是,当将project打包的时候,该包可以被用在其他的机器上,而不考虑被放到什么路径下)
答案:
Silktest project提供了解决该问题开箱即用的特性。如果你的测试集是用project组织的,最好的选择就是在runtime选项中使用相对路径,让测试的集的root目录hardcode。
例如:使用Path=S:/Suite, 其中S是自动测试集的root目录
然后使用其他文件的时候就可以用相对路径,例如:frame.inc, ../config/config.inc等等。
126.如何搜索html link?
我又一个case需要创建location,silktest从html link中读取该location。该location是按字母顺序存储的。但是没有特定的tag与其相联系,如何搜索该html link呢?
答案:
下面是一个html table的函数,该函数检查传入的link名是不是一个html link.其中的this参数指代的是该html table
[+] BOOLEAN IsHtmlLink(STRING sLinkName)
[+] do
[ ] INTEGER iColCnt=0,iRowCnt=0,iNextCCnt,iNextRCnt
[ ] BOOLEAN bflag=FALSE
[ ] iColCnt=this.GetColumnCount()
[ ] iRowCnt=this.GetRowCount()
[ ]
[-] for (iNextRCnt=1;iNextRCnt<=iRowCnt;iNextRCnt++)
[-] if !bflag
[-] for (iNextCCnt=1;iNextCCnt<=iColCnt;iNextCCnt++)
[-] if (this.HtmlColumn("#{iNextCCnt}").GetRowText(iNextRCnt) == sLinkName
)
[-] if (Trim(this.HtmlColumn("#{iNextCCnt}").HtmlLink("#{iNextRCnt}").GetLocation()) !="")
[ ] bflag=TRUE
[ ] break
[ ]
[-] else
[ ] break
[ ]
[ ] return (bflag)
[-] except
[ ] return (FALSE)