未来已来

发布新日志

  • Rational Robot 中DataPool 的介绍与实际应用

    2008-07-05 12:51:41

    RationalDataPool的介绍与实际应用

     

    本文对datapool进行简单介绍的同时结合实际功能测试和性能测试的来讲界使用datapool。希望对广大的软件测试人员有帮助。由于写作

     

    DataPool是一种测试数据集,在测试脚本回放的时候提供给脚本的变量。datapool可以由rational产品robotTestManager创建,下边的表格列举出在robottestmanager中可以对datapool执行的操作:

     

    操作

    Robot

    TestManager

    在测试脚本中自动建立datapool

     

    创建测试脚本并产生自动数据

    修改vu脚本中的datapool设置

     

    修改datapool字段定义并修改测试数据

    创建并修改数据类型

     

    管理datapool比如改名或者拷贝

     

    倒入到出数据

     

    倒入数据

     

    备注:rationaldatapool有两种文件:txtcsv文件,创建datapool成功后会保存在

    盘符:\工程文件目录\TestDatastore\DefaultTestscrīptDatastore\TMS_Datapools文件夹下

    测试数据保存在有csv扩展名的文本文件中,所有字段信息保存在后缀名为spc的文件中,该文件由testmanager管理。

     

    datapool有两种创建方法,一种是在testmanager中建立,一种robot录制vu脚本时自动建立同名datapool,只有在robottools->session record options, 设置Generator页面generaluse datapool选项,才可以生效。下边分别介绍这两种创建和使用方法:

    一.

    建立datapool

      1.启动Rational TestManager

    2Tools>Manage>Datapool,点击New…,输入数据池名称点“确定”;

    3.在打开的Data Type Specification中添加字段定义;(字段定义说明见后)

    4.生成数据Generate Data(产生大量数据,这里默认产生100个数据)

    5.修改其中的数据Edit DataPool data

     

    其中字段定义说明:

    1) Name 指的是数据池列标题名它与测试脚本中变量相一致。如果你改变了数据池列名,也必须保证测试脚本中的变量做相应的改变;如果你不是在Rational测试环境下建立的数据池然后导入它,TestManager自动给数据池列分配缺省的名称。也必须保证测试脚本中的变量与其相一致。你可以用imedatapool字段起多字节的名字

    2) Type 标准的或用户定义的数据类型都按名称向数据池列提供其值。犹如建立数据库,先建立字段名,后改动类型。

    制定数据池列的数据类如下操作:

    a、选择标准类型或已存在的用户定义数据类型,点击当前显示的数据类型名称,然后从列表中选择新的数据类型。

    b、可以选择rational中的标准的数据类型。

    c、如果想自定义一个类型名称而不是进行选择,在用户定义数据类型前输入星号,如:*MyData;

    d、建立新的用户定义数据类型,输入数据类型名称(不要带*),然后点击Return。在你点击了Yes确定你想要建立用户定义的数据类型,

      例如:建立新的column,输入列名,输入DemoType(自定义类型),保存。这时会出现数据类型属性编辑对话框(我向Descrīption中输入描述信息,确定按钮不可用,可能是rationalbug,不知道告诉ratioanl有没有奖励),确定,出现另一个数据类型属性编辑界面,输入测试数据,退出。选中该行生成数据,testmanager会自动创建你输入的数据。

    e、建立新的用户定义数据类型。

    3) Sequence 数据类型的值的顺序被写入数据池列中。只要从中进行选择即可:-Random-随机向数据池列中写入数字和字母的值。-Sequential-顺序写出,如0123... Sequential仅仅支持数字值(包括日期和时间) 和生成的用户定义的日期类型。当你选择数字类型,必须确定其最大和最小的范围,间隔必须大于0;-Unique即其中的值是唯一的。也可定义最大最小值。

    4) Repeat 即出现在数据池列的时间,Repeat不能为0。要想设置有符号的整数和用户定义的数据类型的唯一性,设置Reapeat1。当定义唯一值时,确定生成的数在你定义的范围之内。

    5) Length 数据池列中存在的最大的数。这个长度包括小数点和负号。

    6) Decimals 定义最大的浮点数的小数位,最大的设置是6位。

    7) Interval 如果你在数据池列中设置了间隔,那么将按照你设置的顺序,而顺序变化。最小的间隔是1,最大的间隔是999999在数字数据类型下选择了Sequence,并定义了最大和最小范围,间隔必须大于0。这设置仅仅在数字设置时有效。

    8) Minimum 确定数字最小值这设置仅仅在数字设置时有效。

    9) Maximum 确定数字最大值这设置仅仅在数字设置时有效。

    10) Seed Rational Test为了计算随机值的数。相同的种子数产生相同的随机数,要改变随机顺序,改变种子数。

    11) Data File 用户定义的数据类型的路径,这个路径是自动付给你的,不能进行修改。数据类型文件存放在你的项目文件中的Data Type目录,不能进行直接修改。

    4 在设置好字段后,在No. of records to genarete:中输入要生成的记录数,然后点击Genarete Data 即可生成数据,或者点击SAVE按钮,关闭当前窗口,然后点击manage datapools>edit>edit datapool data,直接手工输入数据;

    5 这样就完成了数据池的创建,还可以执行数据池的编辑、改名、删除、导入、导出等操作;

    6 数据池有数据生成能力,但是不具备数据的计算能力。这种情况下可以利用其他工具(如EXCEL)生成数据,并保存为csv(逗号分割文件)格式,然后在manage datapools中导入;

     

    实际应用:

        开发部最近提出对现有软件系统的登陆功能进行测试。测试工程师设计测试用例,在实际工作中发现登陆系统版本基本稳定,而且功能孤立,界面在将来的版本中变化的可能性不大,所以决定测试自动化,减少人工重复劳动,提高测试效率。

    测试工程师开始利用黑盒测试方法等价类法,因果分析法,边界值法等方法设计测试用例,开发功能测试脚本,用datapool(数据池中的数据是设计测试用例的时候用到的输入值)保存测试数据。 登陆界面需要输入用户名,密码,在数据池中建立两个字段username,passwordDatapool中的数据和测试用例中输入数据相一致。

     

    第一步:创建名字为dpdatapool,假如字段name,password并自动生成数据,然后把测试用例中各种数据输入dp

    第二步:录制功能测试脚本,脚本如下:

     

    Sub Main

        Dim Result As Integer

     

        'Initially Recorded: 2004-4-24  10:59:24

        'scrīpt Name: Five

        StartApplication "xxx"

        

        Window SetContext, "Caption=登陆", ""

        InputKeys "sa"

        EditBox Click, "ObjectIndex=1", "Coords=34,9"

        InputKeys "sa"

        PushButton Click, "Text=登陆"

       

        Window SetContext, "Caption=登陆;Class=#32770", ""

        PushButton Click, "Text=确定"

        

    End Sub

     

    第三步:循环读出datapool数据,进行自动化测试,脚本如下

     '$Include "sqautil.sbh"

     

    Sub Main

        Dim Result As Integer

        Dim dp_id as Long

        Dim dp_Result as Long

       

        Dim strName as String

        Dim strPassWord as String

      

        'Initially Recorded: 2004-4-24  10:30:51

        'scrīpt Name: Four

     

        dp_id = SQADatapoolOpen ("dp", FALSE, SQA_DP_SEQUENTIAL, FALSE)

       

    dp_Result = SQADatapoolFetch (dp_id)

       

         while dp_Result <>  sqaDpEOF

                   StartApplication "xxx"

                   Window SetContext, "Caption=登陆", ""

     

               dp_Result = SQADatapoolValue (dp_id, "name", strName)

               dp_Result = SQADatapoolValue (dp_id, "password", strPassWord)

               dp_Result = SQADatapoolFetch (dp_id)

             

               InputKeys strName

               EditBox Click, "ObjectIndex=1", "Coords=34,9"

               InputKeys strPassWord

               PushButton Click, "Text=登陆"

       

               Window SetContext, "Caption=登陆;Class=#32770", ""

    查看(980) 评论(0) 收藏 分享 管理

  • DotNet的调试 三

    2008-07-05 12:20:43

       第一个侦听者把信息写入文本文件中。察看第二个。打开微软控制台在事件视图中浏览应用程序事件日志(这个就是我们在配置文件中指定的)。在这里可以看到我们应用程序的事件信息。更多的可能,在这个列表最上边。如果你双击,可以看到其中的内容。我们发现如下信息:

        图

    是输出信息更加容易阅读:

     

    有时候应用程序很复杂,为了容易理解可以格式化跟踪信息。使输出信息更加漂亮,可以使用缩排,看下面的简单代码:

    public void Callee()

    {

           Trace.WrteLine(“Callee started”);

           ……//Some internal logic

           Trace.WriteLine(“Initializing Buffer”);

           ……//Some extra internal login

           Trace.WriteLine(“Exiting Callee”);

    }

     

    public void Caller()

    {

           Trace.Write(“Caller Called”);

           …..//Some external logic

           Callee();

           …..//Some extral Logic

           Trace.WriteLine(“Initializing Buffer”);

           Trace.Write(“Exiting Caller”);

    }

    输出信息如下:

     Caller called

     Callee stared

     Initializing buffer

     Exiting Callee

     Initializing buffer

     Exiting Caller

     

    如果方法执行前后没有显示信息,我们将被这些拷贝的初始化缓存信息所迷惑。除了信息显示不清楚。为了避免不明确,我们使用Trace类支持的缩进功能。修改的代码,使用缩进:

    public void Callee()

    {

           Trace.indent();

           Trace.WriteLine(“Callee started”);

           …..//some internal logic

           Trace.WriteLine(“Initializing Buffer”);

           ….//Some extra internal logic

           Trace.WriteLine(“Exiting Callee”);

           Trace.Unindent();

    }

     

    public void Caller()

    {

           Trace.Write(“Caller called”);

           ….//Some External Logic

           Callee();

           ….//Some Extra Login

           Trace.WriteLine(“Initiallizing buffer”);

           Trace.Write(“Exiting Caller”);

    }

    输出信息如下:

     

    Caller called

           Callee started

           Initializing buffer

           Exiting Callee

    Initializing buffer

    Exiting Caller

    正如你看到的,callee方法输出缩进,很容易分开不同方法的信息。可以调用IndentUnident方法,达到分离信息的目的。

    在配置文件中修改跟踪配置:

    <configuration>

           <system.diagnostics>

                  <trace indentsize = “3” / >

           </system.diagnostics>

    </configuration>

    ------------------------------------------

    调试

    实际上调试和跟踪用得很普遍。Debug类中的方法有相同的名字的方法,这些方法实现了调试的功能。不同之处是在发布版本配置中是禁止使用的(这意味着不能产生二进制代码调用这些代码)。调试输出也可以在配置文件设置,请看下面:

    <confuration>

           <system.diagnostics>

                  <debug autoflush = “true” indentsize = “7” / >

           </system.diagnostics>

    </confuration>

    备注:调试的声明和语法和跟踪很类似。不同之处,就是把有Trace的地方替换为Debug

     

    设置调试开关

    最后讨论的主题是SwitchSwitch是有一些状态的对象。可以在配置文件或者编程的时候改变状态。Switch让你创建可配置的调试跟踪代码。最好了解Switch的方法是写一个段简单代码,如下:

    using System;

    using System.Diagnostics;

     

    namespace Switching

    {

           class SampleClass

    {

           //Create a Switch. It is initialized by an externally specified value

           static TraceSwitch generalSwitch = new TraceSwitch(“CoolSwitch”, “Global Scope”);

           static public void SampleMethod()

           {

                  //The first message is written if the switch state is set to TraceError

    if(generalSwitch.TraceError)

                         console.WriteLine(“TraceError message”);

                  //The second message is written if the switch state is set to TraceVerbose

                  if (generalSwitch.TraceVerbose)

                         Console.WriteLine(“TraceVerbose message”);

                  //The third message is writeen if the switch state is set to TraceWarning

                  if (generalSwitch.TraceWarning)

                         Console.WriteLine(“TreaceWarning message”);

                  //The fourth message is written if the switch state is set to TraceInfo

                  if(generalSwitch.TraceInfo)

                         Console.WriteLine(“TraceInfo Message”);

           }

           public static void Main(string[] args)

           {

                  //calls the sampleMethod method

                  SampleMethod();

           }

           }

    }

     

    有几个switch类:TraceSwitchBooleanSwitch。这个例子中我们用使用TraceSwitch依照他们的状态创建输出信息。Switch状态由TraceErrror,TraceInfo,TraceVerboseTraceWarning属性检查。这些属性检查switch状态和如果trace级别等于或大于相应的常量,那么将返回true。例如,当这个级别是2或者更大那么TraceWarningtrue,下面表格是返回值:

    TraceErroe

    1

    TraceWarning

    2

    TraceInfo

    3

    TraceVerbose

    4

    但是,正如我们已经说的,switch的状态可以在代码中修改,做个修改代码的范例:

    using System;

    using System.Diagnostics;

     

    namespace Switching

    {

           class SampleClass

    {

           //Create a Switch. It is initialized by an externally specified value

           static TraceSwitch generalSwitch = new TraceSwitch(“CoolSwitch”, “Global Scope”);

           static public void SampleMethod()

           {

                  //The first message is written if the switch state is set to TraceError

    if(generalSwitch.TraceError)

                         console.WriteLine(“TraceError message”);

                  //The second message is written if the switch state is set to TraceVerbose

                  if (generalSwitch.TraceVerbose)

                         Console.WriteLine(“TraceVerbose message”);

                  //The third message is writeen if the switch state is set to TraceWarning

                  if (generalSwitch.TraceWarning)

                         Console.WriteLine(“TreaceWarning message”);

                  //The fourth message is written if the switch state is set to TraceInfo

                  if(generalSwitch.TraceInfo)

                         Console.WriteLine(“TraceInfo Message”);

           }

    public static void Main(string[] args)

    {

           Console.WriteLine(“Before manual level set\n”);

           SampleMethod();

           GeneralSwitch.Level = TraceLevel.Warning;

           SampleMethod();

    }

    }

    运行程序,包含以下信息:

     

    Before manual level set

     

    TraceError Message

    TraceWarning message

    TraceInfo message

     

    After manual level set

     

    TraceError Message

    TraceWarning Message

     

    这些展示了改变trace switch层次。

     

    计算性能

    这部分我们将告诉你调试的花费时间。事实上,调试对于商业逻辑不起作用。但是调试代码需要花费时间。我们将计算应用程序中输出信息的花费时间。当你测试一个是建要求严格的应用程序时间,测量就很重要。看下面的代码:

    using system;

    using system.Diagnostics;

     

    namespace DebugDemo

    {

           class PrimeNumberDetector

           {

                  public static bool IsPrime(int n)

                  {

                         int upperbound = (int)Math.Sqrt(n);

                         for (int I = 2; I <= upperbound; I++)

                         {

                                Debug.WriteLine(“Processing number” + n + “, Testing with “ + i);

                                If((n%i) == 0)

                                {

                                       Debug.WriteLine(“FAILED”);

                                       Return false;

                                }

                         }

                  }

                 

                  public Application

                  {

                         [STAThread]

                         static void Main(string[] args)

                         {

                                for(int i = 2; i < 10000;i++)

                                 if (PrimeNumberDetector.IsPrime(i))

                                       Console.WriteLine(“{0} is prime number” , i);

                         }

                  }

           }

    程序测试21000个整数和输出素数。调试的目的是测试每一个输出数字,不管是否是素数。如果数字不是素数,那么输出failed.

    对比测量下带调试和不带调试的时间:

    可以看出调试是昂贵的例子中花费了64%的执行时间

     表

     

    结论:

    文章中描述了调试跟踪.net程序的一般方法。当然还有一些其他问题,如,条件编译我们没有做。想学到更多的东西,可以看msdn。我们希望这篇文章帮助你掌握调试跟踪.net程序的技术。

     

  • DotNet的调试 二

    2008-07-05 12:16:53

       

    事实上,当检查重要条件,比如数据正确性等情况的时候才用这种方法。下边是他最常用的例子:public void StoreObject(PersistentObject obj)

    {

           Trace.Assert(obj != null, "Cannot store null object);

    }

    这个方法检查object对象不是null的时候被存储。当程序失败的时候是产生异常的最好时间,但这不是必要条件。例如,如果这个方法保存了一些重要的程序数据,断言是完美的选择。

    备注:调试跟踪是有用的,如果最终发行版本中包含了断言信息对用户来说是无法忍受的。下面的窍门可以帮助你控制跟踪开关。

     

    如果你手工编译工程(比如命令行编译),缺省显示跟踪信息。如果在c#中用跟踪功能,当你编译代码的时候,要加/d:Trace标志来编译命令行,或者你可以简单的加入#define Trace到文件最顶端。

    比如,下面的小程序:

    using system;

    using System.Diagnostics;

    namespace TraceShow

    {

           class calss1

    {

           ///<summary>

           ///The main entry point for the application

           ///</summary>

           [STAThread]

           static void Main(string[] args)

           {

                  Trace.Listeners.Add(new TextWriterTraceLister(Console.Out));

                  Trace.Write(“Hey,this is a trace message\n”, “SIMPLE MESSAGE”);

           }

    }

    }

    如果在命令行编译,你将看不到任何信息,除非你加上/d:Trace或者加入#define Trace到文件顶部。

    当你在visual c#中编译程序这种情形将改变,visual c#中默认是可用的,结论是你将看到跟踪信息。关闭调试功能,浏览工程属性(可以在解决方案浏览器重或者view->property菜单项。在这个属性页面对话框中,发现条件编译常量(在configuration properties文件夹下,build pane中这个选项是锁定状态),去掉Trace选项):

       图

    public static void Fail(string)

    public static void Fail(string, string)

    Fail方法产生一个无条件断言。它的有些行为有点像Assert方法,但是他不需要任何处理条件。

    带有简单条件的失败条件不能被选中那么用这个方法。下边的例子是这种异常的处理情形:

    try

    {

             throw new Exception(“Sample Exception”);

    }

    catch(Exception Ex)

    {

             Trace.Fail(“Exception caught”, Ex.Message);

    }

     

    pubic static void Write(object)

    public static void Write(string)

    public static void Write(object, string)

    public static void Write(string,string)

     

    Trace类可以在不产生任何条件的情况下写入跟踪信息。比如信息输出到作为跟踪信息的接收者的设备中。用write方法执行输出。

    Write方法可以建立作为对象或者字符串的描绘信息。以前的案例中,object.ToString被呼叫执行。有其他三个方法可以执行类似的行为:writeline输出行,writeif-条件信息,writelineif输出一行条件信息。

    Write方法的第二个参数指定将要写入信息前的分类(比如 一个字符串)

    输出被注册为侦听器。侦听器是可以输出跟踪信息到一些设备的对象。注意AssertFail方法经常输出错误信息到窗体或者控制台,不管那个侦听器被选中。这类对象必须继承TraceListener类,他有以下重要的方法:

    public virtual void Fail(string)

    public virtual void Fail(string,string)

     

    public virtual void Flush(string)

     

    public virtual void Write(object)

    public abstract void Write(string)

    public virtual void Write(object,string)

    public virtual void Write(string,string)

     

    public virtual void WriteLine(object)

    public Virtual void WriteLine(string)

    public virtual void writeLine(object,string)

    public virtual void WriteLine(string,string)

    --------------------------------------------------------------------------------------------

    Fail方法不能阻止应用程序运行,他们仅仅输出错误信息。WriteWriteLine方法写入一个消息。他们不同之处仅仅在于后者输出执行后再输出一行。最后,Flush方法刷新缓存。Flush方法对跟踪信息输出的设备有作用(例如,流)。你可以使用自动刷新每个信息后都自动刷新侦听者。可以在配置文件里面配置:

    <configuration>

            <stream.diagnostics>

                       <trace autoflush = “false” />

             </stream.diagnostics>

    </configuration>

     

    正如你看到的,如果你创建自己的倾听者,需要至少实现write(string)writeline(string)方法(这些方法是抽象方法)。

    微软提供三种跟踪侦听者:DefaultTraceListener,EventLogTraceListenerTextWriteTraceLister.。第一个侦听者有缺省的方法(如果应用程序在命令行的环境下运行,那么输出信息到控制台。如果应用程序在调试情况下,输出到窗口)。第二个侦听者输出信息到指定事件日志中(基于nt技术—winnt,2k,xp或者.net)。第三个倾听者输出文本到流中。

    活动倾听者列表可以在编程中设置或者在配置文件中。缺省包括DefaultTraceListener.

    编程改变活动倾听者列表,要管理倾听者集合(通过添加和删除方法)。配置文件中管理倾听者,你要用下边的语法:

    <configuration>

    <system.diagnostics>

             <trace autoflust=”false”  indentsize = 4>

                       <listeners>

    <add name=”myListener” type=”System.Dianostics.TextWriterTraceListener, system”

    initializeData = “c:\MyListener.log”/>

    <remove type = “System.Diagnostics.DefaultTraceListener,System”/>

    </listeners>

    </trace>

    </system.dianostics>

    </configuration>

    InitializeDat参数是传递到构造器的的字符串参数(指定EventLogTraceListener侦听者事件日志)。

    侦听者很熟悉创建应用程序使用侦听者输出跟踪信息。代码很简单:

    //Trace listeners demo

    //

    //purpose:To demonstrate how to use listeners

    using System;

    using System.Diagnostics;

     

    namespace Assertion

    {

             class Application

             {

                       [STAThread]

                       static void Main(string[] args)

                       {

                                Trace.WriteLine(“Calling WriteLine method”, “Trace Listeners demo”);

                                Trace.Flush();

                       }

             }

    }

     

    这些代码还不够,我们必须创建一个配置文件来设置侦听者:

    <configuration>

    <system.diagnostics>

       <trace autoflush="false" indentsize="4">

    <listeners>

         <remove type="System.Diagnostics.DefaultTraceListener"/>

         <add name="myListener" type="System.Diagnostics.TextWriterTraceListener"

               initializeData="myListener.log" />

        <add name="myListenerEventLog" type="System.Diagnostics.EventLogTraceListener"

              initializeData="Application" />

    </listeners>

       </trace>

    </system.diagnostics>

    </configuration>

    这个配置文件删除了缺省侦听者加入两个自定义侦听者:第一个输出信息到文本文件,第二个输出到事件日志中。对于第一个侦听者initializeData属性指定输出数据的文件,第二侦听者记录事件到事件日志。

    运行程序。检查第一个侦听者,可以看到myListener.log文件,它包含以下信息:Tracing listeners Demo:Calling WriteLine Method

  • DotNet的调试 一

    2008-07-05 12:13:07

          这是很久以前的一篇翻译文章。

          

           Debug是整个软件开发过程中最痛苦的部分之一。我们不想说发现一个小bug是多么的困难-你可能已经都知道。软件中bug的数量是随着软件的复杂程度和经常没有及时修正bug而增长的。这些bug和软件的负责程度互相影响,使工程变得更加复杂。所以我们不断的监控和修改bug

    最好的办法是执行单元测试的时候来修正bug,当软件出现问题的时候,软件不会告诉我们哪里出现错误,为什么出现错误,我们的任务就是跟踪进程去解决他们。

    这篇文章我们就是想告诉你怎样利用DotNet FrameWork来调试和跟踪让这个处理过程变得简单。我们将简要的告诉你怎么样有效的使用他们,并用结合例子说明。

    跟踪

    在这篇文章中首先要讨论的调试的策略是跟踪。跟踪是很强大的技术,因为他允许你看到应用程序的整个在运行期的整个行为,分析他是最有效的,尽管他不能提供需要的信息。

    DotNetSystem.Diagnostics名字空间中提供了跟踪的功能,正确的说是Trace Class

    Trace是个静态类(这意味着所有的成员是静态的,你不需要初始化他来获得它的功能)

    .产生一个断言(有条件或没有)

    .根据提供的条件输出跟踪信息

    .格式化跟踪输出信息

    让我们从简要的成员方法开始研究:

    public static void Assert(bool)

    public static void Assert(bool,string)

    public static void Assert(bool,string,string)

     

    Assert方法显示一个失败信息(应用程序失败的时候显示信息,允许用户中断执行,忽略错误或者重新运行引起错误的代码),如果条件是false,两个重载函数允许显示指定的自定义一个或两个跟着的信息。(这些信息通过string参数设置,这么做允许开发者显示额外的断言失败的信息)

    //Asertion Demo

    //

    //Purpose: To Demonstrate Results of Different Assert Method Calls

    using  System;

    using  System.Diagnostics

    namespace Assertion

    {

             class Application

    {

             [STAThread]

             static void Main(string[] args)

             {

                       //Simple assertion. No additional message

                      Trace.Assert(false);

             }

    }

    }

    程序将显示下面的消息对话框:

    正如你看到的,仅仅是显示异常信息。没有显示任何上下文信息,所以我们不能看到失败的原因。下面,应用程序调用Assert方法用它的一个属性:

    //Asertion Demo

    //

    //Purpose: To Demonstrate Results of Different Assert Method Calls

    using  System;

    using  System.Diagnostics

    namespace Assertion

    {

             class Application

    {

             [STAThread]

             static void Main(string[] args)

             {

                       //Simple assertion. No additional message

                      Trace.Assert(false,”Simple assertion Message”);

             }

    }

    }

    这个程序显示了一个更多信息的对话框。可以看到我们能提供的关于失败原因的信息。

    调用有两个信息的Assert方法,组成更加详细的断言:

    //Asertion Demo

    //

    //Purpose: To Demonstrate Results of Different Assert Method Calls

    using  System;

    using  System.Diagnostics

    namespace Assertion

    {

             class Application

    {

             [STAThread]

             static void Main(string[] args)

             {

                       //Simple assertion. No additional message

                      Trace.Assert(false,”Simple assertion Message””This message just an example.In real application you can provite detailed information here’);

             }

    }

    }

    你现在看到更加详细的信息:

     

  • Rational Robot 识别Delphi控件

    2008-07-05 12:04:04

       这篇是2004年我整理的资料文章,当时对robot非常痴迷,曾见年少。最近利用业余时间会把以前整理的东西都陆续贴出来,算是对过去的一个回顾

        Rational Robot 2003版本支持用Delphi 3.04.05.06.0 Windows NTWindows 95Windows 98Windows 2000WindowXP平台下编写的程序。Robot测试第三方组件包括:VCL组件;Win32控件; ActiveX控件;Data-aware控件; 不可见控件; 支持Internet的控件;可视的继承窗体。 要测试Delphi应用程序,必须安装Delphi Enabler,而Delphi Enabler的核心就是SQASrvr.pas文件,把该unit添加上去后就可以实现delphi的识别。

         以下步骤是在Delphi6.0上添加编译步骤:
         1.打开Delphi工程文件 - project

         

                2.在uses关键字下添加引用单元-sqasrvr

              

          3.编译一个新的版本
          备注:以上操作是在Delphi 6版本上进行,编译过程中可能出现如下问题:

       

        
          解决方法
          打开SQASrvr单元源代码

           

          修改代码,没有修改前:
    unit SQASrvr;

            interface

            uses
              Windows,
       {$IFDEF VER140}
        Variants,
       {$ENDIF}
              OleAuto,
              OLE2, TypInfo, DB, DBTables, OleCtrls, Grids;

    修改后:
    unit SQASrvr;

            interface
            uses
              Windows,
       {$IFDEF VER140}
        Variants,
       {$ENDIF}
              {$WARN UNIT_DEPRECATED ON}
              OleAuto,
              {$WARN UNIT_DEPRECATED off}
              OLE2, TypInfo, DB, DBTables, OleCtrls, Grids;

    这里用$WARN UNIT_DEPRECATED ON/off屏蔽掉了错误提示

  • 再次新生 祝贺

    2008-07-05 11:44:38

         今天是2008年7月5日,是我来深圳的第5天,一切是新的开始,一切是新的起点,动手把以前的日志都删除了,希望带给自己的是一个新的开始。

     

         

1669/9<123456789