发布新日志

  • 浅谈英语学习方法

    2007-09-06 16:32:06

    学习了N多年英语,接触的一些学习方法并且自己也总结了一些。先说说我接触过的学习方法,各种方法都有它的特点。
    [逆向英语-钟道隆]
    这个方法用来提高听力、词汇和阅读能力是大有好处的,特别是提高和强化听力方面效果比较好。它的缺点对口语的帮助不大,听听钟先生的讲座就知道了。
    [疯狂英语-李阳]
    最近才发现,李阳疯狂英语里面总结了很多发音技巧和口语习惯的东西。强化口语很好,不过别指望它能帮你提高词汇和语法。
    [你还在Study英语吗-郑赞荣]
    韩国人的方法就是告诉大家如何去培养英语的语感,而不是死搬教条的看英语课本。其中有些做法比较极端,不过比较符合韩国人的掘劲儿。

    上面提到的各种方法我都尝试过一段时间,不过没有仅仅停留在任何一种。因为每个人学习的起点和实际需要都不一样,对作者适用的方法不见得对别人也适用。下面再说个人的体会:
    [词汇和语法] 不管用什么方法学习,这都是很基础的。如果中学或者大学时代没有打好这方面的基础,还是有必要系统的补习一下的。
    [听力、阅读和语感] 有了基础以后,长期坚持联系听力、阅读可以大大增加英语的语感。学习的材料也不要局限于OVA、BBC等广播或者技术资料等方面,影视剧、音乐等等都可以作为学习材料。
    [口语] 练习口语的最佳途径就是直接投身到英语环境当中,如果能够被派到国外工作学习一段时间当然是最好的了。如果没有这样的条件,也应该努力创造机会和英语母语人士交流。只有这样,你才能够锻炼出最地道的英语口语来。
  • 如此翻译-2

    2007-09-06 15:58:45

    为了应付技术面试,这些日子正在恶补TestDirector/QualityCenter的知识。除了查看TD/QC自带的资料以外,也浏览了网站和论坛上面的一些文章。前两天看到了一篇帖子,标题很吸引人“TD中Case的复用”。细细读来,发现文中的不少句子都很别扭。看到的是通篇中国字,连接起来却不像通顺的中国话!遇到这种情况,我会很自然的联想到文章可能译自外文资料。按照文中的关键字上网搜索一下,果然这篇文章是译自TD用户手册的一个章节。简单的一段文字,翻译成这个样子。把译文和原文都贴出来,对比一下看看多少错误。

    [译文] TD中Case的复用

    在你设计的测试步骤里,可以调用其他手工测试。当你运行测试时,测试步骤中调用的测试作为这个测试的一部分。这种方法很有用,例如,如果你使用了测试模板,你就可以在不同的测试中重复使用。
    为了增加一个测试的适应性,你可以在测试中添加参数,然后在测试中调用它。参数是一个变量,它可以替换特定的测试中分配给它的一个定值。你可以根据调用它的测试或一个测试集在不同的场所下来改变参数的值。
    例如,你可以创建一个“Login_Template”,它记录了当启动应用程序时登录的用户名及密码信息。你需要在多个测试的开始调用这个“Login_Template”。但在一些案例中,你需要用不同的用户比如administrator 登录。因此你要创建两个参数<<user name>>和<<password>>,根据不同的调用“Login_Template”的测试来改变这些参数的值。如果所有的调用都是使用一个用户登录,你可以为这个参数的用户及密码设置一个默认值。
    [注:这段话翻译的最离谱,乱七八糟的内容已经丝毫看不到原文的思路了。]

    这个部分包括了下面几个方面:
    一、创建测试模板
    在test plan tree中你可以定义一个手工测试为测试模板。一个测试模板通常包含了参数,它可以被不同的测试调用。
    注意:把一个测试设成一个测试模板来使用只是一个过滤的目的。你不需要设置一个测试为测试模板仅仅为了能被调用或添加参数。
    To create a template test:
    在test plan tree中右击一个测试, 选择Template Test. 一个方框会加到手工测试图标的上,这就表明现在它是一个测试模板。
    二、添加参数
    你可以在一个手工测试的步骤的descrīption 或expected results中添加一个参数。
    To add a parameter:
    1. 在Design Steps标签中, 把焦点放在一个步骤的Descrīption 或Expected Results 中,就可以添加参数了。
    2. 点击Insert Parameter 按钮。打开参数属性对话框。
    3. 输入一个Parameter Name,点击OK。一个新添加的参数的语法是<<parameter name>>。
    三、调用含参数的测试
    当你在design steps中调用一个包含参数的手工测试时,你可以为这个参数赋值。
    To call a test with parameters:
    1. 在Design Steps标签中, 点击New Call to Test 按钮。打开Select a Test 对话框。
    2. 默认只会显示template tests。如果你要选择的测试不是测试模板,清除Show only Template Tests。
    3. 选择你要调用的带参数的手工测试。打开一个显示被调用的测试中包含的参数的对话框。
    4. 在Value 列,输入每个参数的值,点击OK。
    5. 在Select a Test 对话框上点击OK。这个调用作为一个链接插在design steps中,在调用的测试里会显示出这个参数所赋的值。
    注意: 如果你在调用测试的时候不为参数赋值,当你把测试加入测试集或运行测试时会提示你要给参数赋值。
    6. 在调用的测试中编辑参数的值,右击调用的测试选择Called test parameters。在Called Test Parameters 对话框中为参数重新赋值,点击OK。
     
    [原文] <TestDirector User's Guide Version 7.6>, Page 132
    Calling a Manual Test with Parameters
    In your test design steps, you can include a call to a manual test. When you run the test, the test steps include the steps from the called test as part of the test. This is useful, for example, if you have template tests that you want to reuse in different tests.

    In order to increase the flexibility and power of a test, you can add parameters to the test and to the tests that call it. A parameter is a variable that replaces a fixed value and can be assigned a value from outside the test in which it is defined. You can change the value of a parameter in a test according to the test that is calling it, or for different instances of a test in a test set.
     
    For example, you can create a template test “Login_Template” which logs in a user with a specific password when you start your application. You need to call this test at the beginning of each test. In some cases, you will want to log in as a regular user while in others, you will need to log in as the administrator. You can therefore create two parameters, <<user name>> and <<password>>, and change the value according to the type of test that is calling “Login_Template”. If the most common login is a regular user, you can set the default values for the parameters to a regular user name and password.
    This section includes the following parts:
    • Creating a Template Test
    • Adding a Parameter
    • Calling a Test with Parameters
    Creating a Template Test
    You can define any manual test in the test plan tree as a template test. A template test generally includes parameters and is called by different tests.

    Note: Setting a test as a template test is used for filtering purposes only. You do not need to set a test as a template test in order to be able to call it or add parameters.

    To create a template test:
    Right-click a test in the test plan tree, and choose Template Test. A box is added around the manual test icon to indicate that it is now a template test.
     
    Adding a Parameter
    You can add a parameter to the descrīption or expected results of a manual test step.
    To add a parameter:
    1 In the Design Steps tab, place the cursor in the Descrīption box or Expected Results box of the step to which you want to add the parameter.
    2 Click the Insert Parameter button. The Parameter Properties dialog box opens.
    3 Type a Parameter Name, and click OK. The new parameter is added to the step using the syntax <<parameter name>>.
     
    Calling a Test with Parameters
    You can assign a value to a parameter when you add a call to the manual test containing the parameter in your design steps.
    To call a test with parameters:
    1 In the Design Steps tab, click the New Call to Test button. The Select a Test dialog box opens.
    2 By default, only template tests are displayed. If you want to choose a test that is not a template test, clear Show only Template Tests.
    3 To search for a specific test in the tree, type the name (or part of the name) of the test in the Find box and click the Find button. If the search is successful, TestDirector highlights the test in the tree.
    4 To refresh a test in the tree, select the test and click the Refresh Selected button.
    5 Select the manual test with parameters that you want to call. A dialog box opens, displaying the parameters contained in the test you are calling.
    6 In the Value column, type or change the value for each parameter, and click OK.
    7 Click OK in the Select a Test dialog box. The call is inserted as a link in your design steps, and the values assigned to the parameters in the called test are displayed.

    Note: If you do not assign values to parameters when creating a test call, you will be prompted to do so when you create a test to call your test call, when you add your test to a test set, or when you run your test.

    8 To edit the values you assigned to the parameters in the called test, right-click the test call and select Called test parameters. Type the new values you want to assign to the test parameters in the Called Test Parameters dialog box, and click OK.
    9 To use two different parameter values for the same test, create two separate test calls, assigning two different values to the parameter in the called test.

    [感想]
    没有人想当卫道士。真的希望把原文翻译成这样的人和转贴这样文章的人多读读译文,避免误导了文章的读者。也希望聪明的读者能够利用网络搜索的便利条件多阅读原文,避免浪费时间。
  • [总结] WinXP Pro下安装QualityCenter

    2007-09-05 11:44:52

    出于学习目的,打算在自己的电脑上安装Mercury QualityCenter 9.0的试用版。QC9.0试用版除了30天使用限制外没有太多功能限制,在原有的TD使用经验基础上了解这个新版本应该够了。本以为安装过程比较容易,没想到在WinXP Pro下面安装QC 9.0如此困难。经过3天的反复试验终于安装成功了,尽管过程和最终的解决办法都不算Perfect,但是好歹能用了。haha

    [安装步骤] 实际的安装步骤和QC 9.0 Installation Guide描述的一样,只要按照安装向导依次往下走就可以了。

    [问题1] 安装过程中遇到的第1个问题是数据库连接错误。选择数据库类型为SQL Server并将数据库地址指向本机后,接下来被提示数据库链接失败。简单分析之后发现,安装在本机的SQL Server2000数据库没有安装SP4。补充安装了SP4之后,安装过程就可以继续下去了。

    后面的步骤也没有遇到太多麻烦,直至安装完全结束。桌面上被安装了两个图标Mercury Quality Center和Site Administration,分别用于进入普通用户页面和管理员页面。桌面右下角的系统托盘中还被安装了一个图标Quality Center,用于显示QC服务器的运行状态并启动和停止服务器。

    [问题2] 安装过程中遇到的第2个问题,也是最头痛的问题,是安装完成后位于屏幕右下角的系统托盘中的Quality Center图标显示为禁用状态。右键单击该图标,弹出的菜单项(Start Quality Center, Stop Quality Center)也是灰色不可选状态的。这个时候双击桌面上的图标,打开的浏览器窗口都提示网页不可访问。进一步用QC工具Quality Center Checker检查发现,QC服务器依赖的应用服务器JBoss没有正常启动。

    QC不能正常运行的原因找到了,可是解决办法却并不好找。从QC的安装目录下面可以看到java和JBoss两个文件夹,说明QC服务器在启动的时候完全依靠自带的JBoss作为应用服务器。可是根本找不到QC是如何把java和JBoss启动起来的。

    解决办法从最初在安装过程中选择不同的JBoss启动方式(IIS+JBoss和JBoss内部服务),直到最后手工安装java和JBoss。不知不觉3天过去了,就在这些尝试一一失败打算放弃的时候,再次想起了QC安装目录下面的java和JBoss文件夹。QC服务器的启动信息和Web Application很可能保存在那个JBoss文件夹里面,为什么不试一下直接手工配置和启动它呢?

    利用刚刚学到的在Windows下配置启动JBoss的经验,很快配置好了JBoss并让它成为Windows的服务。重新启动了机器以后,终于大功告成了!

    [备注] 在WinXP Pro上面安装QC实在不是很好的选择,出现上面的安装问题可能只有个人学习的时候才会碰到。

  • 在QTP里面用CDONTS组件发送邮件

    2007-08-03 12:24:49

    今天查了一下QTP Code Samples里面用Outlook发送邮件的代码,发现在帮助文档里面提供了两段代码例子。很显然第一段代码是在QTP中用Outlook发送邮件,那第二段代码是什么呢?

    ' Example 2
    Function SendMail(SendFrom, SendTo, Subject, Body)
        Set ōbjMail=CreateObject("CDONTS.Newmail")
        ObjMail.From = SendFrom
        ObjMail.To = SendTo
        ObjMail.Subject = Subject
        ObjMail.Body = Body
        ObjMail.Send
        Set ōbjMail = Nothing
    End Function

    第3行语句中的CDONTS.Newmail比较可疑,好像不属于Outlook组件。会不会是系统内的其他可以发送邮件的组件呢?在QTP中运行这段代码,CreateObject方法报告创建CDONTS.Newmail对象失败。看来CDONTS这不是系统中现成的组件。

    用Google查了一下才明白,原来CDONTS EMail是IIS提供的组件。使用这个组件有两个前提:

    • 系统安装并启动了SMTP服务
    • CDONTS.dll被注册到系统中(系统默认没有注册这个组件,从网上下载该组件并RegSvr32命令注册即可)

    重新检查并保证系统符合上面两个条件,再次在QTP中运行这段代码。这次顺利通过了,邮件被成功的发送到了制定邮箱。

    回想一下刚才的操作以及查阅资料中的解释,其实通过CDONTS组件发送邮件的基本步骤就是:

    • 创建CDONTS.Newmail对象
    • 给Newmial对象的各个属性赋值用于创建一个邮件
    • 用Newmail.Send方法向本地SMTP服务器发送了邮件

    用这种方式发送邮件的好处是可以直接发送邮件,不需要配置发送邮箱。当运行QTP脚本的测试机器为公用的时候可以考虑。而它的缺点是必须在本地机器上安装并运行SMTP服务。

  • [感受]测试自动化的争论

    2007-08-02 11:09:43

    简单看了看对测试自动化的看法-来自微软讨论组的争论,争论好像还在继续。感觉辩论双方的出发点不同,把观点建立在不同的地方有什么好辩论的?

    作者对测试自动化持否定态度,至少给我感觉是这样。上来就发表了一通观点,但是具体说明的时候却没有明确的针对性,到底是否定单元测试、系统(回归)测试、功能(性能)测试,还是否定测试项目采用过分复杂的自动化测试框架?以至于后面的结论有点儿自相矛盾了,不要搞测试自动化但是鼓励开发小的灵活的测试工具。看来作者还需要把测试自动化的概念理顺,看看自己到底想反驳什么。

    反对作者观点的人则抓住了作者对测试自动化的理解不放,说白了争论的还是概念问题。

    存在的东西就有它的合理性,各种测试自动化工具和技术都是在测试工作中为了解决实际问题而产生的。功能测试自动化是为了避免回归测试的重复劳动,性能测试自动化是为了解决测试资源问题,单元测试则是为了提高软件开发过程中的代码质量。

    我觉得没有太多好争论的,抛开工作动机(每个人都应该表现自己,没有什么不好。前提是效率不要太低,不要太浪费组织的资源)不说,自动化测试可以是也只能是作为测试工作的一部分。测试自动化工具和技术总有长处和短处,测试经理或者测试主管可以根据每个项目的需求实现适合本项目的测试自动化。工具或者技术本身没有对错,看你怎么让它为你服务了。

  • 测试计划和测试方案的区别

    2007-06-30 16:06:33

    因为测试项目规模和范围的原因,我们的测试项目常常都是制定测试计划以后直接开始测试设计。最近在资料和网文中看到测试方案的字样,心想应该是和测试计划不同的东西。于是上网查了一下,找到了比较两者不同的内容并且整理了一下。

    其实我们的测试计划中已经包含了测试方案的内容,即测试环境规划、测试工具选择以及测试用例设计方法等。只不过因为测试项目规模较小,我们把测试计划和测试方案放到了一起。
    概念总归是概念,不必拘泥于此。如果测试项目规模较大的时候,把测试计划和测试方案适当分开,应该有利于整个测试项目运作和项目组间交流。
  • 描述编程中的Description对象

    2007-06-29 14:02:18

    在QTP Professional帮助文件中的Index页输入关键字"descrīptive programming",就可以找到主题为"Using Programmatic Descrīptions"的文章。这篇文章介绍了描述编程,并且提及描述编程的两种表现形式。
    There are two types of programmatic descrīptions. You can either list the set of properties and values that describe the object directly in a test statement, or you can add a collection of properties and values to a Descrīption object, and then enter the Descrīption object name in the statement.

    其中的第一种形式是在测试语句中直接列出描述对象的属性和属性值的集合,易于理解和使用。例如,描述某个页面上的CheckBox可以写成如下形式,其中Prop和Value集合是识别该对象的属性和值集合:
    Browser(**).Page(**).WebCheckBox("Prop01:=Value01","Prop02:=Value02",...).Set "ON"

    第二种形式则是把描述对象的属性和属性值的集合加入到Descrīption对象中,然后在测试语句中使用这个Descrīption对象。还是上面的例子,使用了Descrīption对象后语句变成了:
    Dim objDesc
    Set ōbjDesc = Descrīption.Create()
    objDesc("Prop01").Value = "Value01"
    objDesc("Prop02").Value = "Value02"
    ...
    Browser(**).Page(**).WebCheckBox(objDesc).Set "ON"

    其实这两种形式没有什么区别,但是各有特点。前者形式简洁但是可读性差些,后者形式复杂但是可读性好些。当识别对象的属性和值集合内容不多的时候,还是用前者比较方便。

    那什么时候用Descrīption对象比较好呢,就像某个帖子讨论过的,Descrīption对象和ChildObjects方法结合使用比较体现优点。下面的例子取自我们在项目中开发的测试脚本,目的是在一个Table中遍历样式为"actions.gif"且类型为"Image"的所有对象。
    Dim objDesc, objImgs
    Set ōbjDesc = Descrīption.Create()
    objDesc("micclass").Value = "Image"
    objDesc("file name").Value = "actions.gif"
    Set ōbjImgs = Browser("Browser").Page("Enterprise").WebTable("Detail View").ChildObjects(objDesc)
    Dim intCount, i, strHref, strHref
    intCount = objImgs.Count - 1
    For i = 0 To intCount
        strHref = objImgs(i).GetROProperty("href")
    Next

    其中的关键是Descrīption对象的创建
    Set ōbjDesc = Descrīption.Create()

    对象的属性-值集合,其实就是人为设定的QTP用来识别某类对象的属性和值特征。这个例子里面就是
    objDesc("micclass").Value = "Image" '对象类型为Image
    objDesc("file name").Value = "actions.gif" '对象使用的文件名为actions.gif
    这些属性-值都可以用SPY工具得到

    最后加上ChildObjects方法
    Set ōbjImgs = Browser("Browser").Page("Enterprise").WebTable("Detail View").ChildObjects(objDesc)
    将所有符合Descrīption对象描述的特征的那些对象从WebTable("Detail View")里面取出来。objImgs即包含在WebTable中的所有符合Descrīption描述的所有对象集合。
  • 如此翻译

    2007-06-17 12:36:38

    早上浏览51testing论坛的时候,看到了CSQA的共享资料。一个在美国工作的同学曾经告诉我,美国软件企业招聘质量保证和测试人员时承认CSQA和CSTE证书。不知道这些证书到底有多少分量,先了解一下再说。

    CSQA和CSTE是QAI公司对质量保证和测试的认证。QAI总部位于美国并且在世界各地设立了多个分支机构,N年以前我参加CMM培训的时候,培训课程就是由QAI India在上海的分支机构提供的。先浏览一下QAI美国,从QAI的公司新闻上看到QAI中国已经成立了。还是看中文省事儿,于是又连接了QAI中国

    浏览到QAI书店(http://www.qaichina.org/bookkstore/index.html)的时候,页面中间的一段话弄了我一头雾。原文如下:
    [注释: CSQA 和 CSTE 的书籍是 $3500元港币,书中已经包括2006年知识共同体(CBOK)的光碟。 获得更多详细资料请浏览Software Certifications, 并且点击"What's New?"
    知识共同体(CBOK)的光碟或者参考书,可以通过QAI总部分开购买,增加额外光碟需要$600元港币,增加额外参考书需要$1000元港币。即使你购 买了参考书和申请了CSQA或者CSTE的认证,你同样会得到2006年知识共同体(CBOK)的光碟。]
    看了半天也没有明白到底申请认证的费用是多少,购买书籍的费用是多少。想到这类网站的中文页面往往是从英文页面翻译过来的,那就参考一下QAI美国的对应页面吧(http://www.qaiworldwide.org/bookstore/index.html)。对应部分原文是:
    [NOTE: As of December 1, 2005, the initial application fee for the CSQA & CSTE Certification has increased to $350 US. The new fee will INCLUDE a CD of the Guide to the Common Body of Knowledge (CBOK). For more details visit Software Certifications, and click on "What's New?".
    A CD or Hard Copy version of the Guide to the Common Body of Knowledge (CBOK) will still be available for purchase separately through QAI Worldwide for an additional $60 (CD) to $100 (Hard Copy) US. Please be aware that even if you purchase a Guide and then apply for either the CSQA or CSTE certification, you will still receive the CD version of the Guide to the Common Body of Knowledge (CBOK).]
    真是晕啊!原文第一句里面的CSQA以及CSTE认证的初次申请费用到了中文站点竟然变成了书籍费用。而最后一句是即使单独购买了参考书,之后再申请认证仍将收到CBOK的CD版本,到了中文站点已经不知所云了。

    网站好歹也关系到公司或者品牌形象,这种不伦不类的翻译不是砸自己的牌子吗?

  • Tricky sentence

    2007-06-15 15:03:20

    已经到了测试脚本开发的收尾阶段,为了保证测试脚本没有bug,整整一天都要用来运行QTP脚本。QTP运行的时候不能随便打搅,只好看书了。Sigh,谁让我只有可怜的一台机器呢。
    最近正在复习有效软件测试<Effective.Software.Testing.50.Specific.Ways.to.Improve.Your.Testing>,打算再好好看一遍。经典就是经典,每次看都有新的体会。

    刚刚看到前言第二段就看到一个比较Tricky的句子:
    Knowledge of what constitutes a successful end-to-end testing effort is typically
    gained through experience. The realization that a testing program could have been
    much more effective had certain tasks been performed earlier in the project life
    cycle is a valuable lesson. Of course, at that point, it's usually too late for the
    current project to benefit from the experience.
    细看之下才明白,原来说的是:
    The realization ... is valuable lesson - 认识到...是有价值的教训;
    A testing program could have been much more effective had certain tasks been performed earlier in the project life cycle - 如果在项目生命周期中某些任务越早完成,测试工作可能就会更加有效。还是虚拟语气的;
    即有从句又有虚拟语气,看来作者不仅技术功力深厚,语言表达能力也很强啊。

  • 编码规范和Action模版

    2007-06-15 13:19:07

    自动化测试项目的开发过程和普通的项目开发过程没有太大区别。抛开开发过程中产生的以及最终交付的制品,自动化测试项目的开发过程其实也经历了分析、设计、编码调试以及测试等几个阶段。因此在自动化测试项目(特别是多人参与的项目)中,也应该保证开发过程规范。
    编码规范是开发过程规范的重要保证,自动化测试项目也应该建立符合脚本开发语言特点的编码规范。以QTP脚本开发为例,考虑到QTP的编程语言是以VBscrīpt为基础的,编码规范可以在借鉴VBscrīpt编码规范的的基础上建立起来。这里是MSDN的VBscrīpt编码规范。

    下面的注释取自刚刚完成的一个QTP自动化测试项目的编码规范,它指定了每个Action开始位置应该包含的说明信息。
    '***********************************************************************
    'Action name:
    'Descrīption:
    'Input:
    'Output:
    'Associated test case(s):

    'Creation date:
    'Created by:
    'Revise date:
    '***********************************************************************
    当然,这仅仅是完整编码规范的一小部分。

    接下来的问题就是如何把这样的编码规范贯彻到开发组中了。如果脚本开发工程师想在每个Action的开头都手工输入或者拷贝+粘贴这样的注释块,那就太麻烦了。QTP支持Action模版,可以省去这样的操作,大大提高编码的效率。
    把上面的注释保存成名为ActionTemplate.mst,并且用它覆盖<QTP安装目录>\dat文件夹下的同名文件。今后再新创建的Action将直接包含该段注释。

  • 相对路径[1] - 调用Reusable Action

    2007-06-12 11:34:47

    假设在存放QTP测试脚本的根目录下有两个测试脚本,分别是Test1和Test2。
    其中Test1包含一个可重用Action,名为ReusableAction。Test2包含一个Action,名为MainAction。

    ScrīptsRoot\
               \Test1
                     \ReusableAction
               \Test2
                     \MainAction

    如果要从Test2的MainAction中调用Test1的ReusableAction,就意味着要从一个测试脚本中调用另外一个脚本的可重用Action。只要从QTP的Insert菜单中选择Call to Copy of Action...,并且从弹出的Select Action对话框中指定Test1和ReusableAction即可达到目的。如图:

    在QTP帮助中,可以通过如下位置查找到调用外部Action的原理和说明。
    Mercury QuickTest Professional User's Guide > Working with Advanced Testing Features > Working with Advanced Action Features > Inserting Calls to Existing Actions

    从上面的图可以看到,调用外部测试脚本和可重用Action时QTP默认使用了绝对路径。当QTP测试脚本根目录,即scrīptRoot发生变化的时候,这样的调用关系就会导致再次打开并运行Test2时被调用的ReusableAction找不到的错误。如果自动化测试组由多个脚本开发工程师组成,这种情况就比较容易发生在组内共享测试脚本的时候。
    相对路径就可以在这个时候派上用场,只需在Select Action对话框的From test:下拉框中手工输入相对路径,以本文为例是:\test1。然后点击Action下拉框,ReusableAction就会自动出现在下拉框中。如图:

    按确定按钮后保存测试脚本Test2,以后Test1和Test2的根目录再如何改变或者移动,只要Test1和Test2相对位置不变,调用关系就不会受影响了。

    [注意]
    虽然相对路径增强了测试脚本的可移植性,使用中需要注意QTP对外部调用Action的相对路径支持有限。对一个外部可重用Action调用操作的设置完成了,就没有机会再改动了。也就是说,如果第一次调用一个Action时,在Select Action中输入的是绝对路径,就没有机会再改为相对路径了。
  • 相对路径[3] - 引用函数库

    2007-06-12 10:34:34

    在测试脚本的设计开发过程中,应该将可以重复利用的Action设计成Resuable Action。此外,还应该将可以重复利用的函数或子过程封装成可以从外部引用的公用函数库。QTP使用的开发语言是VBscrīpt,因此把这种类型的函数库保存为*.vbs的文件形式就可以了。
    以封装改变QTP窗口的子过程为例,将如下脚本
    '******************************************************************************
    'Name: ChangeQTPState
    'Descrīption: This sub changes the QTP window to a designated state during run
    '             sesscion.
    'Param: State indicates what the QTP window will be changed to.
    '       Possible value for State: Minimized, Maximized, Restored
    '******************************************************************************
    Sub ChangeQTPState(State)
        Dim objQTPWin
        Set ōbjQTPWin = GetObject("" , "QuickTest.Application")
        objQTPWin.WindowState = State
        Set ōbjQTPWin = Nothing
    End Sub
    保存到func.vbs,以后就可以从测试脚本中引用func.vbs的ChangeQTPState方法了。

    引用函数库文件的方式有两种,分别是测试脚本中执行ExecuteFile方法和测试资源指向vbs文件。
    假设测试脚本Test1和func.vbs分别如下保存:
    scrīptRoot\
              \Testscrīpts\Test1
              \Lib\func.vbs
    [ExecuteFile方法]
    在测试脚本Test1中加入如下语句:
    ExecuteFile "scrīptRoot\Lib\func.vbs"
    在后面的语句中就可以直接调用func.vbs中已经定义的各个函数或者子过程了,比如ChangeQTPState。
    [指定测试资源]
    在QTP中打开测试脚本Test1,并且选择菜单File -> Settings。在打开的Test Settins对话框中选择Resources标签页。在Associated function libraries列表中浏览并添加func.vbs。

    使用上述的任一方法向测试脚本Test1添加函数库func.vbs的引用,func.vbs的绝对路径都会给测试脚本带来移植性问题。当测试脚本的根目录scrīptRoot发生变化,测试脚本Test1对函数库func.vbs的引用就失效了。只能重复编辑相应的位置,把func.vbs新的绝对路径信息更新到脚本中去,从而让测试脚本Test1找到func.vbs文件。其实只要用相对路径的方式稍加改进,这样的问题就可以避免了。根据Test1和func.vbs的相对位置,func.vbs对Test1的相对路径就是"..\..\Lib\func.vbs"。
    [ExecuteFile方法]
    在测试脚本Test1中加入如下语句:
    ExecuteFile "..\..\Lib\func.vbs"
    [指定测试资源]
    在Associated function libraries列表中把已经添加的func.vbs改成..\..\Lib\func.vbs。

    编辑完成并保存Test1,以相对路径方式引用func.vbs的关系就在脚本中保存下来。以后无论测试脚本的根目录如何变化,只要Test1和func.vbs的相对位置不变,他们之间的引用关系就不会发生变化了。

  • 相对路径[2] - 关联对象库

    2007-06-12 10:33:50

    如果测试脚本中需要关联公共的对象库,在设置关联关系的时候也可以考虑使用相对路径增加脚本的可移植性。
    比如,测试脚本Test1需要关联公共的对象库objects.tsr。它们分别保存如下:
    scrīptRoot\
              \Test1
              \objects.tsr
    在Test1中关联对象库objects.tsr时,应该在QTP中选择Resources菜单的Associate Repositories项。在关联对象库对话框中,通过浏览文件的方式找到objects.tsr并选择该文件。这时对象库列表中以绝对路径形式列出了objects.tsr。
    根据objects.tsr与Test1的相对位置,只要在列表中将objects.tsr文件的绝对位置改为..\objects.tsr,以后Test1就会以相对路径的位置关联这个对象库。只要Test1和objects.tsr的相对位置不变,当脚本的存放位置发生变化时都不会出现对象库找不到的错误了。


  • 在测试脚本中用相对路径调用外部资源

    2007-06-09 23:45:56

    自动化测试项目中的开发工程师一般不会很多,自动化测试的执行环境也相对固定。因此,自动化测试项目不必像应用程序开发项目那样对代码的可移植性有很高的要求。但是为了给测试项目生命周期中的脚本维护、测试环境变更提供方便,也应该适当考虑自动化测试脚本的可移植性。

    在自动化测试脚本中,用相对路径代替绝对路径可以增加测试脚本的可移植性。在QTP测试脚本中,一些调用外部资源的地方涉及路径问题:
    在这几个方面,都可以用相对路径代替绝对路径增强QTP测试脚本的独立性。
  • 用好QTP帮助文档

    2007-06-07 17:39:05

    安装了英文版的QTP9.*后,可以从启动菜单的QTP文件夹中看到它的自带帮助文档。
    在Start -> QuickTest Professional -> Documentation下面列出了4个主要的帮助文件:
    QuickTest Automation Reference(QTP自动化参考)
    QuickTest Professional Code Samples Plus(QTP代码范例)
    QuickTest Professional Help(QTP帮助)
    Tutorial(教程)

    Tutorial是QTP的入门教程,提供了一个QTP入门的学习曲线。初学者可以按部就班的学习Tutorial的内容,实现对QTP的直观了解;
    QuickTest Professional Help是QTP的全面帮助,是QTP测试脚本开发过程中最常用而且有效的文档。包括用户指南(QuickTest User's Guide)、业务过程测试用户指南(QuickTest for Business Process Testing User's Guide)、对象模型参考(Object Model Conference)以及VBscrīpt参考(VBscrīpt Conference)等;
    QuickTest Professional Code Samples Plus提供了一些常用的QTP代码。部分代码是可以直接Copy + Paste应用于测试脚本的,十分具有参考价值;
    QuickTest Automation Reference是QTP自动化模型的完整描述。QTP可以以自动化对象的形式被其他程序语言调用,这为批量测试执行、与其他工具集成以及软件开发过程中的持续集成都提供了很大便利;

    知道了这些帮助文件的内容,也就很容易根据自己的需要选择参考的文档了。
  • 调整IE浏览器窗口

    2007-06-05 09:21:46

    界面交互测试有时需要在一些测试脚本运行过程中调整IE浏览器窗口的尺寸和位置。QTP仅仅提供了浏览器窗口的最大化方法,即Browser("Web Testing").FullScreen,但是并没有提供其他的改变窗口尺寸和位置的方法。

    依靠QTP本身提供的有限方法是不够的,可以利用VBscrīpt语言和QTP的描述性编程实现对IE浏览器窗口的尺寸和位置的控制。代码如下:

    'Open an IE browser with the method CreateObject()
    Dim objIE, hwndIE
    Set ōbjIE = CreateObject("internetexplorer.application")
    objIE.Visible = true
    objIE.Navigate URL 'The parameter URL is the destination address for the IE browser

    'Wait a while till the page is fully loaded
    Wait(10)

    'Move and resize the browser
    hwndIE = objIE.HWND
    'Operate the IE browser as a window object with descrīptive programming
    'The window object can be uniquely identified by the parameter hwndIE, which is the window's handle of the browser
    Window ("hwnd:=" & hwndIE).Activate
    Window ("hwnd:=" & hwndIE).Move intPosX, intPosY 'intPosX and intPosY represent the new location for the IE browser
    Window ("hwnd:=" & hwndIE).Resize intSizeX, intSizeY 'intSizeX and intSizeY represent the new size for

    'Release the object after the adjustment
    Set ōbjIE = nothing

    除了IE浏览器之外,这样的代码同样适用于其他被测的应用程序,如Word、Excel等。只要将创建对象处的参数加以调整就可以了。
  • 测试运行过程中改变QTP窗口状态

    2007-06-01 14:56:06

    在测试脚本的运行过程中,QTP窗口可能会影响测试步骤。
    有时,QTP窗口挡住了测试对象的弹出窗口或者页面控件,造成对象不可见Object is not visible错误。

    在测试脚本的开头部分加入如下代码,就可以让QTP在开始运行时最小化QTP窗口。
    Dim objQTPWin
    Set ōbjQTPWin = GetObject("" , "QuickTest.Application")
    objQTPWin.WindowState = "Minimized"
    Set ōbjQTPWin = Nothing
    其中objQTPWin.WindowState还支持最大化"Maxmized"和恢复"Restored"状态,如果把上面的代码包装成一个函数,就是根据需要在测试运行中随时改变QTP窗口的状态了。

    除了最小化以外,还可以利用QTP窗口对象的Visible属性隐藏QTP窗口。
    Dim objQTPWin
    Set ōbjQTPWin = GetObject("" , "QuickTest.Application")
    objQTPWin.Visible = False
    Set ōbjQTPWin = Nothing
    和最小化窗口不同的是,隐藏窗口以后连Windows任务栏上也不看不到QTP窗口了。
    如果需要显示QTP窗口,应该把Visible属性设置为True。

我的栏目

数据统计

  • 访问量: 21136
  • 日志数: 17
  • 图片数: 1
  • 建立时间: 2007-04-26
  • 更新时间: 2007-09-06

RSS订阅

Open Toolbar