发布新日志

  • 新的测试起点--2011

    2011-08-17 16:35:12

    在新的环境,感觉到比以前测试要正规点,关键是不像以前那样,只做页面的点击手了,嘿嘿,还要自己到包中查找SQL。看来多学点东东还是有好处的,起码看起来比较专业

  • 测试瞎想

    2011-07-15 10:49:01

     从07年毕业到现在一直在做测试,也从开始的激情到了现在的迷茫,感觉现在还不如刚毕业时知道的东东多,感觉什么也不会似的,想想以后不做测试了,自己还能做什么???天知道,好像找不到个人的兴趣点,好无力,

    最近想学自动化和性能测试,刚开始还信心十足,但学到一定程度发现还得要编程,晕菜,又卡脖子了,怎么办怎么办?

    是继续学习还是想想第二职业,为以后的发展作准备,虽然网上测试传的是如何 前景大好,但中国的测试环境又是别外一回事,在测试的路上还能走多远?心里没底,哎,日子过得好无聊呀

  • 测试员能做多久?

    2011-06-16 14:47:11

    普通测试员,做到多大年龄就做不动了:30?40?

     

  • badboy工具下载

    2011-06-09 11:15:34

    badboy工具下载

    http://download.csdn.net/source/3348242

  • LoadRunner性能测试应用(转载)

    2011-06-02 14:41:19

    脚本回放问题解决

      在运行脚本回放过程中,有时会出现错误,这在实际测试中是不可避免的,毕竟自动录制生成的脚本难免会有问题,需要运行脚本进行验证,把问题都解决后才加入到场景中进行负载测试。下面结合常用的协议(如Web、Web Services协议)录制的脚本进行回放时出现的问题介绍一下解决的方法。

      需要注意的是,回放脚本时出现的错误有时是程序自身的原因导致的,因此在解决脚本回放问题前必须保证程序录制出的脚本是正确的。

      1.LoadRunner超时错误:在录制Web协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同。

      错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。

      错误分析:对于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送一个请求到服务器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。

      解决办法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”区域中设置一个“winlnet replay instead of sockets”选项,再回放是否成功。

      错误现象2:Action.c(81):Continuing after Error -27498: Timed out while processing URL=http://172.18.20.70:7001/workflow/bjtel/leasedline/ querystat/ subOrderQuery.do

      错误分析:这种错误常常是因为并发压力过大,服务器端太繁忙,无法及时响应客户端的请求而造成的,所以这个错误是正常现象,是压力过大造成的。

      如果压力很小就出现这个问题,可能是脚本某个地方有错误,要仔细查看脚本,提示的错误信息会定位某个具体问题发生的位置。

      解决办法:例如上面的错误现象问题定位在某个URL上,需要再次运行一下场景,同时在其他机器上访问此URL。如果不能访问或时间过长,可能是服务器或者此应用不能支撑如此之大的负载。分析一下服务器,最好对其性能进行优化。

      如果再次运行场景后还有超时现象,就要在各种图形中分析一下原因,例如可以查看是否服务器、DNS、网络等方面存在问题。

      最后,增加一下运行时的超时设置,在“Run-Time Settings”>“Internet Protocol:Preferences”中,单击“options”,增加“HTTP-request connect timeout” 或者“HTTP-request receive”的值。

      2.LoadRunner脚本中出现乱码:在录制Web协议脚本时出现中文乱码,在回放脚本时会使回放停止在乱码位置,脚本无法运行。

      错误现象:某个链接或者图片名称为中文乱码,脚本运行无法通过。

      错误分析:脚本录制可能采用的是URL-based script方式,如果程序定义的字符集合采用的是国际标准,脚本就会出现乱码现象。

      解决办法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在“Recording Options”的“Advanced”选项里先将“Surport Charset”选中,然后选中支持“UTF-8”的选项。

      3.LoadRunner HTTP服务器状态代码:在录制Web协议脚本回放脚本的过程中,会出现HTTP服务器状态代码,例如常见的页面-404错误提示、-500错误提示。

      错误现象1:-404 Not Found服务器没有找到与请求URI相符的资源,但还可以继续运行直到结束。

      错误分析:此处与请求URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。

      解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。

      错误现象2:-500 Internal Server Error服务器内部错误,脚本运行停止。

      错误分析:服务器碰到了意外情况,使其无法继续回应请求。

      解决办法:出现此错误是致命的,说明问题很严重,需要从问题的出现位置进行检查,此时需要此程序的开发人员配合来解决,而且产生的原因根据实际情况来定,测试人员无法单独解决问题,而且应该尽快解决,以便于后面的测试。

      4.LoadRunner请求无法找到:在录制Web协议脚本回放脚本的过程中,会出现请求无法找到的现象,而导致脚本运行停止。

      错误现象:Action.c(41): Error -27979: Requested form. not found [MsgId: MERR-27979]

      Action.c(41): web_submit_form. highest severity level was "ERROR",0 body bytes, 0 header bytes [MsgId: MMSG-27178]"

      这时在tree view中看不到此组件的相关URL。

      错误分析:所选择的录制脚本模式不正确,通常情况下,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用HTTPS安全协议,这时则使用“URL-based script”模式进行录制。

      解决办法:打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HTML-based script”,单击“HTML Advanced”,选择“Script. Type”为“A script. containing explicit”。然后再选择使用“URL-based script”模式来录制脚本。

      5.LoadRunner不执行检查方法:在录制Web协议脚本中添加了检查方法Web_find,但是在脚本回放的过程中并没有执行。

      错误现象:在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,但是在回放过程中并没有对设置的检查点进行检查,即Web_find失效。

      错误分析:由于检查功能会消耗一定的资源,因此LoadRunner默认关闭了对文本以及图像的检查,所以在设置检查点后,需要开启检查功能。

      解决办法:打开运行环境设置对话框进行设置,在“Run-time Settings”的“Internet Protocol”选项里的“Perference”中勾选“Check”下的“Enable Image and text check”选项。

      6.LoadRunner回放Web Services协议脚本错误:LoadRunner 8.0版本在录制Web Services协议的脚本时正常,但在回放时会出现错误,提示停止脚本运行。

      错误现象:利用LoadRunner 8.0版本来录制Web Services协议的脚本没有任何错误提示,回放脚本时会出现如下错误提示“Error:server returned an incorrectly formatted SOAP response”。

      错误分析:出现此错误的原因是LoadRunner8.0在录制Web Services协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为<?xml version="1.0"encoding="zh_cn" ?>,所以才会有此错误提示。

      解决办法:下载两个补丁,分别为“LR80WebServicesFPI_setup.exe”和“lrunner_web_ services_patch_1.exe”安装上即可。

  • 如何编写测试计划(转)

    2011-01-24 16:44:25

    一.首先了解以下几个问题:

    1. 为什么要编写测试计划?

    1)领导能够根据测试计划做宏观调空,进行相应资源配置等;

    2)测试人员能够了解整个项目测试情况以及项目测试不同阶段的所要进行的工作等;

    3)便于其他人员了解测试人员的工作内容,进行有关配合工作

    2. 什么时间开始编写测试计划?

    (测试需求分析前总体测试计划书/测试需求分析后详细测试计划书)

    3. 由谁来编写测试计划?

    具有丰富经验的项目测试负责人

    4. 测试计划编写6要素?(5W1H)

    1)why——为什么要进行这些测试;

    2) what—测试哪些方面,不同阶段的工作内容;

    3) when—测试不同阶段的起止时间;

    4) where—相应文档,缺陷的存放位置,测试环境等;

    5) who—项目有关人员组成,安排哪些测试人员进行测试

    6) how—如何去做,使用哪些测试工具以及测试方法进行测试。

    二.测试计划主要内容:

    1.引言

    1.1项目背景

    1.2参考资料(计划编写依据:可行性分析报告/软件需求定义/软件概要设计/软件详细设计/用户使用说明书/……)

    1.3测试术语

    1.4有关项目人员组成以及联系方式(开发人员/版本控制人员/测试人员/软、硬、结构、营销人员等)

    2.任务概述

    2.1测试范围

    2.1测试目标

    2.3广义上还包含测试需求分析/测试用例编写/测试环境搭建/测试培训/测试执行等

    3.测试策略

    3.1测试人员需求、分工

    3.2测试方法(自动化测试/手动测试;白盒测试黑盒测试;中断测试/临界测试/压力测试等)

    3.3工具引用及测试培训(内训/外训)

    3.4测试阶段计划(工作内容、人员安排、起止时间等)

    3.5测试停止及恢复条件

    3.6测试文档及缺陷提交管理等

    3.7测试环境

    4.测试资源

    4.1硬件资源需求

    4.2软件资源需求

    4.3测试环境需求

    4.4测试人员需求

    4.5其他(仪器、服务器等)

    5.风险评估

    5.1人力方面;

    5.2时间方面;

    5.3环境方面;

    5.4资源方面

    5.5部门合作方面

    6.其他内容

    除以上内容有关项外,还要包括测试计划制定者、日期、修改记录、评审人员(开发负责人/测试负责人/项目经理)等信息

    三.编写测试计划注意事项:

    1.测试计划不一定要尽善尽美,但一定要切合实际,要根据项目特点、公司实际情况来编制,不能脱离实际情况;

    2.测试计划一旦制定下来,并不就是一层不变的,世界万事万物时时刻刻都在变化,软件需求、软件开发、人员流动等都在时刻发生着变化,测试计划也要根据实际情况的变化而不断进行调整,以满足实际测试要求.

    3.测试计划要能从宏观上反映项目的测试任务、测试阶段、资源需求等,不一定要太过详细.

    四.评审总结

    1.计划评审

    测试计划编写完成后,一般要对测试计划的正确性、全面性以及可行性等进行评审,评审人员的组成包括软件开发人、营销人员、测试负责人以及其他有关项目负责人。

    2.计划总结

    项目完成后,应该对计划的执行情况进行评审,看有哪些不合理的地方,以便为编写下一个项目测试计划做经验积累。


  • QTP中RO与TO的区别1(转)

    2010-12-09 10:58:50

    [QTP中RO与TO的区别1]概念

    TO是Test Object的简称,RO是Runtime Object简称,既用来区分仓库对象和实际对象,又用来区分对象的封装接口和自身接口。

    从实际作用上来看,应该说TO就是是仓库文件里定义的仓库对象,RO是被测试软件的实际对象。

    QTP为用户提供了两种操作对象的接口,一种就是对象的封装接口,另一种是对象的自身接口。对象的自身接口是对象控件本身的接口,对象的封装接口是QTP为对象封装的另一层接口,它是QTP通过调用对象的自身接口来实现的。

    两种接口的脚本书写格式的差别在于:自身接口需要在对象名后面加object再加属性名或方法名,封装接口就不用在对象名后面加object.

     

    比如操作JavaEdit对象,通过QTP封装的封装接口,脚本如下:
         设置JavaEdit的内容:
          JavaDialog("Add NE").JavaEdit("NE Name").Set "NE1"
         读取JavaEdit的内容:
          msgbox JavaDialog("Add NE").JavaEdit("NE Name").GetROProperty("value")

         如果通过JavaEdit的自身接口,脚本如下:
         设置JavaEdit的内容:
         JavaDialog("Add NE").JavaEdit("NE Name").object.setText("NE1")
         读取JavaEdit的内容:
         Msgbox JavaDialog("Add NE").JavaEdit("NE Name").object.getText()

         QTP执行JavaEdit().Set语句时,是通过执行JavaEdit().object.setText()来实现的。
         QTP执行JavaEdit().GetROProperty("value"),是通过执行JavaEdit().object.getText()来实现的。

     

    另外:通过GetTOProperty可以获取TO的对象属性,同时也可以通过SetTOProperty来更改TO的对象属性;通过GetROProperty获取RO的对象属性,一般不建议对RO的对象进行更改。

  • qtp自动化测试范例(转)3

    2010-09-03 15:23:43

    4验证loginCase文档中login_004login_009

    For i=2 to 7

            读取data中,login的数据

            Dim username,password,expected

            username=ReadExcelCell(dataPath, "login", i, 1)

            password=ReadExcelCell(dataPath, "login", i, 2)

            expected=ReadExcelCell(dataPath,"login",i,3)

    执行登录操作,将读取到的username参数化给下面的数据

            Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("username").Set username

            Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("pwd").Set password

            Browser("Browser").Page("在线考试系统").Frame("main").WebButton(" ").Click

            判断登录是否成功的文本字符

            popok=Browser("Browser").Page("在线考试系统").Frame("left").WebElement("考生姓名:123   态:已登录").Exist(3)

            popno=Browser("Browser").Page("在线考试系统").Frame("main_2").WebElement("").Exist(3)

            依据期望结果进行判断

      If expected="ok" Then

                      If popok Then

                        '将数据源中的期待结果写为pass

                               Write_Excel dataPath,"login",i,"D","Pass"

                               '将此结果在测试用例中进行体现

                               Write_Excel casePath,"login",i+3,"D","Pass"

                               '返回登录界面,执行下一轮数据的操作

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click

                               Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

                      else

                                '如果出现错误,则截图并保存到指定文件夹中

                               QTP_Capture capturePath,"login_"&i+3

     

                              '将数据源中的期待结果写为fail

                               Write_Excel dataPath,"login",i,"D","Fail"

                              Write_Excel dataPath,"login",i,"E","正确用户名和密码登录失败"

     

                                '将此结果在测试用例中进行体现

                               Write_Excel casePath,"login",i+3,"D","Fail"

                               Write_Excel casePath,"login",i+3,"E","正确用户名和密码登录失败"

     

                               '出错后,重新进入登录界面

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

                      End If

            else

                      If popno Then

                               'msgbox "no"

                               '将数据源中的期待结果写为pass

                               Write_Excel dataPath,"login",i,"D","Pass"

                               

                                '将此结果在测试用例中进行体现

                               Write_Excel casePath,"login",i+3,"D","Pass"

                               ‘pass后返回登录界面,继续执行下一轮操作

                               Browser("Browser").Page("在线考试系统").Frame("main_2").WebButton("返回上一页").Click

                      elseif popok then

                                '如果出现错误,则截图并保存到指定文件夹中

                         QTP_Capture capturePath,"login_"&i+3

                               

                         '将数据源中的期待结果写为fail

                               Write_Excel dataPath,"login",i,"E","错误用户名或密码,登录成功"

                               

                               ' '将此结果在测试用例中进行体现

                               Write_Excel casePath,"login",i+3,"E","错误用户名或密码,登录成功"

     

                               '返回登录界面,继续验证相关数据

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click

                               Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

                      else

                                '如果出现错误,则截图并保存到指定文件夹中

                               QTP_Capture capturePath,"login_"&i+3

                               

                               '将数据源中的期待结果写为fail

                               Write_Excel dataPath,"login",i,"D","Fail"

                           Write_Excel dataPath,"login",i,"E","错误数据,但提示语不正确"

     

                                '将此结果在测试用例中进行体现

                               Write_Excel casePath,"login",i+3,"D","Fail"

                               Write_Excel casePath,"login",i+3,"E","错误数据,但提示语不正确"

                               '出错后,重新进入登录界面

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

                      End If

     End If

    Next

    D、执行脚本后,关闭网页和发送相关文档到相关人员的邮箱之中

    '执行完之后,关闭网页

    Browser("Browser").Close

     

    '执行完此模块的测试后,将测试结果发送到指定的邮件之中

    Dim Body '邮件的内容

    Dim sendto'收件人的地址

    Dim subject '邮件主题

    Body="Hi:"&vbCrLf&"此文件为本次自动化测试Case结果。请查收!谢谢!"&vbCrLf&vbCrLf&"from qwen"&vbCrLf&Now()

    sendto="wen.qingshan@byd.com"

    subject=now()&"自动化测试的结果"

    SendMail sendto,subject, Body, casePath

    一直以来不清楚大家是怎么去使用QTP测试的,甚至也不太清楚我这么去做是否能称得上算一个QTP的框架,不过我就是这样使用QTP去做测试的。最后,十分感谢您能够有耐心地看到这里,谢谢。

    另外,不知道是不是因为51这个发表日志框将回车后剩余的空格也认成字符了, 一次发表所有内容老被截断,这点挺另人晕的.

     

    作者:文青山

    2010-8-30


  • qtp自动化测试范例(转)2

    2010-09-03 15:22:30

     

    作者:文青山

    时间:2010-8-30

    标题:我是如何使用QTP测试

    注意:请尊重版权!

    上接:http://www.51testing.com/index.php?uid-287227-action-viewspace-itemid-219449

    B、主体脚本过程,此处可使用描述性编程来书写,如使用描述性编程,需从common文件中调用相关的对象库(描述性编程)

                    确定录制的主体过程,此过程我是通过录制实现的,此处代码为测试脚本的主体部分提供基础代码,即为C部分(下方)的扩展操作提供基础代码。

                    如:

                    起动浏览器,进入系统登录界面

                      '打开IE wqs592452,在不同的机器上需要更改一下

    SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe","","C:\Documents and Settings\wqs592452","open"

    Browser("Browser").Navigatehttp://10.9.146.182:8080/index.asp

    点击登录链接

    Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

    执行登录操作

            Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("uname").Set “123”

            Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("pwd").Set “123456”

            Browser("Browser").Page("在线考试系统").Frame("main").WebButton(" ").Click

           '返回登录界面,执行下一轮数据的操作

            Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click

            Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click

            Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

    C、按照case修改脚本,主要调用库函数中的写入Excel单元格的函数Write_Excel(pathway,sheetname,x,y,content)读取单元格的函数ReadExcelCell(file,sheet,x,y)以及截图函数Qtp_Capture,注意Qtp_Capture应在Write_Excel之前,否则截图时可能为读取Excel的界面

    点击登录链接

    1 '验证loginCase文档中login_001

    Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

     

    如果登录后某对象存在,则case文件login_001 Pass,否则Fail,并截图

    If Browser("Browser").Page("在线考试系统").Frame("main").WebButton(" ").Exist Then

                   '如果存在此对象,则将case中的actualresults置为pass

    Write_Excel casePath,"login",2,"D","Pass"

    Else

                      '如果出现错误,则截图并保存到指定文件夹中

                    QTP_Capture capturePath,"login_001"

    '如果不存在此对象,则将case中的actualresults置为fail

                    Write_Excel casePath,"login",2,"D","Fail"

                    出现错误后,说明错误的原因

    Write_Excel casePath,"login",2,"E","登录系统链接失效"

    End If

    2'验证loginCase文档中login_002

    利用描述性编程,查看width in characters对象是否存在,并且为30

    If      Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("name:=uname","width in characters:=30").Exist then

            '如果存在此对象,则将case中的actualresults置为pass

            Write_Excel casePath,"login",3,"D","Pass"

    else

            '如果出现错误,则截图并保存到指定文件夹中

            QTP_Capture capturePath,"login_002"

             '如果存在此对象,则将case中的actualresults置为fail

            Write_Excel casePath,"login",3,"D","Fail"

            出现错误后,说明错误的原因

            Write_Excel casePath,"login",3,"E","用户名输入框未设置为30"

    end if

    3验证loginCase文档中login_003

    利用描述性编程,查看width in characters对象是否存在,并且为30

    If      Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("name:=pwd","width in characters:=30").Exist then

            '如果存在此对象,则将case中的actualresults置为pass

            Write_Excel casePath,"login",3,"D","Pass"

    else

            '如果出现错误,则截图并保存到指定文件夹中

            QTP_Capture capturePath,"login_002"

             '如果存在此对象,则将case中的actualresults置为fail

            Write_Excel casePath,"login",3,"D","Fail"

            出现错误后,说明错误的原因

            Write_Excel casePath,"login",3,"E","用户名输入框未设置为30"

    end if

  • qtp自动化测试范例(转)1

    2010-09-03 15:18:45

    作者:文青山

    时间:2010-8-30

    标题:我是如何使用QTP测试

    注意:请尊重版权!

     

    废话不说了,上主要内容!

    一、文件目录位置分开

    不同目录放置不同内容:

    case目录:放置测试用例。

    Fucation目录:放置经常调用的库函数。

    common目录:放置所测试系统的主函数,和利用描述述编程生成的对象库。

    001login目录:放置QTP脚本自动生成的相关文件

    data目录:放置测试数据,该数据与测试用例中需要数据驱动的项进行对照

    capture目录:放置当系统出现错误时的截图

    二、测试用例

            将用例进行一定的整理,把数据驱动部分归纳为一个连续,并把实际结果做一个excel的数据有效性判断,即pass为绿色,fail为红色,具体用例如:

    ID

    validate

    expected

    actualresults

    Failreason

    login_001

    登录链接

    正常链接

    login_002

    用户名输入框的maxlength

    30

    login_003

    密码输入框的maxlength

    30

    login_004

    正常登录

    登录成功,显示已登录

    login_005

    异常登录

    登录失败,用户名或密码错误

    login_006

    异常登录

    登录失败,用户名或密码错误

    login_007

    异常登录

    登录失败,用户名或密码错误

    login_008

    异常登录

    登录失败,用户名或密码错误

    login_009

    异常登录

    登录失败,用户名或密码错误

    三、用例对应数据

            对照数据驱动部分用例生成相关数据,增加期望值用于判断,并把实际结果做一个excel的数据有效性判断,即pass为绿色,fail为红色,具体示例如:

    userName

    passWord

    expected

    实际结果

    123

    123456

    ok

    <script>alert('')</script>

    123456

    no

    no

    123

    no

    123

    no

    123

    <script>alert('')</script>

    no

     

    四、脚本过程

    A、初始操作,可把这一部分写进common

    调用外部组件:

    如:fucationPath="F:\qtptest\fucation\fucations.vbs" '函数组件

    ExecuteFile fucationPath

    定义casedatacapture位于系统的位置:

    如:casePath="F:\qtptest\case\loginCase.xls"   '用例位置

    dataPath="F:\qtptest\data\001login.xls"    '数据放置的位置

    capturePath="F:\qtptest\Capture\"        '截图放置的位置

    调用初始函数:

            如:

    CloseIE()          '调用组件中的CloseIE(),结束IE进程

    CloseExcel()    '调用组件中的CloseExcel(),结束Excel进程

    QTP_Small()    'QTP最小化运行

  • 也谈测试的核心技术(转)

    2010-08-30 11:11:00

    标签:

    维度

    测试技术

    测试工具

    覆盖率

    单元测试

    it

    分类:测试技术基础
     测试这行的客观规律总的来说是:入门容易,提升难。有些人干测试8-9年了,其针对同一个产品的测试思路和方法,与干测试只有2-3年的人看不出有什么区别。于是行业中有了一种误区,认为测试技术的提升主要集中在对性能测试工具的使用及脚本开发,自动化测试开发,测试工具开发领域。仅个人愚见:测试工具开发和自动化测试开发主要还是开发技术而不是测试技术,从没有做过测试分析,测试设计的开发人员也能胜任。如果仅狭义地认为测试技术的发展只在自动化测试框架开发或测试工具开发上,那么从逻辑上来说,任何一个开发人员都可以成为测试技术大拿。当然我想:没有人会真正这么认为。

      就其我的感受而言,开发工作有时反而会简单一些。为什么呢?开发工作的目标从一开始是非常明确的,要实现什么要做什么做到什么程度大多数情况下都是清晰的,最大的困难则是如何实现如何做到,总的来说是一个不断聚焦的过程。而测试工作的目标呢?其实很多时候,并不如开发那么明确,例如:同样一个性能指标,开发很清楚要通过实现XX算法来达到目标;而测试则需要对该性能指标先进行测试分析,再进行测试设计,可是测试分析做到什么程度却是一个发散的过程, 2小时也可以,2天也不够,这就导致了测试质量的浮动范围是非常大的,由于开发和项目经理通常对测试设计并不了解,也无法了解(测试其实是一个专业度非常高的领域),因此会导致测试部的工作质量很难在过程中真正去度量和监督。

      从哲学上来说:确定性的规律往往难度不大;不确定性的规律往往说明它是一个复杂系统。因此,我个人认为:测试技术领域最难的技术应该是测试分析和设计。从另一个角度来看,测试价值的体现最主要还是保障自己组织开发的软件在关键应用时不要出故障,给组织造成商业损失。所以,有效的测试覆盖率是最重要的测试工作目标(而不是自动化测试率),需要说明的是测试覆盖率不等于代码覆盖率。通过单元测试达到代码覆盖率100%了就能保障产品无bug其实是一个误区,因为很多组织会为了达到单元覆盖率而去开发单元测试代码,单元测试代码或单元测试设计的质量只能保障消除产品编码的问题,发现产品设计的问题则往往会很困难。而发现产品设计问题的最主要方法还得需要基于黑盒的测试分析和设计。

      如何做好测试分析和测试设计,根据我的经验和体会,建议测试分析和测试设计主要通过3个维度来做,则可以大致达到一个比较高的有效测试覆盖率:

      维度一:从用户实际使用的场景和习惯入手,开发一批测试用例;

      优点:  可以覆盖到主要基本场景;

      不足:  从事场景分析的人无法做到了解用户所有的场景,必定受参与测试分析资源限制会有场景遗漏;

      维度二:通过测试对象内部实现流程的路径及依赖关系分析入手,开发一批测试用例;

      优点:可填补维度一的部分遗漏场景,特别是异常处理和分支交互处理的场景;

      不足:分析阶段主要精力会被局限在内部流程的熟悉和分析中,从而也会遗漏真实环境中的一些偶然小概率事件;

      维度三:依赖基于经验的测试分析和设计,例如:错误猜测法或探索性测试法;

      优点: 给维度二再做一次补充测试分析和设计;

      不足: 维度三效果的质量高低取决于组织内部经验的积累量及测试人员思维的发散能力和创造性;

      总得来说:无论是功能测试还是各种专项测试,依次使用以上3个维度的测试分析和设计,基本上能覆盖到被测对象的绝大部分应用场景,充分保障产品质量,减少问题遗漏。

      因此:测试的核心技术是测试分析和测试设计的能力,它决定了后续所有测试活动的质量及效果。同时,要做好一个测试任务,掌握广泛的测试类型也是必要的核心技术,如:如何给每个测试对象做细做深压力测试,长时间测试,健壮性测试也是决定项目测试质量的关键所在。我本人不相信随便做做的压力测试设计和健壮性测试设计能够保障产品实际应用表现良好。

      测试活动的质量或者一个测试工程师技术水平如何将主要取决于:测试分析和设计的深度及系统化,以及掌握广泛的专项测试类型。

      一家之言,仅供参考,欢迎大家继续讨论。

    版权声明:本文出自架构师Jack的51Testing软件测试博客:http://www.51testing.com/?293557

    原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。

  • 在LR中运行QTP脚本的注意事项(z)

    2010-07-21 17:39:57

     

    在LR中运行QTP脚本的注意事项

    1、QTP的Tools--Options--Run的"Alow other Mercury products to run tests and components"选项要打勾;
    2、在QTP脚本中设置事务,Services.StartTransaction "start"与Services.EndTransaction "start"
    把需要在LR运行的脚本放在此事务里面;
    3、在LR中运行时选择QTP脚本,文件扩展名为.usr的;
    4、在LR中运行QTP脚本时,要把QTP关闭;
    5、只能在LR的Controller中运行;不能在Virtual User Generator中打开及回放;
    6、LR要使用global的license,单单WEB的license不行,会报错;
    7、Controller运行中,只能执行1个虚拟用户,大于1个以上的虚拟用户会提示错误;
    如果需要运行多个用户,只能在QTP脚本里设置循环及参数化来解决;

  • 如何让多个场景顺序执行(转)

    2010-07-13 21:18:04

      Controller(wlrun.exe)支持命令行参数,所有你只需要通过命令行给wlrun.exe传入场景文件的路径参数,实现多多个场景顺序执行。

        1.
    新建并保存所有要执行的场景,注意:每个场景必须设置结果存放路径,菜单"Results - Results Settings",设置结果路径,然后勾选“Automatically create a results directory for each scenario execution”

        2.
    新建一个bat文件,写入如下内容:

        SET LR_PATH="D:\Mercury\LoadRunner\bin\wlrun.exe"
         %LR_PATH%\wlrun.exe -TestPath "E:\Test\Scenario01.lrs" -
    Run
         %LR_PATH%\wlrun.exe -TestPath "E:\Test\Scenario02.lrs" -
    Run
         %LR_PATH%\wlrun.exe -TestPath "E:\Test\Scenario03.lrs" -
    Run

       
        3.
    双击bat文件运行。

  • lr 9。1场景运行过程中出现的错误

    2010-07-13 19:46:54

    错误如下:

    Exception was raised when calling per-thread-terminate function

    网上解决方案:

    问题产生原因:
         Unlike the earlier Windows versions, Windows 2000 and Windows XP have the default environment set to C:\Document and Settings\<user-name>\Local Settings\Temp instead of C:\Windows\temp. This long path with a space can cause several problems for LoadRunner. To resolve the issue, change to a directory without empty spaces.
      解决方法:
         在C盘(或是其它盘均可以)新建TEMP文件夹(为了后续设置临时文件准备)
         右键"我的电脑"->高级->环境变量->编辑修改TEMP变量目录,指身上面新建的目录,如我的指向C:\TEMP->保存即可^_^
         

     

  • 解决lr9。1双击问题

    2010-07-13 19:41:39

    在测试项目录入相关数据过程中,lr9.1 协议web(click and script. )不认页面规范词选择问题,在网上查找也没有找到答案,不得,只得继续自己找,终于找到了,并成功录制

    步骤:在录制设置模块,找到GUI相关设置,在需要的相关功能中,加个EVENT =ondblclick 搞定

  • loadrunner 9.1脚本回放时产生的错误,求助

    2010-06-21 16:18:11

    loadrunner 9.1脚本回放时产生的错误:

    Action.c(160): Continuing after Error -26161: Frame. not found in browser/dialog   [MsgId: MERR-26161]

    脚本如下:

    web_image_link("image_link",
      "Snapshot=t14.inf",
      DESCRIPTION,
      "Alt=",
      "ID=",
      "Name=",
      "Ordinal=5",
      "FrameName=browserframe",
      ACTION,
      "ClickCoordinates=7,9",
      LAST);

     web_text_link("经营",
      "Snapshot=t15.inf",
      DESCRIPTION,
      "Text=经营",
      "FrameName=browserframe",
      "BrowserOrdinal=2",
      ACTION,
      "UserAction=Click",
      LAST);

     web_image_link("image_link_2",
      "Snapshot=t16.inf",
      DESCRIPTION,
      "Alt=",
      "ID=",
      "Name=",
      "Ordinal=6",
      "FrameName=browserframe",
      ACTION,
      "ClickCoordinates=5,6",
      LAST);

     web_static_image("tree_expand_2",
      "Snapshot=t17.inf",
      DESCRIPTION,
      "Alt=",
      "ID=tree_expand_2",
      "Name=",
      "FrameName=browserframe",
      "BrowserOrdinal=2",
      ACTION,
      "ClickCoordinates=12,10",
      LAST);

     web_text_link("未经营",
      "Snapshot=t18.inf",
      DESCRIPTION,
      "Text=未经营",
      "FrameName=browserframe",
      "BrowserOrdinal=2",
      ACTION,
      "UserAction=Click",
      LAST);

    怎么才能回放成功,谢谢各位

  • java学习中

    2010-06-19 21:25:42

    java学习中,第一天就碰到了,Main()不能运行的白菜级错误,没办法,只好上网查了一下,

    错误提示如下:Exception in tException in thread "main" java.lang.UnsupportedClassVersionError:

    仔细想想用低版本的JDK编译高版本的.class就会报这个错,于是找到环境变量下的Path

    Oracle 竟然把我的环境变量变成了1.3.1, 太可恶了,于是把%JAVA_HOME%\bin;添加到Oracle之前,变成

    %JAVA_HOME%\bin;D:\oracle\product\10.1.0\db_1\bin;D:\oracle\product\10.1.0\db_1\jre\1.4.2\bin\client;D:\oracle\product\10.1.0\db_1\jre\1.4.2\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;。。。。。。。。。。

    关闭原先的命令行窗口,再重开启一个,一试,果然正常了,编译,运行,想要的结果就出来了。

    努力加油中。。。。

  • java学习中

    2010-06-19 21:25:42

    java学习中,第一天就碰到了,Main()不能运行的白菜级错误,没办法,只好上网查了一下,

    错误提示如下:Exception in tException in thread "main" java.lang.UnsupportedClassVersionError:

    仔细想想用低版本的JDK编译高版本的.class就会报这个错,于是找到环境变量下的Path

    Oracle 竟然把我的环境变量变成了1.3.1, 太可恶了,于是把%JAVA_HOME%\bin;添加到Oracle之前,变成

    %JAVA_HOME%\bin;D:\oracle\product\10.1.0\db_1\bin;D:\oracle\product\10.1.0\db_1\jre\1.4.2\bin\client;D:\oracle\product\10.1.0\db_1\jre\1.4.2\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;。。。。。。。。。。

    关闭原先的命令行窗口,再重开启一个,一试,果然正常了,编译,运行,想要的结果就出来了。

    努力加油中。。。。

  • click and script与HTTP/HTML协议 的区别(转)

    2010-06-17 21:31:39

    Web(Click and scrīpt)

     

        Web (Click and scrīpt) 协议的录制是基于GUI的、用户实际操作界面过程的脚本,记录的是浏览器和服务器的WEB对话,你选择了该协议后,VuGen记录的是你在WEB界面上的操作的直观过程。例如,当你点击“提交”按钮提交信息时,VuGen会生成web_button函数,当你在编辑框中输入时,VuGen生成web_edit_field函数。

        Web(Click and scrīpt)的Vusers支持非HTML代码,比如客户端的Javascrīpt。VuGen会创建直观的脚本来精确的模拟你在web页面上的操作过程。相反,Web(HTTP/HTML)协议不支持Javascrīpt,VuGen只是把Javascrīpt作为web_url函数的一个资源。

        Web(Click and scrīpt)的Vusers能够自动处理大多数关联(correlations)的问题,大大减少脚本编程的时间。通常情况下,你不需要再去定义关联的规则或者在录制后手动再去做关联。

        例如,当你点击按钮提交数据,VuGen会生成web_button函数。如果该按钮是图片,VuGen生成web_image_submit函数,例如下面的例子中,用户点击了login

        …

        web_image_submit("Login",

        "Snapshot=t4.inf",

        DEscrīptION,

        "Alt=Login",

        "Name=login",

        "FrameName=navbar",

        ACTION,

        "ClickCoordinates=31,6",

        LAST);}

     

        相信使用过QTP(QuickTest Professional)的用户已经明白了,Web(Click and scrīpts)的录制和QTP的过程有点类似,是基于用户操作过程的录制。

        另外需要注意的是,Web(Click and scrīpts)不支持Applets和VBscrīpt。如果被测的WEB站点包含了Applets和VBscrīpt,请使用Web(HTTP/HTML)协议。

     

     

        Web (HTTP/HTML)

     

        Web(HTTP/HTML)协议是基于浏览器请求响应数据的脚本。

        当你选择Web(HTTP/HTML)协议录制时,VuGen记录的是在Internet上传送的“浏览器发出的HTTP请求和服务器的响应”的数据,脚本中包含了你的浏览器请求的数据详细信息,而不是操作过程的信息。

        Web(HTTP/HTML)协议提供了两种录制方式,基于HTML的方式和基于URL的方式。这两种方式让你指定录制哪些信息和脚本使用哪些函数。例如,当你点击按钮(不管是图片,还是按钮)提交信息时,VuGen会生成web_submit_data或者web_submit_form函数。

        web_submit_data("start.swe_2",

        "Action=http://design/callcenter_enu/start.swe",

        "Method=POST",

        "RecContentType=text/html",

        "Referer=http://design/callcenter_enu/start.swe",

        "Snapshot=t2.inf",

        "Mode=HTML",

        ITEMDATA,

        "Name=SWEUserName", "Value=wrun", ENDITEM,

        "Name=SWEPassword", "Value=wrun", ENDITEM,

        "Name=SWERememberUser", "Value=Yes", ENDITEM,

        "Name=SWENeedContext", "Value=false", ENDITEM,

        "Name=SWEFo", "Value=SWEEntryForm", ENDITEM,

        "Name=SWETS", "Value={SiebelTimeStamp}", ENDITEM,

        "Name=SWECmd", "Value=ExecuteLogin", ENDITEM,

        "Name=SWEBID", "Value=-1", ENDITEM,

        "Name=SWEC", "Value=0", ENDITEM,

        LAST);

     

        更详细的信息,可以参考手册或者我的《LoadRunner使用说明》。

     

        不过Web(HTTP/HTML)协议不支持Javascrīpt,它只是把Javascrīpt当作web页面的一个资源。

        对于大部分的应用,包括使用Javascrīpt的应用,使用Web(Click and scrīpt)协议;对于使用applets和vbscrīpt的基于浏览器的应用,或者非浏览器的web应用,使用Web(HTTP/HTML)协议。这两个协议是互斥的,在选择多协议的时候是不能同时选的

  • 系统测试全过程(转载)

    2010-03-31 14:58:00

    我一直感觉系统测试总像马拉松总是测试不完,什么时候上线,什么时候算终点。虽然提交客户了,可是对于质量仍然心里没底,对于测试的效果没有评价的依据。后来经过高人指点,终于领悟到至关重要的精髓:明确测试目标!
        如果要将系统进行全面测试,那么就要有一套完整的测试阶段,每个阶段都以测试目标为标准,科学、有序地进行测试,那么测试效率也就会自然而然跟着提高。
    测试阶段分为:测试前准备、需求分析、测试计划、测试设计、测试执行、测试结果。
    1.测试前准备阶段
    主要是相关业务的学习。业务知识是测试的根本依据,只有业务过关了,以后才能有效的进行测试工作
    了解业务步骤:
    a、了解业务名词;
    b、对现有系统的学习:功能点、业务场景等;
    c、分析现有系统数据库,了解数据的走向。

    2.需求分析阶段
    需求是项目开发的基础,也是测试的依据。所以需求分析一定要做。但是很多公司是没有详细的需求文档的,那如何进行需求分析呢?
    此时分析数据库就是一个非常好的方法:
    a、每张表的索引和约束条件;
    b、数据的来源、走向;
    c、数据的存储、变化;
    d、数据间的关联;
    e、表与表间的关系;
    这些分析都可以为了解业务场景和之后的测试用例设计打好基础。
    3.测试计划阶段
        我们总是觉得被测试进度紧逼、计划失控、测试不完全等等状态,其实解决这些情况的最好方法就是:制定测试目标。
        在计划初期先明确测试目标,制定不同层次目标的执行标准,指导后期设计不同级别的测试用例,跟踪不同级别的缺陷修改。在测试时间较紧情况下,至少可以先把保证所有功能正常操作的最低目标版本先提交给客户,不会再有手忙脚乱,心里没底的状况。
    测试目标分为:
                最低目标
                基本目标
                较高目标
                最高目标  等级别

    可以使用表格形式来规范目标准侧,例如:

    测试目标准则表

    目标
    测试范围
    需求覆盖率

    最低目标:正常的输入+正常的处理过程,有一个正确的输出
    (明确的功能点全部列出来)
    1.功能:

    正常功能

    异常功能

    单功能   

    业务场景

    非功能:16种测试类型
    2.输入覆盖率:

    有效无效

    处理过程:基本流

              备选流

    状态变化:正常、异常

    输出

    SRS00001

    SRS00002

    SRS00003

    基本目标:对异常的输入有错误的捕获,并进行相应提示或屏蔽
    较高目标:对隐式需求进行测试
    根据公司规模不同,确定测试目标级别也可不同。一般小公司有最低标、基本目标即可,大公司可以提高目标标准,直接从基本目标开始,直至最高目标。

    4.具体的ST用例的编写以及执行
    测试用例设计的粒度一直是个讨论对象,很多时候总会强调时间很紧啊,如果时间再多点,我的用例肯定会设计的再细一些!!
    是不是设计的越细就一定越好呢,不一定,测试是无穷尽的,使用穷举方法来进行测试是不科学的。
    因为制定了测试目标,那么就应该根据测试目标,在设计测试用例时也要制定设计用例目标。

    比如:按照最低目标选择测试用例
    输入—>有效
    处理—>有效
    输出—>有效
    按照最低目标的宗旨,只要是设计出来的测试用例足以覆盖和验证系统基本功能可以正常使用,那么这些测试用例的粒度就足够细了!从而提高了设计用例效率,同时也提高了测试效率。

    5.测试之后的评估
    实现一级测试目标之后都要进行评审工作,根据评审结果进行系统版本发布。例如:

    1.保证所有需求都有测试用例
    2.保证所有功能的正常操作和正常操作有对应的测试用例          V1.0版本
    3.保证所有功能的异常校验有对应的测试用例                    V2.0版本
    4.各功能组合形成的业务流有对应的测试用例                    V3.0版本
    5.各功能或整体软件所需满足的非功能性需求有对应的测试用例    V4.0版本

    这样做既可以对代码版本进行控制,也可以应对需求变更的问题。

        也许“确定测试目标”还不能彻底解决复杂测试工作中出现的问题,但是我觉得这最起码可以让你的测试工作变得有条理;跟领导汇报工作的时候业绩和工作效率有凭可据;面对需求变更的时候有理可依!
661/41234>
Open Toolbar