• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

一个大型集中项目的软件性能测试实例

发布: 2009-3-17 10:00 | 作者: 不详 | 来源: 测试时代采编 | 查看: 55次 | 进入软件测试论坛讨论

领测软件测试网

从本测试用例中可以看到,测试用例已经详细定义了用例执行的先决条件、测试输入和输出,以很直观的方式给出了测试用例的各个要素。
  设计测试用例的过程中,同时需要关注的是测试数据的产生和维护。
  在上一个测试用例的例子中,“特定告警的详细内容”就是一个被选择的测试数据,如何选择具体的测试数据需要根据测试的具体需求而定,没有统一的法则。但在设计测试用例时,一定要明确每个用例的数据需求并将这种需求综合起来,并形成对测试环境的测试数据的维护策略,以便在测试用例执行时能顺利进行。
  一般而言,我们可以考虑初始测试数据的需求、考虑测试用例之间的依赖关系、记录每个用例对数据的要求,然后最终确定需要哪些测试数据和如何维护测试数据。

 4. 测试环境与测试工具
  制定了合理的测试计划、设计了满足需要的测试用例之后,我们就可以开始着手准备测试环境和考虑如何在测试中运用测试工具了。
  4.1. 测试环境
  测试环境的部署和维护是一件需要详细策划的事情,部署了合理的测试环境是测试达到目标效果的前提条件。一般来说,在考虑部署和维护测试环境时,需要考虑以下内容:
  测试网络环境
  性能测试一般都是在一个网络中进行,可能是一个单独的局域网,也可能是和生产环境相同的网络,不管实际的情况如何,我们都必须评估网络状况是否会对我们的测试产生影响,也就是说,要保证网络环境能够较好地模拟实际网络环境(包括网络状况、负载等)。当然,在我们的本次测试中,由于网络状况对我们的测试结果没有什么影响,我们的测试是在一个接近生产环境的100M局域网中进行。
  初始数据的准备
  在执行测试之前,我们需要准备足够支撑测试进行的初始数据,对本测试来说,初始数据包括静态数据、程序运行时必须的配置数据、配置文件、用户帐号信息等,建议将这部分数据按照不同的数据来源分别列出形成CheckList,这样可以避免在测试过程中出现数据准备不充分的情况。
  本测试中我使用的CheckList示例如表1所示:
  表1 本测试中使用的测试环境CheckList
