发布新日志

  • 【转载】LoadRunner性能测试基础知识问答

    2011-02-24 17:20:25

    转载:http://user.qzone.qq.com/52974069/share/#action=detail&uin=52974069&itemid=1297991875&guest=1?ptlang=2052

    Q1:什么是负载测试?什么是性能测试

      A1:负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试,例如,访问一个页面的响应时间规定不超过1秒,负载测试就是测试在响应时间为1秒时,系统所能承受的最大并发访问用户的数量。

      性能测试:指在一定的约束条件下(指定的软件、硬件、网络环境等),确定系统所能承受的最大负载压力。

      Q2.性能测试包含了哪些测试(至少举出3种)

      A2:性能测试包含负载测试、压力测试、大数据量测试、疲劳强度测试等。

      Q3.简述性能测试的步骤

      Q4.简述使用Loadrunner的步骤

      A4:制定性能测试计划—>开发测试脚本—>设计测试场景—>执行测试场景—>监控测试场景—>分析测试结果

      Q5.什么时候可以开始执行性能测试?

      A5:功能测试通过;一般需要进行性能测试的系统,都是用户量比较大、业务使用比较频繁、比较重要的功能模块。

      Q6.LoadRunner由哪些部件组成?

      A6:主要有三部分组成:

      Q7.你使用LoadRunner的哪个部件来录制脚本?

      A7:使用Virtual User Generator录制测试脚本

      Q8.LoadRunner的哪个部件可以模拟多用户并发下回放脚本?

      A8:LoadRunner的Controller组件。

      Q9.什么是集合点?设置集合点有什么意义?Loadrunner中设置集合点的函数是哪个?

      A9:在性能测试过程中,需要模拟大量用户在同一时刻,访问系统并同时操作某一任务,可以通过配置集合点来实现,多个用户同时进行某操作;

      集合点可以在服务器上创建密集的用户负载,使LoadRunner能够测试服务器在负载状态下的性能。

      设置集合点函数:lr_rendezvous("Meeting");  // Meeting是集合点名称

      Q10.什么是场景?场景的重要性有哪些?如何设置场景?

      A10:场景用于模拟用户实际业务操作;

      LoadRunner中场景有手工场景和面向目标的场景。

      设置场景:选择场景类型、设置运行时设置、模拟用户数、加减压方式、持续时间,配置负载生成器。

     Q11.请解释一下如何录制web脚本?

      A11:利用Virtual User Generator录制测试脚本,录制步骤:

      1、选择合适的协议

      2、设置录制选项

      3、开始录制

      Q12.为什么要创建参数?如何创建参数?

      A12:LoadRunner在录制脚本的时候,只是忠实的记录了所有从客户端发送到服务器的数据,而在进行性能测试的时候,为了更接近真实的模拟现实应用,对于某些信息需要每次提交不同的数据,或者使用多个不同的值进行循环输入。这时,在LoadRunner中就可以进行参数化设置,以使用多个不同的值提交应用请求。

      【参数化】:使用指定数据源中的值来替换脚本录制生成的语句中的参数。

      【参数化好处】

      ● 减少脚本的大小

      ● 提供使用不同的值执行脚本的能力,更加真实的模拟现实应用。

      【参数化步骤】

      ● 用参数替换Vuser脚本中的常量值

      ● 为参数设置属性和数据源

      Q13.什么是关联?请解释一下自动关联和手动关联的不同。

      A13:【关联的定义】简单的说:就是把脚本中某些写死(固定)的数据,转变成动态的数据,或者说将前面语句的结果数据保存下来,然后在后面的语句提交请求时使用这些数据。

      【需要关联的前提条件】:

      客户端需要从服务器端返回数据中获取部分数据,并将这些部分数据处理后作为自己下一次请求的一部分发出。

      【自动关联与手工关联的不同】:自动关联是在脚本录制过程中,VuGen会根据已经制定好的规则,自动找出需要关联的值或脚本录制完成后,执行脚本一次,通过Correlation Studio自动找出需要关联的数据,并建立关联;而手动关联是需要录制两份相同业务流程的脚本,输入的数据要相同,利用WinDiff工具,找出两份脚本之间不同之处,也就是需要关联的数据,再通过web_reg_save_param函数手动建立关联,将脚本中用到关联的数据参数化。

    Q14.你如何找出哪里需要关联?请给一些你所在项目的实例。

      A14:

      1、录制两份相同业务流程的脚本,输入的数据要相同

      2、利用WinDiff工具,找出两份脚本之间不同之处,也就是需要关联的数据

      3、通过web_reg_save_param函数手动建立关联,将脚本中用到关联的数据参数化。

      示例:

      通过录制两份脚本,进行对比,可知jsessionid、sap-ext-sid、sap-wd-cltwndid、sap-wd-tstamp需要进行关联。

      Q15.你在哪里设置自动关联选项?

      A15:录制选项中进行设置,如下图所示:

      Q16.哪个函数是用来截取虚拟用户脚本中的动态值?(手工关联)

      A16:Web_reg_save_param函数主要根据需要做关联的动态数据前面和后面的固定字符串来识别、提取动态数据,所以在做关联时,需要找出动态数据的左、右边界字符串。

      1.函数原型:

      int web_reg_save_param (const char *ParamName, <List of Attributes>, LAST);

      2.参数说明:

      ParamNam:存放动态数据的参数名称

      List of Attributes:其它属性,包含Notfound、LB、RB、RelFrameID、Search、ORD、SaveOffset、Convert、SaveLen。

     Q21.你在不同的环境下如何设置迭代?

      A21:在“运行时设置”中设置,如下图所示:

      Q22.你如何在负载测试模式下执行功能测试?

      A22:在负载测试模式下,可以通过同时运行数个虚拟用户,通过增加虚拟用户数,确定服务器在多大的负载量下,仍然可以正常运行,我一般进行核心功能操作,验证核心功能运行是否正常。

      Q23.什么是逐步递增?你如何来设置?

      A23:虚拟用户数随着负载时间逐渐增加,可以帮助确定系统响应时间减慢的准确时间点。

      可以在“加压”选项卡中进行设置:如下图所示,将设置更改为:“每 30 秒启动 2 个 Vuser”

      Q24.以线程方式运行的虚拟用户有哪些优点?

      A24:以线程方式运行的虚拟用户,在默认情况下,Controller为每50个用户仅启动一个mmdrv进程,而每个用户都按线程方式来运行,这些线程用户将共享父进程的内存,这就节省了大量内存空间,从而可以在一个负载生成器上运行更多的用户。

      Q25.当你需要在出错时停止执行脚本,你怎么做?

      A25:取消运行设置中的“Continue on error”复选框。

      或者使用lr_abort函数。

      Q26.响应时间和吞吐量之间的关系是什么?

      A26:当系统吞吐量未达到系统处理极限时,系统性能不会衰减,交易平均响应时间一般也不会递增,当系统达到吞吐量极限时,客户端交易会在请求队列中排队等待,等待的时间会记录在响应时间中,故交易平均响应时间一般会递增。

      Q27.说明一下如何在LR中配置系统计数器?

      A27:以windows资源监控为例,可右键点“添加度量”,输入系统IP、选择平台类型,确定即可,详细参加LR自带操作手册^_^。

      对于监控不同类型的操作系统,需要做一些准备工作,可参见监控操作系统资源部分。

    Q28.你如何识别性能瓶颈?

      A28:性能瓶颈分为:硬件瓶颈和软件瓶颈

      性能瓶颈可以通过监控器来分析发现,这些监控器包括应用服务器监控、web服务器监控、数据库服务器监控器和网络监控器;它们可以帮助分析导致响应时间增加的原因;性能度量一般包括响应时间、吞吐量、每秒点击率、网络延迟等等。

      Q29.如果web服务器、数据库以及网络都正常,问题会出在哪里?

      A29:问题可能出在系统本身或应用服务器、或为应用编写的代码编写中。

      Q30.如何发现web服务器的相关问题?

      A30:可以利用web资源监控器发现web服务器相关问题,在场景执行过程中,可以利用监控器分析web服务器吞吐量、每秒点击率、每秒HTTP响应数、每秒页面下载数,以及web服务器硬件资源使用情况等。

      Q31.如何发现数据库的相关问题?

      A31:可以通过数据库监控器和数据资源图发现数据库相关的问题,例如在运行Controller之前,可以指定需要度量的资源,之后可以根据监控的数据,分析数据库相关的问题。

      Q32.解释所有web录制配置?

      A32:选择录制协议、设置录制选项、选择浏览器、选择存放路径、开始录制。

      Q33.解释一下覆盖图和关联图的区别?

      A33:覆盖图:合并两个图的内容,使用同一个X轴,合并图左Y轴显示当前图的值,合并图右Y轴显示被合并图的值。

      关联图:当前活动图的Y轴变为合并图的X轴,被合并图的Y轴变成合并图的Y轴。

      Q34.你如何设计负载?标准是什么?

      A34:负载测试计划多少用户数量、使用什么类型的机器、以及在什么环境下进行。主要基于两个重要的文档,任务分布图和事务信息,任务分布图告诉我们在负载时间段内,某一个事务使用的用户数,高峰使用率及低峰使用率均来自该文档;

      事务信息告诉我们事务名及优先级,在设计场景时可以参考。

      Q35.Vuser_init中包括什么内容?

      A35:Vuser_init中包含在脚本执行过程中只需执行一次的脚本。一般来说,所有需要初始化的都可以放在vuser_init里面,比如登录。

      Q36. Vuser_end中包括什么内容?

      A36:vuser_end中一般包含退出的过程,比如退出系统,主要在脚本执行完成或停止时运行,在设置了迭代次数时,vuser_end和vuser_int均只执行一次。

      Q37.什么是think time?think_time有什么用?

      A37:思考时间:用户在各步骤之间停下来进行思考的时间,由于用户基于其经验水平和目标而与应用程序进行交互操作,因此技术水平更高的用户工作起来可能会比新用户要快。

      通过启用思考时间,可以使 Vuser在负载测试期间更准确地模拟其对应的真实世界用户。

      Q38.标准日志和扩展日志的区别是什么?

      A38:标准日志:脚本执行过程中,将函数集及信息发送到日志文件中

      扩展日志:可以将详细的脚本执行信息输出到日志文件中,可以选择以下三种扩展日志信息:

      ● 参数替换:脚本运行过程中,可以将参数及当前参数值输出到日志文件中

      ● 服务器返回的数据:将服务器返回给客户端的数据输出到日志文件中

      ● 高级跟踪:所有的虚拟用户信息和函数调用输出到日志文件中

      Q39.解释以下函数及他们的不同之处。

      A39:lr_debug_message:发送调试信息到输出窗口或业务监控日志文件中

      lr_output_message:发送日志信息到输出窗口或业务监控日志文件中

      lr_error_message:发送错误信息到输出窗口或业务监控日志文件中

      lrd_stmt:赋予一个SQL语句用于处理

      lrd_fetch:获取结果集中的下一行数据

      Q40.什么是吞吐量?

      A40:客户端每秒从服务器接收到的数据,或系统服务器每秒能处理通过的交易数。一般随着虚拟用户数的增加,吞吐量也增加,说明网络带宽比较充足,反之,吐过随着虚拟用户数的增加,吞吐量比较平稳,呈直线状态,则说明网络带宽成为瓶颈,限制了数据传输。

      Q41.场景设置有哪几种方法?

      A41:面向目标的场景设置和手动场景

     

  • 测试新手2

    2007-09-21 11:27:35

    摘 要:测试人员的工作不只是要找出BUG,而且是更大程度上要提出更多的解决BUG的方法和建议。在不能提出方法和建议的时候,要尽量详细和清楚的描述BUG产生的前后所做的操作。能够重现BUG,也是测试人员的基本职责。做为一名测试人员应该注重知识的全面的学习和积累,能够很好的和开发人员、实施人员进行沟通,把好软件的质量关。
            关健词:测试人员;BUG

            “软件测试”这一职业最近几年在IT行业越来越引起大家的重视。从05年下半年即将毕业开始,我就特别关注软件测试这一行业,一直希望可以找到一份软件测试的工作。
            从06年五月份开始参加工作,第一份工作并不是软件测试而是“软件实施”或者称作“技术支持”,然后才转向了软件测试。具体的说从事软件测试这一行业才刚刚半年之久,  所以对自己的东西不能冠以软件测试行业的一些名词,只能说是一个刚入行的测试人员的一些感受和体会。
    一、 测试人员应该注重业务知识的学习
            测试的时候应该能够从用户的角度出发,能够分权限,分角色按照业务流程来进行测试。
            现在的软件开发大多都是面向对像基于WEB结构的开发,所以在测试的时候就是要分角色、分权限,根据业务知识和业务流程按照不同的用户、不同的岗位进行测试。只有这样才能够测试出来系统在权限和角色的划分中的问题。
            由于本人从事过技术支持所以更想能够有利于从用户的角度出发来对软件进行测试。其实IT行业的很多工作都是相通的。
    二、 与开发人员的沟通
            测试人员的工作不只是要找出BUG,而且是更大程度上要提出更多的解决BUG的方法和建议。在不能提出方法和建议的时候要尽量详细和清楚的描述BUG产生的前后所做的操作。能够重现BUG,也是测试人员的基本职责。开发人员经常由于工作比较紧,所以更希望测试人员能够简洁、明了的来描述BUG。如果能够给出他们合理的修改BUG的建议和方法,他们也会对测试人员刮目相看,从而建立更好的合作关系。
    三、 应该注重数据库知识和简单代码的学习
            如果能够了解到更多的数据在数据库中的存储情况,将有利于查找测试原因更有利于和开发人员的沟通。例如,在一次的测试过程中发现数据字典,增加功能无效,就是增加过的记录在页面上看不到,通过对数据库的查询发现,记录已经正确存储在数据库中,只是页面上没有表现出来。当把这一情况告诉开发人员时,开发人员很快就分析出了错误的原因,并能够在最短的时间内对程序进行修改。
            代码的学习,最基本的是可以看懂一些简单的代码。进行软件的性能测试时,需要从代码的合理性、是否造成内存的浪费、是否存在不合理的竟争等多个方面来考虑软件的性能问题。如果以后想要往白盒测试方向发展的话,那么代码的学习就是必须的了,而且还要学习大量的复杂的代码。
    四、 需要学会区分BUG 的严重程度和可修复程度
            有时由于缺少对开发知识的了解,测试出一个BUG之后,不知道修复的难易程度和产生错误的原因。开发人员会说出这个不是一个BUG,就会对这个BUG进行关闭,而以后用户会认为它确实是存在的一个BUG .盲目的听从开发人员我想也是初学测试者的一个误区。做为一名测试人员其实有时需要从经济学的角度考虑BUG的严重程度和可修复程度对整个项目所带来的影响。
    五、 测试方法和测试流程的规范
            我所在的公司项目比较多,项目比较紧。很多项目都是项目初期的时候还写测试用例进行测试方法的讨论,后来由于一些实际情况把这些用例和方法都丢弃了。这样导致在测试的过程中都是随意的进行测试。程序的有些地方都测试过很多遍,而有一些地方却没有测试到,造成了大量的重复劳动和低效率的劳动。
    六、 测试工具的学习
            参加测试半年了,测试工具的学习不是很多,一般的功能方面的测试,还是通过简单的编写测试用例来进行测试。只有在性能测试时偶尔会用到LOUNDERRUNER。
    以上是本人做测试几个月以来的一些感受,也许称不上文章但只有这样写下来我才知道,自己干测试这几个月以来学到了哪些东西。我会努力用自己的能力来赢得别人的尊重。

  • 测试新手1

    2007-09-21 11:22:43

    摘要】本文面向软件测试新手,从测试前的准备工作、测试需求收集、测试用例设计、测试用例执行、测试结果分析几个方面给出建议和方法。鉴于国内的软件开发、测试不规范的现状,本文为软件测试新手提供了若干个软件测试的关注点。

    【关键词】软件测试、测试用例、测试需求、测试结果分析

    引言

    几年前,从学校毕业后,第一份工作就是软件测试。那时候,国内的软件企业大多对软件测试还没有什么概念,书店里除了郑人杰编写的《计算机软件测试技术》之外,几乎没有其它的软件测试相关书籍,软件测试仅仅在软件工程的教材中作为一个章节列出来,因此,我对软件测试一无所知。不过,在正式走上工作岗位之前,公司提供了为期两周的系统的软件测试技术专题培训,对接下来的软件测试工作有很大的指导意义。现在,我继续从事软件测试的培训与咨询服务,在这个过程中,亲眼目睹了很多软件测试新手面对的困惑,他们初涉软件测试行业,没有接受系统的培训,对软件测试一无所知,既不知道该测试什么,也不知道如何开始测试。下面针对上述情况,给出若干解决办法。

    •  测试准备工作

    在测试工作伊始,软件测试工程师应该搞清楚软件测试工作的目的是什么。如果你把这个问题提给项目经理,他往往会这样回答: “ 发现我们产品里面的所有 BUG ,这就是你的工作目的 ” 。作为一名软件测试新手,如何才能发现所有的 BUG ?如何开始测试工作?即便面对的是一个很小的软件项目,测试需要考虑的问题也是方方面面的,包括硬件环境、操作系统、产品的软件配置环境、产品相关的业务流程、用户的并发容量等等。该从何处下手呢?

    •  向有经验的测试人员学习

    如果你进入的是一家运作规范的软件公司,有独立的软件测试部门、规范的软件测试流程、软件测试技术有一定的积累,那么,恭喜你!你可以请求测试经理委派有经验的测试人员作为你工作上的业务导师,由他列出软件测试技术相关书籍目录、软件测试流程相关文档目录、产品业务相关的文档目录,在业务导师的指导下逐步熟悉软件测试的相关工作。其实,在很多运作规范的软件公司,已经把上述的师父带徒弟的方式固化到流程中。

    如果你进入的是一个软件测试一片空白的软件企业,那么,也恭喜你!你可以在这里开创一片自己的软件测试事业,当然,前提是老板确实认识到软件测试的重要性,实实在在需要提高产品的质量。这时候,可以到国内的软件测试论坛和相关网站上寻找软件测试资源,这种情况下,自学能力和对技术的悟性就至关重要了。

    •  阅读软件测试的相关书籍

    现在,中文版的软件测试书籍越来越多,有的是国人自己写的,有的是翻译国外经典之作。可以到 www.chinapub.com 或者 www.cnforyou.com 等网络购书的站点查找软件测试相关的书籍。目前,从国外引入的软件测试书籍有很多经典之作,但是,翻译成中文后,翻译质量对阅读效果有很大的影响。

    •  走读缺陷跟踪库中的问题报告单

    如果您所在的公司已经有软件缺陷跟踪库了,无论采用的是商用工具,如 ClearQuest 、 TestDirecter 等工具,还是采用的 Bugzilla 、 Mantis 等开源工具,这都无关紧要,缺陷跟踪库中的缺陷报告单才是有价值的。缺陷跟踪库中的问题报告单是软件测试工程师工作绩效的集中体现,同时也是软件产品问题的集中体现。一般来说,缺陷报告单中最关键的几个部分包括:第一部分是发现缺陷的环境,包括软件环境、硬件环境等;第二部分是缺陷的基本描述;第三部分是开发人员对缺陷的解决方法。通过对上述缺陷报告单的三个部分作仔细分析,不知不觉你已经吸收了其他软件测试人员的工作经验,并掌握了软件产品常见的基本问题。这是迅速提高软件测试经验的好方法。

    •  走读相关产品的历史测试用例

    如果你所在的公司有测试用例管理系统,那么,走读相关产品的软件测试用例是迅速提高测试用例设计水平的一条捷径。走读测试用例也是有技巧的。测试用例写作一般会包括测试用例项和根据测试用例项细化的测试用例,下面举例说明。 “ 测试用户登录的功能 ” 是一个测试项,该测试项的目的是测试用户登录功能是否正确,是否能够完成正常的登录功能,是否能够对非法用户名和密码做异常处理等等。因此,根据该用例项,可以设计出若干个测试用例,大多数情况下,测试用例项和测试用例是一对多的关系。

    通过走读测试用例项目,你可以掌握应该从哪些功能点着手未来的测试工作;通过走读软件测试用例,你可以了解如何根据被测试的功能点开展软件测试用例的设计工作,包括如何确定测试用例的输入、测试用例的操作步骤和测试用例的输出结果等。

    总之,走读其他软件测试人员设计的优秀软件测试用例,是提高自身用例设计水平的好方法。

    •  学习产品相关的业务知识

    软件测试人员不仅要掌握软件测试技术相关知识,对产品相关的业务知识也要学习。这很好理解,如果从事财务软件的测试工作,一定要学习财务知识;如果从事通讯产品测试工作,那么相关的通讯理论知识也是必须的;如果从事银行软件的测试,银行的业务流程也是不可或缺的知识点。

    因此,在学习软件测试技术的同时,千万不要忽略产品相关业务知识的学习。如果你是一个软件测试技术专家,但是对产品业务知识一无所知,那么也只能测试出来纯粹的软件缺陷,而面对眼前出现的产品业务相关的缺陷,很可能是视而不见,如此这般,软件测试的效果会大打折扣。

    •  识别测试需求

    识别测试需求是软件测试的第一步。如果开发人员能够提供完整的需求文档和接口文档,那固然好。可以根据需求文档中描述的每个功能项目的输入、处理过程和输出,来设计测试用例。如果开发人员没有提供软件需求文档,那该如何是好?下面给出几个有效的方法:

    •  主动获取需求

    开发人员通常不会更好地考虑软件测试,如果没有开发流程的强制规定,他们通常是不愿意提供任何开发文档,即便有强制规定,需求文档也未必能够真正指导软件系统测试工作。因此,需要测试人员发挥主观能动性,与相关的软件开发项目经理和软件开发人员保持沟通,了解软件实现的主要功能是什么,并记录得收集到的信息。一般来说,开发人员即便没有提供相关需求文档,也会保存一些简单的过程文档,主动向开发人员索要这些文档,可以作为测试的参考。此外,可以与公司的技术支持人员交流,技术支持人员是最贴近用户的人,因此,通过交流可以获取第一手的用户使用感受,在测试的过程中会更加贴近用户。

    当拿到相关的资料后,从哪些方面分析需求?如何与开发人员交流需求?其实,只要把握需求分析的几个关键的点就可以解决问题:输入、处理过程、输出、性能要求、运行环境,下面针对每一个项目逐一分析:

    软件输入: 与该需求相关的一切可能输入,可以从这几方面考虑,输入来源、输入参数的数量、输入参数的度量单位、输入参数的时间要求、输入参数的精度和输入参数的有效输入范围。在测试用例设计中,这部分内容作为测试用例输入的依据。

    处理过程: 描述对输入数据所执行的所有操作和如何获得输出的过程。测试人员了解处理过程即可,在测试过程中发现 BUG 时候,如果对处理过程了解的深入,对定位问题根源有很大的帮助。

    软件输出: 描述每个需求的输出结果,包括输出的位置(如计算机显示器、打印机,文件),输出参数的数量、输出参数的度量单位、输出参数的时序、输出参数精确度、输出参数的有效输出范围、错误消息。在测试用例设计中,这部分内容作为测试用例的预期输出。

    性能要求: 与该需求相关的性能要求,比如 “ 插入 ATM 取款卡后, 3 秒钟内弹出提示用户取款的图形界面 ” 。 3 秒钟这一限制,就是对需求的基本性能要求。

    运行环境: 软件的运行所需的环境,包括硬件平台的要求、操作系统的要求、数据库的要求,以及其它相关支撑软件的要求。

    •  确认需求的优先级

    确认需求的优先级是很必要的,如果在产品进度比较紧的情况下,测试人员可以考虑优先测试优先级高的需求项,如果进度允许,那么在测试优先级低的需求项,如果进度不允许,那么就放弃测试优先级低的需求项。如果软件公司有规范的流程支撑,开发人员在提供软件需求文档的时候,应该在文档中确定需求的优先级。但是,如果开发人员连基本的软件需求文档都没有提供,又怎能指望他们确定软件需求的优先级?如果是这样,需求的优先级只能由测试人员完成了。

    •  加入开发小组的邮件群组

    测试人员需要通晓被测试产品,但是,产品在开发的过程中往往是不断变化的。如果软件开发团队有一套变更控制流程,测试人员会对产品的变更了如指掌。如果没有变更控制,那就要采用其他的土方法了。如果公司里面有自动化办公系统,也许采用的是 Lotus Notes 系统,也许使用的是 E-mail 系统,测试人员应该加入到开发人员的邮件群组中。当开发人员通过邮件讨论问题、通知召开技术会议的时候,测试人员可以及时知晓,如果必要,可以参加开发人员的技术会议。即便公司里面有了软件变更控制流程,加入到开发邮件群组也是一个很好的习惯。

    •  与开发人员为邻

    建议测试人员与开发人员为邻。我所在的测试组曾经与开发组是在相邻的写字间里,开发人员与测试人员的关系非常融洽,抛去同事关系,大家还是不错的朋友。不管开发人员有什么样的活动,测试人员都能第一时间获得信息。无论从事软件测试工作,还是从事其它的工作,与工作中上下游环节的同事保持良好的个人关系对工作有很大便利。一般的公司内部都存在部门墙,良好的人际关系是打通部门墙的手段之一。向领导建议测试人员与开发人员为邻,这很必要。

    •  测试用例设计

    测试需求收集完毕后,开始测试设计。测试用例是什么?测试用例就是一个文档,描述输入、动作、或者时间和一个期望的结果,其目的是确定应用程序的某个特性是否正常的工作。设计测试用例需要考虑以下问题:

    •  测试用例的基本格式

    软件测试用例的基本要素包括测试用例编号、测试标题、重要级别、测试输入、操作步骤、预期结果,下面逐一介绍。

    用例编号: 测试用例的编号有一定的规则,比如系统测试用例的编号这样定义规则: PROJECT1-ST-001 ,命名规则是项目名称+测试阶段类型(系统测试阶段)+编号。定义测试用例编号,便于查找测试用例,便于测试用例的跟踪。

    测试标题: 对测试用例的描述,测试用例标题应该清楚表达测试用例的用途。比如 “ 测试用户登录时输入错误密码时,软件的响应情况 ” 。

    重要级别: 定义测试用例的优先级别,可以笼统的分为 “ 高 ” 和 “ 低 ” 两个级别。一般来说,如果软件需求的优先级为 “ 高 ” ,那么针对该需求的测试用例优先级也为 “ 高 ” ;反之亦然,

    测试输入: 提供测试执行中的各种输入条件。根据需求中的输入条件,确定测试用例的输入。测试用例的输入对软件需求当中的输入有很大的依赖性,如果软件需求中没有很好的定义需求的输入,那么测试用例设计中会遇到很大的障碍。

    操作步骤: 提供测试执行过程的步骤。对于复杂的测试用例,测试用例的输入需要分为几个步骤完成,这部分内容在操作步骤中详细列出。

    预期结果: 提供测试执行的预期结果,预期结果应该根据软件需求中的输出得出。如果在实际测试过程中,得到的实际测试结果与预期结果不符,那么测试不通过;反之则测试通过。

    软件测试用例的设计主要从上述 6 个域考虑,结合相应的软件需求文档,在掌握一定测试用例设计方法的基础上,可以设计出比较全面、合理的测试用例。具体的测试用例设计方法可以参见相关的测试书籍,白盒测试方法和黑盒测试方法在绝大多数的软件测试书籍中都有详细的介绍,这里不作赘述。

    •  重用同类型项目的测试用例

    如果我看得远,那是因为我站在巨人的肩上 --牛顿。

    一般来说,每个软件公司的项目可以分为固定的几大类。可以按业务类型划分,比如 ERP 软件、产品数据管理软件、通信软件、地理信息系统软件等等;可以按软件结构来划分,比如 B/S 架构的软件、 C/S 架构的软件、嵌入式软件等等。参考同类别软件的测试用例,会有很大的借鉴意义。如果,公司中有同类别的软件系统,千万别忘记把相关的测试用例拿来参考。如果,系统非常接近,甚至经过对测试用例简单修改就可以应用到当前被测试的软件。 “ 拿来主义 ” 可以极大的开阔测试用例设计思路,也可以节省大量的测试用例设计时间。

    •  利用已有的软件 Checklist

    在上面一个小节中,按照不同的规则划分了不同的软件类型。每种类型的软件都有一定的测试规范,比如, WEB 软件系统在系统测试过程中,会有一系列的范式,比如针对 Cookie 就会有很多测试点。在设计测试用例的时候,不妨到网上去搜索相关的 Checklist ,不过国内外的网站很少有这方面的资料,即便有,也不是特别系统。可以先找一份粗糙的 Checklist ,然后,在设计测试用例的时候不断的去完善它,以作为下次测试用例设计的基础。

    •  加强测试用例的评审

    测试用例设计完毕后,最好能够增加评审过程。同行评审是 CMM3 级的一个 KPA ,如果因为公司没有通过 CMM3 级,就不开展同行评审是不恰当的。测试用例应该由产品相关的软件测试人员和软件开发人员评审,提交评审意见,然后根据评审意见更新测试用例。 如果认真操作这个环节,测试用例中的很多问题都会暴露出来,比如用例设计错误、用例设计遗漏、用例设计冗余、用例设计不充分等等;如果同行评审不充分,那么,在测试执行的过程中,上述本应在评审阶段发现的测试用例相关问题,会给测试执行带来大麻烦,甚至导致测试执行挂起。

    •  定义测试用例的执行顺序

    在测试用例执行过程中,你会发现每个测试用例都对测试环境有特殊的要求,或者对测试环境有特殊的影响。因此,定义测试用例的执行顺序,对测试的执行效率影响非常大。比如某些异常测试用例会导致服务器频繁重新启动,服务器的每次重新启动都会消耗大量的时间,导致这部分测试用例执行也消耗很多的时间。那么在编排测试用例执行顺序的时候,应该考虑把这部分测试用例放在最后执行,如果在测试进度很紧张的情况下,如果优先执行这部分消耗时间的异常测试用例,那么在测试执行时间过了大半的时候,测试用例执行的进度依然是缓慢的,这会影响到测试人员的心情,进而导致匆忙地测试后面的测试用例,这样测试用例的漏测、误测就不可避免,严重影响了软件测试效果和进度。因而,合理地定义测试用例的执行顺序是很有必要的。

    •  测试用例执行

    测试用例设计完毕后,接下来的工作是测试执行,测试执行中应该注意以下几个问题:

    •  搭建软件测试环境,执行测试用例

    测试用例执行过程中,搭建测试环境是第一步。一般来说,软件产品提交测试后,开发人员应该提交一份产品安装指导书,在指导书中详细指明软件产品运行的软硬件环境,比如要求操作系统系统是 Windows 2000 pack4 版本,数据库是 Sql Server 2000 等等,此外,应该给出被测试软件产品的详细安装指导书,包括安装的操作步骤、相关配置文件的配置方法等等。对于复杂的软件产品,尤其是软件项目,如果没有安装指导书作为参考,在搭建测试环境过程中会遇到种种问题。

    如果开发人员拒绝提供相关的安装指导书,搭建测试中遇到问题的时候,测试人员可以要求开发人员协助,这时候,一定要把开发人员解决问题的方法记录下来,避免同样的问题再次请教开发人员,这样会招致开发人员的反感,也降低了开发人员对测试人员的认可程度。

    •  测试执行过程应注意的问题

    测试环境搭建之后,根据定义的测试用例执行顺序,逐个执行测试用例。在测试执行中需要注意以下几个问题:

    全方位的观察测试用例执行结果: 测试执行过程中,当测试的实际输出结果与测试用例中的预期输出结果一致的时候,是否可以认为测试用例执行成功了?答案是否定的,即便实际测试结果与测试的预期结果一致,也要查看软件产品的操作日志、系统运行日志和系统资源使用情况,来判断测试用例是否执行成功了。全方位观察软件产品的输出可以发现很多隐蔽的问题。以前,我在测试嵌入式系统软件的时候,执行某测试用例后,测试用例的实际输出与预期输出完全一致,不过在查询 CPU 占用率地时候,发现 CPU 占用率高达 90 %,后来经过分析,软件运行的时候启动了若干个 1ms 的定时器,大量的消耗的 CPU 资源,后来通过把定时器调整到 10ms , CPU 的占用率降为 7 %。如果观察点单一,这个严重消耗资源的问题就无从发现了。

    加强测试过程记录: 测试执行过程中,一定要加强测试过程记录。如果测试执行步骤与测试用例中描述的有差异,一定要记录下来,作为日后更新测试用例的依据;如果软件产品提供了日志功能,比如有软件运行日志、用户操作日志,一定在每个测试用例执行后记录相关的日志文件,作为测试过程记录,一旦日后发现问题,开发人员可以通过这些测试记录方便的定位问题。而不用测试人员重新搭建测试环境,为开发人员重现问题。

    及时确认发现的问题: 测试执行过程中,如果确认发现了软件的缺陷,那么可以毫不犹豫的提交问题报告单。如果发现了可疑问题,又无法定位是否为软件缺陷,那么一定要保留现场,然后知会相关开发人员到现场定位问题。如果开发人员在短时间内可以确认是否为软件缺陷,测试人员给予配合;如果开发人员定位问题需要花费很长的时间,测试人员千万不要因此耽误自己宝贵的测试执行时间,可以让开发人员记录重新问题的测试环境配置,然后,回到自己的开发环境上重现问题,继续定位问题。

    与开发人员良好的沟通: 测试执行过程中,当你提交了问题报告单,可能被开发人员无情驳回,拒绝修改。这时候,只能对开发人员晓之以理,做到有理、有据,有说服力。首先,要定义软件缺陷的标准原则,这个原则应该是开发人员和测试人员都认可的,如果没有共同认可的原则,那么开发人员与测试人员对问题的争执就不可避免了。此外,测试人员打算说服开发人员之前,考虑是否能够先说服自己,在保证可以说服自己的前提下,再开始与开发人员交流。

    •  及时更新测试用例

    测试执行过程中,应该注意及时更新测试用例。往往在测试执行过程中,才发现遗漏了一些测试用例,这时候应该及时的补充;往往也会发现有些测试用例在具体的执行过程中根本无法操作,这时候应该删除这部分用例;也会发现若干个冗余的测试用例完全可以由某一个测试用例替代,那么删除冗余的测试用例。

    总之,测试执行的过程中及时地更新测试用例是很好的习惯。不要打算在测试执行结束后,统一更新测试用例,如果这样,往往会遗漏很多本应该更新的测试用例。

    •  提交一份优秀的问题报告单

    软件测试提交的问题报告单和测试日报一样,都是软件测试人员的工作输出,是测试人员绩效的集中体现。因此,提交一份优秀的问题报告单是很重要的。软件测试报告单最关键的域就是 “ 问题描述 ” ,这是开发人员重现问题,定位问题的依据。问题描述应该包括以下几部分内容:软件配置、硬件配置、测试用例输入、操作步骤、输出、当时输出设备的相关输出信息和相关的日志等。

    软件配置: 包括操作系统类型版本和补丁版本、当前被测试软件的版本和补丁版本、相关支撑软件,比如数据库软件的版本和补丁版本等。

    硬件配置: 计算机的配置情况,主要包括 CPU 、内存和硬盘的相关参数,其它硬件参数根据测试用例的实际情况添加。如果测试中使用网络,那么网络的组网情况,网络的容量、流量等情况。硬件配置情况与被测试产品类型密切相关,需要根据当时的情况,准确翔实的记录硬件配置情况。

    测试用例输入 \ 操作步骤 \ 输出: 这部分内容可以根据测试用例的描述和测试用例的实际执行情况如实填写。

    输出设备的相关输出信息: 输出设备包括计算机显示器、打印机、磁带等等输出设备,如果是显示器可以采用抓屏的方式获取当时的截图,其他的输出设备可以采用其它方法获取相关的输出,在问题报告单中提供描述。

    日志信息: 规范的软件产品都会提供软件的运行日志和用户、管理员的操作日志,测试人员应该把测试用例执行后的软件产品运行日志和操作日志作为附件,提交到问题报告单中。

    根据被测试软件产品的不同,需要在 “ 问题描述 ” 中增加相应的描述内容,这需要具体问题具体分析。

    •  测试结果分析

    软件测试执行结束后,测试活动还没有结束。测试结果分析是必不可少的重要环节, “ 编筐编篓,全在收口 ” ,测试结果的分析对下一轮测试工作的开展有很大的借鉴意义。前面的 “ 测试准备工作 ” 中,建议测试人员走读缺陷跟踪库,查阅其他测试人员发现的软件缺陷。测试结束后,也应该分析自己发现的软件缺陷,对发现的缺陷分类,你会发现自己提交的问题只有固定的几个类别;然后,再把一起完成测试执行工作的其他测试人员发现的问题也汇总起来,你会发现,你所提交问题的类别与他们有差异。这很正常,人的思维是有局限性,在测试的过程中,每个测试人员都有自己思考问题的盲区和测试执行的盲区,有效的自我分析和分析其他测试人员,你会发现自己的盲区,有针对性的分析盲区,必定会在下一轮测试用避免盲区。

    总结:

    限于文章的篇幅,本文不可能给出一个类似于 checklist 的指导性的软件测试新手入门。无论从事软件测试还是从事其它的工作,技术上的和技巧上的问题都可以通过查询相关的软件测试技术书籍获取,掌握一套基本的方法论是最重要的。以上文字,都是作者从事软件测试工作积累的经验之谈,如发现谬误之处请不吝指出。
Open Toolbar