一个人不应该依附在其他人身上,一个人应该首先自力更生。你应该自己能够独立,能够安顿你自己,那你就不会害怕了。你爱你自己的话,别人不能不爱你吧。

发布新日志

  • 娃娃爱天下

    2007-06-29 09:00:38

    蝴蝶路上遇见果树沉睡在叶上
    那么自如停下来居住
    然后羡慕别处的树还妒忌外面
    每朵花的际遇寻觅好去处
    望着日落日出的你
    愿望是伴着他嬉戏
    但是被摘下的花会枯死
    难免乏味
    没有他
    很想去捕捉他摘了他
    哪管他种在谁的家跪拜他
    贪新鲜有如娃娃爱天下
    嫌弃他
    肥瘦高矮面容没变化
    浪费他
    直到花花地球全摘下
    蝴蝶第十万个心愿
    期望住在避世的乐园
    留在后花园沉闷渐渐代替骚乱
    而欲望若被满足等于厌倦期待更奇缘

     

     

  • NND

    2007-06-28 11:04:05

    现象:前几天安装TD太哈皮了,忘记WR的存在,这厮今天和我闹别扭,死活进不去,出现故障

         然后我install license 结果出现

    尝试了论坛上所有的方法,愣是不行
    一怒之下,卸载了WR
    步骤:1、uninstall
         2、删除所在文件夹C:\Program Files\Mercury Interactive\WinRunner
         3、重启重新安装
     
    小结:后来发现原因是C:\Program Files\Common Files\Mercury Interactive\下把License Manager(里面含有lservrc文件,是注册的重要信息)、WR_Remoter文件夹删除了
     
    所以每次安装卸载新的软件时要注意不要删除正确的信息,为了防止,要安装或者卸载完软件之后启动常用的软件看看是否能正常使用,此次就是为了TD而祸害了健康的WR,呼呼
     
    现在两位老人家都很健康。。。
     

  • http://book.csdn.net/bookfiles/107/1001073092.shtml

    2007-06-27 09:41:34

    面试例题1:如果鸟是可以飞的,那么鸵鸟是鸟么?鸵鸟如何继承鸟类?[美国某著名分析软件公司2005年面试题]

    解析:如果所有鸟都能飞,那鸵鸟就不是鸟!回答这种问题时,不要相信自己的直觉!将直觉和合适的继承联系起来还需要一段时间。

    根据题干可以得知:鸟是可以飞的。也就是说,当鸟飞行时,它的高度是大于0的。鸵鸟是鸟类(生物学上)的一种。但它的飞行高度为0(鸵鸟不能飞)。

    不要把可替代性和子集相混淆。即使鸵鸟集是鸟集的一个子集(每个驼鸟集都在鸟集内),但并不意味着鸵鸟的行为能够代替鸟的行为。可替代性与行为有关,与子集没有关系。当评价一个潜在的继承关系时,重要的因素是可替代的行为,而不是子集。

    答案:如果一定要让鸵鸟来继承鸟类,可以采取组合的办法,把鸟类中的可以被鸵鸟继承的函数挑选出来,这样鸵鸟就不是“a kind of”鸟了,而是“has some kind of”鸟的属性而已。代码如下:

    #include<iostream>

    #include<string>

    using namespace std;

     

    class bird

    {

    public:

        void eat();

        void sleep();

        void fly();

    };

     

    class ostrich

    {

    public:

        bird eat(){cout<<"ostrich eat";};

        bird sleep(){cout<<"ostrich sleep";};

     

      };

     

    int main()

    {

        ostrich xiaoq;

        xiaoq.eat();

        xiaoq.sleep();

        return 0;

    }    

    面试例题2Find the defects in each of the following programs, and explain why it is incorrect.(找出下面程序的错误,并解释它为什么是错的。)[中国台湾某著名杀毒软件公司2005年面试题]

          #include <iostream>

         using namespace std;

     

         class Base {

            public:

                    int val;

                    Base() { val=1;};

         };

     

         class Derive: Base {

            public:

                    int val;

                    Derive(int i) { val=Base::val+i; };

         };

     

         int main(int, char**, char**) {

            Derive d(10);

                    cout<<d.Base::val<<endl<<d.val<<endl;

                 return 0;

         }

    答案:把class Derive: Base改成class Derive:public Base

    解析:这是个类继承问题。如果不指定publicC++默认的是私有继承。私有继承是无法继承并使用父类函数中的公有变量的。

    扩展知识(组合) 这个比较有意思。

    若在逻辑上AB的“一部分”(a part of),则不允许BA派生,而是要用A和其他东西组合出B

    例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类EyeNoseMouthEar组合而成,而不是派生而成。程序如下:

    class Eye

    {

    public:

    void Look(void);

    };

     

    class Nose

    {

    public:

    void Smell(void);

    };

     

    class Mouth

    {

    public:

    void Eat(void);

    };

     

    class Ear

    {

    public:

    void Listen(void);

    };

     

    class Head

    {

    public:

    void Look(void) { m_eye.Look(); }

    void Smell(void) { m_nose.Smell(); }

    void Eat(void) { m_mouth.Eat(); }

    void Listen(void) { m_ear.Listen(); }

     

    private:

    Eye m_eye;

    Nose m_nose;

    Mouth m_mouth;

    Ear m_ear;

    };

    HeadEyeNoseMouthEar组合而成。如果允许HeadEyeNoseMouthEar派生而成,那么Head将自动具有LookSmellEatListen这些功能。程序十分简短并且运行正确,但是下面这种设计方法却是不对的。

    class Head : public Eye, public Nose, public Mouth, public Ear

    {

    };

     

    面试例题3Find the defects in each of the following programs, and explain why it is incorrect.(找出下面程序的错误,并解释它为什么是错的。)[德国某著名软件咨询企业2005年面试题]

    class base{

     private:  int i;

     public:   base(int x){i=x;}

    };

    class derived: public base{

     private:  int i;

     public:   derived(int x, int y) {i=x;}

               void printTotal() {int total = i+base::i;}

    };

    解析:要在子类中设定初始成员变量,把derived(int x, int y)改成derived(int x, int y) : base(x)

    答案

    代码如下:

    class base

    {

    protected: //这里的访问属性需要改变

    int i;

    public:  

    base(int x){i=x;}

    };

     

    class derived: public base

    {

     private: 

       int i;

     public:

       derived(int x, int y) : base(x) //以前没有初始化基类的成员变量

       {

                 i=y;         

       }

       void printTotal()

       {

            int total = i+base::i;

       }

    };

     

     

  • 转移TD Porject的问题及TD对应的数据库表字段(转载)

    2007-06-27 09:31:10

     

    原文

    年前加班转移各项目组的TD库到一台机器上做统一管理之用,折腾了好几天。因为有些项目组是从TD7.0就开始建的project,之后升级为TD8.0,这次又要转到新的机器上所以出现了不少问题。下面简单说一下我遇到的情况和解决办法。(下文介绍的方法均以文字为准,图为辅助说明)


    首先是正常的操作:
    一般我们从不同机器上迁移TD库project的步骤如下(原主机为hostA,目的主机为IT-DIONYSUS,hostA中已经有TD和project,我们在IT-DIONYSUS上安装一个TD)
    1. 进入IT-DIONYSUS TD库的Site Administrator,在projects页面中选择restore project,浏览选中hostA共享的TD库DBID.ini文件

    这时点击恢复会报告DB Server没有找到,这是因为IT-DIONYSUS的TD库中没有hostA中的DB Server,我们需要进入DB Server页面把hostA的数据库添加进来,设置验证方式为SQL Auth认证,最后ping一下确认可以正常连通

    回到project页面恢复,成功后可以看到hostA中TD库的project已经出现在当前TD中了(但此时project的DB server还是指向hostA上的数据库)。
    2. 选择Create Project新建一个项目,数据库类型选择MS-SQL


    下一步选择数据库的时候Server Name选择为IT-DIONYSUS机器上的数据库(即,这个project的数据库要建立在IT-DIONYSUS上)


    下一步选择Copy

     


    注意选择对要复制的project


    一切顺利的话这个project就从hostA上完全复制到IT-DIONYSUS上了,并且数据库也指向本机了。
    如果上述操作过程中没有报错的话则迁移过来的project是最完整且正常的,所有用户自己添加的字段等信息完全保留。


    实际过程中遇到的问题和解决方法:
    1. 首先是部分project的DB Server与TD Server不一致。当我们安装TD的时候有一步让你选择输入MS SQL Alias,很多人就是用的默认名称“TDSQLSERVER”
        
    当从IT-DIONYSUS上恢复远程project时必须要在DB Server中新建一个名为TDSQLSERVER的服务器,但这个DB SERVER是无法ping通的(后面会讲到如何让其可以使用TDSQLSERVER),因为网络中没有一个叫TDSQLSERVER的SQL服务器,所以从恢复这一步就无法走通。
     方法1:在原主机(还是以hostA为例)TD库的DB Server中新建一个服务器,名字就是本机SQL服务器的名字hostA,Create Project,选择数据库为hostA,Copy那个DB与TD不一致的project。这样再从IT-DIONYSUS上恢复我们新建的这个project即可,这个project的DB Server是可以在网络中找到且连通的。
     方法2:打开IT-DIONYSUS机器上的SQL Server 客户端网络实用工具,点击“别名”,设置TDSQLSERVER的真实服务器名hostA

    再在TD的DB Server中新建一个叫TDSQLSERVER的服务器,输入hostA上的用户和密码,ping一下是可以通的


     这样我们就可以从IT-DIONYSUS这一端设置,正常复制hostA上的project了。
    2. 本身原数据库就已经存在问题,hostA上已经不能正确新建或激活project,那我们只有从SQL Server强行复制表了,注意这样的复制是有问题的,复制过来的project将丢失部分信息。
    方法:以前有网友已经总结过的,这里我再说一下吧。打开IT-DIONYSUS上的Site Administrator,直接Create project,不复制。打开IT-DIONYSUS上的SQL企业管理器,建立(local)和hostA的注册连接。在(local)的数据库中找到新建完成的数据库-名称为:Domain名+project名。右键菜单里选择“所有任务”->“导入数据”

    数据源选择服务器hostA上的project库,用户为sa
    服务器选择本机,数据库即为新建的那个库,这里的用户一定要选择td,密码为tdtdtd!
    之后就是导入所有表。过程中会出现部分复制错误。
    数据库复制完成后还需要将project的附件等文件夹复制过来:将hostA project文件夹下的attach文件夹所有内容拷贝到IT-DIONYSUS的对应project下,之后根据情况复制其他文件夹的内容(有的文件夹里没内容,可以不复制),注意不要复制DBid.ini文件!!

    这样强行转移project后用户和组等信息会丢失,只得自己添加。而且还有很多奇怪的问题,例如添加bug时bug号有错误,以前test plan中的测试用例都跑到一个文件夹下了。于是我打开SQL的事件探查器跟踪了一把,查到TD中部分表和字段对应的信息。这里仅作简单介绍,如果有朋友遇到和我同样的问题,也许可以通过直接操作SQL数据库做补救,但不到万不得已不要这样做。


    我们在TD库中作提交bug等操作的TD总会首先查询其数据库中的SEQUENCES表,表里数据如下:
     

    其中BUG字段后面的值表示当前库中最大的bug号,当我们再提交bug的时候TD会首先查询这里,并将我们提交的bug号在此基础上加1。TEST字段后面的值表示TD库中Test Plan页面下测试用例的最大ID号。我们new test时这里会加1。
    知道这些信息了,当我们的TD库bug号增加不对时可以直接从这里修改。这个数据库中还有一个BUG表,里面存储的都是bug具体信息
     

    新增测试用例如果出现问题也极有可能是因为SEQUENCES的test id有问题,比如id莫名其妙的变小了,致使增加的id号会和已有的id重复。数据库中有一个TEST表,里面存储的都是测试用例的信息,但测试用例还是挂靠在一个文件夹下的,这个文件夹id可以从ALL_LISTS表中查看


     
     
    我们可以进入TD查看一下测试用例与文件夹的所属关系:

     

  • (翻译)编写优秀Bug报告的艺术及案例分析(转载)

    2007-06-27 08:44:10

    前言
    99年的Quality week上的一次演讲中,微软的一个测试经理,Roger Sherman指出了由于“不可重现”导致bug关闭的主要原因。这是一个非常可惜的情况,因为这样的bug report浪费了紧张的开发计划中的宝贵时间,增加了对产品质量完全是无关紧要的事情,同时导致了在开发人员和测试之间的挫败感和差的感觉。有时,bug report是由于短暂的或随机的事件,测试和开发之间不一致的工具和配置,或者在测试的环境下对正确的行为的模糊定义而产生的,但是许多的由于不可重现而被关闭的测试报告是因为描述不清晰,被误解,或者只是文字的错误。
     
    幸运的是,我学习到一些能够引起管理层注意,更清楚的和开发人员沟通并得到修复的编写优秀bug report的诀窍。这些技巧不仅仅提供了是在被修复的问题的比例方面得到了可靠的回报,而且在同开发人员和管理层的通过中也得到了回报。在我管理的项目中使用这种方法编写bug report8bug report中大约只有一个没有被修复。
     
    这篇文章的思想只有当你的报告针对的测试执行过程是专业的质量工作才可以发挥作用。聪明地执行完整的测试包是产生可靠的测试状况信息的基础的其中一个因素。在许多的测试文献中广泛地介绍了多种多样的关于如何构建这样的测试包的方法。选择和你质量风险管理需求相一致的技术并且使之适应你的具体情况,敏捷地监督已计划的测试的执行过程,这样你就可以拥有可靠的测试执行过程。
     
    另外一个关键的因素-bug report,却没有得到太多的关注。这是非常令人遗憾的,因为优秀的bug report对反映测试小组真实的和可理解的工作质量同测试本身一样都是非常重要的。试想一下:如果你不能用开发人员能够理解的术语和能够用于调试的方法给开发人员解释一个错误,他怎么能够修复问题呢?如果你不能够在bug report中提出象“保险杆标签”(bumper sticker)一样的错误总结来引起管理层的注意,你又如何让他们关心你们发现的问题呢?
     
    Bug report的核心是对错误的描述。表格1中是一个关于好和差的错误描述的例子。编写好的bug report是一种好的艺术形式。采用以下的10条技巧可以帮助你的小组提高编写bug report的质量:
    1. 组织Structure:测试人员应该采用深思熟虑的,小心谨慎的方法执行测试,并且做详尽的记录。这样可以促使他们对测试下的系统有很好的认识。当错误发生的时候,一个有组织的测试人员能够知道最早出现问题的地方。
    2. 重现Reproduce:测试人员在编写bug report之前必须在检查问题是否可重现。如果错误不可再重现,仍然应该写下来,但是必须说明问题的偶然性。一个好的处理原则就是在编写bug report之前反复尝试3次。
    3. 隔离Isolate:在尝试编写bug report之前,必须试着隔离错误。可以采用改变一些变量的方法,如系统的配置,它可能可以改变错误的症状。这些信息可以为开发人员着手调试提供思路。
    4. 归纳Generalize:在测试人员发现了一个已隔离的,可重现的问题后,应该对问题进行归纳。同一个问题是否出现在其他的模块或其他的地方?同一个故障是否有更加严重的问题?
    5. 对比Compare:如果测试人员以前曾经验证过现在出错的测试用例,那么他就应该检查以前的测试结果以检查相同的条件是否通过以前的测试。如果是的话,那么这个问题就象是一个回归的错误。注意由于同一测试条件有可能出现在多个测试用例中,这个步骤就不仅仅只是检查一个测试用例在以前的多个结果。
    6. 总结Summarize:在bug report的第一行写上错误的总结是非常关键的。测试人员要花些时间思考已发现的错误对客户有何影响。这不仅仅要求测试人员编写的报告要能够吸引读者,使和管理层的沟通清晰,还要能够帮助设置错误修复的优先级别。
    7. 精简Condense:在bug report的初稿完成后,测试人员应该反复阅读它,集中剔除那些没有关系的步骤或词语。隐含的或模糊的说明和那些由于对没有任何关系的细节或者那些在重现错误过程中不需要的步骤而消磨报告欢迎程度的无穷唠叨都不是bug report的目标。
    8. 消除歧义Disambiguate:测试人员在精简空话的同时或其之后随即应该再仔细检查报告是否有会产生误解的地方。测试人员应该尽量避免使用模糊的,会产生歧义的和主观的词语。目标是使用能够表述事实,清楚的,不会产生争执的词语。
    9. 中立Neutralize:如文中所述,作为坏消息的传递人,和善地提交消息是一个挑战。如同所有的错误总结一样,独立的bug report在措辞方面应该保持公正。攻击开发人员,指责潜在的错误,企图诙谐或使用挖苦将引起开发人员的憎恶,并且使注意力从“提高产品质量”这个大的目标上转移开了。谨慎的测试人员只用Bug report来描述事实。
    10. 检查Review:一旦测试人员感觉bug report是他能够编写的最好版本,他应该将报告再给一个或多个同行进行检查。他的同事们也应该给出一些建议,为了澄清问题不断地提问,如果适当的话,甚至可以挑战“错误成灾”的结论。在允许的时间里,测试小组应该尽可能提交最好的bug report。
     
    以上10条技巧可以帮助你和你的小组提交准确简洁的,彻底校订的,精心构思的,高质量的技术文档。测试小组应该集中编写bug report的任务,测试组长和经理应该让测试组成员清楚地认识到编写优秀的bug report是一项首要的工作任务。衡量优秀的bug report的质量指标应该包括如下:
    o        对管理层来说,是清晰明了的,特别是在概要这一级;
    o        对于开发部门是有用的,主要是给出能够让开发人员高效地调试问题的相关信息
    o        可以很快的将bug从“Opened”状态转变成“Closed”状态,减少为得到更多的信息从开发人员打回的差的bug report并导致测试人员返工的时间。
     
    改进bug报告的流程是需要花费一些时间的,但是也给予了效果显著的回报。首先,简单的流程改进了测试小组和高层、平行管理层之间的沟通,增强小组的信任度,名望和鼓励管理层给测试投资更多的资源。第二,平稳地递交报告给开发人员促进了测试和开发人员之间积极的关系。第三,更短的bug生命周期是更加有效的,在时间上之前花费在编写优秀bug report上的时间和后期由于返工差的bug report花费的时间相抵消。这些回报帮助开发流程通过有效的沟通和高效率的流程获得更好的产品质量。
     

    Good

    Bad

    概要(Summary
    Arial, Wingdings和 Symbol字体破坏了新文件。
    重现问题的步骤(Steps to Reproduce
    1. 启动SpeedyWriter编辑器, 接着创建了一个文件.
    2. 输入4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”,
    3. 选中4行文字,点击字体的下拉菜单,选择Arial.
    4. 所有的文字转变成了控制字符,数字和其他一些二进制的数据.
    5. 尝试了3次,每次都可以重现这个问题。
    隔离(Isolation
    这个问题是新出现在build 1.1.018;相同的测试用例是在builds 1.1.007 (System Test entry) 和 1.1.017中通过测试的.
    使用Wingdings和Symbol字体也可以重现这个问题,但Times-Roman, Courier New和Webdings字体都没有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。保存此文件再关闭它,然后再打开文件,这个错误还是存在。
    在转换字体之前保存文件,将不会产生这个错误。
    在已经存在的文件里,不会产生这个错误。
    这个错误只出现在Windows98平台下,在Solaris, Mac或其它地Windows平台下不出现这个问题。 
    在格式一些文字成Arial字体时,我创建的新文件中所有的内容被毁坏了。
                                                                                                         Table1
    案例分析:SpeedyWriter
    SpeedyWriter --
    ·         用Java开发的字处理器(word processor)
    ·         支持常见的字处理器功能
    ·         在案例分析中,用“italics”字体突出显示内容的描述上有差异
     
    步骤1、组织Structure
     
    ·         采用深思熟虑的,仔细的方法进行测试
    ·         遵循编写好的或者运行由编写好的和标准化的流程自动化的测试用例
    ·         做仔细的记录
     
    步骤2、重现Reproduce
     

    Good

    Bad

    · 重现问题的步骤:
    1. 我打开 SpeedyWriter编辑器, 接着创建了一个文件。
    2. 然后我输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”, 每次采用bold, italic, strikethrough, 和underline不同的效果。
    3. 我选中了文字,点击字体的下拉菜单,选择Arial。
    4. 这个讨厌的bug把所有的文字变成了毫无意义的垃圾,浪费了用户的时间。
    5. 我尝试了3次,每次都能够重现这个问题。
    在格式一些文字成Arial字体时,讨厌的bug捣毁了我创建的新文件中所有的内容,浪费了我的时间。
     
     
    步骤3、隔离Isolate
     

    Better

    Good

    · 重现问题的步骤:
    1. 我打开 SpeedyWriter编辑器, 接着创建了一个文件。
    2.然后我输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”, 每次采用bold, italic, strikethrough, 和underline不同的效果。
    3. 我选中了文字,点击字体的下拉菜单,选择Arial。
    4. 这个讨厌的bug把所有的文字变成了毫无意义的垃圾,浪费了用户的时间。
    5. 我尝试了3次,每次都能够重现这个问题。
    隔离
    基于模糊的猜测,这个可能只是一个关于格式化的问题。我保存此文件再关闭它,然后再重新打开,这个错误还是存在。
    如果在未将文字变成“Arial”之前保存文件,将不会产生这个错误。
    在已经存在的文件里,是不会产生这个错误。
    这个错误只出现在Windows98平台下。
    · 重现问题的步骤:
    1. 我打开 SpeedyWriter编辑器, 接着创建了一个文件。
    2. 然后我输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”, 每次采用bold, italic, strikethrough, 和underline不同的效果。
    3. 我选中了文字,点击字体的下拉菜单,选择Arial。
    4. 这个讨厌的bug把所有的文字变成了毫无意义的垃圾,浪费了用户的时间。
    5. 我尝试了3次,每次都能够重现这个问题。
    隔离
    这个问题在Solaris下没有出现。
     
    步骤4、归纳Generalize
     

    Better

    Good

    · 重现问题的步骤:
    1. 我打开 SpeedyWriter编辑器, 接着创建了一个文件。
    2.然后我输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”, 每次采用bold, italic, strikethrough, 和underline不同的效果。
    3. 我选中了文字,点击字体的下拉菜单,选择Arial。
    4. 这个讨厌的bug把所有的文字变成了毫无意义的垃圾,浪费了用户的时间。
    5. 我尝试了3次,每次都能够重现这个问题。
    隔离
    Wingdings和Symbol字体同样也有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。我保存此文件再关闭它,然后再重新打开,这个错误还是存在。
    如果在未将文字变成“Arial”之前保存文件,将不会产生这个错误。
    在已经存在的文件里,不会产生这个错误。
    这个错误只出现在Windows98平台下。
    · 重现问题的步骤:
    1. 我打开 SpeedyWriter编辑器, 接着创建了一个文件。
    2.然后我输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”, 每次采用bold, italic, strikethrough, 和underline不同的效果。
    3. 我选中了文字,点击字体的下拉菜单,选择Arial。
    4. 这个讨厌的bug把所有的文字变成了毫无意义的垃圾,浪费了用户的时间。
    5. 我尝试了3次,每次都能够重现这个问题。
    隔离
    基于模糊的猜测,这个可能只是一个关于格式化的问题。我保存此文件再关闭它,然后再重新打开,这个错误还是存在。
    如果在未将文字变成“Arial”之前保存文件,将不会产生这个错误。
    在已经存在的文件里,是不会产生这个错误。
    这个错误只出现在Windows98平台下。
     
    步骤5、对比Compare
     

    Better

    Good

    · 重现问题的步骤:
    1. 我打开 SpeedyWriter编辑器, 接着创建了一个文件。
    2.然后我输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”, 每次采用bold, italic, strikethrough, 和underline不同的效果。
    3. 我选中了文字,点击字体的下拉菜单,选择Arial。
    4. 这个讨厌的bug把所有的文字变成了毫无意义的垃圾,浪费了用户的时间。
    5. 我尝试了3次,每次都能够重现这个问题。
    隔离
    这个问题是新出现在build 1.1.018的;相同的测试用例在builds 1.1.007 (System Test entry) 和 1.1.017中通过了测试.
    Wingdings和Symbol字体同样也有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。我保存此文件再关闭它,然后再重新打开,这个错误还是存在。
    如果在未将文字变成“Arial”之前保存文件,将不会产生这个错误。
    在已经存在的文件里,不会产生这个错误。
    这个错误只出现在Windows98平台下。
    · 重现问题的步骤:
    1. 我打开 SpeedyWriter编辑器, 接着创建了一个文件。
    2.然后我输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”, 每次采用bold, italic, strikethrough, 和underline不同的效果。
    3. 我选中了文字,点击字体的下拉菜单,选择Arial。
    4. 这个讨厌的bug把所有的文字变成了毫无意义的垃圾,浪费了用户的时间。
    5. 我尝试了3次,每次都能够重现这个问题。
    隔离
    Wingdings和Symbol字体同样也有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。我保存此文件再关闭它,然后再重新打开,这个错误还是存在。
    如果在未将文字变成“Arial”之前保存文件,将不会产生这个错误。
    在已经存在的文件里,不会产生这个错误。
    这个错误只出现在Windows98平台下。
     
    步骤6、总结Summarize
     

    Better

    Good

    概要
    Arial, Wingdings和 Symbol字体破坏了新文件
    · 重现问题的步骤:
    1. 我打开 SpeedyWriter编辑器, 接着创建了一个文件。
    2.然后我输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”, 每次采用bold, italic, strikethrough, 和underline不同的效果。
    3. 我选中了文字,点击字体的下拉菜单,选择Arial。
    4. 这个讨厌的bug把所有的文字变成了毫无意义的垃圾,浪费了用户的时间。
    5. 我尝试了3次,每次都能够重现这个问题。
    隔离
    这个问题是新出现在build 1.1.018的;相同的测试用例在builds 1.1.007 (System Test entry) 和 1.1.017中通过了测试。
    Wingdings和Symbol字体同样也有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。我保存此文件再关闭它,然后再重新打开,这个错误还是存在。
    如果在未将文字变成“Arial”之前保存文件,将不会产生这个错误。
    在已经存在的文件里,不会产生这个错误。
    这个错误只出现在Windows98平台下。
    · 重现问题的步骤:
    1. 我打开 SpeedyWriter编辑器, 接着创建了一个文件。
    2.然后我输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”, 每次采用bold, italic, strikethrough, 和underline不同的效果。
    3. 我选中了文字,点击字体的下拉菜单,选择Arial。
    4. 这个讨厌的bug把所有的文字变成了毫无意义的垃圾,浪费了用户的时间。
    5. 我尝试了3次,每次都能够重现这个问题。
    隔离
    这个问题是新出现在build 1.1.018的;相同的测试用例在builds 1.1.007 (System Test entry) 和 1.1.017中通过了测试。
    Wingdings和Symbol字体同样也有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。我保存此文件再关闭它,然后再重新打开,这个错误还是存在。
    如果在未将文字变成“Arial”之前保存文件,将不会产生这个错误。
    在已经存在的文件里,不会产生这个错误。
    这个错误只出现在Windows98平台下。
     
    步骤7、精简Condense
     

    Better

    Good

    概要
    Arial, Wingdings和 Symbol字体破坏了新文件
    · 重现问题的步骤:
    1. 启动SpeedyWriter编辑器, 接着创建了一个文件.
    2. 输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”,
    3. 选中文字,点击字体的下拉菜单,选择Arial.
    4. 这个讨厌的bug捣毁了所有的文字,变成了一些毫无意义的垃圾,浪费了用户的时间.
    5. 尝试了3次,每次都可以重现这个问题。
    隔离
    这个问题是新出现在build 1.1.018的;相同的测试用例在builds 1.1.007 (System Test entry) 和 1.1.017中通过了测试。
    Wingdings和Symbol字体同样也有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。保存此文件再关闭它,然后再打开文件,这个错误还是存在。
    在转换字体之前保存文件,将不会产生这个错误。
    在已经存在的文件里,是不会产生这个错误。
    这个错误只出现在Windows98平台下。
    概要
    Arial, Wingdings和 Symbol字体破坏了新文件
    · 重现问题的步骤:
    1. 我打开 SpeedyWriter编辑器, 接着创建了一个文件。
    2.然后我输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”, 每次采用bold, italic, strikethrough, 和underline不同的效果。
    3. 我选中了文字,点击字体的下拉菜单,选择Arial。
    4. 这个讨厌的bug把所有的文字变成了毫无意义的垃圾,浪费了用户的时间。
    5. 我尝试了3次,每次都能够重现这个问题。
    隔离
    这个问题是新出现在build 1.1.018的;相同的测试用例在builds 1.1.007 (System Test entry) 和 1.1.017中通过了测试。
    Wingdings和Symbol字体同样也有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。我保存此文件再关闭它,然后再重新打开,这个错误还是存在。
    如果在未将文字变成“Arial”之前保存文件,将不会产生这个错误。
    在已经存在的文件里,不会产生这个错误。
    这个错误只出现在Windows98平台下。
     
    步骤8、消除歧义Disambiguate
     

    Better

    Good

    概要
    Arial, Wingdings和 Symbol字体破坏了新文件
    · 重现问题的步骤:
    1. 启动SpeedyWriter编辑器, 接着创建了一个文件.
    2. 输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”,
    3. 选中4行文字,点击字体的下拉菜单,选择Arial.
    4. 这个讨厌的bug捣毁了所有的文字,变成了一些毫无意义的垃圾,包括控制字符,数字和其他一些二进制的垃圾数据,浪费了用户的时间.
    5. 尝试了3次,每次都可以重现这个问题。
    隔离
    这个问题是新出现在build 1.1.018的;相同的测试用例在builds 1.1.007 (System Test entry) 和 1.1.017中通过了测试。
    相同地步骤下,Wingdings和Symbol字体同样也有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。保存此文件再关闭它,然后再打开文件,这个错误还是存在。
    在转换字体之前保存文件,将不会产生这个错误。
    在已经存在的文件里,是不会产生这个错误。
    这个错误只出现在Windows98平台下,在Solaris, Mac或其它地Windows平台下不出现这个问题。
    概要
    Arial, Wingdings和 Symbol字体破坏了新文件
    · 重现问题的步骤:
    1. 启动SpeedyWriter编辑器, 接着创建了一个文件.
    2. 输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”,
    3. 选中文字,点击字体的下拉菜单,选择Arial.
    4. 这个讨厌的bug捣毁了所有的文字,变成了一些毫无意义的垃圾,浪费了用户的时间.
    5. 尝试了3次,每次都可以重现这个问题。
    隔离
    这个问题是新出现在build 1.1.018的;相同的测试用例在builds 1.1.007 (System Test entry) 和 1.1.017中通过了测试。
    Wingdings和Symbol字体同样也有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。保存此文件再关闭它,然后再打开文件,这个错误还是存在。
    在转换字体之前保存文件,将不会产生这个错误。
    在已经存在的文件里,是不会产生这个错误。
    这个错误只出现在Windows98平台下。
     
    步骤9、中立Neutralize
     

    Better

    Good

    概要
    Arial, Wingdings和 Symbol字体破坏了新文件
    · 重现问题的步骤:
    1. 启动SpeedyWriter编辑器, 接着创建了一个文件.
    2. 输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”,
    3. 选中4行文字,点击字体的下拉菜单,选择Arial.
    4. 所有的文字转变成控制字符,数字和其他一些二进制的数据.
    5. 尝试了3次,每次都可以重现这个问题。
    隔离
    这个问题是新出现在build 1.1.018的;相同的测试用例在builds 1.1.007 (System Test entry) 和 1.1.017中通过了测试。
    相同地步骤下,Wingdings和Symbol字体同样也有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。保存此文件再关闭它,然后再打开文件,这个错误还是存在。
    在转换字体之前保存文件,将不会产生这个错误。
    在已经存在的文件里,不会产生这个错误。
    这个错误只出现在Windows98平台下,在Solaris, Mac或其它地Windows平台下不出现这个问题。
    概要
    Arial, Wingdings和 Symbol字体破坏了新文件
    · 重现问题的步骤:
    1. 启动SpeedyWriter编辑器, 接着创建了一个文件.
    2. 输入了4行文字, 每次重复输入“The quick fox jumps over the lazy brown dog”,
    3. 选中4行文字,点击字体的下拉菜单,选择Arial.
    4. 这个讨厌的bug捣毁了所有的文字,变成了一些毫无意义的垃圾,包括控制字符,数字和其他一些二进制的垃圾数据,浪费了用户的时间.
    5. 尝试了3次,每次都可以重现这个问题。
    隔离
    这个问题是新出现在build 1.1.018的;相同的测试用例在builds 1.1.007 (System Test entry) 和 1.1.017中通过了测试。
    相同地步骤下,Wingdings和Symbol字体同样也有这个问题。
    基于模糊的猜测,这个可能只是一个关于格式化的问题。保存此文件再关闭它,然后再打开文件,这个错误还是存在。
    在转换字体之前保存文件,将不会产生这个错误。
    在已经存在的文件里,是不会产生这个错误。
    这个错误只出现在Windows98平台下,在Solaris, Mac或其它地Windows平台下不出现这个问题。
  • 创建MS-SQL类型的TD工程:实验及结论 (转载)

    2007-06-26 09:53:29

    原文

    创建MS-SQL类型的TD工程:实验及结论

    作者:snowers

    【摘要】TestDirector是美国MI公司推出的一款功能强大的测试管理工具,在软件测试行业得到了广泛的使用。不少朋友在使用TestDirector的过程中,也遇到了一些问题。除了广遭诟病的RPC错误外,另外一个问的比较多的问题就是“为什么不能成功创建MS-SQL类型的工程?”。

    关于第二个问题,在两个比较热门的测试交流网站,“测试时代(www.testage.net)”和“51Testing软件测试网(www.51testing.com)”的测试论坛上讨论了不少的解决思路。在这里,我将以实验的方式给出一个经得起实践检验的简易的操作方法。限于篇幅关系,实验的过程已经经过技术上的简化处理。

    【关键词】TestDirector 数据库 MS-SQL

    • 前言

    在开始本实验之前,必须明确一个基本要求,即:欲创建MS-SQL类型的工程,必先创建有效的MS SQL Server数据库服务(DB Server)。因此讨论的焦点将转到如何创建有效的DB Server上。作者假设您已经对在TestDirector后台创建DB Server和Project基本操作很熟悉。

    本次实验将解答三个方面的疑问:

    • 创建DB Server必须要在TestDirector服务器上安装配置SQL Server客户端吗?
    • DB Server必须与TestDirector部署在同一台服务器上吗?
    • 如何配置SQL Server客户端参数?配置SQL Server客户端有什么用处?
    • 实验环境

    本次实验使用了局域网内三台台式机,机器配置属性如下表:

    机器名

    IP地址

    硬件信息

    软件信息

    备注

    TDServer

    192.168.0.1

    PIV2.4G/512M/60G

    Win2KSer

    TestDirector7.6EN

    TD服务器

    TestServer

    192.168.0.2

    PIV2.4G/256M/60G

    Win2KPro

    SQL Server2K开发版,实例名默认

    数据库服务器1

    DevServer

    192.168.0.3

    PIV2.4G/256M/60G

    WinXP

    SQL Server2K开发版,实例名Dev

    数据库服务器2

    表1 实验环境信息

    说明:上述环境中所提到的SQL Server2K,是以默认方式安装了客户端和服务器端,身份验证方式为“混合方式”,sa的口令均为sa。关于TestDirector7.6企业版和SQL Server2000开发版的安装过程,此处略去。

    疑问1:创建DB Server必须要在TestDirector服务器上安装和配置SQL Server客户端吗?

    为了解答心中的疑问,我在安装TestDirector了的机器上未安装SQL Server2000开发版。

    这次我们选择TestServer作为DB Server。

    打开浏览器,输入http://tdserver/tdbin/SiteAdmin.htm,回车,输入口令后进入到TestDirector的后台。选择DB Server页。点击New 按钮,添加一个新的DB Server。如图1:

    图1

    Ping一下,OK,通了!将上面的Server Alias 改为192.168.0.2,效果一样。

    一般来说,只要这里所建的DB Server可以ping通的话,那么创建MS-SQL类型的Project是没问题的。真的是这样吗?让我们来试一下。

    选择Projects页,点击Creat按钮,打开“Creat Project”对话框,输入如下信息:

    图2

    点击Next按钮,服务名字选择TestServer:

    图3

    点击Next按钮,按照提示操作,成功创建了MS-SQL类型的TD工程FromTestServer。

    结论1只要网内其他机器上安装了SQL Server2000服务程序,就能成功创建MS-SQL类型的DB Server,进而可成功创建MS-SQL类型的Project。也就是说,TestDirector服务器上不需要安装配置SQL Server客户端。

    结论2TestDirector服务不必与DB Server部署到同一台机器上(回答了前面所提到的第二个疑问)。

    实验进行到此,有人可能会问,同样的,可以用DevServer创建有效的MS-SQL类型的DB Server吗?

    让我们来试一下,看是不是如我们所想。

    如前所述,添加一个新的DB Server,如图4:

    图4

    Ping一下——咦,奇怪哎,怎么ping不通了?!

    让我们来看一看这个SQL Server与上一个SQL Server有什么不一样(参见“表1 实验环境信息”)。噢,这个SQL Server的实例名不是默认的,而是安装时指定的!那么在创建DB Server的时候,服务别名(Server Alias)应该输入什么呢?

    经过多次实验,这里的服务别名应该为“DevServer\Dev”,即:服务器名\实例名。

    服务别名输入“DevServer\Dev”,可以ping通。至此,使用带实例名的SQL Server成功创建DB Server。

    我们还有最后一个疑问:如何配置SQL Server客户端参数?配置SQL Server客户端有什么用处呢?

    对于这个问题,也是大家争论最多的地方。有的人按照TestDirector的安装手册中的说明,成功创建了MS-SQL类型的Project;有的人使用同样的配置参数,却失败了。为什么呢?

    我们先来看一看TestDirector的安装手册中是如何说明的:

    首先要在TestDierctor服务器上安装SQL Server客户端程序(废话#%£);

    其次,配置客户端参数:

    To configure the Microsoft SQL Server 2000 client:

    • Choose Start > Programs > Microsoft SQL Server > Client Network Utility. The Server Client Network Utility dialog box opens.
    • Click the Alias tab.
    • Click Add. The Add Network Library Configuration dialog box opens.
    • In the Server alias box, type TDSQLSERVER.
    • In the File Name box, type the protocol name, as configured in the Microsoft SQL Server. For example: Named Pipes.
    • In the Parameters box, type the Microsoft SQL Server name.
    • Click OK to close the Add Network Library Configuration dialog box.
    • Click OK.

    按照上面的提示,我在TD服务器上安装了SQL Server客户端,但并没有成功创建DB Server。经过多次分析和实验,我仍没有找到问题的答案(怀疑有人成功只是碰巧满足了某些条件——有运气的成分,嘻嘻),但找到了有效的解决方案。

    主要过程如下:

    第一步、在TDServer上安装SQL Server客户端程序;

    第二步、打开客户端工具,点击Alias页,如图5:

    图5

    第三步、点击Add按钮,并选择“TCP/IP”;

    这里又要分两种情况:

    • 对于未指定SQL Server实例名的机器TestServer,配置参数如下:

    图6

    • 对于指定了SQL Server实例名的机器DevServer,配置参数如下:

    图7

    第四步、进入TestDirector的后台管理,新建2个DB Server,服务别名分别为上面的“Test”和“Development”,成功创建DB Server。继而使用相应的DB Server成功创建了MS-SQL类型的Project。

    呵呵,结论出来了(好像仓促了点):

    结论3对于未指定实例名的SQL Server服务器,在配置TD服务器上的SQL客户端参数时,“Server name”输入SQL Server服务器的机器名或IP即可。

    结论4对于指定了实例名的SQL Server服务器,在配置TD服务器上的SQL客户端参数时,“Server name”输入SQL Server服务器的“机器名(或IP)\实例名”。

    结论5在TestDirector服务器上配置不同的SQL客户端参数,可以帮助TD管理员区分不同的DB Server,例如测试部门可能会有专用的数据服务器,开发部门也希望用自己专用的数据服务器,那么在SQL客户端指定容易识别的服务别名就显示出其好处了:TD管理员在创建MS-SQL类型工程的时候,就可以在根据需要选择使用测试部门的数据服务器或者开发部门的数据服务器。

    • 操作建议

    本文不准备就“如何创建MS-SQL类型的TD工程”给出什么所谓的“最佳实践”,作者只想给那些急于解决类似问题的TD使用者提供一个思路。作者给出如下一些操作建议:

    • 尽量将TestDirector服务和SQL Server数据库服务部署在同一台机器上;
    • 安装SQL Server服务(包括客户端和服务器端)时,建议使用默认的实例名,这样在TestDirector的后台创建DB Server时,可以省去不少麻烦;
    • 如果SQL Server的实例名是默认的,则在TestDirector的后台创建DB Server时,“Server Alias”的内容为安装SQL Server的机器的名字或IP;
    • 如果如果SQL Server的实例名是指定的,则在TestDirector的后台创建DB Server时,“Server Alias”的内容为安装SQL Server的机器的名字(或IP)\实例名;
    • 除非很需要,否则没有必要在TestDirector服务器上安装SQL客户端程序;如需配置SQL客户端参数,请参见“结论3”和“结论4”的内容。
    • 文中所说的方法同时适用于TD7.6和最新的TD8.0。

    由于作者使用TestDirector的时间也不过1年,所以文中的观点可能是浅薄甚或是错误的。如果对本文所描述的方法您还有不明白的地方,或者您认为文中描述的方法有错误之处,或者您愿意和作者进一步讨论关于TestDirector的使用技巧,请联系我:

    Email:snowers@sina.comQQ:6440520
  • TestDirector项目数据迁移(转载)

    2007-06-26 09:48:12

     
    TestDirector项目数据迁移
    ――让您的TD项目活起来

    作者:单吉勇  林万枝

    【摘要】TestDirector, (以下简称TD)它是Mercury Interactive 公司推出的基于WEB浏览器环境下的测试管理工具。通过TD的流程控制可以规范软件企业的测试流程、改善测试质量、减轻测试人员的负担、提高工作效率。在接触TD过程中仍然存在着很多未知领域等待着我们这些从事软件测试工作的同行去研究去拓展,如何更有效的使用TD提高我们的测试管理,将是我们继续研究关注的方向。本文总结了我们在移植TD项目方面的一些经验和技巧,希望对大家有所帮助。

    【关键词】项目移植集成工作环境分布式工作环境

    这里我们先将以上的几个名词解释一下:

    项目移植:这里说的项目移植是指将已经建立的TD项目整体文件在保证数据安全和完整的前提下移植到其他服务器的过程,这个过程包括以下几个方面(1)数据库的移植(2)项目文件的移植(3)项目配置文件的移植。经过移植后的TD项目可以实现双机备份的功能。

    集成工作环境:我们把TD服务程序和TD 使用的数据库存放在同一台计算机上的这种工作环境称为集成工作环境。这种工作环境节省成本,维护较复杂,不利于数据的安全性。

    分布式工作环境:我们把TD服务器程序和TD后台使用的数据库存放在不同机器上,也就是使用单独的一台计算机作为TD项目的数据库服务器,TD服务程序通过网络访问数据库服务器,这种工作环境称为分步式工作环境。这种环境的成本较高,但是利用维护,数据的安全性较高。对一些专业性的企业尤其是需要将TD开放到Internet上,我们建议使用这种工作环境。

    移植说明

    基于IIS WEB服务下的TD服务程序支持的数据库有ACCESS,SQL SERVER、SYBASE、ORACLE。由于ACCESS数据库的迁移比较容易本文就不介绍,本文主要讨论SQL SERVER数据库的移植。掌握SQL SERVER数据库类型的TD项目移植,对ORACLE、SYBASE类型数据库的项目移植工作也能做到触类旁通。下面大家就跟我们一切进入TD项目移植的具体工作吧!

    下面的移植工作,我们选用了一个名为:E-CIS的项目进行实例移植,同时我们将其他计算机上的TD项目(SAAA、SIMS、E-ICID)与E-CIS进行了合并。

    。集成工作环境的数据迁移

    1、拟分析产生的原因和解决方法

    产生的原因:

    由于我们配置的TD服务器与数据库服务器是同一台计算机,一旦计算机发生故障,TD项目中的数据既便是备份出来也很难恢复,其主要原因是:

    • 使用TD建立项目时,TD会在数据库中自动建立一个名为TD的用户,我们运行的E-CIS项目中所有的表都是由TD这个用户建立的,无法删除和添加这个用户。
    • 在SQL查询分析器中可以看到所有相关的表都是td.*的格式,这样会造成如果SQL查询分析器是以其他用户登入,执行select * from all list出现错误。出现一定要加前缀后才能查询出来数据问题,这个就是造成恢复数据库后即使其他项目都配置正确,但TD依然不能正常使用的一个重要原因。
    • 在安装TD后会在安装盘符:\Program Files\Common Files\Mercury Interactive\Domsinfo目录下,有一个用来存放系统信息的ACCESS数据库Doms.mdb,这个数据库由TD创建,并且是经过加密的,它存放着TD所有的配置信息。这个数据库是是否能够成功恢复TD项目的一个重要因素。

    2、移植前的备份工作

    在正式移植之前,我们首先要做好数据的备份工作,这也是我们移植工作的一部分,虽然我们现在的移植技术已经相对较成熟,但是我们还是要建议大家移植之前的备份是很有必要的。备份主要备份以下的数据:

    .备份DomsInfo目录;

    默认在C:\Program Files\Common Files\Mercury Interactive下。这个目录包含了Doms.mdb文件(用户信息和工程列表)、connection strings(连接字符串)、parameters(参数)、global style sheets(全局风格表)、the database template(Empty_DB.mdb)(一些临时数据)

    .备份TD项目安装文件;

    TD_Dir包含每个工程的自动测试、附件、设置、风格列表。默认在C:\TD_Dir\Default目录下,打开这个目录可以看到TD的工程文件,我们需要将这些工程文件备份下来。

    .备份项目数据库;

    备份项目用的数据库文件。

    3、移植工作

    移植工作分为四个部分:

    ――数据库的迁移;

    ――建立访问数据表文件的TD用户;

    ――修改TD的项目配置数据库(Access);

    ――修改Project中的INI文件。

    1)数据库的迁移:

    数据库的移植目的是:将项目数据库从原来的计算机移植到新的计算机。

    具体思路:通过SQL Server 集成的导入和导出数据功能将原数据库文件导入新的SQL Server服务器中。在这个过程,原表中由TD用户创建的表也会更改为DBO用户创建。例如:数据库中的表ALL_LISTS原来由td用户创建,移植后ALL_LISTS表的用户更改为dbo这样问题也就解决了。

    我们现在开始图解数据库的操作:

              从开始菜单中打开“导入和导出数据”如图:
       

             单击 “Next”

       

             选择要恢复的数据源后单击“Next”

       

       设置数据库恢复到的位置,注意:需要在数据库 这里设定数据库被恢复的名称,点击    

       

              建立数据库名称后,单击确定后,再“Next”按钮:

       

             再“Next”(这个选项选择第三项更具有完整性)

       

             选择需要恢复的数据表后(在这里选择全部表),再”Next”:

       

             准备开始恢复,单击“Next”:

       

             单击”Finish”按钮,开始恢复:

       

              恢复成功后出现提示:

       

    数据库恢复完成。

    2)建立访问数据表文件的TD用户:

    建立td用户的目的是:使td用户具有访问新恢复项目数据库的权限。

    具体思路:建立一个名为td的用户,使这个用户具有访问TD项目数据库的控制权限,TD通过这个用户对项目数据库进行增、删、改的操作。

    打开企业管理器,在目标数据库计算机中建立TD用户,并且设定TD用户访问的数据库。

       

            在登录项中新建用户,在弹出的对话框中设定td用户相关的属性,如:

       

    设定的密码可以根据用户确定,这里设定为:tdtdtd;在“服务器角色”中设定td用户的权限,我们给出建议设定为“System Administrators”:

       

                  完成“服务器角色”的设定,为td用户设定数据库访问的权限:

       

    设定td用户能够访问TD项目的数据库和Master数据库。设定完成后,确认td用户默认数据库是否为Default_e-cis_db

    设定完成。

    3):修改TD的配置项目文件(Access):

    修改配置文件目的是:将项目文件(TDDIR目录下存在的项目文件)和项目数据库进行关联。

    具体思路:修改ACCESS数据库中每一个配置参数,使TD项目文件和项目数据库关联,通过这个操作我们还可以实现多个TD项目合并删除的功能。(在这里我们就不详细介绍,有兴趣的朋友可以研究一下)

    在TD安装的计算机中的C:\Program Files\Common Files\Mercury Interactive\DomsInfo目录下打开doms.mdb文件,此文件是经过加密处理的,其密码为:tdtdtd

    打开后可以看到相应的表:

       

    这些表,存放着TD所有的配置信息,是很重要的,我们根据自己的工作环境实际配置这个表,其中需要修改的表是:DBSERVER、DOMAINS、PARAMS、PROJECT和TDSERVERS这五个表。

    a.DBSERVER表中主要修改DBSERVER_NAME(目标数据库服务器的IP如本例为10.168.188.151)、DB_USER_PASS(用户密码如tdtdtd)、DB_ADMIN_USER(管理用户名如td)和DB_ADMIN_PASSWORD(管理用户密码如tdtdtd)字段的值,如下图:
       

          b.DOMAINS表中主要修改PHYSICAL_DIRECTORY字段的值。(基本上不要修改)

       

         c.PARAMS表中主要修改PARAM_VALUE字段的值。(基本上不要修改)

       

    d.PROJECT表中主要增加或修改一个记录就行了,其关键字段表示的意思是PROJECT_ID(项目ID号不能重复),PROJECT_NAME(项目名称),DB_NAME(项目对应的数据库名称如本例的default_e_cis_db),DB_TYPE(数据库类型1为ACCESS,2为SQL SERVER),PHYSICAL_DIRECTORY(TD服务器中的共享目录如本例为\\10.168.188.152\td_dir\default\e_cis、DB_USER_PASS(TD用户密码如本例为tdtdtd)、DBSERVER_NAME(数据库的IP地址)。

       

         e.TDSERVERS中主要修改DBSERVER_NAME、TD_IP_ADDRESS

       

    说明:以上修改是针对移植工作修改的表,如果我们需要将分布在多台计算机上的TD项目合并移植到一台服务器上,还需要修改ACCESS数据库中的SEQUENCES表中的USER_SEQ字段的数值,这个字段是用来控制用户数量,如果数值太小TD部分用户就出现无法登录的现象。

       

    总结:修改的内容还需要根据自己的实际情况进行修改,我这里只列出常修改的一些字段。

    4):修改Project中的INI文件:

    修改INI文件目的是:ini文件保存数据库信息,TD程序信息,项目名称以及相关的内容。

    具体思路:修改ini文件配置参数,使TD项目文件和项目数据库关联。

    将C:\TD_Dir\Default目录下面的E-CIS项目文件,拷贝到备份的计算机中,然后修改E-CIS文件夹内的Dbid.ini文件:

    Dbid.ini 内容:

    [General]

    Database_Type=MSSQL

    Created_Date=08/11/04 15:44:39

    Created_By=td

    AliasName=E-CIS

    Database Name=default_e_cis_db

    Database Server=10.168.188.229

    Domain Name=DEFAULT

    SendAllQualified=Y

    Has_VCS_DB=Y

    主要修改的内容是:

    Database Name=default_e_cis_db

    Database Server=10.168.188.229

    按照实际情况填写这些信息,就ok了。

    总结:通过以上的介绍,我们集成工作环境的移植工作就已经完成了。经过这样的移植,我们可以实现TD项目的双机备份,双机备份可以让我们的数据更安全、更有保障。

    .分布式工作环境的备份和恢复方法

    分布式工作环境的项目移植相对集成工作环境移植更简单,在这里我们不详细介绍,相信大家看过集成工作环境的移植对分布式移植不在话下了。

    我们对分布式工作环境移植的思路:

    • 强调首先备份项目的数据。
    • 移植TDDir目录下的项目文件到新的服务器上。
    • 复制DomsInfo目录到新服务器C:\Program Files\Common Files\Mercury Interactive下。
    • 修改这个目录下Doms.mdb文件的参数。(修改的详细方法见集成工作环境的移植)

    总结:相对集成工作环境移植来说,分布式结构移植少了数据库的移植,可以继续使用原有的数据库,在移植过程中数据库的移植是移植成功与否的关键因素之一,少了这个过程相信大家移植更为方便。

    【小结】以上我们介绍了两种结构的移植工作,经过上述修改项后,迁移数据的工作就已经成功,td服务器可以访问迁移后的数据库。通过移植工作,同时可以解决TD项目的双机相互备份的问题,保障数据的安全性。

    再次备份TD项目,只需要将原来TD后台数据库表中的数据导入另一台计算机中的数据库中,就可以实现。

    【作者的话】针对项目移植的操作方法和注意事项介绍到此结束。由于我们文笔有限,可能有所疏漏之处,希望大家包涵。如果在以后的工作中,有关TD方面的问题也可以和我们联系。我们的E-MAIL是:

    单吉勇:shanjiyong@shinetechnology.com

    林万枝:linwanzhi@shinetechnology.com

     

    看毕:有时间实践一下。。。

     

  • TD8.0学习2007-06-25

    2007-06-25 17:01:48

    1、安装成功(见转载扫盲篇)

       IIS安装、SQLServer2000安装、最后是TD

    2、TD配置

       补充(20070626):先创建DB Servers!再创建项目

       创建项目: Create Domain、Create Project(包括配置数据库SQLServer2000我是新增的没有用TDSQLSERVER)

       创建用户:这里仅仅是类似于新增人员的功能,没有具体到该人员参与到什么项目中

       上面的是由Site Administrator进行配置

       所以要用每个project的admin用户去进行配置Group and Users (包括他们的权限)

     

  • TD简单安装步骤(扫盲贴)

    2007-06-25 12:51:43

     
    作为MI的三大产品之一,TD在BUG管理上和需求的管理上都有一定的独到之处.大多数的开发者和测试人员大多都是使用TD,而没有实际的安装过.下面我把我安装TD的过程负责给大家,权当扫盲,让大家们见笑了!

    一. 操作系统的准备
    由于要使用IIS和SQL SERVER数据库,考虑到运行的稳定性,选用的操作系统为WIN2K SERVER版.

    二. 安装IIS
    具体安装IIS的步骤可参见附件一,其中对IIS的安装有很详细的说明.
    值的说明的是,安装完IIS后,一定要在IIS服务器上设置一个虚拟路径,然后在别的机器上进行HTTP连接,以确认IIS安装的有效性.


    三. 安装SQL SERVER
    SQL SERVER用作是TD的底层数据库,用来存储TD的相关数据,我使用的版本为2K开发人员版.
    至于SQL SERVER的安装就很简单了,而且相关资料也很多,就不多说了.


    四. 安装TD
    我使用的TD版本为8.0 with SP1, 虚拟过来大约300多M, 没有要求我输入论证口令等信息.在安装过程中,基本上都是一路NEXT点击下来,最后安装成功.
    在安装过程中,有三点说明一下:1) 最好设置一下管理者的口令; 2) TD会在IIS的本地网络中添加一项TDBin的目录,同时产生本地网络访问目录.TDBin就是以后所有要使用TD的目录; 3) TD会在SQL SERVER数据库中添加一个新的数据库???????,用来存储TD数据.

    通过努力,TD很顺利的就安装成功.没有打TD SP2补丁包(因为自己也不知道改了什么),就先用着吧.这时在别的机器上输入TD服务器的路径http://192.168.12.161/tdbin,就可以进入TD的使用了.

    刚刚安装完的TD只有一个Domain,名称叫Default; 其下面只有一个project,名称叫TestDirect_Demo,而在用户里,有admin用户,基本上没有其它的用户.

    使用admin,进入到TestDirector administrate,对TD进行进一步的操作,包括添加新Domain, user, project, 如何导出信息,生成报表等.

    在安装过程中,可能太顺了,没有出现像坛子里大家的问题,可能使用的不多吧,嘿嘿,明天要细细的设置和用一下,对了,还忘了要更新一下字体,否则看着太难看了.
  • 牵挂(超级超级的推荐。。。醉了)

    2007-06-24 22:55:06

    一般我只会买非常有收藏价值的光翘?A href="http://www.sing8.com/cd/1/5812.htm" target=_blank>买了一张正版的光碟,发现一首歌很好听

    正面

    image 

    反面

    image 

    01.如果还有明天(信,薛岳,柯有伦)
      02.让每个人都心碎
      03.痴痴的等
      04.爱情36计(信,小丸子)
      05.牵挂
      06.摆开烦恼
      07.变
      08.黑色柳丁
      09.让每个人都心碎(Reprise)
      10.我期待(信,戴爱玲)
      11.棋王(信,Keith Stuart) <新歌>
      12.你的背包 

    专辑名称:Special Thanks To… 感谢自选辑
    演唱歌手:信
    唱片公司:艾回唱片
    发行时间:2005年09月30日
    专辑语种:国语专辑1CD

      昨天 音乐是他追求理想的信念
      今天 他用歌唱感谢一路以来相信他的每个人

      信乐团主唱“信”首张个人专辑,收录11首全新编曲跨世纪华语经典+2005全新单曲

      这张‘Special Thanks To…感谢自选辑’不只是一张经典好歌的再度诠释;除了是“信”奔放、低吟、狂烈的歌声展现,是“信”人生里不同阶段的故事与心情缩影,也是他十几年来追求音乐梦想过程中的酸甜苦辣人生纪录~~。感谢这一路来曾经启发、或激励、或相挺他的所有人 Special thanks to__ 一路以来相信他的每个人。

      每一首好歌,背后都有它深刻的灵魂~~唱的人,听的人,各自在其中寻找让他们动容的理由。这张“Special Thanks To…感谢自选辑”不只是一张经典好歌的再度诠释;除了是“信”奔放、低吟、狂烈的歌声展现,是“信”人生里不同阶段的故事与心情缩影,也是他十几年来追求音乐梦想过程中的酸甜苦辣人生纪录~~

      有阻碍、有甜美、有困境、有热情……因为有逆顺时尤其甘美;因为曾经低头看着脚底抬头仰望时,天空特别清澈。感谢这一路来曾经启发、或激励、或相挺他的所有人Special Thanks To…一路以来相信他的每个人。


    ⊙“信”首度单飞推出个人首张专辑与薛岳跨时空对唱向摇滚不死鸟致敬

      “信乐团”的主唱阿信将以单名“信”发行个人首张专辑“Special Thanks To…感谢自选辑”,专辑里收录了“信”人生里不同阶段对他影响颇深的歌曲,不仅是重新诠释经典好歌,这11首歌也是“信”十几年来追求音乐过程中的缩影。同时“信”也要以这张专辑感谢在他的音乐路上曾经启发、激励或相挺的所有人,所以将“信”的个人首张专辑取名为“Special Thanks To…感谢自选辑”。而为了与“信乐团”有所区隔,也特别以单名“信”发行个人专辑。“信”的首张个人专辑预购将赠送“信”亲笔写的手稿信纸,“信”亲笔写上了“这些歌都是我人生中快乐与悲伤的回忆”与歌迷分享他在音乐路程上的点滴。

      在“信”个人首张专辑“Special Thanks To…感谢自选辑”中,“信”重新诠释了薛岳的“如果还有明天”、黄大炜的“让每个人都心碎”、杜德伟的“痴痴的等”、蔡依林的“爱情三十六计”、伍佰的“牵挂”、印象合唱团的“摆开烦恼”、苏芮的“变”、陶喆的“黑色柳丁”、张雨生的“我期待”、陈奕迅的“你的背包”等经点歌曲。每首歌都在“信”的音乐过程中扮演了很重要的角色。薛岳是“信”自青少年时期心目中摇滚斗士,也是“信”的音乐启蒙,这一次特别透过薛岳当时参与的“幻眼合唱团”的团长韩贤光取得薛岳当时演唱的母带,同时也经过薛妈妈的首肯“信”得以重新诠释“如果还有明天”这首歌,同时也运用后制的技术让“信”得以一偿宿愿与心目中的偶像对唱“如果还有明天”,同时在这首歌里也请来柯有伦以 RAP 的方式一同演唱。由于今年是薛岳逝世 15 周年,“信”也以重新诠释这首歌来向这位摇滚的不死鸟致敬。在专辑内页里,“信”也亲笔写了一句话送给薛岳,表示:“薛哥:你种了这棵摇滚树,我一定会让他长大。一定!”

      除了“如果还有明天”之外,也收录了许多首对“信”来说很有意义的歌曲,如“痴痴的等”这首歌是当时“信”在外岛当兵,与队上兄弟望眼欲穿思念台湾的深刻心情。“让每个人都心碎”这首歌则深具“信”当时在台中驻唱五年的深刻回忆,当时是“信”的低落期,这首歌成了他最大的依靠。“我期待”这首歌则对“信”的演唱方式有很大的启发,当年张雨生上台领“全国热门音乐大赛”的“最佳主唱”奖的时候“信”就坐在台下,张雨生高亢的嗓音让“信”深感震撼。同时“信”已自弹自唱的方式重新诠释陈奕迅的“你的背包”,“信”表示是想要感谢陈奕迅从“信乐团”出道就一路提携,让他们有今天的成绩。而虽然专辑名称“Special Thanks To…”与陈奕迅曾出版的专辑名称撞名,“信”表示无所谓,因为这张专辑也就是想送给陈奕迅,感谢他一路的支持。

      “信”单飞发行个人首张专辑,首次一个人工作的他还是有些不习惯,在做访问时还是习惯说“我们”,然后回头看看才发现应该是“我”,而在进行拍摄封面照时,在化妆发型时还疑惑的询问工作人员其他团员怎么还没到。而这一次“信”推出个人专辑单飞不解散,“信”也透露之后每个团员都有可能推出个人专辑。而这一次单飞“信”也够义气的表示通告费 1350 还是会除以 5,和其他团员一起分,由此可见“信乐团”坚固的革命情感。


    ⊙信“如果还有明天” 薛岳珍贵画面收录

      “信”推出个人首张专辑“Special Thanks To…感谢自选辑”,其中完成了他多年来的梦想,与他的偶像薛岳透过现代的音乐技术得以跨时空对唱“如果还有明天”,而为了拍摄这支音乐录影带,唱片公司花费了许多心力四处向薛岳生前的好有借调资料,甚至专程开车南下拜访薛妈妈,才取得许多薛岳生前珍贵的照片与画面。‘信’也特别感谢薛妈妈的首肯,除了借出“如果还有明天”的音乐母带,也借出了薛岳的珍贵照片与告别演唱会的珍贵画面。让这一次的跨时空对唱更为完美。‘信’也表示他一定会诠释“如果还有明天”这首歌,无论是演唱或是音乐录影带的演出,因为“信”觉得薛岳虽然走了,但他一定还是很关注他的音乐传承。‘信’透露,当时在录音室录制“如果还有明天”这首歌时,工作最后阿信礼貌性的问了一句:“老大,这样你满意吗?”当时录音室里并没有开电扇,但“信”明显的感觉到一阵风吹向他,满怀敬意的“信”知道薛岳同意了,之后的后制工作,“信”也花了很多时间将这首歌做到最好向前辈薛岳致意。


    ⊙向薛岳致敬 工作人员心生敬畏

      而为了将“如果还有明天”的音乐录影带完美呈现,导演也花了许多心力打造舞台及进行大量的后期制作,让“信”穿越时间走廊,时间走廊两处投射出薛岳生前的珍贵画面,“信”在音乐录影带里内敛的演出及时而低头沉思的表演里,充分表现出一股淡淡的对薛岳的怀念与致意。而除了“信”之外,所以工作人员在制作“如果还有明天”的音乐录影带时都是战战兢兢的。MTV 的导演与美术在看到了从薛妈妈那里拿到的薛岳告别演唱会的画面时都非常惊讶,因为没看过薛岳告别演唱会的导演与美术,为音乐录影带搭的舞台竟然与薛岳的演唱会舞台相似,让工作人员非常惊讶,同时也开心这样的雷同听到了许多处让音乐录影带更好呈现。


    ⊙小丸子首度现声 父女档合唱“爱情三十六计”

      而这一次的专辑里,“信”除了与偶像薛岳跨时空对唱之外,也首度让女儿现声,与小丸子一起合唱“爱情三十六计”。很多人会问“信”为什么会重新诠释与他摇滚形象不同的歌曲,“信”表示:“这一首歌是要送给女儿的礼物。”女儿在他的音乐路上也扮演了很重要的角色,他也要谢谢小丸子带给他很多想法的改变。“信”表示“爱情三十六计”是小丸子平常最喜欢唱的歌曲,为了帮小丸子留下多一些童年纪录,“信”花尽脑筋、连哄带骗让小丸子进录音室,为了克服小丸子对麦克风的不适应,“信”录音前半段都在用麦克风跟小丸子讲故事,在最后录音大功告成之后,“信”满怀经验的表示,对付大人要36计,对付小孩则还要多上一计,开玩笑的表示这首歌应该改名叫“爱情三十七计”。而小丸子的童音搭配上“信”的狂放,让“爱情三十六计”这首歌有了不一样的味道,表现也更为丰富。


    ⊙强烈推荐

    ★ 如果还有明天

      信 VS 薛岳/柯有伦 跨世代的摇滚传承 划时空的铁汉柔情

    ★ 痴痴的等

      杜德伟 KTV 抒情金曲 信的亲身体验 全新熟男深情版

    ★ 爱情36计

      蔡依林冠军舞曲全新摇滚版 小丸子空前献声父女首度飙歌

    01 如果还有明天 - 信/薛岳/柯有伦
    02 让每个人都心碎
    03 痴痴的等
    04 爱情36计 - 信/小丸子
    05 牵挂
    06 摆开烦恼
    07 变
    08 黑色柳丁
    09 让每个人都心碎 (Reprise)
    10 我期待 - 信/戴爱玲
    11 棋王 - 信/Keith Stuart (新歌)
    12 你的背包

    超级的迷恋now...忍不住还是上来发

    牵挂著你是那颗我的心
    飘呀飘地在你面前捉摸不定

    牵挂著你是那份我的情
    吹呀吹到你的眼前我的心

    我不愿看到你那湿润的眼睛
    怕我会忍不住疼你怕你伤心

    我不愿听见你说寂寞的声音
    怕我会忍不自你说我的真感情

    牵挂著你是那双我的手
    越过你的长发越过你心窝

    牵挂著你是那份我的温柔
    飞过你的肩膀飞过你的手

    我不愿看见你独自离去的身影
    怕我会忍不住牵你手将你带走

    我不愿看到你依依不舍的表情
    怕我又会忍不住再停留怕你难过

    你像盛开花朵绽放整个天空
    温暖著我将我拥抱在你的怀中

    不愿承认是我最深情的脆弱
    能否与你一生守候



    你像盛开花朵绽放整个天空
    温暖著我将我拥抱在你的怀中

    不愿承认是我最深情的脆弱
    悲伤的我从此漂流

    舍不得你是那颗我的心
    飘呀飘地在你面前捉摸不定

    舍不得你是那份我的情
    而徘徊在你面前属於你的我
    爱你


     

    阿信版本的

    还有这个是在线欣赏

     

    伍佰版本的

     

    个人超级的喜欢阿信版本的,虽然说是翻唱的,可是我觉得他像是在诉说着一个自己的故事,把那种细腻的感情表达的淋漓尽致,伍佰的却是淡淡的,各有各的特色吧。

    再说一句:强烈推荐。



    阿信《Special Thanks To…感谢自选辑》
    歌手:阿信
    专辑:Special Thanks To…感谢自选辑
    公司:AVEX艾回唱片
    发行时间:2005年11月26日

    yi?他不是单飞是近半年的时间吗?为乜出个人专辑是05年?

    莫非是信乐团之前?

    不管,我是信的FANS,也是唯一的一个

     

     

  • 在WinRunner 7中识别Delphi控件(转载)

    2007-06-22 17:50:07

    原文

    在WinRunner 7中识别Delphi控件

    作者:海松宝  来源:网络 

    优点:
     不必购买昂贵的Addin即可识别相应的控件,并进行测试脚本的录制和回放;
     可以自定义识别大部分的常用控件,而且可以保存下来供长期使用;

     缺点:
     应用程序中控件的位置是固定的,不能随着窗口或分辨率的变化而变化;
     一个窗口中不能有两个同类的控件位置相同;
     部分控件还是不能识别;
     虽然有不少缺点,但总算可以不必购买昂贵的Addin就录制和回放大部分的自动测试脚本了。 

    以下以Delphi中的TEdit控件为例,进行说明。

    步骤:

    第一部分 如何识别Delphi控件

     查看WinRunner本身的识别情况。
     1.1 运行WinRunner,打开菜单【Tools】-【GUY Spy】,进入GUI Spy窗口;
     1.2 点击“Spy”按钮,在要识别的控件(TEdit)上点击左键,GUY Spy窗口中显示控件的属性,如下图:

     
     1.3 我们可以看到GUI Spy识别不出TEdit控件的类,而是认为它是一个Object;

     增加新的类

     2.1 推出GUI Spy后,打开【Tools】-【GUI Map Configuration】,进入“GUI Map Configuration”窗口,如图:



     2.2 点击“Add”按钮,出现“Add Class”窗口;
     2.3 点击手形按钮,然后将光标移到指定的控件上点击左键,然后点击“OK”按钮,返回“GUI Map Configuration”窗口,窗口中增加了新增的Class;
     2.4 选中刚刚增加的Class(TEdit),点击“Configure”按钮,进入“Configure Class”窗口;
     2.5 选择“Mapped to Class”为该对象所继承自的Class(Edit),选择“Available”中的x属性,点击“Obligatory”下的“Insert”按钮,增加x属性,同样增加y属性;


     2.6 点击“OK”按钮,返回“GUI Map Configuration”窗口,再点击“OK”按钮,返回到WinRunner窗口;

    重新用GUI Spy识别TEdit对象,发现识别出来的Recorded属性中Class为Edit,位置也记录下来,而All Standard属性中有了Value属性,这是测试中经常用到的。

    可以用同样的方法将其他控件的类增加,以便测试时能够正确识别和回放。

     第一部分的内容就讲完了,我想一些看了的朋友已经迫不及待地在制作其他控件的类了吧!不过马上就会有人说:“怎么保存我制作的内容呀!我重新运行WinRunner时这些内容就不在了,如果每次都要这样的话,那有什么用呀!”

    不要急,在第二部分,我将要讲到如何将这些类做成能够永久识别的内容。

    第二部分 制作永久识别的内容

     在第一部分中我说到了如何识别Delphi控件,可是不能保存。其实,第一部分的主要目的是要让大家知道该怎么识别Delphi控件,在第二部分,我将向大家说明如何将这些类做成能够永久识别的内容。以下是具体的步骤:

    在第一部分的步骤 2.5,添加好属性后,我们可以看到在窗口下方的“Gererated TSL scrīpt”框中有几行脚本,这就是让WinRunner能够正确识别控件的关键地方了,我们先把这三句脚本的前面两句Copy下来(干什么用?先别急,会告诉你的!);

     
     然后,我们打开WinRunner的安装目录,在“lib\vbinit”这个子目录下面,我们可以看到一个名为“scrīpt”的文件,用UltraEdit编辑这个文件,可以看到文件中有很多的脚本,这就是第二部分的关键所在了;

    找到以下两句话:
     #VB objects supprt
     #OCXs that are mapped can be found in 'oleinit'然后将我们刚才Copy的两句脚本粘贴在这两句话的前面,保存;

    重新运行WinRunner,启动时加载 VB 的 Addin ,然后选择用 GUY Spy 再对控件进行识别,怎么样?可以正确识别控件了吧!再用第一部分的方法,将各种控件的类增加,然后将“Gererated TSL scrīpt”框中的前两行脚本 Copy 下来粘贴到这个文件中;

    编辑并保存好这个文件之后,还有一个注意事项就是:运行WinRunner时,要加载 VB 的 Addin。当然,你愿意将脚本保存到 PB 的scrīpt文件中,然后加载PB的Addin,我也是没办法的咯!

    好了!方法已经讲完了,希望能够对大家有所帮助,在节省银子的同时能够好好学习、利用WinRunner这个强大的功能测试工具。

  • 安装WR 8.2 及Delphi插件步骤

    2007-06-22 09:11:07

    安装WR 8.2步骤:

    1) run ".\setup\autorun.exe" to install

    2) 选择14天试用版本,然后next、next(a serial enter: 9357-2820602186)。

    3) 不要选择“立即注册”,不要重启。

    4) 运行破解文件,  这个是破解文件,我以jpg的方式上传,只要下载之后更改后缀名即可。

    5) 重新启动。

     

    安装Delphi 插件for WR8.2步骤:

    WR的DELPHI插件再我印象中有两部分,他和ROBOT的实现方式同样,插件其实有一个DELPHI的UNIT单元,通过这个单元来和WR通信。一般在网络上看到的插件,不是严格意义上的插件,只能说是把识别第三方控件的一种方法,不可识别控件映射为标准控件,用脚本来完成。
    就是写了个scrīpt,在WR初始化的时候,直接调用。这种方法其实也不能完全解决所有的控件问题,有些没有包含再内的第三方控件,让需要你添加脚本映射为标准控件来解决。

    WR提供的DELPHI ENABLER其实也无法识别所有的对象属性,他只能识别DELPHI中对象的PUBLISH属性。这个MI公司提供的单元实现方式的原理和ROBOT的ENABLER的实现方式不同,通过文件映射的原理来实现的。不是很稳定

    其实通过上边网络流传的ADDIN,其实告诉我们解决不可识别对象的方法有,MI提供的插件,把第三方控件影射为标准控件,还有一个方法是开发DLL,扩展WR识别对象的能力(引用转载
     
    DLL:Winrunner的自带文档中 winrunner customiztion guide中有介绍

    1)  先安装这个

    2) 再安装这个,这个比较慢。

    3) 安装的过程中会提示输入注册码是:1234-5858585858

    4) 在WINRUNNER安装目录下的LIB\将pbinit和pblib两个目录备份一份,然后再把装入的7.0的dehpli 插件重命名(原名是dlphinit、dlphlib),命名为‘pbinit’和'pblib'

    5) 运行WR会发现出错,提示:“C:\....\pbinit Error:not found in load (m_root\\dlphlib)”

    6) 在C:\Program Files\Mercury Interactive\WinRunner\lib\pbinit目录下的scrīpt文件打开,将load(m_root & "\\LIB\\dlphlib",1,1);改成load(m_root & "\\LIB\\pblib",1,1);

    7) 重启WR8.2之后,发现插件还是呈现灰色,其实'PowerBuilder'插件选项就是DEPHI的内容,勾选此项就可以了,实际使用的就是DEHPI插件。

    8) 在File->Text Properties->Add-in->看到Delphi插件选项

    9) 重启,哇!全好了。

     

     

    题外话:

    ####################################################################
    #
    #                        海松宝的 Delphi Addin for WinRunner
    #                        版本:        1.01
    #                        开发环境:        WinRunner 7.01
    #                初次编写日期:        2002年5月29日
    #                        适用于:        控件相对于所属窗口的位置不随窗口变化而改变
    #
    ####################################################################
    #
    #                        使用说明:        1. 将本脚本的整个目录拷贝到 <WinRunner Dir>\lib 目录下;
    #                                                                                2. 用 WinRunner 打开<WinRunner Dir>\dat\tslinit脚本,在脚
    #                                                                                        本最末尾增加一行代码  call delphi_addin();
    #                                                                                3. 重新运行WinRunner,即可支持本 Addin 所支持的控件;
    #
    #                        支持控件:
    #                                                1.0:
    #                                                                                tedit                                   tmemo                           TButton                         tcheckbox      
    #                                                                                tradiobutton            tlistbox                                   tcombobox         tscrollbar      
    #                                                                                tgroupbox               TRadioGroup     TPanel                          tbitbtn         
    #                                                                                tmaskedit               TStringGrid               TDrawGrid                tscrollbox      
    #                                                                                TCheckListBox TStaticText                     TControlBar        TChart         
    #                                                                                TTabControl             TPageControl     TTabSheet         TRichEdit      
    #                                                                                ttreeview                 TListView      
    #
    #                                                1.01:  2002.8.23,热心网友“初学测试”提供TToolBar的映射;
    #
    #                                                                                
    #====================================================================

    这个还没有试。。。

    刚刚发现这个文档在C:\Program Files\Mercury Interactive\WinRunner\lib\delphi_addin目录下

    厄。。。。

    在此特别感谢斑竹~

     

  • 20070621小结

    2007-06-21 17:55:00

    1. 终于会用51的超级搜索了
    2. 安装WR8.2成功
    3. 安装Delphi插件成功(这个东西真难找)

    明天把2、3写出来,总结

     

  • 聪明女人100条——下(转载)

    2007-06-21 15:43:54

     

    51 、如果决定离开一个人,行动要快一点,快刀斩乱麻;如果决定爱上一个

     

    人,时间拉长一点,看清楚是否适合你。

    52 、找专人做色彩搭配建议。不要整天灰头灰脸,让自己灿烂点,别浪费青

     

    春和娇美身材。

    53
    、不要为了任何人任何事折磨自己。比如不吃饭、哭泣、自闭、抑郁,这

     

    些都是傻瓜才做的事。当然,偶尔傻一下有必要,人生不必时时聪明。

    54
    、如果一个男人对你说他喜欢你,相信他。如果他说不再爱你,也相信他。

     

    任何时候,要告诉自己,一个不爱你的人离开,是幸运。

    55
    、任何情况下,背后不说他人是非。如果一定要你说,说好话。

    56
    、买舒适的睡衣给自己,性感一点也无所谓。

    57
    、允许偶尔看肥皂剧,但不可成为依赖。允许偶尔披头散发,但要注重场

     

    合。允许偶尔骂脏话,但只限在老友面前或者独自一人时,记得说过后

     

    忘掉那种畅快感。

     

    58 、爱护你的手,它是你的第二张脸,但不是为此你不需要分担任何家务。

                59
    、爱父母,每周一次打电话或者抽时间共进晚餐。(应该在前十条中。)

                60
    、不必为某个人选择销毁 ID 或者失踪。爱和不爱都将继续生活,结束就

     

    好好结束,何必苦了自己?

    61
    、穿有质感的衣服,找有质量的男朋友。他不一定很有钱,但是一定要能

     

    让你有安全感和开心。

    62
    、居室要有鲜花,记得换水。如果要出差,清理之后再出门,不要回来面

     

    对一屋子的蚊子和虫子。

    63
    、有空时给自己点一袭喜欢的香薰,让香味充盈房间。 愉悦。

    64
    、想吃就吃。为了保持身材让自己饿着,那是世界上最愚蠢的美丽。

    65
    、如果有可能,尽量留长发。短发确实打理起来容易一些,但始终少了些

     

    女人味。

    66
    、心血来潮时,可以帮他洗衣服,买袜子,但是不要自作多情帮他买内裤。

     

    他爱穿什么就让他穿什么。

    67
    、如果哪个男人说了让你难堪的话,原谅他。一个被原谅的男人最后会后

     

    悔失去一个像你这么宽容的女朋友。

    68
    、有一个最少两年内需要达成的目标。有目标的人生不会太无聊。

    69
    、如果很不幸遇上了一个以上床为目的,对你始乱终弃的男人,请先微笑,

     

    然后鄙视他:你是我这辈子遇见的最龌龊最无能的男人。然后用最美的方

     

    式头也不要回的离开。

    70
    、如果男人以他忙为理由,不来探你的病情,不回你的邮件,不关心你的

     

    现状,不能和你承担生活的重负,无法给你勇气。勇敢一点,自动离开。

     

    没有什么比自己关心自己来得实在。而一个不爱你的人,你付出的再多,

     

    他再好,那也不过是浪费时间和精力。

    71
    、如果有曾经喜欢你但现在已经结婚的男子对你说:他忘记不了你,你始

     

    终是他最爱的人。请镇定的告诉他:像个男人一样生活。你这样做,既能

     

    保持冷静,又尊重和爱护了另外一个女人。这会让你更有魅力。

    72
    、常常去运动。做个安静的林妹妹固然很好,但是身体健康更重要。

    73
    、不要在路上无所顾忌的吃东西,有失淑女风范(特别是啃烧烤等等不雅

     

    行为)。

    74
    、天真纯洁很好,但是不分场合的天真就会成为白痴行为。

    75
    、一定要有几个男性朋友,没有非分之想,能在受到委屈时拿胸口当沙包

     

    给你锤,你也能帮他出主意追女朋友,并可以深夜里把他从床上揪起来去

     

    很远的地方接你。当然,首先你要让他女朋友或者太太认可你,否则不要

     

    试。


    76 、学会承受痛苦。有些话,适合烂在心里,有些痛苦,适合无声无息的忘

     

    记。当经历过,你成长了,自己知道就好。很多改变,不需要你自己说

     

    别人会看得到。


     77 、家里备常用药,判断不了病情的时候,赶快去医院。

     78
    、不要等男人给你买礼物,想对自己好的时候,就自己去买。用起来会更

     

    舒心。

     79
    、不要在一个男人离开之后,企图用报复心理去生活。那只会让你的生活

     

    乱成一团。正确的做法是比从前生活的更好。并告诉他:你生活的很好,

     

    很快乐,让他不要担心。

     80
    、如果要去逛街,记得穿舒适的鞋子。善待自己是表现在细节上的。

     81
    、有时间的话,去学瑜伽或者跆拳道。前者能让你放松身心,后者可以防

     

    身。

     82
    、家里和办公室分别空出一格抽屉放零食。

     83
    、隔期清理居室和身心。多余的物品送给有需要的人,心里的不痛快记得

     

    及时清除。别让生活的忙碌和郁闷消磨了美丽容颜。

     84
    、没有丑女人,只有懒女人。不愿意用时间来装扮自己的女人,请不要对

     

    其他的美丽女人心生嫉妒不满。

     85
    、任何场合,保持应有的涵养。学会说谢谢、辛苦您、对不起。做错了事

     

    情要懂得道歉和改过。

     86
    、对于不想交往的人,不要应邀去吃饭喝咖啡,哪怕只是一块钱。没有后

     

    续发展和希望的交往,会浪费人家的钱和感情,这叫贪图享乐。贪慕虚荣

     

    的女子会让人瞧不起。如果实在碍于朋友介绍的情面挪不开,记得AA制。

     87
    、对于你不想交往的人送来的礼物,原封不动寄回去。这是原则问题。

     88
    、有自己的人生观和价值观。出现问题可以忍让并寻求解决,但是触及原

        

         则,要保持自己原则。丧失原则会让你失去生活的目的。

     89
    、能不和人争吵尽量避免。一个发怒的人是很恐怖的,会因控制不了情绪

     

    变成疯子。

     90
    、购买物件可以讨价还价,但如果对方不小心多找了你钱,要退回去。不

     

    要因贪小失去了做人的意义。

     91
    、公共场所,给人行方便,特别是老人家。你也会老去,所以尊重老人就

     

    是尊重你以后的岁月。  

     

     92 、如果没有人陪,学着一个人听音乐、看书、写文字。这是个好习惯。

                  93
    、口腔不要有异味。随身携带口气清新剂和补妆的物件。不要真的以为素

     

    面朝天是一种美。口香糖吃过后要用纸包起来,丢弃垃圾桶。明白随地吐痰

     

    是不文明行为,厉行禁止。

                  94
    、之前你放弃的人或者放弃你的人,深夜打电话给你,挂掉之后关机。如果

     

    他守在窗口,记得拉紧窗帘。不是你狠心,而是任何经历伤痛之后的分手都

     

    会有裂痕,修补得再好也无法还原。不如就让它过去。

     

     95 、爱那个爱你的人。如果只是你爱他,或者只是他爱你,趁早分开。女子不

     

    需要他人来假装疼爱,你也不需要假装疼爱某人。

                  96
    、如果可以,和相爱的人牵手漫步。在找不到之前,学会自己欣赏风景。

                  97
    、对你不情愿做的事情大声说不。比如酒席上,轮到你喝酒,而你不善,大

     

    可以茶代酒 ,而非含恨饮醉。

                  98
    、不管和谁有了矛盾和别扭,解决的时间不要超过 24 小时。否则麻烦会更

     

    多。在可以接受的范围内,先道歉。让自己做做坏人,不是件真的坏事。

                  99
    、相信一见钟情的爱情,相信总有一个人会在岁月的拐角处静静的等你。只

     

    是你要擦亮眼睛,细心寻找。 

                 100
    、做个睿智的女子。学会从容面对生活。积极面对生活 ,生活定会如你所

     

     愿,如同明早,太阳依旧会如时升起。

  • 聪明女人100条——上(转载)

    2007-06-21 15:42:44

    1、如果一个男人开始怠慢你,请你离开他。不懂得疼惜你的男人不要为之不

     

       舍,更不必继续付出你的柔情和爱情。

    2
    、任何时候,不要为一个负心的男人伤心,女子更要懂得,伤心,最终伤的

     

       是自己的心。如果那个男人是无情的,你更是伤不到他的心,所以,收拾

      

       悲伤,好好生活

    3
    、永远不要无休止的围着你喜欢的那个男人转,尽管你喜欢得他快要掏心掏

     

       肺的死掉了,也还是要学着给他空间,否则,你要小心缠得太紧勒死了他。

    4
    、当一个男人对你说:“分手吧”。请不要哭泣和流泪,应该笑着说:等你

     

       说这话很久了,然后转身走掉。

    5
    、要相信自己,善待自己,让自己的生活精彩纷呈。不要误认为是要让某个

     

       人后悔,而是为了让自己的人生更精彩。

    6
    、每天打扮的优雅从容出门,给自己带上不同的笑容。

    7
    、对善意欣赏你的男子,回报浅浅的微笑。

    8
    、女子 25 岁后,要学会保养自己的皮肤。

    9
    、如果可以不抽烟,别抽。如果可以不喝酒,别喝。

    10
    、再郁闷也不要去泡酒吧。一个孤独的女子手握高脚杯或者抽烟,会更添

     

        寂寞感与忧伤。

    11
    、不要贪慕虚荣。虚荣是一剂毒药,而且会上瘾。

    12
    、要穿高跟鞋,但是不要高的太过分。

    13
    、要有几个死党,独自一人的时候,保证还能有死党为你端茶送水。而不

     

        是声竭力的嚎叫,说爱你的那个人为什么不能来陪你。

    14、
    睁开双眼选择你的未来伴侣,如果选错了,立即分开。不要凑合过日,那

      

        样会害两个人。

    15
    不要和男人动手。第一,你动不过他;第二,和你动手的男人一定是个

     

        疯子。所以,不如不动。

    16
    、外出旅游。旅行中的心灵能更充实。


    17
    、有喝下午茶、阅读书本、听音乐的习惯。

    18
    、买适合自己的衣服、饰物。适合你的就是最好的,所以不必羡慕别人的

     

        行头。

    19
    、不要接受你不喜欢的男子送的任何礼物。

    20
    、一次只爱一个人。

    21
    、知道自己要什么,包括你爱的男人。

    22、
    宁缺毋滥。不要因为寂寞随手抓一个男人,这对你和他都不公平,而且

     

        太缺乏责感。

    23、
    对你不喜欢的追求者的示好和关心,坚定的说不和拒绝。即使他说,这

     

        不关你的 

    24、
    认真的对待你的工作。工作也许不如爱情来的让你心跳,但至少能保证

     

        你有饭 ,有房子住,而不确定的爱情给不了这些,所以,认真努力的工

     

        作。

    25、
    最少拥有五个以上可供不同颜色、款式衣服搭配的包,五双以上的鞋子。


    26、
    学会化精致淡雅的妆容。懂得出现在什么场合,着什么服装。

    27
    、已经错失的好男人不要去后悔,他们不属于你,于是你要睁大眼睛再找一

     

        个。

    28
    、不要爱上已婚却还对你信誓旦旦说会抛妻弃子迎娶你的男人。如果他们

     

        真的没感情,自然会离婚,而不是整日对你说些莫名其妙的话。

    29
    、情人节或者生日没有人送花也无所谓,不必自己去买一束让花店送来。

     

        你可以将买花的钱,买精美的礼物,送给妈妈和爸爸。

    30
    、记住你喜欢的人的生日,包括你的家人,当然还有自己。

    31
    、你可以去爱一个男人,但是不要把自己的全部都赔进去。没有男人值得

     

        你用生命去讨好。你若不爱自己,怎么能让别人爱你?

    32
    、偶尔做美女私房菜给他或者老友吃。但不要天天做,你生来不是为了某

     

        个人天天下厨房。

    33
    、闲情时候自己煮花茶喝,或者做茶点吃,放一段柔情音乐,翻阅几页好

     

        书,然后睡个懒觉,快哉。

    34
    、疯狂的事情经历一次就好,比如翻越千山万水的去看望一个人。

    35
    、没有时间和精力的话,不要乱表爱心养小动物,怠慢它们同样是种残忍,

     

        虽然我理解 你很寂寞需要一个伴。

    36
    、不要学人搓麻将。折磨身心的事情不要做。

    37
    、偶尔自己唱歌给自己听,好坏不重要,心情爽朗就可以。

    38
    、孤单的时候找好朋友聊天、逛街、吃饭。不要让孤寂淹没自己。

    39
    、如果发短信息给你喜欢的人,他不回。不要再发。

    40
    、万一脆弱的不行了,请选好哭泣的对象,不要随便借肩膀和胸膛。

    41
    、出门前,记得照镜子,检查一下着装是否协调。如果时间太紧,建议睡

     

        觉前就选好第二天穿的衣服。

    42
    、不管是和谁约会见面,约定的时间之前一定要到达。

    43
    、万一不小心喝醉了酒,不要打电话给任何人,包括死党和他。

    44
    、晚上早点回家,自己没有车,超过十点要打的士,或者让人来接。

    45
    、从现在开始,聪明一点,不要问他想不想你?爱不爱你?他要想你或者

     

        爱你自然会对你说,但是从你的嘴里说出来,他会很骄傲和不在乎你。

    46
    、平等公正的对待你和他的爱情,脚踩很多船最终会翻掉。

    47
    、一个人去看电影。买爆米花和可乐,笑翻天。或者,泪流满面。如果你

     

        喜欢体育,去看足球,哭死也没人管你,但是很轻松和畅快。

    48
    、不要24小时都想念同一个人,可以分一点给家人和朋友。

    49
    、如果喜欢一个人,在允许的情况下,告诉对方。也许得不到答案,但至

     

        少你努力过,将来不必后悔(也许后悔的是对方,呵呵)。

    50 、有固定的消遣场所,比如固定的咖啡馆、书店。让那个地方的服务生认

     

        识你,这样, 你会在孤单时有个温暖的去处。

     

  • WinRunner 100 问(转载)

    2007-06-21 15:20:14

    [Study WinRunner] WinRunner 100 问

    引用Kiki http://blog.csdn.net/imlogic/archive/2005/08/04/445491.aspx

    WinRunner在项目中的作用

    可以用WinRunner为所测试应用程序的GUI,功能和回归测试创建自动化脚本。

    1. WinRunner的测试过程

    主要包括如下6个阶段:

    1).   创建GUI Map文件:WinRunner可以通过它来识别被测试应用程序中的GUI对象。

    2).   创建测试脚本:通过录制,编程,或两者的组合创建。在录制测试脚本时,在你想检查被测试应用程序响应的地方插入验证点。

    3).   调试脚本:用调试(Debug)的模式运行测试脚本以确保它们可以平稳地运行。还可以使用WinRunner提供的Step, Step Into, Step out功能来调试脚本。

    4).   运行测试:用验证(Verify)的模式运行测试脚本来测试你的应用程序。当WinRunner在运行中碰到验证点时,它会将被测应用程序中的当前数据和以前捕捉的期望数据进行比较,如果发现了任何不匹配,WinRunner将会把目前的情况捕捉下来作为真实的结果。

    5).   检查结果:确定测试脚本的成功或是失败。在每次测试脚本运行结束之后,WinRunner会将结果显示在报告中。它描述了所有在运行中碰到的重要的事件,例如验证点,错误信息,系统信息或是用户信息。如果发现在运行中有任何不匹配的验证点,你可以在测试结果窗口中查看期望的和实际的结果。

    6).   提交缺陷:如果一个测试脚本是由于所测试应用程序中的缺陷而导致失败的,你可以直接从测试结果窗口中提取缺陷的相关信息。

    2. WinRunner 的GUI Map文件

    WinRunner利用GUI Map文件来识别应用程序中的对象。它将学习到的窗口或对象信息储存在GUI Map文件中。当WinRunner运行测试脚本时,它利用GUI Map来定位对象。它从GUI Map文件中读取对象的描述并且在被测应用程序中寻找具有相同属性的对象。

    在GUI Map文件中的每一个对象都有一个逻辑名称(logical name)和一个物理描述(physical descrīption)。对象的逻辑名称是由其类决定的。在大多数情况下,我们可以将逻辑名称看成是显示在对象上的标签。你可以修改已分配的逻辑名称当它不是十分具有描述性或太长的时候。当对象的属性发生改变时,你必须要修改其物理描述。

    GUI Map文件的扩展名是".gui"。

    GUI Map文件分为两种类型:

    · 全局GUI Map文件:一个为整个应用程序使用的GUI Map文件

    · 每个测试脚本的GUI Map文件:在每个测试脚本创建之后,WinRunner会自动为其创建一个GUI Map文件。

    我们可以通过工具菜单中GUI Map Editor来查看当前载入的GUI Map文件及其内容。GUI Map Editor 显示多个已创建的GUI Map文件和认识到的带有逻辑名和物理描述的窗口和对象。

    在录制脚本时,WinRunner会自已学习对象和窗口,并将它们储存在临时的GUI Map文件中。我们可以在General选项中指定是否需要每次都载入这种临时GUI Map。

    当我们载入一个GUI Map文件时,关于窗口和对象的信息连同其逻辑名称和物理描述都载入到内存中。因此当WinRunner在一个特定的窗口上运行脚本时,它可以用这些在内存中的信息识别对象。

    3. WinRunner的脚本语言
    WinRunner的脚本语言是Mercury Interactive’s Test scrīpt Language (TSL),这是一种类C的脚本语言。你可以通过增加另外的TSL函数和编程元素(例如Windows API)或WinRunner的虚拟编程工具(函数生成器(Function Generator))来增强你录制的脚本。


    4. WinRunner的录制模式
    在WinRunner中,有两种不同的录制模式:

    · 环境判断录制(Context Sensitive recording):通过识别GUI对象录制你在被测应用程序中执行的操作。

    · 模拟录制(Analog recording):录制键盘的输入,鼠标的点击,和鼠标指针在屏幕上精确的x,y轴

    6. WinRunner的运行模式
    在WinRunner中,有三种不同的运行模式:

    ·验证Verify:使用这种方式来检查你的应用程序

    ·调试Debug:使用这种方式来帮助你识别测试脚本中的bug

    · 更新Update:使用这种方式来更新测试脚本的期望结果或创建一个新的期望结果文件夹


    7. WinRunner的Add-In
    载入Add-Ins实际上是将在Add-In中的特殊的函数装载到内存中。当创建测试脚本时,只有这些选中的Add-In中的函数会列在函数生成器中,在运行脚本时,只有那些在载入的Add-In中的函数可以被执行,否则WinRunner将会给出一个不能识别函数的错误信息。

    8. WinRunner的验证点(Checkpoint)
    验证点可以把被测应用程序的当前行为和早前版本的行为进行比较。

    在WinRunner中有4种验证点:

    ·GUI checkpoints:验证GUI对象的信息。例如,你可以检查一个按钮是否可用或查看在一个列表中哪一个选项被选中。

    ·Bitmap checkpoints:给窗口或所测试应用程序的部分做快照,并把它和早先版本中捕捉的图像做比较。

    ·Text checkpoints :在GUI对象或位图中读取文字,使你可以验证它们的内容。

    ·Database checkpoints:基于你创建在数据库的查询,检查一个结果集的内容和列、行的数量

    Checklist文件包含了我们正在验证的对象的属性和相关信息 。gui*.chk文件包含了期望的结果,并储存在exp文件夹中。


    9. 同步点(synchronization points)
    同步点使你可以解决预期的在测试脚本和你应用程序之间的时间问题。例如,如果你创建一个打开数据库应用程序的测试脚本,你可以增加一个同步点以让测试脚本等待直到数据库中的记录载入到屏幕上。

    对于模拟测试(Analog testing),你也可以使用一个同步点来确保WinRunner在一个指定的位置重新放置窗口。当你运行一个测试脚本时,鼠标指针沿着准确的坐标行进。重新放置窗口使鼠标指针接触到窗口中正确的元素。

    10. 编译模块(compile module)
    编译模块实际上也是一种脚本,只不过它包含了一个可以被其它的测试脚本频繁地调用,用户自定义函数集的库文件。当你载入一个编译模块时,它的函数将自动的被编译并保存在内存中。其它的测试脚本可以直接调用它们。

    编译模块可以改进脚本的组织和性能。由于你在使用它们之前已经调试过编译模块,因此你的测试脚本只需要少量的错误检查。另外,调用一个已经编译的函数明显地比解释测试脚本中的函数快得多。

    当编译模块用来储存可重用的函数时,测试脚本包含了在WinRunner中的可执行文件。编译模块是不可执行的。

    在保存为编译模块时,WinRunner会自动执行一次预编译。

    默认情况下,包含TSL代码的模块的属性是“main”。主模块可以在其他的模块中被调用执行。除了当WinRunner识别到一个“call”语句时,主模块会被动态地被编译为机器代码。例如:

    call cso_init();

    call( "C:\\MyAppFolder\\" & "app_init" );

    编译模块被载入到内存中以便其他模块引用。

    reload ("C:\\MyAppFolder\\" & "flt_lib") 或load ("C:\\MyAppFolder\\" & "flt_lib");

    11. 数据驱动测试(data driven tests)
    当你测试你的应用程序时,你或许想检查它如何执行有着大量数据集的相同操作。你可以用一个运行10次的循环来创建一个数据驱动测试:每次循环运行时,它由不同的数据集驱动。为了使WinRunner 能够使用数据来驱动测试,你必须将数据连接到所要驱动的测试脚本。这就叫参数化(parameterizing)你的测试。数据存储在一个数据表格(data table)中。你可以手工执行这些操作,或使用DataDriver Wizard来参数化你的测试脚本并储存数据在数据表格中。

    数据驱动测试的步骤如下:

    ·创建一测试脚本

    ·转换为数据驱动的测试脚本并准备一个数据库

    ·运行测试脚本

    ·分析测试结果


    12. 无法识别GUI对象的原因

    WinRunner会由于以下多种原因导致不能识别GUI对象。

    · 不是标准的Windows对象
    · 没有安装所需的Add-In
    · 如果所使用的浏览器和WinRunner的版本不兼容,GUI Map编辑器将不能认识在浏览器窗口中显示的任何对象
    。。。



    14. 启动文件(start up file)

    在General Options ->Environment-> Startup文本框中,选择或输入你希望作为启动文件的 测试脚本


    15. 输入测试脚本的相关信息

    在创建一个测试脚本之前,你可以在Test Properties-> General和 Descrīption中输入和脚本相关的信息,如被测功能的类型,测试脚本的详细描述,引用的相关功能说明书文档

    16. 如何处理定制对象(custom objects)?

    定制对象是不属于WinRunner所使用的标准类之一的任何GUI 对象。WinRunner学习此类的对象为generic "object"类。WinRunner利用obj_mouse_语句来记录在定制对象的操作。

    如果定制对象和一个标准的对象很相似,你可以映射它为标准类别之一。你也可以在环境判断测试(Context Sensitive testing)时配置WinRunner用于识别定制对象的属性。



    17. 什么是虚拟对象(virtual object)并且如何使用它们?

    应用程序可能会含有一些外观和行为和GUI对象相似的位图。WinRunner利用win_mouse_click 语句来记录操作。通过定义一个位图对象为虚拟对象,当你录制并运行测试时,你可以教WinRunner将它象一个GUI对象一样对待。

     

    原文

     

  • TSL脚本规范完整版(转载)

    2007-06-21 10:31:09

    原文

    TSL脚本编写规范

     

    导言

    我们在Mercury Interactive SystemsWinRunner)中创建的脚本是由TSLTest scrīpt Language)写成的。TSL是一种强化了的类C的编程语言。它是专门设计来用于测试的。在Meercury Interactive的集成测试环境的核心中,TSL是比较高层次的,而且也比较容易使用的。它既有传统编程语言的灵活与强大,也结合了许多Mercury Interactive专门开发来用于测试的功能。

           为了使自己和他人能够比较容易的阅读和理解源程序,本文对今后TSL的编写制订了一个规范。

     

    一、排版

    1.1 程序块采用缩进风格编写

    说明:缩进的空格数为4个,不能使用Tab键。不同的编辑环境导致不同的结果。

     

    错误的示范:

    for(counter = count - 24; counter < count - 1; counter++)
    {
    list_get_item("ListBox",counter,item);
    str = str & item &
    "\r\n";
    }

     

    正确的示范一:

    for(counter = count - 24; counter < count - 1; counter++)

    {
       
    list_get_item("ListBox",counter,item);
        str = str & item &
    "\r\n";
    }

     

    正确的示范二:

    for(counter = count - 24; counter < count - 1; counter++){
       
    list_get_item("ListBox",counter,item);
        str = str & item &
    "\r\n";

     

    1.2相对独立的程序块之间、变量说明之后必须加空行

    说明:便于清晰的显示程序的结构。

     

    错误的示范:

       row1=0;
       row2=
    0; 
      
    ##open two tables
       rc =
    ddt_open(tableFirst, DDT_MODE_READ);
      
    if (rc!= E_OK && rc != E_FILE_OPEN)
          
    pause("Cannot open table");
      
    ddt_get_row_count(tableFirst,RowCount1);

     

    正确的示范:

    row1=0;
       row2=
    0; 


      
    ##open two tables
       rc =
    ddt_open(tableFirst, DDT_MODE_READ);
      
    if (rc!= E_OK && rc != E_FILE_OPEN)
          
    pause("Cannot open table");


      
    ddt_get_row_count(tableFirst,RowCount1);

     

    1.3较长的语句要分成多行书写

    说明:对大于80个字符的语句,要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读

     

     

    1.4循环、判断中有较长的语句需要划分成多行

    说明:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。

     

     

    1.5若函数中的参数较长,则要进行适当的划分

    说明:便于清晰的阅读函数

     

    错误的示范:

    tl_step("2:对比两张表",FAIL,""&tableFirst&"的第"&col1&"列第"&table_Row1&"行的值为:"&val1&");

     

    正确的示范:

    tl_step("2:对比两张表",FAIL,

    ""&tableFirst&"的第"&col1&"列第"&table_Row1&"行的值为:"&val1&");

     

    1.6不允许把多个短语句写在一行中

    说明:即一行只写一条语句

    错误的示范:

    auto a;auto b;

     

    正确的示范:

    auto a;
    auto b;

     

    1.7 条件、循环语句需要对语句块进行控制

    说明:if for do while case switch default 等语句自占一行,且if for do while 等语句的执行语句部分无论多少都要加括号{}

     

    错误的示范:

    if (rc!= E_OK && rc != E_FILE_OPEN) pause("Cannot open table");

     

    正确的示范:

    if (rc!= E_OK && rc != E_FILE_OPEN){
       
    pause("Cannot open table");
    }

     

    1.8操作符前后需要加空格

    说明:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格。采用这种松散方式编写代码的目的是使代码更加清晰。由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格。在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。

     

    正确的示范一:逗号、分号在后面加空格

    static a, b, c;

    正确的示范二:比较操作符、赋值操作符、逻辑操作符等双目操作符的前后加空格

    if (current_time >= MAX_TIME_VALUE && current_date<=DATE){
       
        a = b + c;
       
    }

     

    正确的示范三:单目操作符的前后不加空格

    if (current_time!=MAX_TIME_VALUE){
       
        a++;
       
    }

     

    1.9 ifforwhileswitch等与后面的括号间应加空格

    说明:使关键字更加突出、明显。

     

    错误的示范:

     

    if(a > 0){

        b=
    1; 
     
    }

     

    正确的示范:

    if (a > 0){

        b=
    1; 
     
    }

     

    二、注释

     

    2.1有效注释量必须适中

    说明:一般情况下,源程序的有效注释量必须在20%以上。注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。

     

    2.2脚本程序的头部注释

     

    说明:脚本程序头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等

     

    正确的示范:

     

    ###########################################################

    #  Copyright (C), 1988-1999, HSIT. Co., Ltd.

  • WR精粹(实用资料)

    2007-06-21 09:41:06

    原文

    一,新手入门类
    1,WIN RUNNER 的很old的视频教程,是个人做的
    http://bbs.51testing.com/viewthr ... &extra=page%3D1
    2,最近自学WR,写了份自学报告.
    http://bbs.51testing.com/viewthr ... &extra=page%3D1
    3,安装WR后,脚本中的汉字显示重叠????
    http://bbs.51testing.com/viewthr ... &extra=page%3D1
    4,(续)最近学的wr自学报告第二部
    http://bbs.51testing.com/viewthr ... &extra=page%3D1
    5,report中动态显示变量+提示信息
    http://bbs.51testing.com/viewthr ... &extra=page%3D1
    6,急救!怎么WR不能用了
    http://bbs.51testing.com/viewthr ... &extra=page%3D3
    7,插入gui检查点时,同一个object的不同状态为何提示mismatch?
    http://bbs.51testing.com/viewthr ... &extra=page%3D3
    8,GUI_load函数使用上的疑惑
    http://bbs.51testing.com/viewthr ... &extra=page%3D3
    9,能不能手动添加下拉菜单的属性到gui里
    http://bbs.51testing.com/viewthr ... &extra=page%3D3
    10,怎么样判断一个窗体中某个按钮是否存在?
    http://bbs.51testing.com/viewthr ... &extra=page%3D4
    11,

    二,数据库类:
    1.如何用winrunner调用excel中的值
    http://bbs.51testing.com/viewthread.php?tid=37714&extra=page%3D1
    2.winrunner对变量的检查点设置
    http://bbs.51testing.com/viewthread.php?tid=32405&extra=page%3D5
    3.WR的参数化数据库检查点
    http://bbs.51testing.com/thread-74569-1-3.html
    4.如何参数化数据库检查点和参数化SQL
    http://bbs.51testing.com/thread-72606-1-4.html
    5.Database Checkpoint Wizard 中的Creat new query不能使用的问题
    http://bbs.51testing.com/thread-72534-1-5.html
    6.这是WR与ORACLE9I的一种连接方法
    http://bbs.51testing.com/thread-12237-1-1.html

     

    三,代码经验及使用经验类
    1,求助关于txt文档中正确显示\n转义的问题
    http://bbs.51testing.com/viewthread.php?tid=37449&extra=page%3D2
    2,在WR中调用DLL 截屏函数的问题
    http://bbs.51testing.com/viewthread.php?tid=36839&extra=page%3D2
    3,Winrunner中怎么样判断输入框的字符是字母还是数字?
    http://bbs.51testing.com/viewthread.php?tid=36112&extra=page%3D2
    4,wr 调用DLL 失败返回信息,百思不得其解,向高手求教。
    http://bbs.51testing.com/viewthread.php?tid=36634&extra=page%3D3
    5,WR不能回放执行的一个控件,用了各种方法都不行,请高手帮帮忙呀
    http://bbs.51testing.com/viewthread.php?tid=36314&extra=page%3D3
    6, 关于学习用Tsl测试脚本的问题。
    http://bbs.51testing.com/viewthread.php?tid=5753&extra=page%3D4
    7, Recovery Scenarios——Simple 举例
    http://bbs.51testing.com/thread-63463-1-4.html
    8, 如何调用CALL批处理
    http://bbs.51testing.com/thread-50329-1-4.html
    9,如何把一个值传到被一个调用脚本中
    http://bbs.51testing.com/thread-72141-1-5.html
    10,有关wr延时的问题
    http://bbs.51testing.com/thread-4541-1-5.html
    11,如何控制WR自动运行脚本
    http://bbs.51testing.com/thread-42581-1-5.html
    12,WR8.0 不能识别下拉菜单怎么办
    http://bbs.51testing.com/thread-65990-1-5.html
    13,为客户化对象创建GUI 检查
    http://bbs.51testing.com/thread-57703-1-1.html
    14,奇怪的计算问题
    http://bbs.51testing.com/thread-73092-1-1.html
    15,控件的 MSW_id一直变化,winrunner无法识别
    http://bbs.51testing.com/viewthread.php?tid=36034

    四,WR文档和经验总结文档
    1,分享WinRunner使用说明(中文)
    http://bbs.51testing.com/thread-24170-1-1.html
    2,Winrunner学习资料
    http://bbs.51testing.com/thread-26568-1-1.html
    3,我的MI学习笔记
    http://bbs.51testing.com/thread-24900-1-1.html
    4,最近自学WR,写了份自学报告
    http://bbs.51testing.com/thread-35929-1-1.html
    5,Winrunner8.2英文版tutorial
    http://bbs.51testing.com/thread-67118-1-1.html
    6,分享TSL online reference
    http://bbs.51testing.com/thread-16323-1-1.html
    7,TSL脚本的编写规范
    http://bbs.51testing.com/thread-48499-1-1.html
    8,WR7.60中文使用手册
    http://bbs.51testing.com/thread-4255-1-2.html
    9,winrunner中文使用说明
    http://bbs.51testing.com/thread-34077-1-3.html
    10,WinRunner的问题搜集
    http://bbs.51testing.com/thread-76854-1-1.html
    11,WinRunner资料

    http://bbs.51testing.com/thread-77513-1-1.html
    12,WinRunner学习交流

    http://bbs.51testing.com/thread-77685-1-1.html

     

  • -_-#!!!向WR进军

    2007-06-21 09:06:33

    无奈,还是要用WR,因为QTP不太支持Delphi,而且插件找到了,还是Beta版本的,关键的问题是delphi的第三方控件很多,呼呼。。。。。。。。。。。。。。。

    要死人了

     

  • 大大的吼一声!

    2007-06-20 17:26:01

    有人会VBS不?

    提供点实用的资料吖。。。。。。。。。。。。。。。。。。。

     

    路过不要留下买路钱

    也不要留下你的小命

    麻烦留下VBS实用资料

     

    叩谢

Open Toolbar