把别人当作自己,把自己当作别人,把别人当作别人,把自己当作自己

发布新日志

  • IT人必读:写给浮躁的IT同仁(请不要做浮躁的人) -转

    pipigo 发布于 2007-07-04 18:09:26

     

    1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异。
     
    2.初学者请不要看太多太多的书那会误人子弟的,先找本系统的学,很多人用了很久都是只对部分功能熟悉而已,不系统还是不够的。
     
    3.看帮助,不要因为很难而自己是初学者所以就不看;帮助永远是最好的参考手册,虽然帮助的文字有时候很难看懂,总觉得不够直观。

    4.不要被对象、属性、方法等词汇所迷惑;最根本的是先了解最基础知识。

    5.不要放过任何一个看上去很简单的小问题--他们往往并不那么简单,或者可以引伸出很多知识点;不会举一反三你就永远学不会。

    6.知道一点东西,并不能说明你会写脚本,脚本是需要经验积累的。

    7.学脚本并不难,JSP、ASP、PHP等等也不过如此--难的是长期坚持实践和不遗余力的博览群书。

    8.看再多的书是学不全脚本的,要多实践。

    9.把时髦的技术挂在嘴边,还不如把过时的技术记在心里。

    10.学习脚本最好的方法之一就是多练习。

    11.在任何时刻都不要认为自己手中的书已经足够了。

    12.看得懂的书,请仔细看;看不懂的书,请硬着头皮看。

    13.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;

    14.请把书上的例子亲手到电脑上实践,即使配套光盘中有源文件;

    15.把在书中看到的有意义的例子扩充;并将其切实的运用到自己的工作中。

    16.不要漏掉书中任何一个练习——请全部做完并记录下思路;

    17.当你用脚本到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个代码的完整性,然后分析自己的错误并重新编写和工作。

    18.别心急,写脚本确实不容易;水平是在不断的实践中完善和发展的;

    19.每学到一个脚本难点的时候,尝试着对别人讲解这个知识点并让他理解----你能讲清楚才说明你真的理解了。

    20.记录下在和别人交流时发现的自己忽视或不理解的知识点。

    21.保存好你做过的所有的源文件----那是你最好的积累之一。

    22.对于网络,还是希望大家能多利用一下,很多问题不是非要到论坛来问的,首先你要学会自己找答案,比如google、百度都是很好的搜索引擎,你只要输入关键字就能找到很多相关资料,别老是等待别人给你希望,看的出你平时一定也很懒!

    23.到一个论坛,你学会去看以前的帖子,不要什么都不看就发帖子问,也许你的问题早就有人问过了,你再问,别人已经不想再重复了,做为初学者,谁也不希望自己的帖子没人回的。

    24,虽然不是打击初学者,但是这句话还是要说:论坛论坛,就是大家讨论的地方,如果你总期望有高手总无偿指点你,除非他是你亲戚!!讨论者,起码是水平相当的才有讨论的说法,如果水平真差距太远了,连基本操作都需要别人给解答,谁还跟你讨论呢。
     
    25、不要因为工作简单就不重视,简单的工作做好了能体现个人的态度,简单的工作做好之后才能够有效管理作简单工作的人。

    26、少发牢骚,多提建设性意见,前者说不定哪天会被领导听见,也影响自己的心情;后者可能会得到领导重视,说不定哪天机会就来了,再说以解决问题的思路来看待问题,不断的思考就会不断进步,也有利于良好心态的形成

    27、做好自己能够掌控的事情,对于自己无法影响的东西,少想、少说

    28、吃亏就是占便宜

    29、不要追求绝对公平,否则是自寻烦恼

    浮躁的人容易问:我到底该学什么;----别问,学就对了;

    浮躁的人容易问:Js有钱途吗;----建议你去抢银行;

    浮躁的人容易说:我要中文版!我英文不行!----不行?学呀!

    浮躁的人经常说:啊呀,今天放松一下,从明天开始我一定认真学!

    浮躁的人分两种:只观望而不学的人;只学而不坚持的人;

    浮躁的人永远不是一个高手。

  • 软件测试员的发展路线-老徐

    pipigo 发布于 2007-07-04 17:46:49

     

                                                                  
     
    :老徐 新闻来源:STTE  更新时间:2007-4-3 18:30:22
  • QTP中的数据库检查点

    xiaonan 发布于 2007-04-06 14:15:18

    要创建数据库检查点或输出值,请执行下列操作:

    1. 选择“插入”>“检查点”>“数据库检查点”或“插入”>“输出值”>“数据库输出值”。将打开“数据库查询向导”。



    2. 选择数据库选择首选项,然后单击“下一步”。可从下列选项中进行选择:
      • 使用 Microsoft Query 创建查询 - 打开 Microsoft Query,使您可以新建查询。完成定义查询的工作之后,返回到 QuickTest。只有在您的计算机上安装 Microsoft Query 之后,该选项才可用。
      • 手动指定 SQL 语句 - 在向导中打开“指定 SQL 语句”屏幕,使您可以指定连接字符串和 SQL 语句。有关详细信息,请参阅步骤 3
      • 最大行数 - 如果要限制行数,请选中该复选框,并输入要检查或输出的最大数据库行数。最多可以指定 32,000 行。
      • 显示如何使用 Microsoft Query - 单击“下一步”时,将在打开 Microsoft Query 之前显示一个说明屏幕。(只有在选中“使用 Microsoft Query 创建查询”时才启用)。
    3. 如果在上一步骤中选择了“使用 Microsoft Query 创建查询”,将打开 Microsoft Query。选择数据源并定义查询。
    4. 如果在上一步骤中选择了“指定 SQL 语句”,将打开“指定 SQL 语句”屏幕。指定连接字符串和 SQL 语句,然后单击“完成”。

    5. 将打开“检查点属性”或“输出值属性”对话框。
    6. 单击“确定”关闭该对话框。在关键字视图和专家视图中,将为所选对象添加一条检查点或输出值语句。

     

         

     

    了解“表/数据库检查点属性”对话框

    通过“表/数据库检查点属性”对话框,可以指定要检查表或数据库的哪些单元格内容以及要使用哪些验证方法和类型。还可以对检查中所含单元格的预期数据进行编辑或参数化。

    注意: ActiveX 表的“表检查点属性”对话框看上去与下面显示的对话框稍有不同。对于 ActiveX 表,除了检查表内容(使用“表内容”选项卡)以外,还可以选择是否要检查表对象的属性(使用“属性”选项卡)。根据要检查信息的类型,选中位于“表检查点属性”对话框相关选项卡顶部的“选择表内容”复选框和/或“选择属性”复选框。

    有关“表内容”选项卡中的选项的信息,请参阅下列部分。



    “表/数据库检查点属性”对话框的顶部将显示为检查点捕获的数据。使用该区域可指定要检查的单元格。

    在预期数据下,“表/数据库检查点”对话框包含下列三个选项卡:

    • 预期数据 - 使您可以将每个已检查的单元格设置为常量值或参数化值。例如,可以指示 QuickTest 使用数据表中的值作为特定单元格的预期值。
    • 设置 - 使您可以设置预期值与实际值之间成功匹配的条件。例如,可以指示 QuickTest 将值视为数字(因此 45 和 45.00 将被视为同一个值),或者,可以指示 QuickTest 在比较值时忽略空格。
    • 单元格标识 - 使您可以指示 QuickTest 如何查找要检查的单元格。例如,假设您要检查显示在“表/数据库检查点属性”对话框中第一行和第二列中的数据。但是,您知道每次运行测试或组件时,这些行的顺序可能会有所不同,具体取决于在上一步中执行的排序。因此,您可能希望 QuickTest 根据列名和在关键字列中包含已知值的行来标识单元格,而不是根据行号和列号来查找数据。
    • 提示: 值匹配设置和单元格识别条件将应用于检查点中所有选定的单元格。如果要对表或数据库中的不同单元格使用不同的值匹配或单元格标识条件,请分别创建检查点,并为每个检查点指定相关的单元格。

    “表/数据库检查点属性”对话框的底部包含下列选项:

    • 检查点超时 - 指定 QuickTest 试图成功执行检查点的时间间隔(以秒为单位)。QuickTest 将继续执行检查点,直到顺利通过或发生超时。如果在发生超时之前检查点尚未顺利通过,则检查点将失败。
    • 例如,假设将数据加载到表中需要花费一些时间。在这种情况下,增加检查点超时值可确保有足够的时间来加载数据,从而使检查点在到达超时结尾之前可以顺利通过。

      可以在“测试结果”窗口中查看有关检查点超时的信息,包括 QuickTest 用于执行检查点的时间间隔。

      注意:只有在创建表检查点时,“检查点超时”选项才可用。创建数据库检查点时,该选项不可用。

    • 插入语句 - 指定在测试或组件中执行检查点的时间。如果要在执行突出显示的步骤之前检查表或数据库内容,请选择“当前步骤之前”。如果要在执行突出显示的步骤之后检查表或数据库内容,请选择“当前步骤之后”。
    • 注意:在录制期间添加检查点时或在修改现有检查点时,“插入语句”选项不可用。向现有测试或组件添加检查点时,该选项可用。

  • QTP描述性编程(descriptive programming)<转>

    kevin_swpi 发布于 2007-01-09 22:46:59

    描述性编程(descrīptive programming)

    1、descrīptive programming概述

    通常情况下,当在录制一个操作时,QTP会将被操作对象加入到对象库里(Object Repository)。一旦对象存在于对象库里,我们就可以在专家视图里通过添加相关的对象方法来对该对象进行操作。我们可以通过引用层次型对象库里的对象描述(Object Descrīption)来添加相应的方法。

    因为QTP对象库中的每个对象都具有唯一名称,所以在引用时对象名是必须需要指定的。然后在测试运行期间,QTP在对象库中根据这个对象的名称和父对象来查找对象,并使用为这个测试对象存储的测试对象描述,在网站或应用程序中标识该对象。

    例如我们用QTP录制Yahoo Mail登录情况时我们需要输入用户名,于是在录制时我们就会录下一个WebEdit对象,它的缺省逻辑名为“login”,该编辑字段位于名为“Yahoo! Mail - The best” 的页面上,并且该页面在浏览器中使用名称Yahoo!进行录制。

    那么如果我们想要应用该对象,就可以在专家视图输入以下信息:

    Browser("Yahoo!").Page("Yahoo! Mail - The best").WebEdit("login").Set “xxx”

    或者我们也可以调用一些方法,获取改对象在运行时的对象名,如:

    Browser("Yahoo!").Page("Yahoo! Mail - The best").WebEdit("login").GetROProperty(“name”)

    然而,我们可以发觉到,上面的例子在处理对象时,对象已经存在于对象库里,因此我们可以应用这个对象的逻辑名。实际使用中,情况往往并非如此简单,我们经常会遇到很多在页面上动态产生的对象,换而言之,对象库里没有这些对象,我们也无从引用。因此我们必须采用其他的技术来完成这类操作,这也就是我们需要讲解的Descrīptive Programming。

    为了满足上面提到的动态对象的处理问题,QTP允许用户通过将对象属性编码到测试脚本里来动态识别对象,这就是我们通常意义下称为的Descrīptive Programming。通过这种方式,我们可以指示QTP不通过引用对象库和对象名来对实际对象进行操作。具体操作中,我们只需要为QTP提供对象的一组属性和值,这样QTP就可以来识别相应的对象并对其进行操作。这相当于,告诉QTP要识别对象的一些关键特征,根据这些特征QTP就可以一一匹配然后识别出来这个对象。

    而且,更为重要的是,通过这种Descrīptive Programming的方式,还可以让QTP识别具有某些相同属性的对象。我们先来举个例子来看一下:我们假设当前的Windows系统中打开了若干的Yahoo主页面(多于一个),现在我们要关闭所有的正在浏览Yahoo主页面的浏览器。

    对于上面那个例子来说,我们先看一个简单一点的情况,假设只有且仅有一个Yahoo主页面:那么我们可以用下面的方法来

    Window("Text:=Yahoo! - Microsoft Internet Explorer").Close

    我们可以看到语句里我们要查找的对象是Window窗口标题为“Yahoo! - Microsoft Internet Explorer”,然后把它关闭,具体的语法说明我们稍后为解释。但是上面的语句仅仅适合前面提到的条件“只有且仅有一个Yahoo主页面”,如果有多个同样的窗口就会出错,原因是通过语句可以匹配到多个对象,而QTP不知道应该对哪个对象进行关闭动作。我们需要进一步的缩小匹配范围:

    Dim i

    i = 0

    while (Window("Text:="Yahoo!" - Microsoft Internet Explorer", "index:="&i).exist)

    Window("Text:=Yahoo! - Microsoft Internet Explorer", "index:="&i).close

    i = i +1

    wend

    这里我们可以看到,对于具有相同属性的对象,我们可以通过index参数来对其进行区别,第一个对象为index=0,第二个为index=1等等,依次类推。当然我们还可以通过CreationTime和Location参数来定位对象,这里就不详细叙述了。

    通过上面的例子,我们对Descrīptive Programming有一个基本了解了,下面我们详细讲解一下Descrīptive Programming:在具体实现中,我们有两种类型的Descrīptive Programming方法。可以列出直接在测试语句中描述对象的属性和值的集合;或者向Descrīption 对象中添加属性和值的集合,然后在语句中输入Descrīption 对象的名称。下面我们分别举例介绍。

     

    2、直接在语句中输入编程描述

    通过多个指定描述对象的property:=value对,可以直接在语句中描述对象,这是最直接有效的方法。

    常规语法为:

    TestObject("PropertyName1:=PropertyValue1", "..." , "PropertyNameX:="PropertyValueX""} 

    TestObject - 测试对象的类。

    PropertyName:=PropertyValue - 测试对象的属性及其值。各个property:="value" 对之间应用逗号和引号分开。

    例如:以下语句指定Mercury Tours 页面中名为author且索引值为3 的WebEdit 测试对象。当测试运行时,QTP 将查找具有匹配属性值的WebEdit 对象,并输入文本jojo。

    Browser("Mercury Tours").Page("Mercury Tours").WebEdit("Name:="Author"", "Index:="3"").Set "Mark Twain" 

    我们也可以从从描述中的特定位置(从Page 对象描述开始)开始使用Descrīptive Programming。

    Browser("Mercury Tours").Page("Title:="Mercury" Tours").WebEdit("Name:="Author"", "Index:="3"").Set "jojo" 

    此外,如果我们希望在在一个测试或组件中多次使用相同的Descrīptive Programming,则可以将创建的对象赋值给变量,这样使用会方便很多。

    例如:我们需要完成下面一系列操作

    Window("Text:=HyperSna").WinButton("Caption:=日期").Click

    Window("Text:=HyperSna").WinButton("Caption:=时间").Click

    Window("Text:=HyperSna").WinButton("Caption:=确定").Click

    那么,为了方便其见,我们可以将Window("Text:=HyperSna")赋值到一个变量,然后再使用,参见下面的代码:

    Set WinHyper = Window("Text:="HyperSna"") 

    WinHyper.WinButton("Caption:=日期").Click

    WinHyper.WinButton("Caption:=时间").Click

    WinHyper.WinButton("Caption:=确定").Click

    如果使用了VBscrīpt里面的With语句,还可以简化为以下代码:

    With Window("Text:="HyperSna"") 

    .WinButton("Caption:=日期").Click 

    .WinButton("Caption:=时间").Click

    .WinButton("Caption:=确定").Click

    End With 

    下面我们来看一个更为详细的例子,在QTP产品缺省安装里面自带了一个网上订机票的示例称为Mercury Tour,我们看一下在订票过程中何时需要用Descrīptive Programming。

    首先登入系统后,如果需要订票,就要先搜索航班,此时系统要求输入订票乘客的数量,假设我们在第一次录制脚本时选择了1个Passenger,并成功完成订票。然后,我们需要参数化乘客数量来测试订票系统,我们会发现回放会失败。原因在于,不同的乘客的数量导致在订票时需要输入每个乘客的姓名,而录制时,只输入了一个乘客的姓名。而乘客姓名的输入框是随着乘客数量的变化而动态生成的,我们不可能从对象库里得到没有录制的对象,因此必须使用Descrīptive Programming。

     
     
      
     


    在录制单个乘客时,我们得到的录制语句是:

    Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passFirst0").Set "Michael"

    Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passLast0").Set "Wang"

    显然WebEdit("passFirst0")和WebEdit("passLast0")是录制时产生的对象并存放到对象库里的。通过对象库,我们可以看到对象的属性如下

     
     
      
     


    系统对于发生多个FirstName时,命名规则是passFirst0,passFirst1…依次类推。因此只要通过简单的Descrīptive Programming就可以完成动态FirstName与LastName的识别工作。这里我们假设参数化的乘客数已经赋值给intPassNum,下面是脚本中的关键语句:

    counter = 0

    For i = 0 to (intPassNum)

    Browser("Find a Flight:").Page("Book a Flight:").WebEdit("name:="passFirst""&i).Set "Michael"

    Browser("Find a Flight:").Page("Book a Flight:").WebEdit("name:="passLast""&i).Set "Wang"

    counter = counter + 1

    Next

     

    3、使用descrīption对象

    使用Descrīption 对象可以返回包含一组Property 对象的Properties 集合对象。Property 对象由属性名和值组成。然后,可以在语句中指定用返回的Properties 集合代替对象名。(每个property 对象都包含一个属性名和值)。

    要创建Properties 集合,可以使用以下语法输入Descrīption.Create 语句:

    Set MyDescrīption = Descrīption.Create() 

    创建Properties 对象(例如,以上示例中的MyDescrīption)后,就可以输入语句,以便在运行会话期间在Properties 对象中添加、编辑、删除或检索属性和值。这样,就可以在运行会话期间,使用动态方法确定哪个属性以及多少个属性应包含在对象描述中。

    在Properties 集合中填充一组Property 对象(属性和值)后,可以在测试语句中指定用Properties 对象代替对象名。

    例如,假设我们需要完成以下一个操作:

    Window("Error").WinButton("text:=OK", "index:="1"").Click

    我们可以通过Descrīption对象来实现同样的功能,参加下面的代码:

    Set MyDescrīption = Descrīption.Create()

    MyDescrīption("text").Value = "OK"

    MyDescrīption("index").Value = 1

    Window("Error").WinButton(MyDescrīption).Click

    Set MyDescrīption = Nothing

    附上一个基本的PDF
  • QTP参数化实例(续)

    xiaonan 发布于 2007-01-16 16:14:21

         在<QTP参数化实例 >一文中,讲到了运用描述性编程来进行参数化.今天我们利用另一种方法来实现类似的参数化.在不更改对象库的基础上上,运用SetTOProperty函数方法来达到同样的效果.

    例:

      录制打开百度搜索主页,输入11,点击搜索按纽,进入搜索后的页面,随便打开其中一个连接,然后关闭网页.录制脚本如下:

    Browser("百度——全球最大中文搜索引擎").Page("百度——全球最大中文搜索引擎").WebEdit("wd").Set "11"
    Browser("百度——全球最大中文搜索引擎").Page("百度——全球最大中文搜索引擎").WebButton("百度搜索").Click
    Browser("百度——全球最大中文搜索引擎").Page("百度搜索_11").Link("CCTV.com").Click
    Browser("CCTV.com").Page("CCTV.com").Sync
    Browser("CCTV.com").Close
    Browser("百度——全球最大中文搜索引擎").Page("百度搜索_11").Sync
    Browser("百度——全球最大中文搜索引擎").Close

    现在我想做的是,能测试搜索页面上的其他link打开是否正确.那么势必要把上面蓝色字体的部分给参数化.

      首先我们要在蓝色字体这句代码上面增加一句话,如下:

    Browser("百度——全球最大中文搜索引擎").Page("百度搜索_11").Link("CCTV.com").SetTOProperty "属性","属性值"
    Browser("百度——全球最大中文搜索引擎").Page("百度搜索_11").Link("CCTV.com").Click

    SetTOProperty方法能够在脚本运行中,设置对象的属性值.而QTP识别应用程序上的对象,完全是依靠对象库中的对象来识别的.所以只要对象库中的对象属性值变掉了,QTP操作的对象也不同了.通过对该Link对象,在对象库中属性及属性值的研究发现,启决定性作用的是该对象text属性.所以只要更改这个text属性,就能让QTP点击其他Link了.

      这里由于时间的关系,只做两个link的测试.继续修改脚本,变成如下:

    Dim i,b
    Browser("百度——全球最大中文搜索引擎").Page("百度——全球最大中文搜索引擎").WebEdit("wd").Set "11"
    Browser("百度——全球最大中文搜索引擎").Page("百度——全球最大中文搜索引擎").WebButton("百度搜索").Click
    For i=1 to 2
        Select Case i
         Case 1 b="11弄-软件弄堂"
        Case 2 b="CCTV.com"
       End Select
        Browser("百度——全球最大中文搜索引擎").Page("百度搜索_11").Link("CCTV.com").SetTOProperty "text",b
        Browser("百度——全球最大中文搜索引擎").Page("百度搜索_11").Link("CCTV.com").Click
        Browser("CCTV.com").Page("CCTV.com").Sync
        Browser("CCTV.com").Close
    Next
    Browser("百度——全球最大中文搜索引擎").Page("百度搜索_11").Sync
    Browser("百度——全球最大中文搜索引擎").Close

    在我们脚本的对象库中是没有"11弄-软件弄堂",这个link对象的.让我们看看这样修改后,能不能通过两次循环,依次点击打开名为"11弄-软件弄堂"的连接,然后关闭.接着继续点击打开名为"CCTV.com"的连接,然后关闭.结果自然是通过的,我们通过对SetTOProperty方法的运用,同样达到了参数化的要求.

      如果大家想试试看的话,可以录制我们QTP自带的windows程序fight.其中这么一个WinRadioButton对象.如下图:

    对于这个对象的操作,录出来来的脚本是这样的.

    Window("Flight Reservation").WinRadioButton("Business").Set

    粗看这个对象要实现参数化,不是很容易.但其实也方便实现.运用上面的方法,试试吧!

  • [论坛] 坚持下去,成功迟早会光顾你

    eatmouse 发布于 2006-12-13 09:01:33Digest 1

    一位著名的推销大师,即将告别他的推销生涯,应行业协会和社会各界的邀请,他将在该城中最大的体育馆,做告别职业生涯的演说。

        那天,会场座无虚席,人们在热切地、焦急地等待着那位当代最伟大的推销员作精彩的演讲。当大幕徐徐拉开,舞台的正中央吊着一个巨大的铁球。为了这个铁球,台上搭起了高大的铁架。

        一位老者在人们热烈的掌声中走了出来,站在铁架的一边。他穿着一件红色的运动服,脚下是一双白色胶鞋。

        人们惊奇地望着他,不知道他要做出什么举动。

        这时两位工作人员,抬着一个大铁锤,放在老者的面前。主持人这时对观众讲:请两位身体强壮的人,到台上来。好多年轻人站起来,转眼间已有两名动作快的跑到了台上。

        老人告诉他们游戏规则,请他们用这个大铁锤,去敲打那个吊着的铁球,直到把它荡起来。一个年轻人抢着拿起铁锤,拉开架势,抡起大锤,全力向那吊着的铁球砸去,一声震耳的响声,吊球动也没动。他接着用大铁锤接二连三地砸向吊球,很快他就气喘吁吁。另一个人也不示弱,接过大铁锤把吊球打得叮当响,可是铁球仍旧一动不动。台下逐渐没了呐喊声,观众好像认定那是没用的,就等着老人做出解释。

        会场恢复了平静,老人从上衣口袋里掏出一个小铁锤,然后认真地面对着那个巨大的铁球敲打起来。

        他用小锤对着铁球“咚”敲一下,然后停顿一下,再一次用小锤“咚”地敲一下。人们奇怪地看着,老人就那样“咚”敲一下,然后停顿一下,就这样持续地做。

        10分钟过去了,20分钟过去了,会场早已开始骚动,有的人干脆叫骂起来,人们用各种声音和动作发泄着他们的不满。老人仍然敲一小锤停一下地工作着,他好像根本没有听见人们在喊叫什么。人们开始忿然离去,会场上出现了大片大片的空缺。留下来的人们好像也喊累了,会场渐渐地安静下来。

        大概在老人敲打了40分钟的时候,坐在前面的一个妇女突然尖叫一声:“球动了!”刹那间会场鸦雀无声,人们聚精会神地看着那个铁球。那球以很小的幅度动了起来,不仔细看很难察觉。老人仍旧一小锤一小锤地敲着,吊球在老人一锤一锤的敲打中越荡越高,它拉动着那个铁架子“哐哐”作响,它的巨大威力强烈地震撼着在场的每一个人。终于场上爆发出一阵阵热烈的掌声,在掌声中老人转过身来,慢慢地把那把小锤揣进兜里。

        老人开口讲话了,他只说了一句话:“在成功的道路上,你如果没有耐心去等待成功的到来,那么,你只好用一生的耐心去面对失败。”

        人生箴言:你可以不思成功,但你的生活并不会因此而轻松。每个人都应耐心追逐成功,你会因此而品尝到成功的果实。成功就是简单的事情重复做,只在持之以恒地坚持下去,成功迟早会光顾你。

我的存档

数据统计

  • 访问量: 3305
  • 日志数: 7
  • 图片数: 1
  • 建立时间: 2007-04-05
  • 更新时间: 2007-04-16

RSS订阅

Open Toolbar