序号测试环境项目来源责任人预计完成时间是否已部署 1 数据库静态数据配置项 XXXX XXXXXXX 是 2 数据库中的网元配置数据测试用例 XXXX XXXXXXX 是 3 WEB用户信息测试用例 XXXX XXXXXXX 是 4 Unix用户帐号信息配置项 XXXX XXXXXXX 否 5 模拟发送的话务数据测试用例 XXXX XXXXXXX 否 ……
…… …… …… …… …… 10 网元话务报告发送模拟程序测试用例 XXXX XXXXXXX 是 …… …… …… …… …… ……
  除了测试环境CheckList外,还需要准备一份更详细的文档,详细记录每一个环境项目的实际数据,这样的一份文档一方面可以便于对数据的审查;另一方面,在测试过程中即使人员发生变动,新参与的成员也能很快熟悉整个测试环境。
  测试数据的可恢复性
  说到测试数据,就不能不提测试数据的可恢复性。在一次测试过程中,一个用例一般都需要被多次执行,但在多次执行同一个用例时,就必须保证每次执行用例时的环境一致,因此在准备好数据,执行用例之前,必须要计划好测试完成后怎样将整个测试环境中的数据恢复,在本次测试中,我们采用的是为每个测试准备一个“回滚”脚本,该脚本用来恢复数据至测试用例执行之前。
  测试环境的时间同步
  在性能测试中,尤其需要注意的是测试环境的时间同步问题。性能测试关注的是系统的总体性能表现,这些性能表现又需要通过各个模块的响应时间来体现,在本次测试中,我们在应用程序中增加了部分测试代码,测试代码通过记录关键操作的时间来完成性能指标的记录。
  基于以上的要求,整个测试环境中各台计算机的时间同步就非常重要了,如果时间不同步的话,就会造成测试结果的不准确,尤其在本次测试中,部分测试指标要求到秒级,因此,我们必须要对整个环境进行一个精确的时间同步。
  本测试的测试环境包括7台HP小型机、两台WEB服务器、一台Windows域服务器和15台加入域的PC机,在时间同步方案上,我们以一台小型机为主时间服务器,采用Windows域服务器作为Windows机器的时间服务器(域内的客户机可以实现与域服务器的自动的时间同步),利用NTP协议在Unix主机和Windows域服务器之间进行时间同步,之所以采用NTP协议,主要是因为NTP是在Internet和Unix系统上被广泛采用的协议,在Windows平台上,也有基于NTP协议的开源软件(NetTime)可以使用。
  4.2. 测试工具
  测试工具的评估和选择是测试开始之前必须进行的工作。在机械工业出版社出版的《软件测试自动化-引入,实施和管理》书中对测试工具的评估选择、应用有详细的描述,个人觉得这本书对于测试工具应用部分的说明非常不错,强烈推荐这本书给对这部分感兴趣的朋友。
  本测试没有使用商业测试软件,主要原因在于以下几点:
  1、 测试时间资源:本测试安排的时间比较紧迫,没有足够的时间用商业测试工具进行录制脚本、脚本调试维护等一系列的工作;
  2、 测试工具的学习曲线:商业测试工具的应用需要一个学习曲线,整个测试团队中只有一名成员具有足够的技能,这是限制商业测试工具应用的极大障碍;
  3、 费用:商业测试工具的授权费用是不能不考虑的,在我们这样一个项目中(客户端数量较大),商业测试工具的授权费很高,在合同中没有包含这部分费用的情况下,由项目自身承担这部分费用,显然是不可能的;
  4、 灵活性:测试实施过程中可能需要修改测试脚本,考虑到1、2的原因,可能通过Perl等脚本语言编写的脚本更能满足灵活性的要求。
  最终在本项目中,我们采用了自行开发的测试适用本项目的测试工具,这些测试工具中的部分具有可重用性,部分是本项目专用的测试工具,实现测试工具的最终投入为2.4人月,其中可被重用的工具投入为1.4人月,不能重用的测试工具开发投入为1人月,从测试效果来说,这个投入是绝对值得的。
  关于本测试中使用的自行开发的测试工具在本文中不准备进行详细描述,需要说明的内容包括如下几点:
  1、 测试工具的需求需要根据测试需求来确定:在本项目中,主要是通过测试用例来确定,根据用例描述的场景确定需要的测试工具。例如,在本文的上篇中作为例子的测试用例,从该用例的“已通过模拟程序产生每秒300条告警的告警数据”描述中,我们可以明确需要一个能产生每秒300条告警数据的模拟程序,从“所有告警产生和呈现时间记录在本地日志文件中”描述,我们可以明确该模拟程序还必须能够记录告警产生时间。当然,对测试工具的需求确定还必须结合其他用户的需求。在本测试中,与该用例相关的测试工具被实现为一个可以根据用户给定的文本文件发送告警数据的工具,通过参数可以指定工具发送告警的间隔以及是采用随机还是定时的方式发送;
  2、 测试工具的实现语言需要根据实际情况确定:测试工具的实现语言主要看项目成员对语言的熟悉程度以及是否需要在测试过程中修改测试工具。如果预计到在测试中需要修改测试工具,建议采用脚本语言来实现测试工具,例如在该测试中,我们的部分测试工具是采用C++语言实现的,部分测试工具是采用Perl实现的;
  3、 测试工具本身也是配置项的一部分:测试工具也需要纳入配置管理的范围,一方面,测试工具的发布和更新必须按照项目的配置管理流程实现;另一方面,测试工具的开发过程必须符合项目的开发过程。为避免测试工具在使用中带来混乱,这一点是必须要注意的;
  4、 测试工具的开发需要从实际角度出发:千万不要尝试在一个项目中开发出一个强大和完善的测试工具,测试工具的开发要从实际出发,能满足实际测试需求的测试工具就是好的测试工具。如果真的觉得有需要对测试工具进一步完善以利于重用,那也请在项目完成后再专门作为一个项目来专门完善测试相关的测试工具。
  我们在把测试工具和测试环境同时包含在这一章中,最主要的原因是因为部署后的测试工具也属于测试环境的一部分,测试工具的部署和维护也是测试环境部署和维护的一部分。
  上面已经提到,测试工具本身也是配置项的一部分,测试工具的发布需要按照项目的配置管理流程实现,因此,对测试工具在测试环境上的部署需要按照配置管理流程来管理,同时,这也是测试环境部署和维护的一部分。在本测试中,要求测试工具来源于配置项的发布版本,对测试工具的变更需要进行记录并纳入配置项变更管理,唯一不同的是这个配置项的变更的发起人是测试工程师,审核人是测试负责人。
  5. 测试实施
  测试计划、测试用例、测试环境都完成之后,就可以开始对测试进行实施了。测试实施在整个测试过程中并不是消耗资源最多的,有了详细的测试用例之后,其实测试实施是一件“照葫芦画瓢”的简单工作。
  本章主要探讨性能测试实施过程中需要记录的信息(这部分内容其实应该是在测试计划和测试用例中确定,但为了整个描述的连贯性,我把这部分内容安排在本章)。
  本测试实施记录的内容包括如下:
  Unix主机
     CPU使用率;
     内存使用状况;
     Disk I/O;
  数据库服务器
     Cache命中
     Long Transaction
     索引使用情况
     数据库进程CPU使用状况
     数据库内存使用状况
     数据库连接数量
  应用服务器
     MQ的主要进程内存使用状况
     MQ的进程数量
     TEMIP主要进程内存使用状况
  WEB服务器
     进程的CPU和内存使用状况
     Cache命中
     平均响应时间等
  对这些内容的记录需要通过操作系统提供的性能观测工具或是应用自身提供的性能观测工具:
  1、 在Unix环境中,可以用top、vmstat、iostat程序观察需要记录的内容,更好的方法是自己写一个简单脚本,把时间信息和输出信息一同存入本地日志文件。在本测试中,我们用Perl和Unix的Shell脚本实现了对输出信息的抽取和格式化,生成的记录文件可以方便地被Excel等程序进行处理;
  2、 对于数据库环境,可以用Oracle自带的性能监测工具或是第三方软件(如TOAD等)观察性能并存成文件;
  3、 对WEB服务器,可以用WEB Server自带的性能监测工具监测其性能。
  6. 测试结果分析与测试报告
  通过测试实施取得了数据之后,最后一步就是对测试结果进行分析了。对测试结果进行分析我个人认为是比较需要经验的一个步骤。要对结果进行分析,首先需要非常明确获取的每个数据的意义,然后根据数据测试目标,对数据进行详尽分析,分析的目的是用数据说明测试目标。
