自己喜欢挑的担子不嫌累。

发布新日志

  • QTP自带Flight航班练习__一次订多张机票

    YangMay 发布于 2010-03-05 16:00:18

        本来是想通过http://newtours.mercury.com 这个网站去进行练习的..但无奈最近这个网站都打不开了.所以我就使用QTP自带的Flight航班进行练习.

        通过在网上查阅资料,结合该例子的一些问题.完成了关于Flight例子中订多张机票的形式,其中采用随机数的方式获取Fly from和Fly to两个下拉框的值,同时使用循环进行订多张机票的例子,根据for循环语句的不同修改了两次脚本:

    1)脚本一如下:

    Dim Get_Count1,Ran_Number1,Result1,Get_Count2,Ran_Number2,Result2 '声明六个变量
    Dim j'声明循环变量
    '声明一个函数
    Function GetList(i)
       Randomize
       GetList=RandomNumber(0,i)
    End Function

    For j=1 to 10
    SystemUtil.Run "D:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe","","D:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\","open"
    Dialog("Login").WinEdit("Agent Name:").Set "mercury"
    Dialog("Login").WinEdit("Password:").SetSecure "4b8dbe97c21c421fc9d4cb76558d19f04c2ccc5a"
    Dialog("Login").WinButton("OK").Click
    'Window("Flight Reservation").WinObject("Date of Flight:").Type "100316"


    '将声明变量放到第一行Dim Get_Count1,Ran_Number1,Result1,Get_Count2,Ran_Number2,Result2 '声明六个变量

    '使用循环语句去订十张机票
    'Dim i '声明循环变量i
    'For j=1 to 10
    Window("Flight Reservation").WinObject("Date of Flight:").Type "100316" 
    Get_Count1=Window("Flight Reservation").WinComboBox("Fly From:").GetItemsCount '取得下拉框的记录的总条数
    Ran_Number1=GetList(Get_Count1-1) '调用函数GetList,随机取一个数字
    Result1=Window("Flight Reservation").WinComboBox("Fly From:").GetItem(Ran_Number1) '获取下拉框第Ran_Number1条记录的值

    Window("Flight Reservation").WinComboBox("Fly From:").Select Result1 '选择刚才获取到的值

    Get_Count2=Window("Flight Reservation").WinComboBox("Fly To:").GetItemsCount '取得Fly to字段下拉框记录的总条数
    Ran_Number2=GetList(Get_Count2-1) '调用函数GetList随机取一个数字
    Result2=Window("Flight Reservation").WinComboBox("Fly To:").GetItem(Ran_Number2) '获取下拉框第Ran_Number2条记录的值

    Window("Flight Reservation").WinComboBox("Fly To:").Select Result2 '选择刚才获取到的值

    Window("Flight Reservation").WinButton("FLIGHT").Click
    Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select 1

    'Window("Flight Reservation").Dialog("Flights Table").Activate
    Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
    'Window("Flight Reservation").Activate
    'Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click '点击OK按钮,自写
    Window("Flight Reservation").WinEdit("Name:").Type "M"
    Window("Flight Reservation").WinEdit("Name:").Set "May"
    Window("Flight Reservation").WinButton("Insert Order").Click
    wait(5)
    Window("Flight Reservation").WinMenu("Menu").Select "File;New Order"
    'Window("Flight Reservation").WinMenu("Menu").Select "File;Open Order..."
    'Window("Flight Reservation").Dialog("Open Order").WinCheckBox("Flight Date").Set "ON"
    'Window("Flight Reservation").Dialog("Open Order").WinObject("10/03/16").Type "100316"
    'Window("Flight Reservation").Dialog("Open Order").WinButton("OK").Click
    'Window("Flight Reservation").Dialog("Open Order").Dialog("Search Results").WinButton("OK").Click
    'next
    Window("Flight Reservation").WinMenu("Menu").Select "File;Exit"
    next
    systemutil.CloseProcessByName "D:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe" '关闭flight程序

    2)脚本二如下:

    Dim Get_Count1,Ran_Number1,Result1,Get_Count2,Ran_Number2,Result2 '声明六个变量
    Dim j'声明循环变量
    '声明一个函数
    Function GetList(i)
       Randomize
       GetList=RandomNumber(0,i)
    End Function

    'For j=1 to 10
    SystemUtil.Run "D:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe","","D:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\","open"
    Dialog("Login").WinEdit("Agent Name:").Set "mercury"
    Dialog("Login").WinEdit("Password:").SetSecure "4b8dbe97c21c421fc9d4cb76558d19f04c2ccc5a"
    Dialog("Login").WinButton("OK").Click
    'Window("Flight Reservation").WinObject("Date of Flight:").Type "100316"


    '将声明变量放到第一行Dim Get_Count1,Ran_Number1,Result1,Get_Count2,Ran_Number2,Result2 '声明六个变量

    '使用循环语句去订十张机票
    'Dim i '声明循环变量i
    For j=1 to 10
    Window("Flight Reservation").WinObject("Date of Flight:").Type "100316" 
    Get_Count1=Window("Flight Reservation").WinComboBox("Fly From:").GetItemsCount '取得下拉框的记录的总条数
    Ran_Number1=GetList(Get_Count1-1) '调用函数GetList,随机取一个数字
    Result1=Window("Flight Reservation").WinComboBox("Fly From:").GetItem(Ran_Number1) '获取下拉框第Ran_Number1条记录的值

    Window("Flight Reservation").WinComboBox("Fly From:").Select Result1 '选择刚才获取到的值

    Get_Count2=Window("Flight Reservation").WinComboBox("Fly To:").GetItemsCount '取得Fly to字段下拉框记录的总条数
    Ran_Number2=GetList(Get_Count2-1) '调用函数GetList随机取一个数字
    Result2=Window("Flight Reservation").WinComboBox("Fly To:").GetItem(Ran_Number2) '获取下拉框第Ran_Number2条记录的值

    Window("Flight Reservation").WinComboBox("Fly To:").Select Result2 '选择刚才获取到的值

    Window("Flight Reservation").WinButton("FLIGHT").Click
    Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select 1

    'Window("Flight Reservation").Dialog("Flights Table").Activate
    Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
    'Window("Flight Reservation").Activate
    'Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click '点击OK按钮,自写
    Window("Flight Reservation").WinEdit("Name:").Type "M"
    Window("Flight Reservation").WinEdit("Name:").Set "May"
    Window("Flight Reservation").WinButton("Insert Order").Click
    wait(5)
    Window("Flight Reservation").WinMenu("Menu").Select "File;New Order"
    'Window("Flight Reservation").WinMenu("Menu").Select "File;Open Order..."
    'Window("Flight Reservation").Dialog("Open Order").WinCheckBox("Flight Date").Set "ON"
    'Window("Flight Reservation").Dialog("Open Order").WinObject("10/03/16").Type "100316"
    'Window("Flight Reservation").Dialog("Open Order").WinButton("OK").Click
    'Window("Flight Reservation").Dialog("Open Order").Dialog("Search Results").WinButton("OK").Click
    next
    Window("Flight Reservation").WinMenu("Menu").Select "File;Exit"
    'next
    systemutil.CloseProcessByName "D:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe" '关闭flight程序

    PS:在该例子中,使用到了VBScript的一些知识进行完善脚本;

    1)DIM声明变量。声明变量的一种方式是使用 Dim 语句、Public 语句和 Private 语句在 Script. 中显式声明变量。声明多个变量需要使用逗号分隔变更。

    VBSCRIP的变量命名规则:

  • 第一个字符必须是字母。
  • 不能包含嵌入的句点。
  • 长度不能超过 255 个字符。
  • 在被声明的作用域内必须唯一。
  • 2)FUNCTION语句。声明 Function 过程的名称、参数以及构成其主体的代码。

    语法
    [Public | Private] Function name [(arglist)]
    [statements]
    [name = expression]
    [Exit Function]
    [statements]
    [name = expression]
    End Function

    Function 语句的语法包含以下部分:

    部分 描述
    Public 表示 Function 过程可被所有 Script. 中的所有其他过程访问。
    Private 表示 Function 过程只可被声明它的 Script. 中的其他过程访问。
    name Function 的名称,遵循标准的变量命名约定。
    arglist 代表调用时要传递给 Function 过程的参数的变量列表。用逗号隔开多个变量。
    statements Function 过程的主体中执行的任意语句组。
    expression Function 的返回值。

    3)RANDOMIZE语句

    描述
    初始化随机数生成器。
    语法
    Randomize [number]

    number 参数可以是任何有效的数值表达式

    说明
    Randomize 使用 number 参数初始化 Rnd 函数的随机数生成器,赋给它新的种子值。如果省略 number,则使用系统计时器返回的值作为新的种子值。

    如果不使用 Randomize,则第一次调用 Rnd 函数(无参数)时,它将使用相同的数字作为种子值,随后使用最后生成的数值作为种子值。


    注意 要重复随机数的序列,请在使用数值参数调用 Randomize 之前,立即用负值参数调用 Rnd。使用相同的 number 值的 Randomize 不能重复先前的随机数序列。

    4)FOR....NEXT语句

    描述
    以指定次数重复执行一组语句。
    语法
    For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
    Next

    For...Next 语句的语法包含以下部分:

    部分 描述
    counter 用做循环计数器的数值变量。这个变量不能是数组元素或用户自定义类型的元素。
    start counter 的初值。
    end counter 的终值。
    step counter 的步长。如果没有指定,则 step 的默认值为 1。
    statements ForNext 之间的一条或多条语句,将被执行指定次数。

    说明
    step 参数可以是正数或负数。step 参数值决定循环的执行情况,如下所示:

    如果 ... 则循环执行
    正数或 0 counter <= end
    负数 counter >= end

    当循环启动并且所有循环中的语句都执行后,step 值被加到 counter 中。这时,或者循环中的语句再次执行(基于循环开始执行时同样的测试),或者退出循环并从 Next 语句之后的语句继续执行。


    提示 在循环中改变 counter 的值,将会使程序代码的阅读和调试变得更加困难。

    Exit For 只能用于 For Each...NextFor...Next 结构中,提供另一种退出循环的方法。可在语句中的任意位置放置任意个 Exit For 语句。Exit For 经常和条件判断语句一起使用(例如 If...Then),并立即将控制权转移到 Next 之后的语句。

    可以将一个 For...Next 循环放置在另一个 For...Next 循环中,组成嵌套循环。每个循环中的 counter 要使用不同的变量名。下面的结构是正确的:

    For I = 1 To 10
        For J = 1 To 10
            For K = 1 To 10
            . . .
            Next
        Next
    Next
    

  • 干软件测试三年了,对行业的看法(原创,欢迎拍砖)

    victorgly 发布于 2008-07-30 11:22:55

    干软件测试三年了,对行业的看法(原创,欢迎拍砖)


    昨天是2008年7月11日,我入职满三年之日。很多公司都把三年作为一个新人当作公司自己人的一个标志,就像《忠奸人》里所说,这是He's a friend of ours和He's our friend的区别。呆在一个行业里久了,即使再愚钝,也能看出这个行业的整体趋势来。现在大体聊聊这三年对这个行业的看法:
        1、软件测试热门不热门?
        在google中输入“软件测试”,它告诉你共有487万项符合要求的网站。当你看到这篇博客的时候,这个数字可能又增长了,至少,我又贡献了一篇(笑)。看起来蔚为壮观吧,满眼都是用词火辣的新闻告诉你软件测试有多热门、多高薪。
        好了,如果你有基本的新闻鉴别能力的话,你应该能看得出,这些都是软文,全部都是,无一遗漏。赤裸裸的软文。机缘巧合,我有机会接触到几个在软件测试培训机构的朋友,就是目前很热门的“BTEST”和“北大青鸟”。上述你搜到的各个网站发的这些文章,都是他们进行媒体公关的结果。不信?你看看文章的结尾,都或明或暗地提到“你丫该去找个软件测试机构培训一下了”。感觉自己上当了吧?适当问候一下欺骗你感情的媒体吧。
        软件测试工程师的确在国内很紧缺。但是,这个趋势不会持久,这十年来,类似的热门IT岗位我可以举出几十个:网络工程师、WEB程序员、JAVA程序员、嵌入式工程师,不一而足。它们现在怎么样了?全都处于过饱和状态。他们全都是明日黄花了,一朵朵都已经凋谢。软件测试工程师也不例外,它们的今天就是软件测试工程师的明天。
        那这行还能干么?能,只要你够NB。(废话,忽略之。)由于入门门槛不高,初级软件测试人员很快会处于过饱和状态,顶多3年,就会成为街边的地摊货。而且,月薪会低得可怜。但是,高级人才还是会保持紧俏,这在哪个行业都是如此。目前国内的软件测试的水平还普遍偏低,高级人才依然非常少,依然很值钱。
        什么是高级人才?说一下自己不成熟的看法。数据库、中间件、Windows、Linux、Unix都能深刻理解原理,能调整内核参数,如果只是会用那就算了。完全掌握某一门程序语言,达到开发人员的水平,可以写出一切自己想要的小工具。自动化测试、性能测试、白盒测试、安全测试,四个都比较熟悉,并至少精通其中的一个。而且,英语水平要能达到和老外正常沟通。达到这个水平,就很可以笑看云卷云舒了,你已经接近神了,凡人要忍受的裁员、生活压力等痛苦都与你无关。你只需用一颗慈悲的心去同情他们。
        那么报纸上说的,“月薪8千找不到高级软件测试人才”是什么意思?别逗人笑了!这是无知记者想当然编出来的谎话。长安城内,月薪8千顶多找个熟练的中级工程师,真正的高级工程师是不会在菜市场里贴上标签月薪8千代售的,他们只会安静地坐在写字楼里,等着猎头给他们打电话,然后面无表情地回答:“OK,deal.”
    2、关于技术和商务    
        我只是从事过技术,并没有做过商务,但是通过自己的好朋友了解了不少。总的来说,作为技术,除非是去摩根之类的投行做IT,否则在IT公司做技术员工的话,不当领导或当小领导,很牛逼的人,年薪20~25万是上限了,IBM的band8\band9大致如此。有年薪百万的,实在太少。作商务的话,同样的公司,同样程度的员工,年薪的上线应该是50~60W。接触过猎头的朋友都了解,猎头接到命令年薪50w去挖一个商务人员不奇怪,但是如果接到命令年薪50w去挖一个技术员,那雇佣方肯定脑子秀逗了。技术和商务相形见绌,作为IT技术人员,很不甘心,但是,这是事实,铁一般的血淋淋的事实。我们从来不怕落后,只怕自己不敢承认落后。
        商业是一切活动的润滑剂,这个领域是独特而有魅力的。从市场宣传到寻找定位、售前、销售,每一步都是和活生生的人打交道,他们不用彻夜加班。但并不见得就比技术轻松。做商务的好处在于,他们积累的是人脉和关系,这使他们越老越值钱,而且不用被驱动着每天熬夜看书更新自己的知识。而做技术,一个季度不学习,就会有很多新出的东西不明白了。即使你年薪20万,你仍然需要每天下班后熬夜学习新的技术。
        上面这么一对比,技术和商务高下立见。技术相对挣得少,还要每天学习,担心自己老了会失业。但是不要这么轻易就动摇,有的人是天生的程序员,和人说话会咬自己舌头,但写代码就像吸白粉,那你就每年领个20万,可以活得很滋润了,不必转行,不要嫌商务的赚钱比自己多,全聚德的烤鸭卖得好,做烤鸭的师傅肯定挣得不多,就是这个道理;有的人天生喜欢和人打交道,鬼话说得连自己都信,一群人中国人在一起开会就是要用英文,那他天生适合一年领个50万;但如果你是个中间派,不知道自己适合干什么,我也不能告诉你答案,我只能告诉你每个选择的最好结果是如上所述。
    3、关于国内企业和外企
        简单地说:外企钱多,但是年薪50万后,上头都是新加坡和香港的假鬼子了,你上不去。而且IT外企在中国没有核心研发。私企的钱比外企少好几个档次(百度例外),但是,如果你觉得自己很牛,到了犇的级别,就来私企,搞核心研发,要股份(这是关键),工资少,算上股份就比外企多了。
        如果是没牛到那个地步,该怎么选择,相信你看了上面应该已经明白了。
    4、关于创业和打工
        我现在还没有魄力创业,如果没有人脉,要创业,三思。卖馄饨的能搞几千万,但是几千万个里面只有这一个成功了。

    特此: 这是我在博客中写的,第一次发这种装逼文,我算不上技术大犇,但是我的生活圈子能保证文章资料的真实性。我只是一个普通人,不过想让生活过得好一点点。
  • 测试BLOG收集

    糊涂测试 发布于 2009-11-26 21:29:11

    Webx朱少民—质量管理

    http://blog.csdn.net/kerryzhu

    陈绍英--- 性能测试
     http://blog.csdn.net/chenshaoying

    段念---性能测试:
     http://www.guanhe.cn/
     http://guanhe.cnblogs.com/

    深圳oracle 朱波 –oracle测试,性能/自动化测试
    http://www.rickyzhu.com/

    陈雷-- 性能,管理 :
     http://jackei.cnblogs.com/

    柳胜(性能+自动化):
     http://www.cesoo.com/
     http://blog.csdn.net/namesliu/category/236043.aspx

    文斯(白盒):
    http://blog.csdn.net/vincetest/
     http://blog.csdn.net/wayne_chan/category/241332.aspx

    微软余正洋:
     http://blog.csdn.net/rogeryu/

    jack-测试架构:
     http://www.51testing.com/?uid-293557

    广东赛宝陈能技-自动化:
     http://blog.csdn.net/Testing_is_believing

    刘艳会—c++工具:
     http://www.51testing.com/?uid-10851

    于涌—性能测试:
     http://tester2test.cnblogs.com/

    深圳金蝶杨学明:
     http://mikeyond.cnblogs.com/

    秋阳-综合:

    http://www.cnitblog.com/qiuyangzh/category/375.html

    阳光:
    http://blog.csdn.net/Test_sunny

    微软李和恒:

     http://blog.csdn.net/papercrane
    微软安全测试:
       http://blog.csdn.net/goldcattle/

    楷子狐:
     http://hi.baidu.com/higkoo

    zee ---性能测试:
    http://www.7dtest.com/
    http://blog.csdn.net/zeeslo
    http://blog.csdn.net/zeeslo/category/215291.aspx


    盛大龚X—性能测试:
    http://blog.csdn.net/jacky8024
    http://blog.csai.cn/user1/37626/index.html

    成都四方辛凯:
     http://blog.csdn.net/nilxin/category/144266.aspx

    安全测试:
     http://www.51testing.com/?uid/59943

    51testing云层—性能测试

     http://www.51testing.com/?uid-104

    崔启亮---本地化:
     http://blog.csdn.net/giltworld/

    mayingbao—测试管理:
    http://mayingbao.cnblogs.com/

    贺炘:
     http://blog.csdn.net/hxcat

    小布播客---性能:
     http://wilson66.cublog.cn/
     
    阿里云刘新宇:
       http://blog.csdn.net/omomo/
      
    阿里巴巴 SQA :
     http://hi.baidu.com/jacob/blog/index/0

    阿里巴巴QA:
     http://www.51testing.com/index.php?uid-159438
    阿里云陈洪:
     http://hi.csdn.net/linkyou

    淘宝QA:
      http://www.51testing.com/?uid-84753

    阿里之家:
     http://fafeng.blogbus.com/


    陈卫俊:
    http://www.51testing.com/?uid/5534

    51testing朴春龙---LR:
    http://blog.csdn.net/piaocl

    宋峰---QTP自动化:
    http://www.51testing.com/?uid-35-action-spacelist-type-blog

    苏州风过无息---QTP自动化:
    http://www.51testing.com/?uid-3528

    更夫:
    http://www.51testing.com/?uid-1592

  • 让上司刮目相看的感谢语大全

    月上百合 发布于 2009-11-06 10:00:16

    Thanks a million. I really appreciate it.万分感谢,真的是帮了我大忙啦.


    I really appreciate what you've done for me these days.
    我真的很感激这些天来你对我的帮助.

    It's very kind of you to help me.
    你能帮助我真是太好了.

    I really don't know what I would have done without your help.
    真不知道没有你的帮助我该怎么办

    Thank you for one of the most enjoyable visits we have had in many months.
    在您处的参观访问,是我们几个月中最愉快的一次.谨向您表示感谢.


    Thank you for contributing so much to the pleasure of our staying...
    感谢您使我们在......停留期间的愉快所作的许多努力.


    Thank you so much for your generous hospitality.
    非常感谢您慷慨的款待.

    You must give me the chance to return your kindness when you visit here.
    希望您光临我处,使我能答谢您的盛情.


    Thank you very much (ever so much) (most sincerely) (indeed)(from the bottom of my heart).
    很(非常)(最真诚地)(确实)(衷心)感谢您.


    It's generous of you to take so much interest in my work( togive me so much of your time) (to show me so much consideration).
    承蒙您对我的工作如此操心(为我花费这么多时间)(对我如此关怀).


    At the outset, I want to thank you for your kindness to me and for your compliments.

    首先,我要感谢您对我的友爱和问候.
  • 英文面试

    meilirensheng 发布于 2009-11-06 11:16:26

    白领的一天 场景1:Interview我要找工作

    1.Interview我要找工作

    常用应急场景

    范例一:I am working on it

    Hi, Monica, how is everything going?

    Everything goes well, but I am thinking about quitting my current job.

    Why? You’re not satisfied anymore?

    I just sense. But I cannot grow anymore. My boss is not really supporting me. I am interested in some positions in other JV companies, but I need to do some more in-step research before I send my application letters out.

    That is important. Doing research on a company you are interested in will definitely help your application.

    Certainly, it is very nice talking with you. But I really have to go now. Catch you later.

    Ok, good luck to you.

    范例二:Calling a company

    ABC Company, my name is Lucy. How can I help you?

    Hello, Lucy, this is Monica. I’m calling for the accountant position. I saw the information about the vacancy on your company’s website. Is it still available?

    Thank you for your interest. The position is still available. Have you already sent your CV to us?

    No, not yet. First, I want to check about the availability and see if you could give more information.

    It is urgent for us to fill this position now and I would like to stress that English is a must because of the international contacts and most likely traveling abroad very soon. If all these is not problem for you, I recommend you to mention these in your cover letter and send it to me directly.

    The notification period of my current job is not that long and I’m quite profession to English and I am happy with the traveling abroad as I’m good dealing with the people from other cultures. It makes the whole job even more interesting. I will send my resume to you still this week.

    范例三:E-resume or paper resume

    Hello, Lucy. This is Monica again. I have a question.

    Please ask.

    I was wondering what kind of resume do you prefer, an e-resume or paper one?

    For this position we prefer e-resume at the very beginning. Please send it to our department’s e-mail box.

    Ok, thank you.

    You’re welcome.

    2.接到猎头电话

    常用应急场景

    范例一:A call from a head-hunter

    R: Hello, I am Richard from the Brooks Head-hunter company. Can I have a private talk with you?

    M: Er? I am driving right now. Can you call back in 30 minutes?

    R: Sure.

    R: Hi, Monica, Richard again. Have you ever heard about our company? It is an international one with good reputation. We have a lot of successful cases. If you’re trying advance your career, I would love to help you. XYZ Company is one of our clients. They’re in need of the talent like you. Would you be interested in taking part in an interview? It is scheduled some time within this week.

    M: Thank you for calling. I really appreciate your kindness. But right now, I’m very busy preparing for an interview of another company. I don’t think I am available for this opportunity.

    R: Ok, I see. Good luck to you. You have my number. Call me when you change your mind. I can send you more detailed information about company and jobs you might be interested in if you give me your private e-mail address.

    M: Well, I will text to you. Thank you, bye for now.

    R: You’re welcome. Bye.

    3.第一次去公司

    常用应急场景

    范例一:How can I get there?

    Hello, this is Lucy from ABC Company. Is this Monica?

    Yes, it is.

    I am calling to inform. you that we have arranged an interview for this accountant position at 2 PM this Thursday afternoon. Please come on time.

    Ok, thank you. By the way, could you please tell me how I can get there from A community?

    Oh, you can take the subway, get off at B stop and walk north for several minutes. You will find a building. It will take about 40 minutes in total.

    I got it. Thank you so much.

    You’re welcome.

    范例二:Could you show me the way?

    Excuse me, could you please show me the way to the human resource department?

    Yeah, but have you made an appointment ahead?

    Yes, of course. I am Monica. I have made an appointment with your HR manager.

    Just a minute please. I’ll make a call to the HR office.

    Yes, they confirm your appointment. Please come in. it is on the 3rd floor, room 3106. You can take the right elevator as the left on is in maintenance today.

    Thank you very much.

    You’re welcome.

    4.初次面试

    常用应急场景

    范例一:Three rounds is successful

    Good afternoon. How can I help you?

    Good afternoon. My name is Monica. I am here for the job interview at 2 PM.

    Ok, please first fill in the form. and return it to me. You can do it in the next door.

    Done. Here is my paper.

    Everybody attention. I would like to make sure you all know the process. The interview consists of three parts. One, all of the interviewees will answer the question there and lasts for maximum one hour. Two, we will take a 30-minute’s break. After the break, we all come back to this office and I will announce the successful candidates for the 2nd round. In which, you have a small interview with your future manager.

    What about the 3rd round?

    Good question. But I will tell you when you pass the first two.

    范例二:Meeting the manager

    Good afternoon. I suppose you are Ms. Monica. My name is Mr. Thomas, the general manager of ABC Company. Here is my business card.

    Thank you very much.

    I am very impressed by your resume. Therefore, I am very interested to know why you’re willing to leave your current company.

    I am looking for a more challenging position. I can’t grow anymore in my current job.

    Ok, I understand. But why you choose us to work for?

    I have studied carefully the information about your company on the internet and I have checked your company’s homepage. I am impressed by the company. And I like the products a lot. Since you’re growing steadily, I would be very eager to help you to improve your accounting system.

    How do you work with a team?

    I work quite well with a team. I’m a good team player. I respect people, cooperate well with member’s team. And I will do my best to help team members.

    What’s your long term goal?

    I’d like to bring to ABC Company not only my technical skills, ambition, enthusiasm, but also my loyalty, a sensor desire to become an administrative assistant. It is the hardest of my career plans.

    5.面试终于结束了

    常用应急场景

    范例一:It is enough for today

    It is enough for today. Do you have any last question? If not, thank you for taking your time to come to our interview.

    You’re welcome. For the moment, I have no further questions. I got a good picture of the job and the company. All my questions have been answered. Thank you for your time.

    We will have an internal discussion and then we will contact to inform. you of our decision on whether we continue with you or not.

    Ok, it was very nice to talk with you and I look forward to your decision at your earliest convenience. Bye.

    Goodbye.

    范例二:Still a little on the edge

    Any plans tonight?

    Not really, do you?

    Well, I am wondering if we took a hang-out for a drink or something. You know, I just came back from a really tough interview. I was quite nervous during the interview. I really want to have the job. Right now, I am still a little on the edge. I am not sure if I could convince them during the interview.

    Take it easy. It is all over now. How was it going, anyway?

    I don’t know. I think I did well in the paper exams. I was prepared to answer a lot of questions, but they didn’t ask those as I expected. To my surprise, the manager tried to talk about the Chinese poesy with me.

    That’s strange. But probably, it is the new interview technique they call it “Getting to know you more personally”. What about your answers?

    Just did my best.

    6.复试通知

    常用应急场景

    范例一:Please come for the next round

    Hello. This is Lucy from ABC Company. Is this Monica?

    Yes.

    I am calling to inform. you that you have passed the first two rounds of interview. Could you please come for the final round? It is scheduled on the morning of next Monday 10AM in the HR manager office.

    Thank you for calling me. I will be there on time.

    Ok, see you then, bye.

    Bye.

    范例二:Share the news with Tina

    Hi, Tina, I’ve got good news. I have successfully passed the first two rounds of interview with ABC Company. They informed me to go to the final round next Monday. It looks very promising.

    That is awesome. Congratulation! I know you can make it.

    Thanks. Let’s go for a celebration this evening. Are you free?

    Yes. Wait for me at the café down my office building. See 5PM, ok?

    No problem. See you!

    See you!

  • 面试经验之谈——与大家一起分享

    pycctv 发布于 2009-08-02 22:08:21

    面试经验之谈:
    1.薪资问题:当面试官问及薪资的问题时要慎重回答,要根据自己的能力和行业的发展水平来定,要的太低,企业会觉得你可能没有能力,心里没底;要的太高,可想而知,都要适可而止(我就在此吃过亏,导致面试失败)
    2.我觉得面试中最重要的就是:见人说人话,见鬼说鬼话;要想面试成功,就要了解面试官是一个什么脾性的人,你才能对症下药,这样的话,成功的几率才会提高。
    3.实事求是:有什么说什么,不要顾及,不过自己不懂得,不会的,还是要虚心学习,不能不懂装懂
    4.心态要好:面试,我觉得心态很重要,不要紧张,就当时一次很普通的同事之间的交谈,这样的话你才会无所顾忌的,将自己的能力在很短的时间展示出来
    5.即使面试不成功,也要保持乐观的心态,自始至终,跟面试官的交谈,要面带微笑。
    6.善于总结:每次面试完之后都要进行总结,以备不时之需。
    7.能力:能力我在这里不想多说,现在的面试分为笔试和口试(面谈),笔试的话,就是发挥你自己的最好的水平,不要想得太多,反而效果不佳
    8.礼仪方面:这个固然很重要,但是没有必要去刻意的强求,这样的话,面试官会觉得你很做做(虚假),一定要自然,大方。
    9.在面试去之前不要想得太多,我经常在去面试之前会对自己说:“面试的结果不重要,重要的是享受其中的过程,即使面试失败,我还是有收获的,因为我又多了一次面试的经验”。只要一点一滴的积累,将来成功的可能性才会更大。不要觉得面试失败了,就觉得自己很……我现在还觉得面试挺有意思,就是工作之余,朋友之间的闲聊。
    10.如果面试官问你在测试中遇到这种问题吗?假如说你遇到,你不要只说,我遇到过,要主动所遇到的问题的过程讲述一遍,最好可以讲述是怎样处理的,如果不这样回答的话,面试官如何评价你的能力?
    11.笔试:笔试的时候,如果所有的题你都会答那是组好不过了,如果有不会的,实在是写不出来,我个人认为,就不要乱写,宁愿空着,可以在面谈的时候将你笔试中没有做的题提出来,然后说说为什么没有做,回答这个问题也不要直接说,要突出你的优势和弱点,最主要的是要突出你强的一面。这就需要技巧了,呵呵!
     今天先总结这么多,写的比较乱,不过基本上我遇到的就这么多,随后再有面试方面的经验的话再跟大家分享。希望对大家有所帮助。大家也可以共同探讨有关面试的问题,呵呵……
  • 大公司和小公司在某种程度上的区别

    孤星凌云 发布于 2009-07-31 13:39:56

    大公司和小公司在某种程度上的区别

    小公司就好像一个铁匠铺,只有你们伙计和老板几个人,作为伙计的你除了要打铁,还要烧火,照看生意,你能学到各种各样的知识,你能得到比较全面的锻炼,对于个人能力的发展可能更多的是横向的。而你的铁匠铺生产出来的产品,估计也不过是一些粗糙的马掌,锄头,菜刀什么的。如果有一天你觉得其实如果有一个人专门去烧火,可能会使火烧得更好,更旺。但是你的老板可能会认为,现在火能烧着,能用来烧铁就足够了。多找一个人,还要多加开销,而带来的好处虽然使火更旺了,但是对于产量,以及收益没有太大的影响。所以,对于普通员工,就应该明白,在一个小公司,你就应该尽量使自己多元化,什么都掌握,但是不必什么都精通(如果能精通当然更好)。同时,你的工作也将仅仅限制在能带来最大利益的地方,更能使客户满意,从而掏钱的地方。这是由小公司的生存需要决定的。你不得不面对这样的局面,也许今天你还是个打铁的,那么明天你可能就必须跑到集市上叫卖。所以,在小公司里对于一个普通员工的好处就是,你可以锻炼你的多种能力,你也可以相对容易的在其中的某一个岗位取得一时的成功,但是如果你想取得一直的成功,需要不断变化适应环境的变化。今天你需要打马掌,明天就需要打菜刀。今天你打了几个马掌,明天就需要挑着担子出去卖掉。这样慢慢的,随着日子越来越久,你就知道了该怎么去做,这个时候你面前是两条路,一,自己单干,脱离你的老板,二,和你的铁匠铺老板的距离更进一步,比如铁匠铺老板可以把女儿嫁给你,如果他有的话,如果你也想娶的话。
    相比之下,大公司就好像一个汽车厂,产品的复杂性导致了n多个部门的存在,每个部门都有各自的工作。可能你只需要做一个车灯。你不必考虑车灯能否卖的出去,或者从哪里获取材料,你所有需要做的就是在这些条件都已经充分具备的情况下,如何去做好一个车灯,让它更结实,耐用,美观,达到要求的标准。做下来,你可能会成为一个做车灯的牛人,但是除了做车灯你什么都不会。你有充分的时间去学习如何做好一个车灯,会有资料,甚至师傅去指导你。你不必操心你的上一道工序是否能给你符合要求的材料,那是他们的事情,你不必考虑你的下道工序是否知道该怎么安装或者使用你的工作成果。这就是大公司,你只需要做好你份内的事情,同样也不会随便把你从一个岗位调到另一个,除非你不称职,或者你老爸是公司老板(让你熟悉各个部门然后做接班人)。在这样一个部门呆了久了,你就了解了做个车灯所需要的所有的东西,你知道如何去做,知道多久能作出来,知道怎么去安排资源,知道怎么去带徒弟,那么你也就成了lead(当然lead的工作不仅仅限于此)。
    如果你在大公司是个不错的工人,到了小公司,应该不难做一个lead。
  • 自动化测试的意义之快速反馈

    woza 发布于 2009-07-30 16:44:40

    自动化测试仅仅是为了能够在有限的时间内测试更多的功能吗?

    我觉得有一点可能被忽略了,那就是自动化测试可以给开发人员提供快速反馈。当我们提倡持续集成的时候,如果没有快速反馈作为支撑的话,持续集成的意义就失去了。如果需要做到快速反馈,目前看来只有自动化这唯一的解决方案。

    如果一个程序员在Check in一段代码之后,他可以在几分钟内通过自动化测试获得结果,那我相信他会非常愿意配合QA提供自动化所需的相关资源。

    如果我们仅仅是把原来手动执行的测试,转换成自动化,而不考虑快速反馈的因素,那么自动化的作用将大打折扣。

    要使自动化测试达到快速反馈的目的,有几个要点。
    第一,测试环境的搭建必须自动化
    第二,所有的测试必须独立
    第三,所有的测试必须能够重复执行
    第四,从搭建测试环境到测试执行结束,必须在较短的时间内结束。最好是10分钟以内。

    这样看来,基于GUI的自动化测试很难达到这样的目的。Unit test又无法覆盖业务逻辑。可能Behide GUI才是目前最好的选择。
  • 【节点的故事】

    假装不在 发布于 2009-08-03 21:54:11

    出自 《51测试天地》第十四期 作者:卢晨之

    前言:

        有一天,一家学校的校长在典礼上叫了Tom的名字,这时候有8位学生都站了出来。校长事先已经记住了排队顺序中第3个班的Tom就是他要叫的。但由于今天班级顺序都打乱了,校长看了,只能再次叫道,父亲是Jack,出列。幸运的是,这个时候学生只有2位。校长再加了个条件,爷爷叫William,父亲是Jack的出列.最后,就只剩下一个学生出列。

        在做WebQTP自动化测试时候,不免会出现这样几种情况:

    1,  QTP中相同属性的对象,通过添加Index去区别;

    2,  页面元素动态变化,难以通过Index去识别;

    3,  想根据文本提示不同,对相同类型元素做操作,却无从下手;

        而我们透过上面的故事可以知道,原来我们可以透过节点去解决这些问题,但要怎么做呢?

     

    一,简单了解Html节点

    大部分做过Web 测试的测试员们都会偶尔好奇的看看程序的Html代码,也可能了解了Html节点,节点的特点就和树一样,能够让你更轻松的遍历出你需要的元素。例如:

    <屋子 屋主=小卢>

           <书架   名字=A >

                  <书本 名字= Java Cook Book >

                  <书本 名字= QTP >

        </书架>

           <书架   名字=B >

                  <书本 名字= Java Cook Book >

                  <笔记 名字=QTP学习笔记>

        </书架>

    </屋子>

    在这里面,屋子、书架、书本 是节点,而我们就是通过这些节点去遍历得到我们想要的东西。通过上面的例子,我们也同样看到,使用不同的名字的书架,尽管有2本叫Java Cook Book的书,但都可以准确的得到我们想要的。

    二,辅助工具

    QTP中的Object Spy功能,是在使用QTP过程中比较长用到的功能,但是,QTP对某些表格标记节点、部分排版标记等不能很准确的抓取出来,也就无法透过SPY功能看到Html的节点上下层关系,也不能让我们更好的了解节点与节点之间的联系从而做好编写脚本的工作。

    在这里推荐使用的一个工具是微软的IEDevToolBar

    1,下载安装:

    http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&DisplayLang=en

    安装之后,在IE顶部菜单的查看工具栏里面钩选“Developer Toolbar”项即可。重启IE后,可以在界面上看到一个这样的小图标 ,点它。打开它,如图:

    2,功能简介:

    一般我们主要使用的几个功能:

           1),FindàSelect Element By Click

            简单的获取页面元素,方便在树中查看。提示:在点击页面元素前,先随便选中节点树上面的一个节点,使得在做点击获取元素操作时候,能够展其开所在位置。

           2OutlineàTable Cells OutlineàTables OutlineàDIV Elements

            用不同颜色标出所有的Table CellsTablesDIV

    3)        OutlineàAny Elements

    通过用户自己输入节点名,并选择颜色后,确定。在界面上会标示出所有同类型节点的元素。

     

    三,Dom 的节点属性

    在对节点操作的时候,我们除了借助辅助工具去获取上下层节点的同时,但有时候可能因为节点的属性不确定,让我们不能直接获取节点。因此我们会借助一些比较常用的节点属性来获取。

    DOM 节点属性

    1.nodeName属性返回一个字符串,其内容是给定节点的名字:

    例子:Browser(“browser”).page(“page”).Link(“link”).object. parentNode.Nodename

     

    2.nodeType属性返回一个整数,这个数值代表着给定节点的类型:

    例子:Browser(“browser”).page(“page”).Link(“link”).object. parentNode. nodeType

     

    3.nodeValue属性将返回给定节点的当前值:

    例子:Browser(“browser”).page(“page”).Link(“link”).object. parentNode. nodeValue

     

    遍历节点树

    1.childNodes属性将返回一个数组,这个数组由给定元素节点的子节点构成:

    例子:Browser(“browser”).page(“page”).Link(“link”).object. childNodes

     

    2.firstChild属性将返回一个给定元素节点的第一个子节点:

    例子:Browser(“browser”).page(“page”).Link(“link”).object.firstChild

     

    3.lastChild属性将返回一个给定元素节点的最后一个子节点:

    例子:Browser(“browser”).page(“page”).Link(“link”).object.lastChild

     

    4.nextSibling属性将返回一个给定节点的下一个子节点

    例子:Browser(“browser”).page(“page”).Link(“link”).object.nextSibling

     

    5.parentNode 属性将返回一个给定节点的父节点:

    例子:Browser(“browser”).page(“page”).Link(“link”).parentNode

     

    四,实战节点

     

    1、  QTP相同属性的对象,如何不通过添加Index去区别?

    首先看看下面的Html 代码片,如果读者有兴趣,可以自己建一个Html 文件,命名为Test.html,接着把代码片复制下去并保存。

    <DIV id=div1>

           <a href=http://www.51testing.com>测试</a>

    </DIV>

     

    <DIV id=div2>

           <a href=http://www.baidu.com>测试</a>

    </DIV>

         使用QTP我们把2个“测试”的Link都添加进对象库后,我们会发现对象库会分别给他们都添加一个index 属性。但是我们透过了IEDevToolBar可以看到如下图片的树:

    可以看到原来每个连接分别包含在DIV节点下面,所以要点击第二个连接时候,可以这么写:

    browser("Browser").Page("Page").webelement("html id:=div2").link("index:=0").click

    在这里,先通过ID获取了DIV的这个对象,然后点击它下面的第一个Link。这个方法的优点在于我们不是直接的在Page上寻找Link,而是更为仔细的透过它的父节点来找到它。有些时候对象添加进对象库,由于识别机制问题,若干个对象都被添加为同一个对象,导致了无法操作,这时候,我们如法炮制的使用这个方法,哪么问题也就迎刃而解。

           哪么,我们使用这种方法就只能做这点事情吗?你可以带着这个问题继续往下看。

     

    2、  页面元素动态变化,难以通过Index去识别?

    在做自动化项目中,由于用户的权限的不同,菜单、页面显示的效果也不一样,哪么我们录制的脚本完全就排不上场,好比下面的2个图片:

     

     

    (用户1                                 (用户2

    首先,我在这里需要解决2个问题:

    第一个是因为用户权限、其他因素导致了页面元素动态变化,同一个“打开”对象在不同情况下功能不一致。

    第二个是页面需要被操作的元素属性基本一致。

    这个效果很像我们有时候在项目中遇见的菜单的展开和收缩。我们需要以不变应万变。(连接也可以换成图片“+”、“-”等。)

    大家同样有兴趣可以建一个Html文件,并保存下面代码:

    <table id=table2>   

        <tr><td>

           <a href=http://www.google.com>打开</a></td>

           <td><table  >

            <td><div>谷歌</div></td>

        </table></td></tr>

    </table>

     

    <table id=table1>   

        <tr><td>

           <a href=http://www.51testing.com>打开</a></td>

           <td><table  >

            <td><div>51Testing</div></td>

        </table></td></tr>

    </table>

    保持完毕后,我们打开了IEDevToolBar,可以瞧到下面的树形结构:

     

    我们这里就做个点击“谷歌”字样前面的“打开”实例:

    Public function open(opentext)

       Dim guge

           If  browser("Browser").Page("Page").WebElement("html tag:=DIV","innertext:="&opentext,"index:=0").Exist then ‘首先判断有这个字样的对象是否存在

               set guge=browser("Browser").Page("Page").WebElement("html tag:=DIV","innertext:=谷歌","index:=0")   把对象赋值给guge

                  newid=guge.object.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id       透过上面图片可以看到第8个节点是有id这个值的,这也是非常有价值的一个节点,所以我们只能通过它来做下步操作。所以这步的操作,可以记成一个简单的口诀,寻有价值节点。

                  browser("Browser").Page("Page").WebElement("html id:="&newid).link("index:=0").click  和第一个例子的点击连接一样

           end if

    End Function

    open("谷歌")

    实现了上面的点击打开操作后,在实战1中的问题也就没有了(什么?你忘记第一个问题是什么,也难怪,读得入神了)。

    而在这个例子中,可能你会提出一个小小问题,是否它就真的能适用整个项目呢?其实像这种动态的Web,由于它会根据用户或者其他因素发生页面变动,所以它代码生成都是有自己的规则,也就是节点顺序一般都套用到其他地方,不会发生变化。

     

    3,除了类似菜单选择实例,我们还能做什么?

    在项目里面,某些页面可输入框可谓是多不胜数,所以我们都只填写了必填的,而非必填的在测试用例中也很少体现出来,那么这部分是否也会成为漏网之鱼而今后成为一个祸根呢?如果你已经懂得如何应用节点去解决类似菜单的问题,同样的它也适用在这里。

    看看下面图片:

    见 【节点的故事】续  http://www.51testing.com/?uid-174770-action-viewspace-itemid-142621


    版权声明:本文出自51Testing软件测试网电子杂志——《51测试天地》第十四期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

  • 正交实验法设计测试用例(转)

    shuishixingyu 发布于 2009-07-28 23:28:10

    正交实验法设计测试用例是考虑用最少的用例来覆盖两两组合的情况,是套用正交表来随机的产生用例,没有主次之分,是一种提高测试覆盖率的简单易用的方法。

       正交实验法的重点是首先确定因子、状态,生成因子状态表;然后用加权筛选的方法去除不重要的因子、状态得到简化的因子状态表(因素分析表);再利用正交表构造测试数据集。

       如何选择正交表呢?有几条原则:

       1 每个因子状态数目相同的情况,因子数为M,状态数为N,则最佳选择一个M因子N状态的正交表,如果不存在这样的正交表,则选择K因子N状态的正交表(K>M)。

       2 如果不同因子状态数目不相同,选择出现次数最多的状态数(相同的话选择大的)。

       3 如果所选的正交表的状态数小于因子最大的状态数,比如

        a1  a2 

        b1  b2  b3

        c1  c2 

    则把b1 b2放在一起,写用例的时候再分开写。

     a1

     b1b2  c1
     a2  b1b2  c2
     a1  b3  c2
     a2  b3  c1

    用例:

    a1 b1 c1

    a1 b2 c1

    a2 b1 c2 

    a2 b2 c2

    a1 b3 c2

    a2 b3 c1 

    正交表的下载网址http://www.york.ac.uk/depts/maths/tables/orthogonal.htm 

     正交实验法设计测试用例的例子:

    假设一个WEB站点,该站点有大量的服务器和操作系统,并且有许多具有各种插件的浏览器浏览:

    WEB浏览器:Netscape6.2IE6.0Opera4.0

    插件:       无、RealPlayerMediaPlayer

    应用服务器:IISApcheNetscape Enterprise

    操作系统:Windows2000Windows NTLinux

     

    WEB浏览器

    插件

    应用服务器

    操作系统

    1

    Netscape6.2

    IIS

    Windows2000

    2

    Netscape6.2

    RealPlayer

    Apche

    Windows NT

    3

    Netscape6.2

    MediaPlayer

    Netscape

    Linux

    4

    IE6.0

    Apche

    Linux

    5

    IE6.0

    RealPlayer

    Netscape

    Windows2000

    6

    IE6.0

    MediaPlayer

    IIS

    Windows NT

    7

    Opera4.0

    Netscape

    Windows NT

    8

    Opera4.0

    RealPlayer

    IIS

    Linux

    9

    Opera4.0

    MediaPlayer

    Apche

    Windows2000

     

     

    正交表:

     

     

    1

    2

    3

    4

    1

    1

    1

    1

    1

    2

    1

    2

    2

    2

    3

    1

    3

    3

    3

    4

    2

    1

    2

    3

    5

    2

    2

    3

    1

    6

    2

    3

    1

    2

    7

    3

    1

    3

    2

    8

    3

    2

    1

    3

    9

    3

    3

    2

    1

    一、            提取系统功能说明中的因子:

    1、WEB浏览器

    2、插件

    3、应用服务器

    4、操作系统 

    二、            分析各因子的状态

       1、WEB浏览器:1Netscape6.22=IE6.03=Opera4.0

    2、插件: 1=None2=RealPlayer3=MediaPlayer

    3、应用服务器: 1=IIS2=Apche3=Netscape Enterprise

    4、操作系统: 1=Windows20002=Windows NT3=Linux

     

    三、            将因子、状态映射到上面正交表中:

     

    测试用例

    浏览器

    插件

    服务器

    操作系统

    1

    Netscape6.2

    None

    IIS

    Windows2000

    2

    Netscape6.2

    RealPlayer

    Apche

    Windows NT

    3

    Netscape6.2

    MediaPlayer

    Netscape Enterprise

    Linux

    4

    IE6.0

    None

    Apche

    Linux

    5

    IE6.0

    RealPlayer

    Netscape Enterprise

    Windows2000

    6

    IE6.0

    MediaPlayer

    IIS

    Windows NT

    7

    Opera4.0

    None

    Netscape Enterprise

    Windows NT

    8

    Opera4.0

    RealPlayer

    IIS

    Linux

    9

    Opera4.0

    MediaPlayer

  • 编写软件测试计划需要考虑的几个问题

    超越自我 发布于 2009-07-30 18:11:07

    编写软件测试计划需要考虑的几个问题


    软件测试是有计划、有组织和有系统的软件质量保证活动,而不是随意地、松散地、杂乱地实施过程。为了规范软件测试内容、方法和过程,在对软件进行测试之前,必须创建测试计划。

    《ANSI/IEEE软件测试文档标准829-1983》将测试计划定义为:“一个叙述了预定的测试活动的范围、途径、资源及进度安排的文档。它确认了测试项、被测特征、测试任务、人员安排,以及任何偶发事件的风险。”

    软件测试计划是指导测试过程的纲领性文件,包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。

    做好软件的测试计划不是一件容易的事情,需要综合考虑各种影响测试的因素。为了做好软件测试计划,需要注意以下几个方面。

    1. 明确测试的目标,增强测试计划的实用性

    当今任何商业软件都包含了丰富的功能,因此,软件测试的内容千头万绪,如何在纷乱的测试内容之间提炼测试的目标,是制定软件测试计划时首先需要明确的问题。测试目标必须是明确的,可以量化和度量的,而不是模棱两可的宏观描述。另外,测试目标应该相对集中,避免罗列出一系列目标,从而轻重不分或平均用力。根据对用户需求文档和设计规格文档的分析,确定被测软件的质量要求和测试需要达到的目标。

    编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确。

    2. 坚持“5W”规则,明确内容与过程

    “5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。

    为了使“5W”规则更具体化,需要准确理解被测软件的功能特征、应用行业的知识和软件测试技术,在需要测试的内容里面突出关键部分,可以列出关键及风险内容、属性、场景或者测试技术。对测试过程的阶段划分、文档管理、缺陷管理、进度管理给出切实可行的方法。

    3. 采用评审和更新机制,保证测试计划满足实际需求

    测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。

    测试计划包含多方面的内容,编写人员可能受自身测试经验和对软件需求的理解所限,而且软件开发是一个渐进的过程,所以最初创建的测试计划可能是不完善的、需要更新的。需要采取相应的评审机制对测试计划的完整性、正确性、可行性进行评估。例如,在创建完测试计划后,提交到由项目经理、开发经理、测试经理、市场经理等组成的评审委员会审阅,根据审阅意见和建议进行修正和更新。

    4. 分别创建测试计划与测试详细规格、测试用例

    编写软件测试计划要避免一种不良倾向是测试计划的“大而全”,无所不包,篇幅冗长,长篇大论,重点不突出,既浪费写作时间,也浪费测试人员的阅读时间。“大而全”的一个常见表现就是测试计划文档包含详细的测试技术指标、测试步骤和测试用例。

    最好的方法是把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。

  • 软件测试面试题总结

    广州亚运 发布于 2009-07-30 18:14:53

     软件测试面试题总结

    1. 面向对象的三个基本特征?


       面向对象的三个基本特征是:封装、继承、多态。

     

    封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。


    继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

    通过继承创建的新类称为“子类”或“派生类”。

    被继承的类称为“基类”、“父类”或“超类”。

    继承的过程,就是从一般到特殊的过程。

    要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。


    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

    实现多态,有二种方式,覆盖,重载。

    覆盖,是指子类重新定义父类的虚函数的做法。

    重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。


    2.常用的作业调度算法有哪些?


    1).先来先服务(FCFS, First Come First Serve)
       2).轮转法(Round Robin)

    3).多级反馈队列算法(Round Robin with Multiple Feedback)
       4).优先级法(Priority Scheduling)
       5).最短作业优先法(SJF, Shortest Job First)
       6).最高响应比优先法(HRN,Highest Response_ratio Next)
       3.数据操纵语言:SELECT,UPDATE,DELETE,INSERT,FROM,FOR字句


    4.优秀的测试工程师应具备的素质:

    1).缜密的逻辑思维能力;

    2).很好的发散思维能力;

    3).出色的沟通能力;

    4).较强的学习能力;

    5).全面的技术;

    6).耐心,怀疑精神;


    5.软件项目风险评估及控制

    6.软件测试的过程


     

     

  • TCL/EXPECT资源收集

    pulingwang 发布于 2009-07-27 10:00:01

    本贴主要收集一些我看到过的TCL/EXPECT方面的资源,以及关于自动测试方面的资源。

    TCL语言中文网:http://www.tclchina.com/
        关于TCL语言的中文网站,里面有不少资料,还有TCL和EXPECT的论坛。

    寒蝉退士的Bolg:http://mhss.cublog.cn/
        里面有很多作者翻译的文档、手册等,其中有几篇是关于TCL的。

    Tcl Developer Xchange:http://www.tcl.tk/
        熟悉英文的朋友可以看一下。

    Tcl FAQ:http://psg.com/~joem/tcl/faq.html
        TCL的FAQ,也许有帮助。

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/easwy/archive/2006/05/29/760880.aspx

  • 对于技术、方法、生活等问题的思考!【精】

    belie 发布于 2009-07-25 17:00:54

    偶然发现了一篇文章[http://www.cnblogs.com/Thriving-Country/archive/2009/03/10/1407645.html]感觉写的相当棒,没有理由不共享大家。以下是正文:
    我写这篇是由于看了小羊的"对技术的掌握到底应该有多深?"以及下面园友的评论加上自己对这一问题也有一定的看法,想表达出来与大家分享一下,同时也作为自己认识的一个记载.写的可能有些语无伦次,希望大家理解,有什么自己的想法大家可以评论.
    技术篇
    我基本赞同小羊对于"精通"二字的理解,实际上我也是这样理解它的.当你做了一年的时,你可能觉得自己做得已经很好了,觉得ASP.NET也就是那么回事,当你做了两年时你会发现不会的东西越来越多,当你做了n久以后你会发现几年前做的东西太烂了,为那时觉得自己很牛而感到可笑.那么什么才算"精通"呢?这个问题每个人理解得不太一样.我觉得"精通"有时还是可以写在简历上的,即使自己认为自己真的没有达到精通的地步,因为简历是写给别人看的,你要充分表达出你的长处,让别人了解你所擅长的技术,如果以为自己很谦虚而没有在自己的简历上写"精通"二字的话,而看简历的人不是真正的技术出身(或者做的技术不是很久或者不是很牛),那么你的简历很有可能直接的被pass掉(除非你遇到了传说中的伯乐,直接看出你得简历写很谦虚,认为你深藏不露).我有一次被面试的经历:去年去一家小公司面试,那个面试的人一直问我是否对ASP.NET已经很精通了(他们要的可能是比较高级一点的程序员),而我简历上确实没有写"精通"二字,于是我只好和他解释说"精通这个词我们理解的可能不太一样",其实一个程序员的素质也不是几个面试题就可以考验出来的(面试题网上多的很),于是以后我就直接在简历上也写上了"精通"二字,实际上我到底是什么水平只有我自己知道.在面试中就是尽可能的展现自己的长处,实际上"精通"二字已经被滥用了.大家可以使用,但是最好不要动不动就用,也要把握好一个度的问题.
     
    方法篇
    一个优秀的程序员是很值得我们去追求的.对于技术知识的把握我们也需要按需所取,计算机以及相关领域的技术太多了,我们只要擅长自己所需要的技术就行了,对其它一些技术是要大概了解一下,需要时再去学习.在四年大学生活和两年的工作中我懂得了比学习知识更重要的是培养自己分析问题和解决问题的能力(人类就是在不断的通过使用工具来认识世界和改造世界),培养自己的兴趣和爱好,这些东西要胜过知识本身.所以我们在学习技术时不仅要知道How,更要知道What和Why.这几年我一直在做.NET平台上的研究与开发,最近几天有空研究了一下Java方面的东西,在看一些资料时有一种非常亲切的感觉,好多东西基本差不多,包括实现的思想等,可能这就是学习的能力带给我们的好处吧.相反,就在前几天看到一个很基础的面试题时,我也有一种很熟悉但是就是不能准确的回答正确的感觉,实际上已经由于总也不用给忘了(有点类似于记忆性的题目).知识可能随着时间的推移而被慢慢的淡忘,而能力确永远属于自己.
     
    生活篇
    在小羊的"对技术的掌握到底应该有多深?"的评论中,有一个未注册网友的评论我觉得很经典,他是这样说的"技术当然越精通越好,但人的精力是有限的,工作的分工是变化的,如果你有时间你可以学得更多,但同时你也需要一定的生活享受,爱情、婚姻、家庭以及对社会的参与,你把大多精力放到学习上也不一定表示你多伟大,也许这样之后你成了一个技术大牛,有一定的价值感,但同时你也许就成为一个不合格的男友(或女友)、不合格的丈夫(或妻子)、不合格的儿子(或女儿)等等,所以兄弟姐妹们,除了这个物质不是很丰富的社会需要我们努力学习技术,同时我们更应该学会平衡一些东西,学会学习学会生活,如果说硬要说技术需要掌握多深,我的答案是----在你的追求环境和现实环境中,够用就行!(因为你还需要其他的东西)".写的很好,这和我想的一样,但是我就表达不出来,人生短暂,我们不能每天都为了自己的工作,为了自己的发展而放弃对其他方面的追求,"机会成本"这个词语大家都很清楚,我也经常和女朋友讲这方面的东西.你得到了这个东西,同时也就放弃了另一个东西.除了去专研技术,攻克技术难题的工作上的事情外,还有很多事情我们可以做,也等着我们去做好(无论你是否愿意).人的成功是多方面的成功,这样你才会成为大家的楷模,成为别人的偶像(例如菲尔普斯吸食大麻被禁止,因为他已经成为了很多人的偶像,不良的做法会影响到很多人,同时他也不是成功的人.还有很多影视明星等,以前我只觉得他们电影等演的好就行了,但是现在我也不那么认为了,我也很少关注他们了).
     
    我认识一个哥们也是做我们这行的,他就特别忙,他本身也特喜欢工作,每天工作从8:30一直到晚上11:00才睡觉,除了吃饭的时间基本都在工作,周末一般也会加一天的班,事业上可能比较成功,去年他有个女朋友也是由于时间问题和他分手了,我也曾经给过他一些这方面的建议.生命真的很短暂"眼睛一闭一睁一天过去了,眼睛一闭不睁一辈子过去了",我们需要让生命更加多彩.这些需要我们自己把握.
    总结
    人的生活是一个过程,不是一个结果(最终结果就是死亡,你的名字可能会流芳百世,但是迟早会被人们所遗忘).如果有人让我现在立即就成为比尔盖茨,我可能不会接受,我希望经过自己努力去实现,因为我需要体会这个过程.也就是体味人生.
     
     
  • 六种测试工作量的估算方法

    james.zhong 发布于 2009-07-23 15:44:20

    测试项目管理中或编写测试计划时,经常需要对某个测试工作进行工作量的预算,很多时候都是凭个人的工作经验进行估算的,如能结合一些常规的估算方法,有助于估算的精确度。

      以下是网上找到的一些常规的估算测试工作量的方法:

      1、 Ad-hoc方法

      这种方法下的测试工作量不基于任何确定的期限。工作一直继续直到达到一些由管理或市场人员预先定下的时间表。或者,一直到用完了预算的经费。

      这种情况普遍存在于非常不成熟的组织,并且时常有100%的错误差数。

      2、开发时间的百分比法Percentage of development time。

      这个方法的基本前提是测试工作量依赖于开发时间/开发工作量。首先,开发工作量使用例如LOC或FP方法被估算出来,然后使用一些探索性的方法来限制测试的工作量。  这种方法变化比较大而且通常基于以前的经验。

      通常预留项目的总花费时间的35%给测试。? 5-7%给组件和集成测试? 18-20%给系统测试? 10%给接收测试(或回归测试等)

      3、类比法(经验值法或历史数据法)

      根据以前或相似项目(主要在项目性质,领域,规模上有相似)所积累的经验或历史数据来估算工作量。类比法估计结果的精确度取决于历史项目数据的完整性和准确度,因此,用好类比法的前提条件之一是组织建立起较好的项目后评价与分析机制,对历史项目的数据分析是可信赖的。需要收集以下相关的历史数据:? 在设计和实现阶段花费的时间? 测试工作的规模,例如用户需求的数量,页面数,功能点? 数据样式,例如实体,字段的数量? 屏幕或字段数量? 测试对象的规模,例如KLOC

      4、WBS(work breakdown structure)估算法

      将项目或产品分解为具体的工作,然后分别对各个工作进行时间估算,最终求和得出项目或产品的测试工作量/时间。

      5、Delphi法

      Delphi法是最流行的专家评估技术,在没有历史数据的情况下,这种方式可以减轻估算的偏差。Delphi法鼓励参加者就问题相互讨论。这个技术,要求有多种相关经验人的参与,互相说服对方……

      Delphi法的步骤是:1、协调人向各专家提供项目规格和估计表格;2、协调人召集小组会各专家讨论与规模相关的因素;3、各专家匿名填写迭代表格;4、协调人整理出一个估计总结,以迭代表的形式返回专家;5、协调人召集小组会,讨论较大的估计差异;6、专家复查估计总结并在迭代表上提交另一个匿名估计;7、重复4-6, 直到达到一个最低和最高估计的一致。

      6、PERT估计法

      PERT对各个项目活动的完成时间按三种不同情况估计:一个产品的期望规模,一个最低可能估计,一个最高可能估计。用这三个估计用来得到一个产品期望规模和标准偏差的Pert 统计估计。Pert 估计可得到代码行的期望值E, 和标准偏差SD。

  • 一组经典的测试思想观点(转自51Testing博客)

    skyzjh 发布于 2009-07-23 09:17:51

     测试是不可能穷尽的,当测试出口条件满足时就可以停止测试

      有测试大师说测试是为了发现错误,一个好的测试是发现以前没有发现的错误。但是这个要求可能会使人走入极端。其实,不同的系统有着不同的质量要求,对于质量要求严格的系统,可能需要进行长时间的,全面的测试,尽可能的去挖掘系统中的缺陷。然而对于质量要求不是很严格的系统,系统是允许可以出现错误的,因此我们通过测试是要使得系统的缺陷数量能够降到可接受的范围内。

      测试是不可能穷尽的,资源和时间是有限的。因此我们在做测试的时候需要分析哪些功能是对用户很关键的,在这些功能中出现某类型错误对用户是不可接受的,而相对其它一些功能,出现的错误是可以容忍的,这样,我们在测试的时候,重点就应当去寻找那些用户不可接受的错误,而不是漫无目的的去搜索错误。同时我们应当对测试定义合理的出口标准,这是因为测试是没有穷尽的,系统中的问题你总是可以一直发现下去,然而我们不能无休止的去寻找这些问题。当条件满足的时候,我们就应当停止测试。而测试出口条件的设置需要考虑系统的质量要求及系统的资源要求。曾经有人说过:当时间和资源用尽的时候,测试也就停止了。这是没有办法的最好办法。

      测试是一个持续进行的过程,而不是一个阶段

      在传统的瀑布式开发模型中定义了专门的测试阶段,如单元测试阶段,集成测试阶段或系统测试阶段。然而,这并不意味着测试只有在这个时候才进行。我遇到过很多项目,在这些项目中,对测试的理解都基于了阶段这个概念,在他们的思维中,测试只有在适当的时候才开始,并且在某个点就可以结束了。这是一个错误的理解,并且对产品的质量来说是很危险的。现代的测试已经发展成为一个全过程的验证和确认活动,它贯穿于整个开发生命周期的始末。为了获得最大的受益,测试的开发和准备必须在编码之前就应当开始,同时为了保证最终的质量,我们必须在开发过程的每个阶段保证其过程的质量。

      测试必须被计划、被控制,并且被提供时间和资源

      测试并不是一个随机的活动,测试必须被计划,并且被安排足够的时间和资源。测试活动应当受到控制,测试的中间产物应当被评审并纳入配置管理

      测试计划是一个关键的管理功能,它定义了各个级别的测试所使用的策略、方法、测试环境、测试通过或失败准则等内容。测试计划的目的是要为有组织的完成测试提供一个基础。从管理的角度来看,测试计划是最重要的文档,这是由于它帮助管理测试项目。如果一个测试计划是完整并且经过深思熟虑的,那么测试的执行和分析将平滑的进行。

      测试计划可以分级,也可以是一个总的计划,并且测试计划是一个不断演进的文档。如果不考虑应用软件的最初来源(复用的组件或已实现的组件),软件需求是测试活动的驱动。因此,测试计划应当关注于文档化的需求。此外,支持测试的过程应当被文档化下来以创建一个可重复的过程,该过程将保证开发工作产品的质量。

      测试不是为了证明程序的正确性

      正如 Mayer 所说的,测试的目的是证伪而不是证真。事实上,证明程序的正确性是不可能的,一个大型的集成化的软件系统不能被穷尽测试以遍历其每条路径。即使遍历了所有的路径,错误仍有可能隐藏。我们做测试是为了尽可能的去发现错误。因此,测试必须包含一系列测试级别。这些测试级别能最大化对被测对象的覆盖。

      必须有一些标准可以用于平均所有的测试活动。所有可以跟踪到需求的测试可以通过三个方式进行执行:

      在正常的数据流量下的有效信息;

      在一个控制环境中使用超量的数据输入速率;

      使用一个预先计划的正常数据和异常数据的组合;

      理想的测试环境要能够使得一个系统在可控的方式下被破坏。例如,数据及数据组合必须不断变化直到系统不能够以正常的方式接受。系统支持变得不可接受的点必须被确认并文档化下来。

      必须在所有的测试级别上运行测试,且同时使用正常条件和异常条件。这是很严格的,即使在测试环境难以建立的情况下。

      尽早的、频繁的进行测试

      现代测试的一个重要哲学要求尽可能早的,尽可能频繁的进行测试,尽可能多的从开发那边获得反馈信息。这包含着要求测试尽可能早的进行准备,并且和开发人员一起进行评审、走读、单元测试、原型评价、早期模拟等等。早期测试的目的是尽可能早的发现任何意想不到的坏的消息,并且帮助开发人员产生高质量的单元。

      该方法希望在缺陷产生的时候发现并纠正缺陷,它假设了在早期测试中发现的问题能够被描述并及时修正。许多项目管理人员延迟了缺陷修正的时间直到开发人员已经完成了所有特性的设计和编码。这大大提高了系统出错的可能,也增加了修改的成本。一般来说,一次完成一个特性的设计和编码,并保证其正确性将更加有效一些。

      为什么我们要尽早的发现缺陷和修正缺陷呢?这主要有以下原因:

      1 、缺陷的修改成本随着阶段的推移将急剧上升,在产品发布之后修正一个缺陷的成本将是需求阶段的 100 倍,甚至更高;

      2 、缺陷具有放大的特点,缺陷修改延迟几个星期甚至几个月将使得系统更容易出错;

      3 、设计判定和一些小的代码限制及条件很容易被忘掉;

      4 、尽早修正缺陷可以节省重新分析设计的时间;

      5 、早期的问题反馈有助于防止类似错误的产生;

      6 、大量的缺陷和问题跟踪工作将被减轻;

      7 、如果必要的话,可以重新设计和编码,而这个工作越往后期越不可能

      测试不能仅仅包括功能性的验证,还需要包括非功能性的验证

      目前很多公司进行的测试,其范围仅局限在功能领域内进行测试。这一方面可能有产品进度的压力影响,另一方面则是测试人员对测试的理解还比较局限。从用户角度来讲,其需求除了功能性需求外,还包括了非功能性需求,有些非功能需求可能是显性的,而有些非功能需求则是隐性的。我们在测试的时候,应当关注所有的需求,在验证功能的同时,还需要验证产品的性能、可靠性、稳定性、可维护性、安全性、可操作性、可安装性等等。一个产品的缺陷往往会在其性能的边界上产生,如果我们忽视了这部分的测试,很多缺陷将漏过测试进入到用户手上。

  • oracle与sql的区别

    zero_up 发布于 2009-06-11 15:26:47

    体系结构 

    1. ORACLE的文件体系结构为: 

    数据文件 .DBF (真实数据) 

    日志文件 .RDO 

    控制文件 .CTL 

    参数文件 .ORA 

    1. SQL SERVER的文件体系结构为: 

    .MDF (数据字典) 

    .NDF (数据文件) 

    .LDF (日志文件) 

    3. ORACLE存储结构: 

    在ORACLE里有两个块参数PCTFREE(填充因子)和PCTUSED(复用因子),可控制块确定块本身何时有,何时没有足够的空间接受新信息(对块的存储情况的分析机制) 

    这样可降低数据行连接与行迁移的可能性。块的大小可设置(OLTP块和DSS块) 

    在ORACLE中,将连续的块组成区,可动态分配区(区的分配可以是等额的也可以是自增长的)可减少空间分配次数 

    在ORACLEl里表可以分为多个段,段由多个区组成,每个段可指定分配在哪个表空间里(段的类型分为:数据段、索引段、回滚段、临时段、CASH段。ORACLE里还可对表进行分区,可按照用户定义的业务规则、条件或规范,物理的分开磁盘上的数据。 

    这样大大降低了磁盘争用的可能性。 

    3. ORACLE有七个基本表空间: 

    ·SYSTEM表空间(存放数据字典和数据管理自身所需的信息) 

    ·RBS回滚表空间 

    ·TEMP临时表空间 

    ·TOOLS交互式表空间 

    ·USERS用户默认表空间 

    ·INDX索引表空间 

    ·DBSYS福数据表空间 

    不同的数据分别放在不同的表空间(数据字典与真实数据分开存放),在ORACLE里基表(存储系统参数信息)是加密存储,任何人都无法访问。只能通过用户可视视图查看。 

    4. SQL SERVER 存储结构 

    以页为最小分配单位,每个页为8K(不可控制,缺乏对页的存储情况的分析机制), 

    可将8个连续的页的组成一个‘扩展’,以进一步减少分配时所耗用的资源。(分配缺乏灵活性),在SQL SERVER里数据以表的方式存放,而表是存放在数据库里。 

    5. SQL SERVER有五个基本数据库: 

    ·master(数据字典) 

    ·mode(存放样版) 

    ·tempdb(临时数据库) 

    ·msdb(存放调度信息和日志信息) 

    ·pubs(示例数据库) 

    真实数据与数据字典存放在一起。对系统参数信息无安全机制。 

    6. ORACLE登入管理: 

    ·SYSTEM/MANAGER (初始帐户) 

    ·SYS/CHANGE_ON_NSTALL 

    ·INSTALL/ORACLE(安装帐户) 

    ·SCOTT/TIGER(示例数据库,测试用) 

    在ORACLE里默认只有三个系统用户,ORACLE是通过用户登入。 

    7. SQL SERVER登入管理: 

    ·SQL SERVER身份验证 

    ·WINDOWS 身份验证 

    在SQL SERVER里是通过WINDOWS用户帐户或是用SQL SERVER身份验证连接数据库的。 

    8. SQL不是一种语言,而是对ORACLE数据库传输指令的一种方式。 

    SQL中NULL既不是字符也不是数字,它是缺省数据。ORACLE提供了NVL函数来解决。 

    ORACLE中的字符串连接为 string1‖string2 ,SQL中为string1+string2. 

    集合操作:在SQL中只有UNION(并操作),ORACLE中包含MINUS(差操作)、 

    INTERECT(交操作)、UNION(并操作)。 

    9. 索引:SQL的索引分为聚集索引和非聚集索引,还包括全文索引; 

    ORACLE的索引包括:B+树索引,Bitmap位图索引,函数索引,反序索引, 

    主键索引,散列索引,本地索引。 

    10. ORACLE的数据类型比较复杂,有基本数据类型,衍生型,列对象型,表对象型,结构体型;SQL中的数据比较简单,只有一些简单的基本数据类型无法提供事务操作。 

    11. 在SQL中如果一个事务从开始执行到结束时了错了,它就会回滚到开始之前; 

    在ORACLE中它采用的是定点回滚,就是该事务函数化和精确错误定位,用savepoint标记保存点,用Rollback标记回滚错误的保存点。 

    在SQL中循环只有WHILE一种这用起来不灵活,在ORACLE中有多种循环(LOOP循环、WHILE循环、FOR循环)。 

    12. 在SQL中游标的使用比较复杂,不能同时打开一个以上的游标,因为它只有一个全局变量@@Fast_statues而且声明游标也麻烦,关闭游标时也不清除内存的;ORACLE中游标是以提高速度全部统一的单项游标,可以允许多用户异步读取,而且声明比较简单,就一句declare cursor游标名 is select 语句就可以了。 

    13. 容错机制:SQL中的错误机制比较复杂,没有提供错误描述;ORACLE中容错类型有三种,一个是预定义错误,一个是非预定义错误,一个是用户自定义,其中在自定义错误中它有两个是在SQL中不有的,那就是SQLCODE 错误号、SQLERRM错误描述。 

    14. 文件体系结构:SQL中有.MDF(主要数据文件)、.NDF(扩展文件,可以有多个)、.LDF(日志文件,可以有多个,存放在联机重做日志数据,这里的日志文件有一个缺点就是如果日志文件已填小巧玲珑的话,SQL将自动停止运行并等待人工干预,所以要经常监控日志的情况保证系统的稳定运行)。ORACLE中有.DBF(主要数据文件)、.RDO(日志文件,用来做灾难性的数据备份)、.CTL(控制文件,将数据库的物理文件映射到了数据字典中的逻辑表空间和连机重做日志文件上去,确保数据的一致性)、.ORA(参数文件)。 

    . SQL只能是本机备份本机的数据库,无法联机备份,而且备份压缩很低,占用了大量空间;ORACLE提供了7种备份机制,具有联机备份功能,有志门的备份机子。 

    15. Oracle的日志默认有3个,先写入1号日志,满了后再写入2号日志,2号满了再写入3号日志,3号满了后Oracle将自动备分1号日志的内容,然后清空后写入新的日志信息,且Oracle的日志有多路复用功能,我们可以为日志创建多个镜像,把相同的日志信息同时写入多个日志文件中,这样可以防止磁盘损坏造成的数据丢失。 

    SQL Server对每个数据库只能分配一个日志文件。且当日志填满后,日志将停止工作,等待人工干预,而无法自动重用。 

    Oracle的控制文件记录了数据库文件的物理位置和有效性,在每次打开Oracle系统都将自动对数据进行验证,查看其有效性,防止数据的丢失,这体现了Oracle对数据管理的严密性。 

    SQL Server无此安全机制,只用在使用到了数据库的信息后,系统才去查找数据是否存在。 

    Oracle的参数文件init.ora是可调的,既我们可以根据数据库的规模调整Oracle对系统资源的使用情况,以达到最合理的资源分配,让Oracle达到最佳的性能。 

    SQL Server的配置参数是内定的不可调整,它对系统资源的分配是固定的,不受拥护控制,因此无法同时处理大量用户的需求,这限制了它只能作为中,小型数据库。 

    Oracle以块为最小存储单位,以区为单位分配空间,用户可以根据需要自己定义块的大小,且区可以按等额或递增进行分配,这可以大大减少系统的I/O操作提高数据库的性能。 

    SQL Server中以页为单位或使用扩展类型以8页为一单位进行空间分配而无法人工干预,当遇到频繁存储或大数据量存储时,系统将频繁进行I/O操作使工作效率低下。 

    Oracle中的SQL语句书写规范且提供了完整的函数和数据类型。Oracle提供了健全的错误机制,用户可以轻松的获得错误位置和错误原因而加以修改。用户还可以自己定义所须的错误类型,用以检查逻辑错误。Oracle中对数据类型的转换和游标的定义也十分方便。因此,我们对代码的书写和维护也比SQL Server方便许多。 

    SQL Server使用类C语言,不易维护和查看代码。SQL Server包含的数据类型太少,无法定义结构体,数组,对象。SQL Server无法定义流程机制,类型转换也极不方便,SQL Server中对游标定义十分复杂,且当用户定义的多个游标同时打开时系统却只有一个游标变量,这是SQL SERVER中一个严重的缺陷。 

    ORACLE中用户可以根据数据需要在创建块时定义填充因子(空闲空间的百分比)和复用因子(当块的存储数据所占的空间下降到这个百分比之下时,块才重新标记为可用)。用户可以根据记录变化频率和数据量的大小设置合适的填充因子和空闲因子。 

    SQL SERVER只有填充因子,而它的定义与ORACLE刚好相反,它定义的是剩余可用空间的百分比。而SQL SERVER中没有复用因子,当页中数据低于填充因子,但剩余的空间已经不可能再插入新的数据,但页还是标记为可用的,当系统要写入新数据都要访问这个页而浪费时间,这种页称为废页,将使系统插入新数据时浪费大量时间查找可用的页。 

    ORACLE在创建表时用户可以精确定义数据存放的表空间,甚至可以把一张表分开存放在多个表空间中,这样可以将数据量庞大的表按某些字段分开存放,这将给查询带来极高的效率。


  • 软件测试中的各种派系(转)

    天空下下雨 发布于 2009-06-11 08:26:20

      测试是严谨的、技术性的,持此观点的大部分是学院派的,并且拥有很多支持者。认为测试是计算机科学和数学的分支。
      •Standard School 标准派
      测试是用来度量进度的,强调成本和可重复的标准。认为测试是一个严格管理的过程。
      •Quality School 质量派
      强调过程、监督开发人员,像守门员一样把关。认为测试是软件质量保证的分支。
      •Context-Driven School 上下文驱动派
      强调人的作用,寻找利益相关方关注的bug。认为测试是开发的分支。
      •Agile School 敏捷派
      用测试来证明开发已经完成;强调自动化测试。认为测试是用户角色的一部分。
      各种派系的发展过程
      分析派作为学院派,是各派系的祖先,它直接衍生了标准派出来,从标准派后就百花齐放了,质量派、上下文驱动派和敏捷派都是在标准派后产生的。
      上下文驱动派的核心信仰
      •软件是由人创造的,人决定了上下文。
      •测试能找到很多bug。Bug就是那些会找我们的利益相关方麻烦的问题
      •测试为项目提供信息
      •测试是富含技巧的智力活动
      •测试是交叉学科,包含各种学问
      核心问题:什么样的测试才是目前能提供的最有价值的测试?
      上下文驱动测试方法与探索性测试方法(ExploratoryTesting)的关系
    探索性测试是上下文驱动测试的典范,因为探索性测试强调的就是测试设计和测试执行的同时进行、快速的学习,与上下问驱动强调的因时制宜的观点不谋而合。
      上下文驱动派
      •内涵
      -期待变化。基于测试结果来调整测试计划。
      -测试策略的有效性只有通过实际调查才能确定。
      -测试调查需要经验性的和心理学上的研究。
      -专注于实践性的技能、技巧
      •最突出的应用方面
      -商业软件、市场驱动的软件
      •研究机构
      -LAWST Workshops & Spin-offs
      什么是上下文驱动测试?
      上下文驱动测试七大基本原则:
      •任何实践活动的价值依赖于它所处的上下文。
      •在某个上下文中,只有好的实践,没有最佳实践。
      •在一起工作的人才是项目的最重要主成部分。
      •随着时间的推移,项目呈现出难以预料的结果。
      •产品是问题的解决方案,如果问题没有得到解决,产品是无效的。
      •好的软件测试时一个富有挑战性的智力过程。
      •只有在项目的整个过程中通过判断和技巧,训练有素的协作,我们才能在正确的时间做正确的事情,以便有效地测试我们的产品。
      不能意识到上下文存在的测试不能叫上下文驱动测试。不能基于上下文对测试进行调整的不能叫上下文驱动测试。
      上下文驱动测试不是漫不经心者的借口。
      上下文驱动测试的思想是如何形成的?
      “我一直就是这样做测试的!”
      持有一定的测试理论和技巧,并且在某些项目上一直遵循和使用这些方法。
      “我不确定在这个项目中是否适用!”
      在Context Aware阶段,意识到项目的上下文不一样了。
      “我要做一些调整”
      在Context Based阶段,意识到需要调查和尝试才能确定采用怎样的测试策略。[Page]
      “哈哈,我想这种方法在这个项目中可能会奏效”
      在Context Driven阶段,根据上下文确定测试策略。
      如何成为上下文驱动派?
      •需要更加关注上下文
      •多问问题,不同类型的问题(怎样?是什么?)
      •跟项目组成员一起更加紧密地工作,但是要保持独立思考
      •成为项目产品的顾问,而不是推销员
      •成为一名更加有效率的测试员
      •少一点墨守成规
      上下文都有哪些?
      一个系统不是一个简单的集合,而是各项东西的有机结合体。需求、目标、角色、文档、时间进度、成本预算、人员配置可能会影响到测试采用的工具、方法等,这些都是测试的上下文。上下文通常难以辨别,这需要测试员应该经常观察、关注并参与到现实世界,从而获取测试所涉及的上下文。
      上下文驱动测试的实际做法
      基于了解到的项目的上下文,用以前的一些测试经验和测试的做法尝试,看是否适合,测试过程中不断反馈,看测试是否有效,同时不断观察,关注上下文是否随着时间改变,上下文的改变将驱动测试方法和实践的加入,不断分析、尝试、应用、反馈。这就是上下文驱动测试。
      如何辨别上下文?
      通过问以下问题将帮助你识别上下文:
      •我们准备要做的是什么?
      •我们实际上正在做什么?
      •我们做的东西是为谁而做的?
      •为什么要做?做这些事情我们将获得什么?
      •我们的目标是什么?
      •我们有其他的替代做法吗?
      •如果我们用其他方式做会怎样?
      采用上下文驱动测试方法的测试员会…?
      他们通常会说:“这要具体看是什么样的情形…”。

  • 鬼话测试

    wanggege11 发布于 2009-06-08 17:29:00

    看过了很多关于测试方面的书籍以及网上盛行的一些电子资料,同样也去考了评测师考试,一路走来,虽然自己有别于测试人员的日常工作,但是恰恰就由于自己站在一旁,所以更能发现目前大部分人测试工作的无序、低效率和低水平。曾经做过几个项目的性能测试,关于性能测试下文我将会详细说一说自己的看法,做过几个项目的验收测试,也做过一个项目的测试活动的审查工作。可以说,自己也实实在在拿着项目,真枪实弹的做测试。到目前为止,即使我所负责的数次测试工作能够发现问题,并且是在项目组已做了系统测试的基础上,但是我对自己的测试实战水平以及测试管理都不是很满意。下面说一说我对测试工作的几点看法。
    l 不能脱离测试模型理论,也不可照搬理论

       测试模型很理论且目前还在不断探索阶段,还没有一个具有统帅地位的模型在各个企业盛行。现在的状况是,很多人就了解V模型,而且仅仅也是理论上了解,运用到实际中,就执行不下去了,最后索性不关注测试模型了。这里,我想说的是,你用V模型能够在实战中顺利开展工作,那就奇怪了。因为这个模型根本就是不符合当前开发模型的嘛。这个测试模型就是开发模型中的瀑布模型的配套措施。
       测试模型到底在实际工作中能不能够运用呢,我的看法是,取各个测试模型的精髓即可。根据公司现状,人员组织结构,人员配备情况,人员素质水平来规划自己的测试模型。弄好后,要写入《测试计划》中,发给所有测试人员,获得大家同意。
       测试模型的精髓我感觉就可以这么简单的概括,越早投入测试越好,越早发现问题越好,不断的测试,独立的工作。
    l 测试技术不能光说不练

        针对目前的面向对象的发开特定,几乎没有人做面向对象的集成测试,还是一股脑的对着屏幕一顿点击,输入一些测试数据,可以说几乎没有多大技术含量。想一想,你整天做没有技术含量的工作,怎么提高自己的薪水,怎么提高测试人员在项目中的地位和形象。
       除了对于系统做一些黑盒测试之外,现在基本上这也做不好,是否可以对各个阶段的输出物做一个测试,这里主要指的是个人评审;同时针对评审(不仅指测试人员的评审,指的是经过了技术评审、会议评审)后的文档设计你测试人员的测试用例。
       目前,测试人员老挂在嘴边的就是,需求没有文档,没有需求可追寻,无法写测试用例。如果老是这样子,你觉得对你的测试工作有帮助么,你觉得你这么抱怨了后,你的水平就提高了?你的薪水会因为你会发发牢骚就涨么?(不过,也有部分人,因为会发牢骚而得利的)基本不会,那么你就要想办法,怎么在如此恶劣的工作环境下,将测试工作开展得顺利。
    我提供的方法就是:
    Ø 测试用例关联到需求,即使需求很烂,也要关联到;
    Ø 借助需求分析以及设计文档,形成自己的测试设计方案或者说是测试用例设计文档(此文档应该包括测试需求),这份文档必须经过大家的评审,然后根据文档写用例;
    Ø 不要跟我提什么单元测试、集成测试、确认测试、系统测试,在这里,只要你运用黑盒测试方法给我测程序功能就OK;网上所流行的一些通用测试用例,一些界面测试检查点,通通都不能够直接运用进来,除了增删查改功能的测试点可以借鉴以外,其他的东西通通都不要浪费时间去测,这些方面的通用测试用例,不是没有用,肯定有用,但是这些不是我要测功能的手段,这些可以全部放到易用性测试方面,测试的话,别搅和在一起,到头来什么都做不好,你根据那些检查点肯定能够测出一些问题,但是,这些问题无关乎功能的实现,开发人员不在乎,项目经理不在乎,用户有时也不在乎,当许多事情堆在一起的时候,就要分紧急重要了,功能实现是最重要的,易用性其次,所以,在功能性测试完成后,大家再回过头来测一测易用性,有时这些易用性,只要测几个界面就可以,这个模块的这个界面出现的bug,在其他界面其他模块也存在,所以没必要那么每测一个界面发现了有共性的问题就登记一条。
    l 再怎么不济也要定测试策略

       测试的技术有哪些大家都知道,不再累赘重复,那么如何将这些常用技术落到实处,这就要针对项目特点制定测试策略了。
       常见的做法就是没有测试策略,莫非是这些人已到达登峰造极的地步,手中无剑,飞花摘叶便可杀人无形?我看不是,这些人才懒得管什么测试策略,对着系统就是一顿乱搞,就是写个测试策略,大多就是写用黑盒测试方法进行测试,完了。真想骂人,这也叫策略?要他们去打仗,他们估计就说拿着杆枪对着敌人开枪就是。既然是大学毕业的高材生,既然是像模像样的坐在办公室弄信息系统,怎么着也要整出一套测试方案出来吧,怎么做,做哪些方面,做到什么程度,什么时机做什么,遇到阻碍有什么应对措施。即使你不可能搞这么多,也不相信搞了这些项目就成功,那么你至少应该统领全局,告诉下面的人,运用哪些技术如何测嘛。说了这么多,我说说自己的看法。
       目前做测试,其所测对象按道理应该是程序、数据、文档的,现在只说程序,那么目前所测的程序,可以说基本是B/S结构,面向对象开发出来的程序,所以我所要谈的测试策略就是围绕面向对象开发出来的WEB应用系统。
    Ø 首先,把系统分成若干模块,分配到测试人员。
    Ø 然后,让测试人员分析测试需求,写成测试设计文档,再来写用例,不准直接写用例。测试设计文档,必须既有整体宏观的把控又有微观的考虑,什么意思,换句话说,宏观方面,测试人员要根据项目组的分析设计文档将自己所负责模块的功能图画出来,这里不强调一定是功能图的形式展现,不管用状态图、流程图、用例图、场景图还是因果图,反正一条,这个模块的功能,在宏观上你要了如指掌,并且能用图形绘制出来;微观上,测试人员在有了宏观的感知后,分析出测试场景,基本路径一定要覆盖,并且要想出一些异常场景。接下来,就可以根据自己所分析出来的测试场景进行用例设计了,这里的用例设计还得继续微观化,必须运用等价类、边界值的理念设计用例,并且这种理念要在测试设计文档中体现出来,写用例只是将用例设计文档的思路具体化。
    Ø 接着,由一个人负责各个模块之间有数据来往,这里不提有接口的情况,因为面向对象的开发,接口无处不在,测试人员也压根弄不明白接口调用,这里测试人员只需将各个模块之间有数据调用的场景给测到了,就OK。
    Ø 最后,测一测易用性,将网上盛行的通用测试用例拿来跑一跑,测一测性能。关于性能测试下文再来扯一扯。

  • LR小结

    wanggege11 发布于 2009-06-08 17:26:10

    对LR的一点个人认识和对性能测试的个人看法。

    08年的几次测试工作虽然很痛苦,但也学到了东西,这是当时总结的一些经验教训。有些内容现在看起来很青涩,但在当时自己却是信心满满的拿着这份文稿,在部门会议上进行了内部培训,其过程中领头上司对我所讲的东西做了补充。现在回想与上司之间工作方面的一些冲突,心有余悸。自己肯定存在一些问题,当时处理方式也不对,现在我处理这些问题,也还是很生疏。

    测试总结(部分)(删除的涉及到公司秘密)

    3.参数配置
    这次搭建的是OncePortal_tomcat版本,其配置参数直接影响到系统性能,下面总结在此次测试中遇到的几个tomcat配置参数。

    3.1.JVM参数的配置
    Tomcat默认可以使用的内存为128MB,在此次的测试中,这点内存是不够的,当内存不够用时,报tomcat内存益处错误。解决方法主要是加大TOMCAT可利用内存,因此根据应用的需求,有必要调整JVM使用内存的大小。catalina.bat文件的内容,即在里面增加一行代码:set JAVA_OPTS=-Xms512m –Xmx1024m。JVM的最大值受限于系统使用的物理内存。一般使用数据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长,一般建议JVM的最大值设置为可用内存的最大值的80%。

     

    3.2.连接数参数的配置


    在tomcat配置文件server.xml中的配置中,和连接数相关的参数有:
    maxThreads: Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值150。

    acceptCount: 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值100。
    minSpareThreads: Tomcat初始化时创建的线程数。默认值25。
    maxSpareThreads: 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值75。
    enableLookups: 是否反查域名,默认值为true。为了提高处理能力,应设置为false

    connnectionTimeout: 网络连接超时,默认值60000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为20000毫秒。
      其中和最大连接数相关的参数为maxThreads和acceptCount。如果要加大并发连接数,应同时加大这两个参数。web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。

    3.3.应用系统连接池的配置参数
    初始化后连接个数
    <initialConnections>5</initialConnections>
    最小连接个数
    <minimumSize>5</minimumSize>
    最大连接个数
    <maximumSize>200</maximumSize>
    达到最大连接个数后是否可以再创建新的连接
    <maximumSoft>true</maximumSoft>
    XX秒后destory连接
    <connectionTimeout>600</connectionTimeout>
    在返回连接池前用户可以保持XX秒
    <userTimeout>12</userTimeout>

     

     

    二 LoadRunner方面:


    1.脚本录制

    在测试过程中,出现脚本录制不到的情况,可能影响的原因:①网络不通。②杀毒软件的原因,防火墙阻止了LR脚本录制的进行。用HTML录制的脚本回放时报错,选择URL模式录制后能够通过。原因是:基于浏览器的应用中包含了向服务器进行通信的JavaScript代码,应当使用“URL-based script”模式进行录制。

    2.迭代与Pacing的设置意义
    迭代是对Action部分的循环操作,通过设置迭代可以让指定的部分循环运行,这在测试系统的稳定性的时候能够用到。Pacing表示的是对每次迭代的时间间隔,设置这个时间可以降低服务器压力,更加真实的模拟现实情景。

     

    3.参数化,取值方式的选择
    “Select next row”选择数据输入更新方法,以说明虚拟用户在脚本执行的过程中如何选择表中的数据。方法可以是:连续的、随机的、唯一的、或者与其它参数表的相同行。
    ① 顺序(Sequential):顺序地给虚拟用户分配参数值。
    ②随机(Random):从数据表中取随机数
    ③ 唯一(Unique):分配唯一的值给虚拟用户。

    “Updta value on”选择数据的更新方式。
    ①Each iteration:每次循环取新值,每一次循环中都取相同的值。
    ②Each occurrence:只要发现该参数就要重新取值。
    ③Once:在所有的循环中都使用同一个值。

    4.集合点策略与思考时间的运用
    通过集合点与思考时间的综合运用,实现了在线数的测试。模拟100个虚拟用户同时在线:集合点策略中设置当20个虚拟用户到达集合点时就释放进行并发操作,在退出之前加入思考时间,当20个虚拟用户并发操作后没有立即退出而是在等待其他80个虚拟用户。通过设置合理的思考时间,能够让100个虚拟用户同时在线。

    5.设置不同角色的用户组,真实模拟现实场景
    在现实场景中,会有不同角色的用户登录应用系统,为了真实模拟环境,应该设置不同角色的用户组进行测试。

    6. 加压方式,持续时间(优先迭代的选择),减压方式的选择与意义
    Ramp Up:同时加载所有虚拟用户;每隔一段时间加载一定数目的虚拟用户。

    Duration:按照指定的迭代次数运行;按照指定时间运行;一直运行,直到人工进行干预。

    Ramp Down:立刻同时停止;每隔一段时间停止一定数目的虚拟用户。

     

    意义:通过合适的选择,能够真实模拟现实环境,达到测试目标。

    例如,测试每5秒加载10个虚拟用户,持续运行1小时,那么在这里进行相应的选择就可以按照描述进行测试。

    7.监视Oracle数据库服务器的方式与需要监视的数据
    方式:

    ①安装Oracle客户端

    ②添加监听程序

    ③获取system帐号密码

    ④在LR中以system身份连接,添加计数器。


    需要监视的主要数据:cpu used by this session(这是在用户调用开始和结束之间会话所占用的 CPU 时间);logous current(当前的登录总数);total file opens(由实例执行的文件打开总数)

    8.监视Windows操作系统的方式与需要监视的数据
    方式:

    ①在图树中单击 Windows 资源图,并将该图拖进“运行”视图的右窗格中。

    ②右键单击该图并选择“添加度量”,或选择“监视器” > “添加联机度量”。

    ③在“Windows 资源”对话框的“监视的服务器计算机”部分,单击“添加”以输入要监视计算机的服务器名或 IP 地址。选择计算机运行的平台,单击“确定”。

    ④在“Windows 资源”对话框的“资源度量”部分中,选择要监视的度量。

    需要监视的主要数据:

    内存相关:Available Mbytes(可用物理内存数);Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很高,则可能有磁盘瓶径;如果队列长度增加的同时页面读取速率并未降低,则内存不足。

    处理器相关:%Processor Time:如果该值持续超过95%,表明瓶颈是CPU;Queue Length队列长度持续大于 4 则表示可能出现处理器拥塞;%User Time:表示耗费CPU的数据库操作,如果该值很高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值。

    带宽相关:Bytes Total/sec :为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,用该计数器的值和目前网络的带宽相除,应大于50%。

    进程相关:%Processor Time: 被处理器消耗的处理器时间数量;private bytes:这个进程不能与其他进程共享的、已分配的当前字节数。

    9.分析测试结果的经验与教训
    9.1经验:
    1.查看用户是否全部通过,如果有失败数,查看报错信息。

    2.事务响应时间是否在性能指标以内,如果大于性能指标,则降低压力进行测试。

    3.吞吐率图,如果曲线有下降趋势,说明性能在下降,如果曲线在一个时间点突然下降到接近0,则系统发生了崩溃,那么服务器端产生了瓶颈,要区分是资源达到最大极限还是参数配置引起的崩溃,就要进一步分析系统资源图。

    4.系统资源图重点分析测试过程中CPU和内存是否出现瓶颈;CPU如果平均利用率在95%以上,则是CPU瓶颈;内存先查看可用内存Available Mbytes的值,如果小于10%的物理内存那么是内存不足,如果值很大,那么就要看相应的进程了,查看分配的内存是否够用。此次测试中,就是tomcat的内存数不够导致了内存溢出。

     

    9.2 教训:
    1.测试过程中得出的实际结果与预期结果不相符合时,应当深入分析具体原因,而不是失去目标的测试。此次测试过程中,发现相同的脚本相同的场景设置,在重启服务前后测试结果差异很大。遇到这个问题时,没有进行深入分析,不但耽误了测试时间还不能很好的给以后测试带来帮助。通过柳老师和霍老师的评审,发现是脚本录制与中间件参数配置方面引起的测试结果前后不一致。

    2.学好LR工具的使用,仅仅是性能测试的必备条件之一,需对网络、操作系统、数据库、中间件的知识进行深入学习。会工具的操作,不代表就能够做好性能测试,要对测试的结果进行分析,还要依靠测试分析者的经验、技能和对系统的了解。此次测试过程中,在网络方面得到本部门的技术支持,解决了很多由网络造成测试无法开展的问题。例如,由于IP与MAC地址的不一致引起的网络不稳定,致使测试数据失真,与数据库连接不稳定等,后来通过调整解决了此问题。要加强数据库性能调优方向的深入学习,懂得数据库各配置参数的调试,加强对常见的中间件产品性能调优方面的学习。

    3.在测试的过程中根据用户要求的性能指标制定测试计划,同时也要站在测试人员的角度思考问题。系统可能的性能瓶颈在哪里?服务器的CPU使用是不是达到最大值?是否还有可用内存?应用服务器的状态如何?设置的JVM可用内存是否足够?数据库的状况如何?通过更换哪些设备或进行哪些调整能够提高性能?系统在长时间的运行中是否足够稳定?这样才能比较深入的开展性能测试。

  • 351/212>

    数据统计

    • 访问量: 18581
    • 日志数: 39
    • 图片数: 2
    • 建立时间: 2008-12-15
    • 更新时间: 2010-03-08

    RSS订阅

    Open Toolbar