发布新日志

  • 测试与开发人员的战斗——我不是一个人在战斗

    2011-06-20 17:31:05

    作为一个测试老兵,经常听到有测试新人抱怨,需要和开发人员进行激烈的讨论,感觉像打仗一样。其实,测试人员和开发人员的战斗不仅仅在小公司有,在大型软件公司也是比比皆是。这种战斗不仅仅发生在开发周期的初期,也发生在开发过程中,甚至在产品发布后,很多产品质量问题的追责也会引入新的战斗。

      作为一个老测试工程师,也聊聊开发人员和测试人员的战斗,谈谈自己的心得吧。

      先说说战斗的种类。

      1)缺陷(Bug)属性之战

      对于一个缺陷,开发人员和测试人员有不同意见,例如,开发人员说是“建议”,测试人员说“代码缺陷”;开发人员说是优先级3的,测试人员说是优先级1的;开发人员说不能重现问题,测试人员说曾经出现,必须调查。

      2)产品指标目标之战

      对于一个产品达到什么要的指标,也是测试人员和开发人员讨论的热点。例如,测试人员说性能必须到达200毫秒,但是开发人员常反驳说500毫秒是合理的目标。虽然,在需求说明书中,产品经理规定了产品大的指标,但是一些执行的细节目标却没有仔细规定,这往往是开发人员和测试人员的战场。

      3)质量任务之战

      质量保证的任务有很多种,包括写单元测试,收集试验数据,搭建环境,功能测试,安全检查等等…. 那么这些任务究竟是如何安排的,是测试人员做还是开发人员做,不同公司有不同的文化,有不同的开发测试人员比例,导致其分工也不一样。有时,开发和测试对于一些任务的责任人也有着不同看法,这也往往会成为战斗焦点。

      4)代码质量之战

      代码的质量的好坏,是否可接受也是在代码审查时经常讨论的,比如一些异常的处理,是否合理,覆盖面是否全面。

      测试人员的战略和战术

      很多测试人员在这些战斗中不容掌握主动,以下就是一个老兵的一些经验,希望能够帮助测试人员在战斗中更好的赢得主动,为高质量软件产品赢得胜利。总的来说,对于测试人员说,是保护用户的体验,因此有机会得到更多人的支持,换句话说,测试人员”不是一个人在战斗“。另外,”多算胜,少算不胜“,讨论前尽量多准备准备。

      1)多引用用户体验,多引用竞争对手的数据作为论据

      在讨论中,列举的论证时,如果测试人员的论据是以“我认为…..”,这种论据通常是不是很令他人信服的,因为开发人员也可以说”我认为…不是这样的..'’。因此,在讨论中,应该多引入用户体验的数据作为支持论据。另外,可以多多列举竞争对手的数据,也是很有说服力的。

      举例来说,一个用户登录界面,产品需要3秒钟登陆了,测试人员认为很慢,开发人员认为可以接受。那么,测试人员可以指出,在这种设计下,用户体验很差的,用户需要更好的性能,同时可以列举一些竞争对手的登录时间作为参考。少说”我认为…..”,多说用户体验差的具体数据。

      2)争取项目经理或则产品经理的支持

      产品经理通常也是产品质量的坚决拥护者,因此产品经理通常都站在测试人员一边。如果在用户体验上,开发与测试人员的观点僵持不下的话,可以考虑将产品经理引入讨论,通常产品经理会支持更好的用户体验,而站在测试人员的一边。获取产品经理的支持,注意引入的次数与频率,如果引入过于频繁,有时容易导致开发人员的不满。

      3)存同求异

      对于一些非关键的争论点,例如,一些与产品质量没有本质影响的决定,测试人员可以与开发人员保持不同的观点。对于这些不同观点,不会影响项目的进展和产品的质量。

      4)速战速决

      孙子言”兵贵速,不贵久“。测试人员的工作通常繁重,如果花大量时间和开发人员争斗,往往得不偿失的。其实大部分讨论,在前5分钟,双方都已清楚的表达了观点,列举了大部分的论据,因此5分钟后的大部分讨论,都是这些观点和论据的反复陈述,通常无法通过论据本身说服别人。因此,我提倡对于单个问题的讨论,不应该超过5分钟,测试人员应该控制节奏,5分钟内结束讨论。如果5分钟内仍然没有结论,测试人员可以主动结束这次讨论:对于原则性的问题,考虑另外收集更多的论据(数据),获得更多人的支持,另找时间再和开发人员继续讨论;对于可以权衡的问题,可以考虑相互让步,已得到双赢;对于一些小问题,可以考虑抓大放小。

      好了,说了这么多,都是纸上谈兵。其实战斗的技巧主要是来源于实践,希望大家能够在战斗之后,仍然能保持一个好的心情,另外减少激烈讨论所花的精力,并且提高有效性。

  • 我谈对敏捷项目测试的理解

    2011-02-12 16:57:08

      敏捷这个词已经流行很长一段时间了,作为我们测试来说,对于这个词更加不会陌生。总是听到我们的测试人员说,在敏捷的项目中,对测试的挑战很大,之前没有机会参与敏捷的项目,所以一直望着,前段时间有幸参与到了敏捷的项目中,谈谈自己对这一类项目测试如何开展和把控质量的理解,权当抛砖引玉吧,欢迎拍砖,多拍点,我可以拿着盖个房呵呵
     
       敏捷其思想的价值就在于对一个需求的快速的响应,这个其实也不仅仅是对我们测试的挑战,对于开发和设计来说,一样是也存在很大的挑战的,这个牵涉到有时候设计的重构和代码的重写,有时候系统的可扩展性也会在这个时候变的非常的重要。
     
      这个就引出我个人对于敏捷项目质量把控的第一点理解:质量先行。在前期做设计评审的时候,需要对设计的可扩展性进行关注。避免后期需求的变更带来的重构的风险。另外:第二点理解就是,在敏捷的项目中,单元测试显的especiaaly重要。在通过了单元测试的模块进行集成之后,这个时候就是我们系统组的应用团队关注接下来的集成测试,主要关注业务流程的正确性,数据的前后台一致性,模块的接口测试。对于数据流频繁,数量庞大的模块接口需要做性能测试的分析,是否需要做性能测试。再接下来,对于可以确定的稳定的功能模块,业务流程就可以进行手工用例向自动化用例的转化了。转换完成之后,如果后期发生了关联到次类业务流,模块的需求的变更,无论是新增还是更改,只要这一部分确定下来的业务流程业务需求没有变,那就可以自动化这一部分用例,当然是整体还是部分就要看当时的实际情况了。
     
      这个就是我当前对于敏捷项目的测试如何做的理解。至于管理方面,那么需要我们的测试管理人员对于业务需要有一定的了解,同时部门之间消息一定要联动,平常结合管理上的scrum方法,思想,加强监控,及时的做出调控。
  • 测试目标--质量特性的验证

    2010-11-16 14:35:00

    1. 正确性测试(correctness testing)或功能性测试是基于产品规格说明书、从用户角度针对产品特定的功能和特性所进行的验证活动,以确认每个功能是否得到完整的实现,用户能否正常使用这些功能。功能测试一般要在完成集成测试后时行,而且是针对应用系统、在实际运行环境下而进行的测试。
    2. 性能测试(performance testing)是测试在一定条件下系统行为表现,是否在设计的性能指标范围内。如测试网站在并发用户数为10、100、1000、10000等情况下, 页面的响应时间是否在3秒和5秒内,响应时间最长是否不超过15秒或30秒。性能测试不同于负载测试(stress/load testing),性能测试是在定义的各种条件下去衡量系统的有关性能指标,而负载测试只测试在一些极端条件下,系统还能否正常工作,或加载到系统崩溃而找出系统性能的瓶颈,所以两者要结合起来。
    3. 可 靠性测试(reliability testing)是评估软件在运行时的可靠性,即通过测试确认平均无故障时间(Mean Time To Failure,MTTF)或最初平均寿命,即故障发生前平均工作时间(Mean-Time-To -First-Failure,MTTFF)。可靠性测试强调随机输入,并通过模拟系统实现,很能通过实际系统的运行来实现。可靠性测试,一般伴随着强壮 性测试(robustness/strong testing).
    4. 安全性测试(safety or security testing)是测试系统在应付非授权的内部或外部访问、非法侵入或故意损坏时的系统防护能力,以检验系统有能力使可能存在来自于内部或外部的损害的风 险限制在可接受的水平内。软件可靠性要求,通常包括了安全性的要求。但是软件的可靠性不能完全取代软件的安全性,因为安全性还涉及数据加密、保密、存取权 限等方面的要求。
    5. 容错性测试(tloerance testing)是检查软件在异常条件下自身是否具有防护性的措施或者某种灾难性恢复的手段。如当系统出错时,能否在指定时间间隔内修正错误并重新启动。容错性测试看作由系统异常处理测试和恢复测试组成。
    6. 恢复测试(recovery testing)在系统崩溃、硬件故障、或者其他灾难发生之后,重新恢复系统和数据的能力测试,包括确定软件系统的平均修复时间(Mean Time to Repair,MTTR)。
    7. 兼容性测试(compatibility testing)测试在各种的硬件/软件/操作系统/网络环境下的软件表现,包括硬件接口、软件新旧版本兼容、已存在数据的兼容能力。
  • QTP连接数据库进行增删改查脚本

    2009-12-04 18:20:53

    步骤:
    1、首先创建数据源
    2、在QTP的Exper View中开发脚本如下脚本

    增删改脚本为:

    Dim conn,strSql
       '定义变量
    set conn = CreateObject("ADODB.Connection")
      '创建连接
    conn.ConnectionString="DSN=test_access_odbc;DBQ=E:\test.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"
      '设置连接字符串
    conn.open
     '开启连接
    'strSql="insert into email_value values(11,'123')"
     '设置插入语句
    'strSql="update email_value set email_value='tester' where ID=11"
    strSql="delete from email_value where ID=11"
    If conn.state=0 Then
      '如果连接状态为0,表示连接失败,写入reporter对象中,否则表示连接成功
       Reporter.ReportEvent micFail,"testing","数据库连接失败"
       conn.close
       Set conn = nothing
    else
      Reporter.ReportEvent micPass,"testing","数据库连接成功"
      conn.execute strSql   '执行更新语句
      conn.close
      Set conn = nothing
    End If


    查询脚本为:

    Dim conn,res,strSql
       '定义变量
    set conn = CreateObject("ADODB.Connection")
      '创建连接
    conn.ConnectionString="DSN=test_access_odbc;DBQ=E:\test.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"
      '设置连接字符串
    conn.open
     '开启连接
    Set res = CreateObject("ADODB.RecordSet")
      '创建一个记录集对象
    strSql="select * from email_value"
     '设置查询雨具
    If conn.state=0 Then
      '如果连接状态为0,表示连接失败,写入reporter对象中,否则表示连接成功
       Reporter.ReportEvent micFail,"testing","数据库连接失败"
       res.close                              '关闭结果集和连接,并且置为空
       Set res = nothing
       conn.close
       Set conn = nothing
    else
      Reporter.ReportEvent micPass,"testing","数据库连接成功"
      res.open strSql,conn   '执行查询语句
      res.MoveFirst       '将记录集游标指到记录集的最开始
      Do
         Reporter.ReportEvent micPass,"file",cstr(res(0))+" : "+cstr(res(1)) '循环遍历查询结果,并且保持到reproter对象中,直到记录集到达末尾,循环结束
        res.MoveNext
      Loop until res.eof = true
      res.close
      Set res = nothing
      conn.close
      Set conn = nothing
    End If
  • 网站测试都要测试哪些及如何进行测试

    2009-11-20 10:52:07

      1 UI测试
      看页面是否美观养眼(包括页面的布局是否合理,策划是否舒服美观,页面长度是否合理,前景色与背景色是否搭配,页面风格是否统一,色调是否适合人眼, 会不会太刺眼,字体大小是否合适,字体的颜色是否与背景色搭配,字体链接时是否会出现设置怪异的背景色,字体颜色有没有与背景色太接近或差距太大导致我们 没办法看清字体或刺激了我们的视觉,点击链接时图片和字体会不会产生移位),表格和DIV测试,是否网页设计师在表格或DIV里放置了过多的东西导致表格 或 DIV拉长,表格或DIV之间对齐了没有,中间是否有空隙,是否产生了错位,如果在表格或DIV中设置了溢位,表格或DIV中的内容是否可以全部看到,有 没有出现一半字的情况,如果使用了框架结构.框架结构是否合理,表格每行的宽度是否足够,是否有折行。
      2 链接测试
      点击链接时是否可以进入我们要找的页面,进入了我们要找的页面后能否正确返回,链接页面会不会是空白页面或孤立页面或根本没链接(也就是说链接的是自 己本身),如果链接的是空白页我们是否可以再正确返回,如果使用了框架或内嵌框架是否可以正确在本框见页内显示要查找的页面,使用内容置顶时是否可以正确 实现。
      3 表单测试
      表单的测试包括单选按钮,复选框,文本框,密码项和菜单项和提交按钮类按钮的测试和后台数据库的测试.首先如果是单选按钮我们选择了一个后可不可以再 选第二个,如果是复选框的话我们能不能同时选择多个选项,选择多个选项时若需要全选那摸我们是要一个个的选择还是只需要选择一次就可以,在文本框里我们输 入的字数有无特别限定,若与特别限定条件不符那摸我们是否可以操作成功,在对用户名和密码的设置时用户名是否可以为数字,汉字,非英文字符,中间是否可以 有空格,标点符号,对密码的长度有无特别限定,若超过特别限定或少于特别限定我们是否可以操作成功,密码是否可以为汉字,英文,特殊字符和标点符号,中间 是否可以空格,密码是否设置了屏蔽菜单项分级是不是太多,过长(特别是我们为了节省空间在导航上设置的菜单)点击菜单选项上的各分级目录是否可以正确进入 链接页面,进入链接页面我们是否可以正确返回,点击提交按钮看是否可以提交成功,点击取消按钮看其是否生效,提交后看我们的资料是否保存成功,保存后刷新 页面看我们的资料是否可以正确显示,我们是否还可以再回到原始页面,如果未输入用户名或密码会不会提示出错,错误提示是否可以关掉,提示出错后我们能否回 到原始页面,用户提交的数据是否真实有效,如填写的所属省份与所在城市是否匹配,出生年月与身份证号是否匹配等。
      4 兼容性测试
      在各种配置不同操作系统上和分辨率不同的电脑上及使用不同的浏览器对其测试,看其是否可以正确显示,是否有图片和页面错位和太大太小等问题使有的部分无法看到,是否有图片或视频无法显示。
      5 网络配置测试
      看看网页是否可以打印或保存(如果是保密的网页或不想让别人保存的页面可以将其作成FLASH格式的,不让用户保存),看看网页冗余代码是否过多或容量太大导致网络运行速度过慢。
      6 负载测试
      多个用户同时上网,砍其最大的承受能力是多大,如果超过了这个极限会有何反应。
      7 压力测试
      看看几百,几千甚至几万个人同时上网网页还能显示不,运行速度会有怎样的变化,是否响应时间太长或运行过慢,他到啥时候会崩溃。
      8 安全测试
      用户名和密码是否有长度限制,是否有复杂度限制,登陆次数是否受限,如果超过了登陆次数,关闭页面重新登陆是否还可以登陆进去,换了台电脑或在另外的 地方登陆呢,WEB系统是否有超时限制,超时以后是否会提示登陆,日志文件是否记录登陆后用户进行的操作操作,是否记录登陆失败的操作,事物完成后,会不 会记录拥护进行的操作,会不会记录用户名,是否在ASP,JSP,JAVAscrīpt,VBscrīpt等脚本语言里有设置可以访问服务器的语言,是否 使用了安全套接字层协议SHTTP,若使用了这种协议,那摸在网页中是否有备份替换的页面。
      9 接口测试
      在处理过程中中断事务,看看会发生什么情况?订单是否完成?尝试中断用户到服务器的网络连接。尝试中断 web 服务器到信用卡验证服务器的连接。在这些情况下,系统能否正确处理这些错误?是否已对信用卡进行收费?
  • QTP 连接数据库实例

    2009-11-13 17:42:17

    初始化连接串
    ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=my;Data Source=DOFA40328"
    '创建SqlConnection的实例,构造函数中的参数为ConnectionString
    Set SqlConnection = DotNetFactory.CreateInstance("System.Data.OleDb.OleDbConnection","System.Data",ConnectionString)
    '打开数据库连接
    SqlConnection.Open
    '创建SqlCommand的实例,构造函数中的参数有两个,一个是数据库的查询语句,一个是数据库连接对象SqlConnection
    Set SqlCommand = DotNetFactory.CreateInstance("System.Data.OleDb.OleDbCommand","System.Data","Select * from username",SqlConnection)
    '创建SqlDataAdapter的实例,构造函数中的参数为数据库命令对象SqlCommand
    Set SqlDataAdapter = DotNetFactory.CreateInstance("System.Data.OleDb.OleDbDataAdapter","System.Data",SqlCommand)
    '创建一个DataSet实例
    Set DataSet = DotNetFactory.CreateInstance("System.Data.DataSet","System.Data")
    '调用SqlDataAdapter的Fill方法,把查询返回的数据放到DataSet实例中
    SqlDataAdapter.fill(DataSet )
    '关闭数据库连接
    SqlConnection.Close
    '期待返回记录行数
    ExpectedRowCount = 2
    '获取数据记录行数
    ActualRowCount = DataSet.Tables.get_Item(0).Rows.Count
    '判断是否等于预期记录行数
    If not  ActualRowCount <> ExpectedRowCount Then
     Reporter.ReportEvent micFail,"错误","数据库记录行数不正确!期待返回记录行数 = "&ExpectedRowCount&"实际返回行数 = "&ActualRowCount
     else
     Reporter.ReportEvent micPass,"正确","数据库记录行数正确"
    End If
  • Testdirector添加IE8支持

    2009-11-13 17:42:17

    方法一、下载插件,安装TD自带的浏览器(通用)
    使用IE进入TestDirector,单击Add-ins Page,在新页面中单击More TestDirector Add-ins ,进入页面后,单击others下的TestDirector Explorer Add-in下载插件。安装插件后,就可以通过机器访问了开始菜单->所有程序->TestDirector 8.0->TDExplorer

    方法二、修改TD服务器中的start_a.htm文件(适用于IE7)
    1、以系统管理员身份登录TD服务器
    2、找到TD服务器中TDBIN目录(缺省情况下是:C:\Inetpub\TDBIN目录),用编辑器打开start_a.htm文件和SiteAdmin.htm;(记得先备份哦!)
    3、搜索“var fMSIE3456”字符串,该字符串其实是用来屏蔽不合适的浏览器的,在该字符串值最后面添加“|| (ua.lastIndexOf('MSIE 7.0') != -1)”,保存;
    4、打开IE7访问TestDirector,安装ActiveX,大功告成!!(有时候可能需要清空客户端缓存和重启IIS)

    方法三、修改TD服务器中的start_a.htm文件,设置IE8(适用于IE8.0)
    1、首先以系统管理员身份登录TD服务器
    2、找到TD服务器中TDBIN目录(缺省情况下是:C:\Inetpub\TDBIN目录),用编辑器打开start_a.htm文件和SiteAdmin.htm;(记得先备份哦!)
    3、搜索“var fMSIE3456”字符串,该字符串其实是用来屏蔽不合适的浏览器的,在该字符串值最后面添加“|| (ua.lastIndexOf('MSIE 8.0') != -1)”,保存;
    4、在IE8中,设置IE属性工具->Internet选项->高级启用内存保存减少内存攻击选项取消选中.(如图)。再次登陆时就没有问题了。

  • Selenium IDE 安装

    2009-06-15 16:46:12

    上次讲了如何安装Selenium IDE,现在来讲解下如何来安装Selenium Core

    先来介绍下Selenium Core

    Selenium Core是一个用来测试Web应用的测试工具。Selenium Core的测试直接运行在浏览器中,就像真实的用户在操作一样。它可以分别运行在WindowsLinuxMacintosh系统的Internet ExplorerMozillaFirefox浏览器中。

    浏览器兼容性测试测试你的应用看是否可以在不同的操作系统的不同浏览器上正常工作。同样的脚本可以运行在任何Selenium平台上。

    系统功能测试创建回归测试用来检验应用的功能以及用户的满意度。

    Selenium Core使用了一个独特的机制让它可以运行在如此多的平台。测试脚本采用纯JavascrīptDHTML写成,你将Selenium Core的测试脚本直接放置到你的应用程序所在的Web服务器中,就可以在客户端使用任何受支持的浏览器运行测试了。

    Selenium使用JavascrīptIframe自动化的测试引擎嵌入到你的浏览器中。这项技术应该可以工作在任何启用Javascrīpt的浏览器中。因为不同的浏览器处理Javascrīpt有些不同,所以我们通常不得不调整引擎以便更广泛的支持WindowsMac OS XLinux上的不同浏览器。

    下面说下运行Selenium Core需要的环境:

    l        Open QA下载最新的Selenium Coreselenium-core-0.8.2.zip

    l        把下载的selenium-core-0.8.2.zip解压到你的web服务器中,下面我将在Tomcat中演示。

    安装步骤:

    第一步:去apache.org下载tomcat安装包。

    第二步:正确安装tomcat

    第三步:去Open QA下载Selenium Core

    第四步:解压Selenium Core包到D:\selenium

    第五步:配置tomcat文件,配置一个sc.xml其他配置项为<Context path="/sc" docBase="D:/selenium/selenium-core-0.8.2" debug="0" privileged="true">

    第六步:运行tomcat服务

    第七步:打开浏览器,输入:http://localhost:8080/sc/

    这时你能看到下图界面:

     

    这时说明Selenium Core已经运行正常。

    我们可以做一个Selenium Core自带的小例子进行测试。

    点击Selenium TestRunner进入Selenium Core主界面

     

    点击Go,进入Test Suite界面

     

    点击左边单个的test case,我们能进入查看和运行相应的单个test。点击中间test case的步骤,能增加或删除断点。测试的应用程序界面,将展示在下部。如下图:

     

    下面介绍下下部右边的按钮功能:

    l         Execute Tests下四个按钮分别表示运行所有Test Suite、运行选中的Test Suite、暂停或继续、下一步

    l        表示运行Test Suite度的快慢

    l         Highlight elements选中表示运行的进程将高亮显示

    l        Tools下两个按钮分别表示浏览你的界面结构、查看一些错误信息

    讲到这里,估计大家都会怎么来初步运行Selenium Core了。Selenium Core的安装就讲到这里。以后再深入来介绍Selenium Core的具体用法。

    你可以通过这个链接引用该篇文章:http://shmilyfan.bokee.com/viewdiary.17140234.html

  • 我应该使用哪种Selenium工具?

    2009-06-15 16:39:04

    考虑如下功能矩阵:

      Selenium
    IDE
    Selenium
    Remote Control
    Selenium
    Core
    Selenium
    Core HTA
    浏览器支持 仅Firefox 很多 所有 仅IE
    需要远程安装
    支持 HTTPS/SSL 是*
    支持跨域 是*
    需要Java
    测试结果保存到磁盘
    多语言支持 仅Selenese 很多 仅Selenese 仅Selenese

    * = Selenium RC中实验性的支持

     

    浏览器支持:Selenium IDE仅可以在Firefox中工作。Selenium Remote Control直接支持Firefox和IE,此外还支持手动配置很多其它浏览器。Selenium Core几乎可以在任何浏览器中工作,因为它是纯粹的Javascrīpt。Selenium Core HTA可以在IE最高安全等级(特权)下工作,这意味着它仅能在IE下工作。

     

    需要远程安装:Selenium Core需要在被测试应用程序(Application Under Test, AUT)的网站内安装,因为同源安全策略,一个阻止进行跨网站脚本访问的安全策略。那意味着你不能坐在那里写一个Selenium Core测试而运行在google.com;如果要那样做,你需要在google.com安装Selenium Core。如果你不能/不会在你的被测应用程序AUT上面安装Selenium Core,不能保证它在AUT相同的服务器上公开可见,那么Selenium Core可能不适合你。

    同源安全策略不会限制Selenium IDE,因为它作为Firefox扩展实现;它对于Selenium Core HTA也无效,因为它运行于IE的最高安全级别(特权)上。Selenium RC通过提供一个代理服务器来保证Selenium JS文件看似来自相同的远程服务器,从而符合同源策略;代理服务器欺骗浏览器,让它认为这里的确有像http\://www.google.com/selenium/这样的目录。

     

    支持HTTPS/SSL:最新版本的Selenium Remote Control的代理服务器可以支持HTTPS网站(当前所指版本为0.9.0),但是这个支持还是实验性的。参考使用试验性的浏览器加载器

     

    支持跨域:同源策略意味着测试一个服务器/域不能操作另外一个服务器/域。这意味着Selenium Core不能处理跨多个不同域的应用程序。
    Selenium RC可以处理切换域的问题,但是这个支持是实验性的。参考使用试验性的浏览器加载器获取更多信息。

    需要Java:Selenium Core和Selenium IDE直接在浏览器中运行。Selenium RC需要安装Java(运行代理服务器)。注意,虽然Selenium RC需要Java,你也可以用.NET、Perl、Python和Ruby编写你的RC测试,但是你需要Java来运行代理。

     

    将测试结果保存到磁盘:Selenium Core不能将任何测试结果写到磁盘上(因为它是用javascrīpt写的,它不允许向磁盘写数据),当然你可以将测试结果发送到另外一台服务器保存。(你可以通过Selenium COre HTA保存测试结果。)Selenium Remote Control提明确供支持运行测试并用多种语言讲测试结果写入磁盘的功能;它还可以为Selenium Core结果处制理服务器。Selenium IDE是一个Firefox扩展,所以当然支持将测试结果存盘。

     

    语言支持:Selenium Remote Control允许你用任何语言写测试,包括Java、.NET、Pertl、Python和Ruby。(你还可以为其它语言添加测试的支持。)Selenium IDE和Selenium Core仅支持使用"Selenese"测试, 一种简单的脚本语言。Selenese有一些严格的限制:它没有条件(没有"if"表达式),并且它没有循环(没有"For"表达式)。这会使编写复杂的测试变得困难甚至不可能。

    你可以通过这个链接引用该篇文章:http://shmilyfan.bokee.com/viewdiary.17139008.html

     

     

  • Selenium Core FAQ

    2009-06-15 16:39:04

    Selenium Core FAQ

    这些是收集起来的关于Selenium Core的常见问题列表。我们鼓励人们丰富这个列表并对列出的内容进行回馈:

    1. Selenium是用来做什么的?
      • 它用来对Web应用程序做功能或系统测试。这些测试有些时候也被称作接收测试/用户测试/集成测试。Selenium不止意味着单元测试。
    2. 为什么我不能让Selenium Core在Google上工作? - 我尝试写一个简单的脚本进行google搜索。我遇到了各种各样的问题。它在你那里可以工作么?这是我的测试:
      Test Type    
      open http://www.google.com/  
      type q testing tools
      click submitButton  
      • 简单的回答是因为所有浏览器的JavaScript引擎内建的跨站点脚本安全策略,你不能编辑其它域内的网页的内容。外部的页可以正确的在test runner窗口中看到,但是Selenium不能查询或者编辑它里面的内容。
        换句话说,你不能在"foo.com"运行selenium来测试和编辑"bar.com"上的值或着电击上面的按钮。所以,在当前的方式下,你不能给google写"脚本"因为你的脚本并没有放在google.com。如果Selenium和你在测试的应用程序在同一个域中,当然,你就不会遇到跨站点脚本安全问题造成的功能限制了。
        • 你可以在这里阅读到更多源于跨站点脚本的问题:开发文档
    3. 我如何在外域或者远程的服务器上运行我的测试脚本,绕过跨站脚本安全问题?
      • 这里有几种方法可以绕过跨站脚本安全(限制):
        • 如果可能,部署将Selenium Core和你的测试部署在你正在测试的应用程序里面。
        • 或者:使用 Selenium IDE 运行你的自动化测试。Selenium IDE是一个firefox扩展(插件),(它以"chrome" url方式运行)这样它不受浏览器的安全限制。
        • 或者:使用 Selenium Remote Control 运行你的测试。Selenium Remote Control提供一个配置在客户端的代理,来欺骗浏览器,使其认为应用程序和测试工具(脚本)来自同一个域。
        • 或者:让Selenium作为"HTA"应用程序运行,或者在Internet Explorer中作为"HTML Application"运行。HTA应用运行于与其它受信的客户端应用程序相同的安全上下文中,所以不会受到跨域脚本的安全限制。(你可以在这里得到更多消息:MSDN
        • 还有,请查看相关的问题:"为什么我不能给google.com写脚本"。
    4. 你如何创建测试表格?
      • The developers on the Selenium project use Mozilla Composer to create plain HTML text files for their
        tests. By default, Mozilla Composer writes very clean HTML without any extra, unnecessary markup.
        • You can also use Selenium IDE to write your tests scripts.
        • Another option is any text/html editor to create test tables. Future versions of Selenium may support RST (ReStructred Text), or wiki-table syntax, natively. However, you are free to use another format now, as long as you remember to generate the HTML files from your source files, either during your build process or dynamically at run-time.
    5. So I was able to deploy Selenium and my app showed up in the TestRunner, but my tests are failing with no errors, what gives?
      • One thing to check, especially if you are using Nvu, is that the third column in your test table (the optional arguments column) is not an empty cell. A single space or non-breaking space seems to be resolve the issue.
    6. I don't have access to the server where my AUT (application under test) is deployed, does that matter? IE., is physical deployment of app server and testrunner an issue?
      • Physical deployment doesn't strictly matter, but if you can't modify your AUT, you do have to somehow either force the browser to disable the same-origin policy or trick the browser into thinking that your tests and your AUT have the same origin.
    7. Selenium isn't working, where are the diagnostics for problem solving?
      • Look for JavaScript. errors. (In IE, check for a warning in your browser status bar; in other browsers you'll want to check the JavaScript. console for errors.) Additionally, try opening the logging window before you run your tests; that may reveal problems. You may also want to try using a JavaScript. debugger. In Internet Explorer you can configure the MS Script. Debugger; in Mozilla you can configure Venkman. (Be aware that there are several versions of Venkman; many of them are not forward/backward compatible with different versions of Mozilla/Firefox. Make sure you get the right one that works on your browser!)
    8. Selenium scripts are rather verbose - Is it possible to record these scripts to speed things up?
      • Yes, use Selenium IDE This is a firefox plugin, so it requires firefox, but the results can be replayed using any browser you choose once the script. has been created.

    你可以通过这个链接引用该篇文章:http://shmilyfan.bokee.com/viewdiary.17139033.html

  • QTP中虚拟对象设置

    2009-04-23 11:40:25

      当我们在录制脚本中,有时会遇到某个对象回放时不能识别.那么就可以考虑是不是可以做个虚拟对象来代替它.您可以将这些对象定义为虚拟对象,并将它们映射到标准类,例如按钮或复选框。QuickTest 在运行会话过程中模拟虚拟对象上的用户操作。在测试结果中,虚拟对象显示时类似标准类对象。

       下面我们还是通过一个例子来具体操作一下.这次选用LoadRuner自带的b/s架构的web例子,来录制脚本.(注:运行这个例子,同时把web server先给开起来.).这次只录制一个点击sign up(注册)的步骤.
    录出脚本如下:

    Browser("Mercury Tours").Page("Mercury Tours").Frame("navbar").Image("signup").Click 45,12

    QTP把这个button对象识别成了Image(图片)对象,导致最后回放的时候,QTP不能完成Click操作,弹出报错信息.对于这个对象,我马上想到了做个虚拟的button对象来代替它.

    下面是整个虚拟对象的制作过程:

    1.选择“工具”>“虚拟对象”>“新建虚拟对象”。或者,也可以在虚拟对象管理器中,单击“新建”。将打开虚拟对象向导。单击“下一步”。

    2.选择要将您的虚拟对象映射到的标准类(这里有六种对象类供你选择,分别是object,button,table,list,check box,radio button).这里我们要映射一个button对象,所以选择button.单击"下一步"

    3.单击“标记对象”。选择你要做虚拟对象的区域,拖动鼠标.尽量能覆盖整个你想替代的对象.

    4.在“标识对象使用”框中,选择您希望 QTP 标识和映射虚拟对象的方式。

    如果您想要 QuickTest 标识所有出现的虚拟对象,请选择“Parent only”。

    如果想要 QuickTest 仅标识一次出现的虚拟对象,请选择“Entire parent hierarchy"。

    这里我们选择默认的“Parent only”。

    5.指定虚拟对象的名称和集合。从集合列表中选择,或通过在“集合名”框中输入新名称来新建集合

    点击完成,整个虚拟对象就做好了.

    虚拟对象做好后,保存在虚拟对象管理器中.我们可以通过虚拟对象管理器来删除或禁用虚拟对象定义.

    选择“工具”>“虚拟对象”>“虚拟对象管理器”。将打开虚拟对象管理器。

    注意:如果希望 QuickTest 在录制时识别虚拟对象,请确保清除“选项”对话框的“常规”选项卡中的“录制时禁止识别虚拟对象”复选框。

    接下来我们再来录制一遍对sign up的操作,录制代码如下:

    Browser("Mercury Tours").Page("Mercury Tours").Frame("navbar").VirtualButton("button").Click

    在录制过程中值得注意的是,一定要点击到我们做好虚拟对象的范围内,这样QTP才能识别到这个虚拟对象.这里我们的虚拟对象识别成功.再次回放,QTP顺利的执行了脚本.

    还有两点要注意的是:

    1.虚拟对象管理器中显示的虚拟对象集合存储在您的计算机中,而不是随包含虚拟对象步骤的测试或组件存储。这意味着如果您在测试或组件步骤中使用虚拟对象,则仅当在包含正确的虚拟对象定义的计算机中运行时,该对象在运行会话过程中才能被识别。要将您的虚拟对象集合定义复制到另一个计算机,请将您的 <QuickTest 安装文件夹>\dat\VoTemplate 文件夹的内容(或该文件夹中的单个.vot集合文件)复制到目标计算机上的相同文件夹中。

    2.仅当录制和运行测试或组件时,才能使用虚拟对象。您不能在虚拟对象上插入任何类型的检查点,也不能使用“对象探测器”来查看其属性。

    接下来你可以继续完成整个sign up过程,还有多个类似的对象需要做虚拟对象.你也可以试一下?

  • 检测字符串中是否包含有除字母、数字、下划线以外的字符

    2009-04-22 11:38:29

    'Begin--------------------------------------------------------------------------------------------------------------------------
    '检测字符串中是否包含有除字母、数字、下划线以外的字符。
    sub CheckStringIsValid(OriginalString)
     ValidText="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
     ValidFlag=true
     SourceText=OriginalString

     for i=1 to len(SourceText)
      TestText=mid(SourceText,i,1)

      if InStr(ValidText,TestText)<=0 then
       ValidFlag=false
       exit for
      end if

     next

     if ValidFlag then
      'response.write "正确"
     else
      response.write "警告:非法的数据!"
      response.end
     end if

    end sub
    'End----------------------------------------------------------------------------------------------------------------------------

  • LR回放中highest severity level was"ERROR"的解决方法

    2009-02-09 14:48:00

    解决方案一:

    在LR中录制脚本时有如下问题:

     

    在录制时一切正常,而回放时提示类似如下错误:

    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。

     

    处理方法如下:

    1, 打开recording options,在internet protocol下的recording中选择recording level为HTML-based scrīpt,点击HTML Advanced,选择scrīpt type为A scrīpt containing explicit.即可。

    2, 选择使用URL_based scrīpt录制。

    另外,附上帮助中的这个错误代码的说明:

    Message Code 27979

    Requested form not found

    The form was not found in the page received from the server. Possible reasons: (i) The current or a previous HTML page was changed after the scrīpt was recorded. (ii) A previous request navigated to a wrong page or failed. (iii) One or more web_submit_form arguments are missing or incorrect (especially for manually coded, parameterized, or correlated functions). (iv) The server returned an unexpected page (e.g., under excessive load).

    Troubleshooting

    If the current or previous HTML page was changed, look for the correct properties of the form used in the text (e.g., action), and change it in the scrīpt.

    If your snapshots and extended log are disabled, enable them and run the scrīpt again.
    (i) To enable Snapshots: Select Tools > General Options > Correlation, and check the Save correlation information during replay box.
    (ii) To enable Extended Log: Select Run-time Settings > General: Log, and check Enable logging, Always send messages, Extended log, Data returned by server, Advanced trace.

    Compare the record and replay snapshots for each step in the scrīpt from the beginning, and locate the first difference. If you identify a difference in the snapshots, locate the corresponding HTTP request in both the recording log and the extended log. Compare the requests and, if they are different, have the replay issue exactly the same request. This can be done, for example, by adding web_add_header (for adding missing headers or adjusting existing ones), web_remove_auto_header (for removing extra headers), and web_add_cookie (for missing cookies).

    If some correlation is missing, (e.g., the recording and replay runs have different session IDs), use the correlation tool to locate and handle such cases.
     
    解决方案二:

    错误:

    ction.c(34): Error -27727: Step download timeout (120 seconds) has expired when downloading resource(s). Set the "Resource Page Timeout is a Warning" Run-Time Setting to Yes/No to have this message as a warning/error, respectively   [MsgId: MERR-27727]
    Action.c(34): web_link("****") highest severity level was "ERROR", 14506915 body bytes, 547 header bytes   [MsgId: MMSG-26388]Ending action Action.

    解决方法:


    取消选中run time settings-browser emulation-download non-html resources.解决 

Open Toolbar