本项目中使用的测试结果分析工具包括Excel、UltraEdit、vi和数据库查询工具等,vi和UltraEdit用来编辑测试过程中形成的记录了测试结果的文本文件,数据库查询工具用来从数据库中获取测试结果,Excel用来对初步处理后的测试结果进行分析,Excel工具能导入具有一定格式的文本文件,并能根据数据生成各种统计图形,在本测试中是主要的测试数据分析工具。当然,某些特殊的测试结果可能需要自行开发部分工具进行数据提取和处理。
  测试报告至少应该包括以下几部分的内容:
  1、 测试环境描述;
  2、 测试准备工作描述:在这部分中需要详细说明测试方案,因为测试报告是要与用户讨论,经用户签字认可的,因此,在报告中详细列出测试前的准备工作,包括测试方案、测试数据准备以及测试中记录的数据、测试工具和脚本部署等,个人的感觉是这部分具体根据用户的要求吧,在本测试中,用户要求我们写的非常详细;
  3、 测试范围及内容:对本次测试能覆盖的范围进行说明;特别是要说明不包括在本次测试中的内容,以防以后有人说出“不是测试过了吗?怎么还有XXXX问题”这样的话:)
  4、 测试结论:测试结论这部分需要详细说明本测试的结论,包括测试用例执行情况统计、测试是否通过、测试中发现问题的处理方式和方法;
  除此之外,还可以在测试报告中包括建议与计划,用来说明该测试的后续工作安排和计划;将测试用例的执行情况和每轮测试执行的详细记录作为附件附加到测试报告中。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

33/3<123

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网