发布新日志

  • 测试人员应该学习的LINUX知识

    2009-09-11 15:24:33

    测试人员需要掌握的IT“基本功”包括操作系统方面的一些基本知识,随着LINUX的普及,在未来IT行业里LINUX的应用将取代现在的window操作系统。

    学习的主要目的:测试环境的搭建

     

    学习内容包括:

    Linux安装

    网络配置

    基本命令的使用

    Shell脚本编写

    常用软件安装、WEB服务器搭建、应用服务器搭建

    Linux下的编程知识:ShellCPerlPythonPHP

  • [转] 网站测试工具大全

    2009-09-11 15:22:10

    你是否肯定你的网站完全兼容各大浏览器?是否知道多少秒可以打开你的网站? 是否可以自信地说你的网站根本就没有打不开的时候? 是否……
    虽然它看似不重要,但这些在一定程度上也对你的网站的访问量产生了影响 。这里列出了一份31 个免费在线[url=javascript.:;]测试[/url]工具,你可以通过这些工具来测试你的网站,并根据结果对你的网站进行修改。

    网站代码验证没人可以细致到保证自己的网站代码都是正确的,你可以通过以下测试来验证网站代码是否正确。

    1 .WDG HTML Validator一个很好的工具,能找出网站语法错误的地方,并标注出来,也可选择对网站上单独的每一页进行单页分析。(强烈推荐

    2 .W3C Markup Validation Service对 HTML 和 XHTML 都能进行代码测试,自称是互联网络上第一个(也是使用者最多的)的 HTML 验证工具。

    3 .W3C CSS Validation Service用于验证 css 源代码,能够标注出不好的 css 代码设计。例如:“Same colors for color and background-color in two contexts”。

    4 .RUWF XML Syntax Checker用于查找 XML 文件的错误。

    5 .W3C Feed Validation Service用于查找 Atom 和 RSS feed 中的错误语法。(这个我经常用到

    6 .W3C Link Checker用于搜寻查明你网站内的所有链接里是否有断链。(强烈推荐

    7 .Juicy Studio Link Analyser测试网站内的链接的 URL 是否存在死链,与 W3C Link Checker 很类似。
    网站的使用性
    我们常常看到网站设计者把重点放在怎网站的吸引力上,而完全不考虑会不会影响来访者的使用,一个浏览难度很大的网页是注定要失败,要让你的来访者方便的得到他要的信息(从而成为重复访客),你的网站应当遵循 WCAG section 508 易用性规则。

    8 .Watchfire WebXACT所有严谨的设计师和开发者都必须使用的工具,它会生成一个非常详尽的报告书,包括:网站质量,易用性和隐私等。(强烈推荐

    9 .ATRCWebAccessibility Checker测试网站的 WCAG 2.0 Level2 兼容性,它会生成一份报告,提出一系列建议,如:如何提升页头,链接,数据,图表和文字的访问速度。

    10 .WAVE 3.0 Web Accessibility Tool高度可定制的工具,它采用了图形化模型展示网站兼容性问题( WCAG 1.0 and section 508 )。(强烈推荐

    11 .TAW Web AccessibilityTest测试网页是否存在冲突( WCAG 1.0 兼容性 ),通过图形模式生成一份依据 wcag 优先模式为基础的网站修改建议。

    12 .HiSoftware CynthiaSays portal采用了非常严格的规则来测试网页( 根据 section 508 和 WCAG 1.0 规则 ),生成的报告也极为详细( 详细到很难看懂 )。

    13 .HERA Accessibility testing with Style使用一种极为复杂但容易理解方式指出网页的 wcag1.0 兼容性问题。

    14 .Juicy Studio CSS Analyser进行了色彩对比测试,以确保你的网站的色调会符合 WCAG 1.0 的要求。

    15 .Juiciy Studio Readability Test分析你网站上的文字是否有语法错误或拼写错误等问题,容易让人理解不( 根据 the Flesch Reading Ease 和 Flesch-Kincaid grade level algorithms 规则 )。( 适合英文网站使用 )
    网站的速度
    打开你的网站的速度快慢,是来访者会不会再次访问网站的关键因素,在一般情况下,一个网络不是很快的来访者是不愿意访问一个充满着图片、flash 动画、多媒体文件的网站。为了使你的网站覆盖人群的范围最大化,你必须优化你的网站,使它的打开速度尽可能的快。

    16 .Web Page Analyzer from Website Optimization一个很好的工具,它在分析完一个网页后,会为减少加载时间提出优化建议,着重优化物体的数目,图片和网站的总体大小。(强烈推荐

    17 .WebSitePulse Test Tools有一系列的工具来确定网站的加载速度和主机信息。

    18 .Internet Supervision Url Check从世界各地不同的服务器来测试你的网站的加载时间,用于确定是不是各地的来访者都能顺利快速的打开你得网站。
    浏览器模拟工具
    这是一个普遍的问题,因为现在有着很多的[url=javascript.:;]操作系统[/url]和浏览器,你得网站必须得兼容它们,但这绝不是一件容易的事。通过下列工具,你可以了解你得网站在各种浏览器上的显示效果。

    19 .Browsershots能给出你的网站在不同浏览器下显示效果的截图,包括:Firefox 和 Internet Explorer ( [url=javascript.:;]Windows[/url] )、Firefox 和 Safari ( Mac OS X )、Iceweasal 和 Konqueror ( [url=javascript.:;]Linux[/url] ),但是结果要在 1 - 3 小时后才能出来。

    20 .IE NetRenderer实时生成你的网站在 Internet Explorer 5.5 、6.0 和 7.0 下的截图。

    21 .MobiReady Report分析使用手机访问网页的兼容性问题,会生成一份详细的报告,并提供了在两种不同类型的手机浏览器上你得网站可能显示的样子。
    搜索引擎优化 (SEO)
    一个网站,如果对搜索引擎有着比较好的友好度,一定会比较有竞争力。

    22 .UrlTrends会显示网站的访客是如何通过搜索引擎来到你的网站,还有各个流量是多少。这些数据是包括 Google, Yahoo, MSN, Alexa, AlltheWeb, AltaVista 和[url=javascript.:;]其他[/url]一些网站。(强烈推荐

    23 .iWEBTOOL Backlink Checker一个很好的工具,它能找出有什么站点链接到你的站点,那些站点是什么类型的站点。

    24 .iWEBTOOL Multi-Rank Checker显示你网站的 Alexa 和 Google PageRank 数值。

    25 .Microsoft adCenter Labs: Advertising and Keyword Research Tools一个极好的工具,用于分析和预测你网站的来访者和市场。(强烈推荐

    26 .Domain Tools Whois lookup一个 WHOIS 网络工具。

    27 .SEO-Browser可以让你看到在搜索引擎眼里一样的网站( 去掉所有的”美丽”配件 )。

    28 .SEO Workers SEO Analysis Tool非常有用的工具,分析了网站上的各种分类特征,包括 meta. 标签、关键字密度及加载时间。(强烈推荐

    29 .Seekport Seekbot可以分析网站的数据和内容,以得出搜索引擎会如何有效的解释分析的网站。

    30 .SEO Chat SEO Tools用以分析网站 Google adsense 盈利潜力,关键字密度,Meta. tag 等等……

    31 .Marketleap Search Engine Marketing Tools用来分析网页,让你知道你的网站检索、设定的关键字好不好。

    原文:avivadirectory.com译者:peterzsk译文原地址:http://zsk.akaka.com.cn/2007/06/31-free-tests-online/
  • LoadRunner多台计算机对同一服务器加压(转)

    2007-10-10 14:41:10

    有两种情况
    第一种:

    如果是同一个用例 单机达到本机硬件承受能力极限或者许可证数量的极限 可以分成多个负载生成器统一加压.


    第二种:

    如果是一个包含多用例的综合场景 可以用多个负载生成器加压 也可以单独在各测试机上独立执行单个用例,加压时间不一定同步,有可能需要看其他机器的测试结果来决定加压的力度和时机

  • 一个软件测试工程师的学习体验[转]

    2007-07-04 09:15:08

    我最初参加测试工作的时候,不知道什么是软件测试,集成测试和系统测试的概念经常混淆, CMM 是什么就更加不知道了。那时候最简单的开关机也是通过直接拔插电源完成,安装系统对我来说简直是有史以来人类的最高技能,对于那些拿着螺丝刀安装机器的人就认为是宇内超级高手,身具杀人于无形之绝世秘技。拿破仑说不想当将军的士兵不是好士兵,我最初的梦想就是想成为软件测试的高手,傲视天下。所以不断偷师,总结经验,自认为掌握了成为高手的几个秘技,这几年混迹 “ 江湖 “ 还算无往而不利。不敢独享,望与吾辈测试人员切磋,早日总结成功密技之大成,助新进人员早日入门,也算不愧对东北活雷锋的称号。

    第一招 学会利用网络

      刚参加工作面对浩瀚的网络世界,当时如刘姥姥进大观园,什么都新奇,什么都想要,从网上下载很多源程序的代码,软件技术文档之类,恨不得把所有的好东西收集到手中,其实有些在他人看起来就是垃圾一堆。当时觉得有了这些 “ 武林秘籍 “ ,成为高手指日可待。最初参加工作由于自己工作努力有幸转为开发,加入项目组后我的习惯还是没有改,反而变本加厉,手中的资源更加多,上网的时间更加频繁。

      一次项目经理分配任务,觉得依靠手中的秘籍加上自己的 “ 聪明才智 “ 很快会完成,不料短短的时间,所有的一切变成了马奇诺防线。解决问题很慢,思路不清晰,项目经理在对我施压的过程中教会了我终身难忘的一招,学会利用网络寻找要解决问题的答案,从此 Google 成了我的最爱,关键字成了我变化的招数。在软件测试工作中,他帮我解决了很多疑难问题,解答了很多令我迷惑的地方。也是我帮助测试同行解决问题手段之一,很多软件测试新手,甚至老手都没有意识到自己手上就握有 “ 无敌秘籍 “ ,所以只要你耐心找,答案就在身边。

    这里总结一下利用网络搜索引擎的技巧:

    组合搜索

      每次搜索某个文件,如果只给出一个单词进行搜索,经常会出现成千上百万计的匹配网页。然而如果再加上一个单词,那么搜索结果会更加切题。

    选择表述内容的词组

      一般我在网页搜索引擎的时候,选择一些可以表达我要查找内容的关键词组,用来缩小搜索范围,从而找到搜索结果是最好的办法。运用词组搜索涉可以先先简单地输入一个问题作为词组搜索,如果仍然找不到合适的,那就用多个可以表达要查询内容的关键字进行查询。

    定位信息来源

      有的时候用词组搜索不到或者无法准确表达所需信息。可以用另一种方法直接到信息源,就是直接到到提供某种信息的站点去。可以用公式 “www. 公司名 .com” 去猜测某一组织的特点。从而得到所要搜索的信息的主要词组

      其实网络上还有很多关于搜索技巧的文章,大家可以自行学习。千万要记住搜索引擎是帮助你成功的有力武器。

    第二招 学会动手

      参加软件测试工作后,随着工作经验的增长自我感觉越来越好。在公司里也逐渐受到同事领导的重视,一次针对公司的新的软件功能进行测试的时候,像往常一样 “ 随手 “ 测试出了几个 Bug ,然后 “ 仔细 “ 的填写了 Bug 单(这个 Bug 的现象已经出现了很多次了)。这时候测试经理走过来,重新复查了一下填写的 Bug 。他在重现我的 bug 的过程中,简化了我的输入变化, bug 神奇的又出现了,同样的现象,他关闭软件重新变化输入,扩展出 10 几个变化后,软件不动了,内存不断上升。终于他找到了产生软件的 Bug 的原因,然后对我说 “ 寻找 Bug 要准确定位,我们开发团队是一个整体,时间是等量的,时间不在你身上浪费,就是在他身上浪费。如果测试人员每次发现的 bug 描述不清楚,并且多个问题潜在的错误原因是一个,虽然操作可能稍微有些变化。这样开发人员在重现 bug 的时候他要调试跟踪判断,很花费时间,而且效率低。如果测试人员发现 bug 的时候多动手可以更加准确的定位 bug 步骤和原因,给开发人员最精确的步骤和准确的描述,这样整个团队才能高效,所以需要大家协作!。 “ 。

      在以后的日子里,每次解决问题的时候我都记得多试验几次,多尝试。网上很多朋友还有同事问我问题的时候,其实他们只是万里长征就差一步,只要再多动手实验一次就可以达到目的了。所以多动手,多尝试。

    第三招 思考自己所作的

      刚开始入行的时候,总是思考如何做好软件测试。认为公司的测试流程混乱总是很郁闷,认为自己学不到东西,如何才能测试好产品,常说心动不如行动,以前看到古龙小说中经常出现的场景无名小子不断挑战高手,总结积累。我总结了有些经验是实战中得到的,所以不断尝试引入新的测试流程然后评估,这个过程虽然很痛苦,但是从中积累了不少经验。这段时间让我学习到了很多东西,接触了 ISO,CMM ,测试管理工具,自动化工具(因为公司不正规给了我很多学习的机会,后来到了比较大的软件公司后,以前的经历给了我更多的发展机会,因为大公司非常正规了,公司内部人员分工明确,所以能力的锻炼反倒少了)。由于工作中经常写报告反倒养成了总结教训的习惯,因为纸面上的东西是永远也忘不掉的。在写的过程中可以不断补充扩展,整个过程是思想升华的过程,当年达摩面壁九年就是融会贯通的典型例子,如果他不是有个思考的过程,他也不能成为一代大家。如果后来不时有人把他的绝技记录下来,也就不能有后来的少林寺七十二绝技。

      所以善于思考,总结经验,也是成为高手之路的不二法决。

    第四招 学会利用论坛资源

      其实测试新兵和测试高手之间的区别,往往是不会利用现有资源。在论坛中我们会看到很多新手不断的提问,但是有很多问题其实都是已经别人提过了,或者已经有解决方案的。所以经常会看到 “测试高手“的身影,并且不提问题,而且还能“锄强扶弱“,是测试新丁的救命稻草。好像是高手们无所不能,其实摘掉这层耀眼的光环,他们并没想像得那么厉害,只不过通过自己的搜索找到的答案,然后帮助其他人。当然也有很多人都是通过自学,然后在论坛中交流得到了很多经验,高手其实也是因为善于思考问题,亲自动手解决问题。所以动手和利用论坛资源的过程中他们也在不断提高。

      很多时候看到论坛中有人提问,问题描述不清,很多人看了很困惑。发贴题目动不动请高手帮忙,救命之类的,好像天下大乱,世界末日。虽然这个题目很招人,但是无法让那些想帮助你的人帮你,因为题目不清晰,而且高手字样吓阻了很多人。其实问问题也是个思路整理的过程,描述清晰,让人理解清楚,才能望文知意知道你的当前发生问题的环境,才能让那些想帮你的人解决问题,否则给人无从下手的感觉,解决问题效率不高。

    第五招 学习和你所测试的软件产品相关的知识

      要想成为好的测试人员,还要了解你要测试的软件的相关知识。要了解软件产品的架构是什么样的。要了解软件的市场需求,在接触软件之初要可以多看看用户的反馈信息,这些才是用户最关心的,也是你在测试中需要注意的问题,满足客户是最大的需要。但是了解软件需求之后要学会要多读些软件系统的技术文档,软件设计文档,这些文档可以帮助你了解产品如何工作。还有多看看公司 Bug 库中的问题,这些存在的问题可以帮助你了解软件产品那些地方存在缺陷,软件系统那些地方会出现错误。软件是运行在一个大环境中,如果对系统不熟悉,那么有些问题你不能从一个更广阔的层面考虑,学习操作系统的知识,有助于你发现缺陷,定位问题更加准确。比如软件运行在 Windows 或者 Linux ,如果你不懂操作系统,你就无法建立测试环境,有些时候时候软件的组件发生问题,就是你系统配置造成的,对系统不熟悉,你会把外在原因归结为软件本身。所以要学习关于和软件系统相关的知识,比如编程,网络,数据库等。不一定你要学习到多好的程度,只是通过这些扩展的知识面,你可以在发现问题,解决问题上不会局限在狭小的圈子里。

      和一切相关的人员交流,不同的交流渠道,获取消息是不同的,角度也不同。和客户交流,你会在测试中从客户的角度发现问题;和开发人员交流,你会了解开发人员怎么实现软件功能的;和项目管理人员交流,你会知道开发进度以及遇到的困难。
  • 软件测试常用单词

    2007-07-03 11:36:44

    软件测试常用单词:
    1.静态测试:Non-Execution-Based Testing或Static testing
        代码走查:Walkthrough
    代码审查:Code Inspection
    技术评审:Review
    2.动态测试:Execution-Based Testing
    3.白盒测试:White-Box Testing
    4.黑盒测试:Black-Box Testing
    5.灰盒测试:Gray-Box Testing
    6.软件质量保证SQA:Software Quality Assurance
    7.软件开发生命周期:Software Development Life Cycle
    8.冒烟测试:Smoke Test
    9.回归测试:Regression Test
    10.功能测试:Function Testing
    11.性能测试:Performance Testing
    12.压力测试:Stress Testing
    13.负载测试:Volume Testing
    14.易用性测试:Usability Testing
    15.安装测试:Installation Testing
    16.界面测试:UI Testing
    17.配置测试:Configuration Testing
    18.文档测试:Documentation Testing
    19.兼容性测试:Compatibility Testing
    20.安全性测试:Security Testing
    21.恢复测试:Recovery Testing
    22.单元测试:Unit Tes
    23.集成测试:Integration Test
    24.系统测试:System Test
    25.验收测试:Acceptance Test
    26.测试计划应包括:
    测试对象:The Test Objectives,
    测试范围: The Test Scope,
    测试策略: The Test Strategy
    测试方法: The Test Approach,
    测试过程: The test procedures,
    测试环境: The Test Environment,
    测试完成标准:The test Completion criteria
                              测试用例:The Test Cases
                              测试进度表:The Test Schedules
                              风险:Risks
                              Etc
    27.主测试计划: a master test plan
    28.需求规格说明书:The Test Specifications
    29.需求分析阶段:The Requirements Phase
    30.接口:Interface
    31.最终用户:The End User
    31.正式的测试环境:Formal Test Environment
    32.确认需求:Verifying The Requirements
    33.有分歧的需求:Ambiguous Requirements
    34.运行和维护:Operation and Maintenance.
    35.可复用性:Reusability
    36.可靠性: Reliability/Availability
    37.电机电子工程师协会IEEE:The Institute of Electrical and Electronics Engineers)
    38.要从以下几方面测试软件:
    正确性:Correctness
    实用性:Utility
    性能:Performance
    健壮性:Robustness
    可靠性:Reliability

    关于Bugzilla:
    1.Bug按严重程度(Severity)分为:
    Blocker,阻碍开发和/或测试工作
            Critical,死机,丢失数据,内存溢出
            Major,较大的功能缺陷
            Normal,普通的功能缺陷
            Minor,较轻的功能缺陷
    Trivial,产品外观上的问题或一些不影响使用的小毛病,如菜单或对话框中的文字拼写或字体问题等等
        Enhancement,建议或意见
    2.Bug按报告状态分类(Status)
      待确认的(Unconfirmed)
          新提交的(New)
        已分配的(Assigned)
      问题未解决的(Reopened)
          待返测的(Resolved)
          待归档的(Verified)
          已归档的(Closed)
    3.Bug处理意见(Resolution)
                  已修改的(Fixed)
    不是问题(Invalid)
                  无法修改(Wontfix)
        以后版本解决(Later)
              保留(Remind)
                    重复(Duplicate)
              无法重现(Worksforme)
  • 英语聊天100句。

    2007-07-03 11:26:53

    英语聊天100句流行语

    英语聊天100句流行语

    1. How are you doing?(你好吗?)

      2. I'm doing great.(我过得很好。)

      3. What's up?(出什么事了/你在忙些什么/怎么了?)

      4. Nothing special.(没什么特别的。)

      5. Hi. Long time no see.(嗨,好久不见了。)

      6. So far so good.(到目前为止,一切都好。)

      7. Things couldn't be better.(一切顺利。)

      8. How about yourself?(你自己呢?)

      9. Today is a great day.(今天是个好日子。)

      10. Are you making progress?(有进展吗?)

      11. May I
    have your name, please?(请问尊姓大名?)

      12. I've heard so much about you.(久仰大名。)

      13. I hope you're enjoying your staying here.(希望你在这里过得愉快。)

      14. Let's get together again.(改天再聚聚。)

      15. That's a great idea!(好主意!)

      16. Please say hello to your mother for me.(请代我向你母亲问好。)

      17. I'm glad to have met you.(很高兴遇到你。)

      18. Don't forget us.(别忘了我们。)

      19. Keep in touch.(保持联系。)

      20. I had a wonderful time here.(我在这里度过了难忘的时光。)

      21. Have a nice weekend.(周末愉快。)

      22. Same to you.(彼此彼此。)

      23. Nice talking to you.(很高兴与你聊天。)

      24. Take care of yourself.(自己当心/照顾好你自己。)

      25. Thank you for everything.(谢谢你的多方关照/你为我所做的一切。)

      26. Thank you all for coming.(谢谢光临。)

      27. I appreciate your help.(我感谢你的帮助。)

      28. You're always welcome.(别客气/不用谢)

      29. Forget it.(算了吧)

      30. It was my pleasure.(不用谢。)

      31. I made a mistake.(我弄错了。)

      32. I'm terribly sorry.(实在抱歉。)

      33. I must apologize!(我必须道歉!)

      34. I feel terrible.(我感觉糟透了。)

      35. It's not your fault. (那不是你的错。)

      36. Sorry to bother /have bothered you.(抱歉,打扰一下/打扰你了。)

      37. What do you do?(你做什么工作?)

      38. How do you like your new job?(你觉得你的新工作怎样?)

      39. I like it a lot.(我很喜欢。)

      40. I like reading and listening to music.(我喜欢阅读和欣赏音乐。)

      41. What's wrong?(怎么回事?)

      42. What happened?(发生什么事了?)

      43. I hope nothing is wrong.(我希望一切顺利。)

      44. I know how you feel.(我知道你的感受。)

      45. Sorry to hear that.(听到这个消息我很难受。)

      46. Come on, you can do that.(来吧,你能做到的。)

      47. Use your head.(动动脑筋。)

      48. You did a great job.(你赶得很好。)

      49. That's very nice of you.(你真好。)

      50. I'm very proud of you.(我为你感到自豪。)

      51. I like your style.(我喜欢你的风格。)

      52. I love you guys.(我爱你们。)

      53. How do I look?(我看起来怎么样?)

      54. You look great!(你看上去棒极了!)

      55. That's fantastic!(那真是棒极了!)

      56. That's really something.(那真是了不起!)

      57. It's a pleasure working with you.(与您合作很愉快。)

      58. Congratulations on you success.(祝贺你的成功。)

      59. I'd like to propose a toast.(我提议干杯!)

      60. Are you married or single?(你结婚了吗?)

      61. I've been dying to see you.(我非常想见到你。)

      62. I'm crazy about you.(我为你疯狂/痴迷/神魂颠倒。)

      63. I love you with all my heart.(我全心全意爱你!)

      64. You're everything to me.(你是我的一切!)

      65. You're in love!(你恋爱了!)

      66. I'm tired of working all day.(整日工作使我厌烦。)

      67. You work too much.(你做得太多了。)

      68. Money will come and go.(钱乃身外之物。)

      69. Are you crazy?(你疯了吗?)

      70. Have you got it?(明白了吗?)

      71. I've got it.(我懂了。)

      72. I can't afford that.(我承担/买不起。)

      73. I did it, I'm so happy now.(我做到了,现在我很满意。)

      74. I don't care.(不关我的事/我不管。)

      75. I don't think so.(我不这么想/我看不会/不行/不用。)

      76. I guess so.(我想是吧。)

      77. I have no other choice.(我别无选择。)

      78. I will do my best!(我会尽力的!)

      79. I mean it.(我是认真的。)

      80. I'm so scared.(我怕极了。)

      81. It's hard to say.(难说。)

      82. It's a long story.(说来话长/一言难尽。)

      83. It's a small world.(世界真小。)

      84. It's against the law!(那是违法的!)

      85. It's a good opportunity!(好机会!)

      86. It's dangerous!(危险!)

      87. May I help you?(我能帮忙吗?)

      88. No doubt about it.(毫无疑问。)

      89. That's bullshit!(废话!)

      90. Think it over.(仔细考虑一下。)

      91. Time will tell.(时间会证明的。)

      92. What a surprise!(太令人惊讶了!)

      93. Whatever you say!(随便你!)

      94. You are the boss!(听你的!你说了算!)

      95. You have my word!(我保证!)

      96. Tough job, tough day, tough world. Life is not always sweet. That's life!

      (艰苦的工作,艰难的日子,不幸的世界。生活并不总是甜蜜的。这就是生活!)

      97. I need some sleep.(我需要睡眠。)

      98. Take it easy.(别紧张。)

      99. Just relax.(放松一下。)

      100. Zip your fly!(闭嘴!)
  • 想过好日子,不想破产的中国人,都好好读一次这篇文章吧!

    2007-07-02 17:40:01

    股市你挣了钱,楼市你挣了钱。请先不要乐,你只是在为自己挖坑。说白了,你就是你的掘墓人。

    有钱,大家谁不盼望,但,钱是相对的,也是最靠不住的。东南亚金融危机时,有多少人哭着喊着卖出本币,兑换美元。
    所以你今天挣了钱,你只不过是在享受摇头丸带来的快感。还是想想如何配合国家,做一些保住胜利果实的事情吧.
    美金融战争早已开打,中国处境艰难!

       现在很多国人都很关心人民币升值这个话题,但又不了解美国迫使人民币升值的真正意图何在,现在鄙人就此浅薄的发表一下我的个人看法!
      相信大家对80年代的“日本经济衰退”和90年代的“亚洲金融风暴”及“香港的香港金融保卫战”吧!也许有人会说那是国际投机集团“美国索罗斯财团”搞的,但是,你就没有想过它背后难道就没有美国政府的支持了吗?下面,我仔细分析一下这些事件的前因后果你就会明白了。
      从1980开始的,特别在1990年至1995年,第一名的美国和第二名的日本之间的GDP差距是多少?日本GDP超过美国GDP的一半!这也是目前为止唯一一次其它国家和美国的经济差距缩小到一半的程度。日本人在欢呼:只要超过美国的GDP,日本就可以恢复“正常国家”了!美国人没有吭声。
      按理说,日本还是美国的盟国,其经济也是美国扶持起来的,美国也没有分裂日本的必要(要分裂,二战时就分裂了,也不用等到80-90年代)。美国也不可能对盟国日本使用“颠覆性煽动”,眼看着美国是阻挡不了日本经济的发展前景的了!世界各国都在兴奋的期待着日本GDP超过美国GDP的那个“历史性时刻”!日本企业更加疯狂,美国经济的象征——洛克菲勒广场被日本人买下了!美国的精神象征——好莱坞被日本人买了!美国人民的心情一下子掉到了谷底。“世界第一”就快保不住了!美国人民的荣耀感在急剧下滑,民间开始蔓延仇日情绪。
      1980年,日本的GDP就快到美国的一半了。有一件事情在1985年发生了,1985年美国拉拢其它五国(7国集团)逼迫日本签署了。以“行政手段”迫使日元升值。其实的一个中心思想就是日本央行不得“过度”干预外汇市场。日本当时手头有充足的美元外汇储备,如果日本央行干预,日元升不了值。可惜呀,日本是被去了势的太监。美国驻军、政治渗透、连宪法都是美国人帮它度身定做的,想不签广场协议都不可能。

       日本最后的结局大家也知道了。1985年9月的广场协议至1988年初.美国要求日元升值。根据协议推高日元,日元兑美元的汇率从协议前的1美元兑240日元上升到1986年5月时的1美元兑160日元。由于美国里根政府坚持认为日元升值仍不到位,通过口头干预等形式继续推高日元。这样,到1988年年初,日元兑美元的汇率进一步上升到1美元兑120日元,正好比广场协议之前的汇率上升了一倍。
      美国人满足了吗?没有。接着看下去,从1993年2月至1995年4月,当时克林顿政府的财政部长贝茨明确表示,为了纠正日美贸易的不均衡,需要有20%左右的日元升值,当时的日元汇率大致在1美元兑120日元左右,所以,根据美国政府的诱导目标,日元行情很快上升到1美元兑100日元。以后,由于克林顿政府对以汽车摩擦为核心的日美经济关系采取比较严厉的态度。到了1995年4月,日元的汇率急升至1美元兑79日元,创下历史最高记录。
      日元升值的后果是什么?洛克菲勒广场重新回到了美国人手中,通用汽车在这个广场的一卖一买中净赚4亿美元!日资在艰难度日中大规模亏本退出美国。美国人民胜利了!成功的击退了日本的经济进攻!我们可以从事例中看看1995年之后,日本和美国的GDP之比重新拉开了距离,而且越来越大!
      可能有些网友还是没有明白,日元升值怎么啦?跟我们的谈论有什么关系?日元升值,就是美国对日本的一次经济阻击战!成功的把日本20多年的发展财富大转移到了美国去了。
    下面我给个例子大家就清楚了。
      假设我是美国财团,我当然知道1985会发生什么,假设我在1983年吧,我用100亿美元兑换成24000亿日元,进入日本市场,购买日本股票和房地产,日本经济的蓬勃导致股市和房地产发疯一样的上涨,1985年广场协议签订,日元开始升值,到1988年初,股市和房地产假设我已经赚到了一倍(5年才翻一倍是最低假设了),那就是48000亿日元。
      这时,日元升值到1:120。我把日本的房地产和股票在一年中抛售完,然后兑换回美元,那么,就是400亿美元!在5年时间中,我净赚300亿美元!(还是最低假设)。那么日本呢?突然离开的巨额外资就导致了日本经济的崩溃!经济学用词叫“泡沫经济破灭”。这就是日本常说的:“失去的十年”。而我连本带利的400亿美元回到美国,你想一想,美国经济能不旺盛吗?!!日本“失去的十年”,却正是美国“兴旺的十年”!看看我的上表就知道了。
      

       我说的只是美国财团中的一个,其它财团呢?嘿嘿,而且我的假设还只是到1988年,如果是到1995年,日元升值到1:79,你我能想象美国在这场经济战争的胜利中,到底从日本刮走了多少财富?
      美国赚够了,日元现在又重新回到了1:140的位置上,美元的坚挺依然和30年前一样!美元暂时性的贬值,并没有损害到美元的国际地位。这场美日的经济战争,以美国完胜而告终!!
      美国人玩上瘾了。1998年,同样的手法在东南亚四小龙四小虎身上又来了一次,这就是亚洲金融风暴!唯一不同的,这次不需要广场协议了。因为亚洲这些小虎小龙的外汇储备们直接阻击就可以大获全胜!但是,还是没有战胜财大气粗、军事强盛、奉行霸权主义的美国,结局大家也看到了,东南亚货币在先升后跌中,经济发展的成果被美国抢掠一空!!
      唯一市场硬挺住了索罗斯的进攻而没有经济崩溃的就只有回归后的香港,保住了香港几十年的发展果实。当时索罗斯发动世界舆论(包括香港舆论),大肆攻击香港政府(中国政府)“行政干预市场”,违反市场经济规则、没有民主自由,要是当时中国屈服于世界的舆论压力而不运用“宏观调控”进行入市干预,那将酿成大祸,又不知道要有多少国人向当年的日本那样因破产而跳楼自杀了!
      当时的曾荫权后来说过:“决定政府入市干预的前一晚,我坐在床头哭了,不是为我自己,而是怕这个决定如果错误了,害了香港,我怎么向中央政府向市民们交代。”大家现在知道为什么美国一再要求他国“新闻自由”、“市场经济”、“民主人权”是建立在自己利益的基础上了吧,知道我国的“宏观调控”政策的正确性和优势所在了吧。
      美国停手了吗?没有,因为我过综合势力的增长国力的增强威胁到了美国的根本利益和“世界第一”的权威,近来“中国公开支持因儿子丑闻陷入困境的安南,指责美国故意借题发挥进行人生攻击。”就是最好的证明。所以美国心里就不痛快了,就要整人了,现在强迫人民币升值就是消弱中国的第一步,各位明白了吗?知道为什么中央政府突然狂力打压上海和北京的房地产市场?知道为什么中国股市那么惨了吗?央行行长周小川在3月还是4月曾说了一件事情:“有一个40亿美元的外资在上海炒房地产,已经退出中国了这样的外资,不要也罢!”明白了吗?中国股市是一个弱势股市,很容易被美国财团利用。

       中央不可能放松对股市的控制,否则中国经济将会在外资的攻击中崩溃!前段时间,也就是今年的12月初又有一个240亿美元的外资财团撤离中国上海。现在,大家对国家的宏观调控的优势有所理解了吧,知道了国家出台那么多针对房地产的政策是多么的明智和及时了吧!
      现在各位知道为什么中国要实行国家外汇管制、汇率控制、打压房地产、控制股市、知道为什么中国要保持巨额外汇储备,为什么最近央行又出台了新的房地产贷款规定,为什么中国政府一直要求进出口贸易平衡,为什么要扩展东南亚贸易市场和欧盟市场,为什么要加WTO了。
      其实中美之间的经济战争,早就已经开场了,而且来来回回过了几百招了。我们大多数网友还懵懵懂懂的只盯着台海,盯着中亚美军又多了一个军事基地。要知道经济崩溃的灾难远比一场军事战争的后果更严重。军事战争不外乎两种:即“侵略战争”和“卫国战争”。而军事上的“侵略战争”的最终目的就是打垮对方的一切(军事力量和经济实力)达到占领对方领土,进行资源掠夺和控制奴役和剥削对方的国民。
      这样的事情中国历史上没有少发生,这里我就不例举事例了。而如今的美国就是以军事上的侵略战争为手段,达到奴役和剥削对方为目的的真实意图(对实力弱小的国家而言),看看如今的“伊拉克”就明白了,美国实际上是侵略占领了伊拉克,控制了伊拉克的石油,以此来满足美国国内巨大的需求量;而对实力强的原苏联(原苏联拥有制对方死地的核力量),美国就只有发动经济进攻来拖垮他们,苏联的分裂就是最好的例子。
      也许有的人要说,那是冷战时期的军备竞赛和当时苏联国内政策导致了原苏联因经济崩溃而解体的。但是,你有没有想过,进行军备竞赛是以经济实力为基础的。当时的美国经济实力比苏联强,所以,美国胜利了而苏联解体了。现在轮到我们了,我国现在的经济和军事实力都没有冷战时期的苏联强大,相同点是我国同样也拥有毁灭美国的核武器,只是数量少了一点而已。那在这一轮中,就要看我国领导人的智慧了,建立合理的政策来规避风险,保护自己是当务之急(可喜的是,现在我国已经在这样做了)。
      

        可是,美国也没有闲着,而且,作为经济进攻的第一步他们已经早早的迈出了,向美国“凯雷财团”这样的世界性投机财团收购中国的“徐州重工”这样的事情已经发生了很多了,在这里我就不一一例举了。他们的目的很明确,控制中国的核心技术,进行世界性的技术垄断。同时乘汇率没有变化之前以美元套取人民币,迫使中国央行大量发行人民币以应付大量的货币兑换需求,为拖垮中国经济打下伏笔。这还是明的进入,暗地里的就更无法统计了。
      说到这里,也许有很多人不明白大量美元兑换人民币的行为与拖垮中国经济有什么关系。在这里,我解释一下:在正常情况下,在没有大量美国财团恶意涌入中国用大量美元换取人民币之前,我国的经济形式是相对稳定的,我国发行的人民币数量应等于我国人民积累的财富数量。
    而大量的恶意的国外财团的资金涌入中国,需要兑换大量的人民币,使得国内人民币的流通数量大大超过我国人民所积累的财富数量。而这些人民币全部投入少数领域,表面上是拉动了我国的经济,使国内的消费量变大,实际上也使得资产价格大幅上升。
       据统计,目前在国际上金融市场上的投资有136万亿美元。其中只要有1%即1.36万亿美元涌入中国进行投机经营,按现在的汇率,我国就要发行10.6万亿元人民币。
       如果人民币升值15%,他们再用手头的人民币套取美元,他们将换回1.56万亿美元,而中国外汇储备是0.2万亿美元,也就是说一进一出,这些投资资金多了2000亿美元,而中国这么多年充当血汗工厂所挣来存在国库中的2000亿美元一分不剩,留给中国的是当初为应付这1.36万亿美元而发行的10.6万亿的人民币。2006年中国GDP是20万亿,物品是这么多,而钱却多了10.6万亿,那就意味着所有商品都要打折到原来的2/3。恐慌情绪将在社会上蔓延,炒房者为了变现到时可能会出七折、六折、甚至三折出手手中的房子。大批市民破产,牵涉到银行破产,整个国家经济崩溃,我们手中的财富一文不值了。
      到时国人乃至世界将会对中国失去信心,不再储备和使用甚至抛售手中储备的人民币,使中国的外贸活动受挫,最终导致中国国内的通货膨胀,对外导致信誉危机从而导致金融危机。就向40年代的通货膨胀那样一盒火柴要卖几百块。如果我国政府在这次的人民币汇率这件事上决策错误,那么到时中国近30年来改革开放的经济成果就可能落入他人之手。
      

       最近,国内的经济形式来看,客观的讲,形式是不容乐观的。按理说,人民币升值了,也就是说钱值钱了,应该是以前1块钱的东西现在只要9毛甚至是8毛就可以买到了;可是现在的国内形式,除了工资没有涨外其余的都涨了。
      新华网报道说:自2006年8月份开始,北京市场食用油价格震荡上扬。进入11月份,米价、面价、菜价及副食价格均有不同程度的攀升。报道认为,是受国际大豆市场价格上扬的影响,导致食用油价格上升。但是,米面跟风而涨,25公斤装的富强粉涨幅达12%以上,500克大米上涨了6分钱。据了解,在上海、广州、深圳粮油等生活必需品已是涨升一遍,并持续一个多月,其中面粉、食用油的最高涨幅分别已达一成和二成。
      农副产品涨价说明了我国经济在发展和提高。同时,以农副产品的涨价来增加农民的收入,维护社会的稳定,给国家的发展提供了一个良好的国内环境,对国家的发展是有好处的,因为中国农民的数量毕竟占了总人口比例的70%以上嘛。
      但是,中国的这四大城市生活必需品的涨价绝非偶然。持续7个多月的宏观调控并没有稳定房价,相反,导致房价的节节攀升。早有经济学家警告说,地产泡沫将导致通货膨胀,通货膨胀将引发经济危机。然而,这种声音太微弱,现如今的种种迹象表明,通货膨胀正在步步逼近我们。
      对比1996年的东京,1997年的香港,北京、上海、广州,深圳这四大房价居高不下的城市,地产泡沫破灭前的迹象已经显现。试图为了一已私利而继续哄抬房价的地方政府,将迎来经济规律的无情惩罚。因为这一轮的通货膨胀是在毫无防备的情况下发出的,可能还不被官方承认,但它实实在在已经来临了。这种处在萌芽状态的通货膨胀选择了一个导致经济危机的最好时机——2007年的元旦和春节前。因此,危害性和破坏性更大。如果有一天方便面也开始涨价时,这场经济危机已无法遏制了。
      柴米油盐、水电油汽的轮番涨价和全面涨价,对中国的富豪阶层的正常生活不构成任何影响,但是千千万万的普通市民将要付出更多的财富以维持和原来一样的生活水准,也就是说,中国的高房价,间接地是由普通城市居民来买单,日本的国民是花了15年的时间,香港的市民就是花了14年。那么,中国的城市居民要花多少年呢?

       应对即将到来的通货膨胀,国家自然有金融的手段。可是,中国的人民币在国际市场受到美元的攻击,一年之内升值达5%,而且,还有继续升值的空间。中国的贸易顺差将在人民币的升值中逐渐缩小,国际市场的风险已在加剧。而国内市场生活必需品的全面涨价,将直接影响消费。最后,逼迫央行加大人民币的发行量,中国的通货膨胀就此爆发。这种危机也可能近在眼前。
      人民币目前在国际货币市场的遭遇是中国汇制改革以来没有过的事,我们目前已经知道美国要干什么?但是,还由不得我们把国际市场的问题解决好,人民币在国内又是这样的尴尬。在不动产涨价的带动下,生活必需品全面涨价,形成了国际与国内两种迥然不同的市场。从某种意义上来说,这样的市场将走向资本的过度投机。说白了,对内将加剧中国社会的贫富分化,对外给资本大鳄可乘之机。
      如果更深层次的分析,人民币似乎是遭遇来自不同方面的围攻,试图将中国30来年经济发展的成果逐步蚕食。接下来,生活必需品的涨幅将进一步加剧,市民的购买力进一步下降,国内市场进一步缩小,中国的产能将进一步过剩,最后,必然导致大量的中小企业破产,经济危机说来就来。
      真正要化解这场危机,对目前的经济局势来说,进一步加大宏观调控的力度,理顺房地产市场的管理体制,采取有力措施,坚决把房价降下来,让城市居民在房价下降的过程中感受中国经济的力量,从而增强对未来的信心。也许,这是目前最应该做的一件事,尽管已经做了一些表面工作。
      我们要清醒地看到高房价的危害性,尤其是对中国社会的破坏更是史无前例。也许现在还不必过于悲观,一切都应该有转机。谁都知道中国经济发生了重大问题,就象一辆出现明显故障的高速列车,轰轰隆隆往前飞奔,不知何时将会出轨或者颠覆。有经济学家预言,2008年中国经济将会硬着陆,届时,社会动荡不可避免。
      那么,出了这么大的问题,而问题的症结究竟何在呢?

       发改委专家马晓河指出:我国正在由某一方面的过剩向全面过剩演变。由于产能过剩,内需不旺,中国产品被迫出口,又导致了大量的贸易摩擦,过分依赖国际市场的风险越来越大。马晓河举例说:中国人向世界上的每一个人提供了一双鞋子,可见鞋的产能过剩多少。2006年11月23日,央行副行长苏宁也表示,中国最终消费占GDP比重已从上世纪80年代超过62%下降到2005的52.1%,居民消费率也从1991年的48.8%下降到2005年的38.2%,均达到历史最低水平。而在中国居民消费率持续下降的同时,世界平均消费率达78%—79%,比较起来差别之大就如天上和地下。
      上面两位,一位是宏观经济的专家,一位是金融权威,但指出的是一个共同问题,就是因为内需不旺而导致产能过剩,一旦国际市场出现大的风险,中国将有成千上万工业企业面临生存的危险。
      让我们再来看看近几年推动中国经济高速发展的动因是什么:如果总揽中国经济全局就可以发现,推动中国经济高速增长的一是投资,二是消费,三是出口,可以说这是并驾齐驱的“三驾马车。”但是,在我国的实践中是“重投资、重出口、轻消费,”这是问题的表象。为什么中国人会“重投资、重出口、轻消费,”呢?明知消费是生产力,没有消费就没有生产力,这是一个浅显的经济学常识,但是在宏观经济发展的布局上,连马克思的剩余价值理论都不顾及了?
      再仔细分析,就会发现很有趣的现象:一是地方政府重投资,前几年表现的是“开发区”热,后来是“基本建设”热,再后来就是现在的“房地产”热;二是大中型企业重工业产品出口,不管是上市公司还是民营企业,只要形成了生产规模,眼光都瞄准了国际市场,大到汽车,家电,小到鞋子,袜子,打火机,一古脑出口。就“投资”热而言,高房价圈走了老百姓甚至两代人的财富,还有一代人背上了沉重的债务;就“出口”热而言,贸易顺差继续加剧,贸易摩擦不断增多,人民币升值压力越来越大。
      有经济学家分析,人民币自汇率改革以来升值了5%,现在的状况是有可能2007年一年就要升值5%,相当于前10多年的升值总幅度。那么这个后果是什么呢?许多经济学家讳莫如深,我可以大胆的告诉大家,后果就是人民币大量从不同渠道流出境,国际洗黑钱的势力乘机介入,甚至可以把中国贪官的钱都洗白了。

       可以说,在2007年之前,只听说外国人到中国来洗钱,这个局面也将因此而改变,中国人终于到外国去洗钱了。再说得深入一点,就是中国人民创造的财富被别人悄悄地“盗走”了。发改委专家马晓河先生的话头上,看看如何解决产能过剩的问题。其实,很简单,产能过剩的解决之道是刺激消费,而刺激消费的唯一办法就是降低房价。房价不降,中国人对未来的预期必将产生较大的压力而不敢消费,还有一部分成了房奴无钱消费。马晓河先生说,中国工业品利用率有半数低于50%,所以,为了减少风险,必须扩大内需。而内需如何才能扩大呢?
      中国居民的消费率是38.2%,世界平均消费率是78%—79%
      中国居民平均房价收入比是一比十,世界平均房价收入比是一比五。
      两相对照,中国经济问题的症结就暴露出来,是高得离谱的房价将中国居民的财富搜刮一空,还拿什么去消费呢?所以中国人的消费率创下了历史新低。有专家预测,中国房价每下降一个点,将为市场一年增加100亿以上的消费,而中国房价从2006年前三季度的综合平均价位上,至少有30%以上的下降空间,也就是说,只要中国房价下降30%,中国市场一年将增加3000亿的消费总额,中国经济的问题也迎刃而解,中国民众也从此能过上好日子。
      相反,我国要是领导人的决策事物方控制不好这个局面,我国的经济将会崩溃。我们都清楚我们现在身处的国际环境有多恶劣,面对当前复杂的国际形势,中国一定要具备打赢两场战争的能力,一是军事战争,二是经济战争。
      用战争手段夺取别国别人的财富在人类历史上是很常见的。即使在21世纪的今天也还能看到。为了保护中国人民的生命财产,以及可能爆发的军事冲突,中国一定要建设强大的陆军,强大的海军,强大的空军和强大的天军(太空部队)。
      在人类进入21世纪的今天,谁占领了太空这个制高点,谁就掌握了未来战争的主动权。任何太空非军事化的想法,只能是白日做梦!
      圣人说得好:落后是要挨打的!中国只有具备了彻底摧毁对手的实力,别人才不敢欺负中国。
      同时,在人类进入21世纪的今天,由于国际交流和贸易的全球化,一场新的战争----经济战争,已经取代军事战争,成为当今世界一部分人夺取另一部分人财产的主要手段 。
      1997年东南亚的金融风暴就是经济战争的一个例子。落后的东南亚国家经济受到了重大打击。国际金融炒家以经济手段达到了以往要用战争手段才能达到的目标。

       在少迟一点的香港金融保卫战中,时任香港政务司司长的曾荫权和财政司司长任志刚,在中国中央政府的支持下,用大量外汇储备干预了香港的股票市场。中国中央政府派出了两名央行副行长到香港,要求香港的全部中资机构,全力以赴支持香港政府的扶盘行动。经过几个月的较量,香港政府成功击退了国际金融炒家把香港当作提款机的企图。那次的斗争是非常激烈的,香港恒指变动1点,期货的买卖就会相差2.3亿港币。
      香港金融保卫战虽然过去好多年了,我一直在想,如果没有强大中国做后盾,会不会发生“八国联军”攻打香港的可能呢?毕竟香港政府干预香港股票市场违反了当今国际主流社会的“规矩”。
      中国航油(新加坡)在国际石油期货市场损失5亿美元和一位中国国资委职员在伦敦同期投资再次被吃表明中国在金融市场方面还有很多东西要学。
      就石油这一项,中国现在每年就要多花几百亿美元。现在是中国需要啥,国际商品市场就涨啥。可以说是“抢你没商量”。
      然而,石油等商品的价格对中国经济的危害并不是最严重的。真正可能对中国经济的造成严重危害是人民币汇率体系和不断高涨的房地产市场 。
      我总觉得有人要以人民币汇率为突破口,搞垮中国的经济,夺取中国人民的经济成果。从要人民币升值和自由浮动的叫喊声中,我好像闻到了军事战争的火药味。
      现在有一个说得比唱得还好听得说法,让人民币汇率自由浮动,由市场来决定。
      难道市场是有鬼决定的吗?由市场来决定,听起来挺公平的,大家都有权。但仔细分析一下,世界上有哪个市场不是由少数人操中的呢?让人民币汇率由市场来决定,说穿了就是由他们来决定。
      中国政府和人民一定不要忘记1997年东南亚的金融风暴。现在外资的相当一部分是埋下的伏兵。它们就等美国把中国的门撞开(人民币汇价自由浮动),把人民币捧上天,牟取暴利。
      总之,中国一定要建设具有一不怕苦,二不怕死精神的强大的陆军,强大的海军,强大的空军和强大的天军(太空部队)以应对可能军事战争。同时中国一定要建设热爱国家,具有国际视野,精通国际竟争规则的金融“铁军”以应对经济战争。只有这样,中国的安全,人民的财富才会得到保护! 想过好日子,不破产的中国人,都来读完这个文章!想过好日子,不破产的中国人,都来读完这个文章!!想过好日子,不破产的中国人,都来读完这个文章!!!并希望广大网友将文章转给朋友,希望痴迷的国人尽快觉醒吧!!!

  • 性能测试经验总结

    2007-07-02 11:05:19

    1 性能测试目标

        • 系统是否满足预期的性能要求
        • 作为对系统进行调优的参考
        • 系统的可扩展性
        • 用性能测试手段发现系统存在的问题
        • 提供部署方案的参考

        2  性能指标

        • 常用的性能指标如下:
        • CPU利用率
        • 内存占用率
        • 磁盘I/O
        • 响应时间

        3  影响性能的因素

        • 网络状况(隔离的网络环境)
        • 硬件设备(CPU数、内存大小、总线速度)
        • 系统/应用服务器/数据库配置
        • 数据库设计和数据库访问实现(SQL语句)
        • 系统架构(同步/异步)

        4  性能测试步骤

        • 分析性能需求(需求规格说明书)
        • 性能测试计划
        • 性能测试方案
        • 建立数据模型
        • 性能测试报告

        5  性能测试方案应包含的内容

        • 对软件系统架构的分析(了解输入、输出数据的类型、数据量)
        • 性能测试组网图(网络环境说明)
        • 硬件环境说明
        • 测试范围、目的与方法
        • 性能测试工具的选型
        • 测试的启动/退出条件
        • 测试场景详细说明
        • 测试执行及测试结果分析

        6  性能测试场景的选取

        • 分析性能测试需求
        • 选择关键场景
        • 分析输入、输出数据

        7  大数据量的产生

        • 在详细分析性能需求的基础上
        • 数据量尽量与实际情况一致

        8、性能测试经验

        • 测试开始前与产品/开发人员充分协商
        • 测试过程中与开发人员紧密合作
        • 测试工具:不要迷信LoadRunner
           1、针对特定系统的加压工具比LoadRunner更加实用
           2、 尽量考虑使用操作系统本身的命令来监测系统资源、完成性能测试
        • 对测试人员的要求:
           1、熟悉系统架构
           2、熟悉数据库
           3、熟悉操作系统

  • 如何诊断 J2EE 系统中的性能问题

    2007-05-29 14:21:50

    在要求您诊断WebLogic J2EE 应用程序中的性能问题。因为Java 系统是如此复杂,所以诊断WebLogic J2EE 应用程序中的性能问题就有点像诊断疑难杂症。
    为了正确地找到问题所在,您需要对症状有全面了解,要做好准备进行大量研究工作,最后您需要制定正确的治疗方案。本文讨论了J2EE 应用程序性能问题的一些最常见类型和它们产生的原因,以及如何正确地诊断和消除它们的推荐指导原则。

     

    症状

     

    WebLogic 应用程序性能问题的症状是什么?您看到的症状可以指导您在所有可能的问题中进行搜索。请准备一个笔记本并开始向人们调查。试着把对问题根本原因的推测和假设与系统行为的实际证据分离。下面是一个常见症状集的列表:

    ·        持续缓慢:应用程序一直特别慢。改变环境因素(负载、数据库连接数量)对整体响应时间的改变很小。

    ·        随着时间推进越来越慢:系统运行时间越长(负载相对均衡不变的情况下),就变得越慢。有可能是(最后)达到了某个阈值,系统被锁定或者由于大量错误而崩溃。

    ·        随着负载增加越来越慢:每增加一个额外用户,应用程序就变得越慢。如果用户离开系统,系统就“冷却下来”,恢复正常。

    ·        零星的挂起或者异常错误:偶尔(可能由于负载或某些其它原因),在页面无法完成或者出现追踪到异常和堆栈的错误页时,用户会看到挂起的情况。挂起的数量可能不同,但总是无法完全消除,甚至在强化(“burn in”) 期间之后也是如此。

    ·        可以预见的锁定:首先出现一些挂起或错误,然后加速出现,直到系统完全被锁定。通常这些问题可以通过“重新启动来管理”的方式解决。

    ·        突然混乱:系统一直运行正常,相当一段时间里(可能一个小时,也可能是三天)性能都还差强人意,但是“突然某个时候,根本没有任何原因的”,系统开始出现大量错误,或者被锁定。

     

    为什么问题诊断如此复杂?

     

    对于WebLogic 应用程序的某个具体应用模式来说,没有既定的公式可以用来推导出它的性能(在严格的实时工程当中,速度单调分析这类技术确实可以做这项工作,但是在本文里还是让我们忘记它吧)。网络上是否存在另外一个系统正在密集使用一个共享的后端服务,对于实际产生的性能有很大影响。性能也许还取决于JDBC 驱动程序版本和数据库的正确匹配。也许开发人员三年前写的一些代码恰巧在这个时候才出现特定类型的异常,而您急切需要的解决问题回馈,却恰恰包含在这个异常里。

    从本质上说,典型业务系统的性能是由成千上万交互的变量和决策共同作用的结果。就像人体一样,有太多连锁着的部分和过程,所以很难理解系统的整体。因此我们进行了简化,并求助于拱形模式。

     

    疾病


      您看到的症状的根本原因是什么?它是初级流行性感冒或者是肺炎的开始吗?是应用程序内部的底层问题还是它所在的JVM 外部的问题?请参阅表1 中应用程序性能低下的一些最常见原因。

    表1

    毛病

    描述

    症状

    原因或治法

    线性内存泄漏

    每单位(每事务、每用户等)泄漏造成内存随着时间或负载线性增长。这会随着时间或负载增长降低系统性能。只有重启才有可能恢复。

    随着时间越来越慢
    随着负载越来越慢

    虽然可能有多种外部原因,但最典型的是与资源泄漏有关(例如,每单位数据的链表存储,或者没有回收的回收/增长缓冲区)。

    指数方式内存泄漏

    双倍增长策略的泄漏造成系统内存消耗表现为时间的指数曲线

    随着时间越来越慢
    随着负载越来越慢

    通常是由于向集合(Vector,HashMap) 中加入永远不删除的元素造成的。

    糟糕的编码:无限循环

    线程在while(true) 语句以及类似的语句里阻塞。

    可以预见的锁定

    您需要对循环进行大刀阔斧的删剪。

    资源泄漏

    JDBC 语句,CICS 事务网关连接,以及类似的东西被泄漏了,造成对Java 桥接层和后端系统的影响。

    随着时间越来越慢
    可以预见的锁定
    突然混乱

    通常情况下,这是由于遗漏了finally 块,或者更简单点,就是忘记用close() 关闭代表外部资源的对象所造成的。

    外部瓶颈问题

    后端或者其他外部系统(如鉴权)越来越慢,同样减缓了J2EE 应用服务器和应用程序

    持续缓慢
    随着负载越来越慢

    咨询专家(负责的第三方或者系统管理员),获取解决外部瓶颈问题的方法。

    外部系统

    J2EE 应用程序通过太大或太多的请求滥用后端系统。

    持续缓慢
    随着负载越来越慢

    清除冗余的工作请求,成批处理相似的工作请求,把大的请求分解成若干个更小的请求,调整工作请求或后端系统(例如,公共查询关键字的索引)等。

    糟糕的编码:CPU密集的组件

    这是J2EE 世界中常见的感冒。一些糟糕的代码或大量代码之间一次糟糕的交互,就挂起了CPU,把吞吐速度减慢到爬行的速度。

    持续缓慢
    随着负载越来越慢

    典型的解决方案就是数据高速缓存或者性能计数。

    中间层问题

    实现得很糟糕的桥接层(JDBC 驱动程序,到传统系统的CORBA 连接),由于对数据和请求不断的排列、解除排列,从而把所有通过它的流量减慢到爬行速度。这个毛病在早期阶段很容易与外部瓶颈混淆。

    持续缓慢
    随着负载越来越慢

    检查桥接层和外部系统的版本兼容性。如果有可能,评估不同的桥接供应商。如果重新规划架构,有可能完全不需要桥接。

    内部资源瓶颈:过度使用或分配不足

    内部资源(线程、放入池的对象)变得稀缺。是在正确使用的情况下加大负载时出现过度使用还是因为泄漏?

    随着负载越来越慢
    零星的挂起或异常错误

    分配不足:根据预期的最大负载提高池的最大尺寸。过度使用:请参阅外部系统的过度使用。

    不停止的重试

    这包括对失败请求连续的(或者在极端情况下无休止的)重试。

    可以预见的锁定
    突然混乱

    可能就是后端系统完全宕机。在这里,可用性监控会有帮助,或者就是把尝试与成功分开。

    线程:阻塞点

    线程在过于积极的同步点上备份,造成交通阻塞。

    随着负载越来越慢
    零星的挂起或异常错误
    可以预见的锁定
    突然混乱

    可能同步是不必要的(只要重新设计),或者比较外在的锁定策略(例如,读/写锁)也许会有帮助。

    线程:死锁/活动锁

    最普遍,这是您基本的“获得顺序”的问题。

    突然混乱

    处理选项包括:主锁,确定的获得顺序,以及银行家算法。

     

    测量关键的统计指标


      当您负责诊断问题的时候,您应当能够跟踪关于您的WebLogic 应用程序健康情况的关键统计指标。您能测量什么?有什么工具可以提供帮助呢?

     

    ·        使用的全部内存:在不同级别上(JVM 堆栈,操作系统),Java 堆栈profiler 对堆栈的正确使用提供了可见性;像top ,vmstat 以及Windows Perfmon 这样的工具在操作系统级别上为内存使用提供可见性。察看Java 堆栈的一个简单的聚合视图,请打开–verbose:gc 开关(如果在您的JVM 上可以使用的话)。

    ·        CPU 时间:合并(可以通过使用top 等方式得到)每个组件或每种方法。其中某些指标可以通过WebLogic 管理控制台得到。也可以通过Java profile 使用它们。

    ·        计时(a.k.a.“)每事务,每组件,每方法;可以按统计平均值或单独的数据点查看。Java profiler 可以产生一些这样的数据,但是使用程序监控解决方案可能是您的最佳选择。

    ·        内部资源:分配的数量,使用的数量,等待的客户数量,获得资源的平均等待时间,使用资源平均消耗的时间,使用资源完成请求工作时使用的平均时间。应用程序服务器通常会给出这些数字的最小可视性。

    ·        外部资源:分配的数量,使用的数量,等待的客户数量,平均等待时间,加上对这些外部系统的直接测量(例如查看它能多快完成请求的工作)。不要忘记运行应用程序服务器的操作系统和硬件也是“外部资源”-例如,是否您使用了太多的进程或端口?可以用两种形式测试这些资源–从JVM 内部测试提供资源的桥接层,用外部资源本身的工具测量外部资源。

    ·        网络应用:带宽使用,延迟。虽然操作系统自带的工具(例如netstat)也有助于做这些工作,但是网络嗅探器设备可以深入了解这些信息。

    ·        系统状态:用线程清除,日志和跟踪文件,堆栈跟踪等等。或者在更深层次上,就像调试器中查看的那样使用变量的值。

     

    实验工作


      有的时候,在一次标杆运行中获得的数据,不足以揭示答案。那么找到答案的机会就在于您还有些有限的预算,可以运行试验或者做实验工作,来完成诊断。您可以运行什么类型的试验呢?您可以修改、观察什么变量呢?

    ·        尝试观察系统行为在一段时间上的变化。应用一个衡定的负载,并观察您的指标随时间发生的变化。您可能会看到某些趋势,短则一小时就可看到,长则二三天。例如,您可以看到内存使用随着时间而增长。随着使用的内存数量达到上限,JVM 花在搜索垃圾上的时间和操作系统花在分配内存页面上的时间开始减少用户事务的整体响应时间。当抛开GC 的时候,垃圾搜集的整个过程可能过长,从而造成执行中的事务超时和异常。现在可以开始查找资源泄漏或内存泄漏了。

    ·        尝试在系统上改变负载。采用三到四种工作负载(例如,10个,50个和100个用户),并搜集每个负载的数据。分析一下您对这些负载的测量情况。例如,您可能发现,当您的账户登录servlet 的响应时间无论如何都会低于50 毫秒的时候,计算销售税的EJB 却随着用户数据的增长,速度呈线性下降。如果这个EJB 性能在负载下的差异能解释整体响应时间性能在负载下的增长,那么现在就是深入分析这个组件的时候了。谨记一定还要把负载恢复原状,并查看系统是否复原。

    ·        尝试把系统分成小单元,针对每个单元轮流进行压力测试。选择一个或多个坐标系对系统进行划分。主要的一个是系统面上的层:负载均衡器、Web 服务器、WebLogic Server,以及后端。其它示例包括用户账户,内部组件,事务类型,以及单独的页面。假设您选择了用户账户。在用户A 的账户下运行一些负载,然后再在用户B 的账户(应当非常不同)下运行某些负载;比较两次运行间不同的测量结果。或者,轮流选择您使用的后端系统,分别对使用每个后端系统比较重的应用程序组件进行压力测试。具体要选择哪个坐标进行划分,完全取决于您要证明或者否定哪个假设。下面是一些具体想法:
      - 如果某个用户的登录看起来造成了问题,那么有可能是这个用户账户档案(例如,装入2,000 个订单的完整采购历史),或者可能是他使用系统的方式(例如,页面访问的顺序,或者他用来查找某个文档的查询字符串的正确性)。
      - 如果您使用的是一个集群系统,请尝试以单台机器为单位划分。尽管尽了最大努力,有的时候还会有一些机器没有安装最新的应用服务器或者操作系统补丁,这就会造成不同的性能特征。而且,还请注意负载均衡器,或者保姆进程,查看它们是否公平地分配了工作并跟踪了进入请求。

     

    诊断:测试您的推测


      在这个时候,您应当已经有了足够的信息,可以形成关于性能瓶颈原因的推测了(请参阅表1)。为了验证您的推测是否正确或者在多个备选的推测之间进行筛选,您需要分析更多的信息或者在系统上运行更多的标杆测试。这里是一些可以帮助您的指导意见:

    ·        区分糟糕的编码(或者是应用程序组件或者是桥接层)和瓶颈(内部的或外部的),请查看整体的CPU 使用情况。如果它在负载下没变化,但是整体响应时间变化了,那么就是应用程序花费了它的大多数时间来等待。

    ·        仅仅是因为好像是外部资源的问题,不代表您就可以立刻把责任推到资源上。例如,分层或联网的问题,也能造成数据库看起来很慢,虽然实际上它并不慢。或者,更简单一点,您对数据库的请求可能是不合理的(每次用户登录的时候,都要进行三个表之间的200 万行记录合并)。应当一直把桥接层的响应时间(例如,JDBC 驱动器)和资源提供的时间或者工具提供的时间进行比较(例如,DBA Studio)。

    ·        结构化的图表有助于您理解系统内部的整体交互,但是不要忘记地图并不是领地。.编码错误或者对架构意图的误解,有可能使系统的实际行为与期望的行为不同。请相信性能工作提供的实际数据,而不要相信一个声称“每个用户事务将只会发布一个SQL 语句”这样的文档。

    ·        使用Occam 军刀。假设您有两个备选推测,一个是:在200 万行代码里,有一个编码糟糕的组件,直到上周这个组件才集成进来;另一个是JVM 的即时编译器生成了糟糕的机器码,破坏了这个变量的内存完整性。除非您有具体的数据来证实,否则(我已经看到了第二种情况发生),请更详细地检查第一个假设。J2EE 系统确实容易出错,但是不要让这一点就妨碍您先测试一个更简单的假设。

    ·        日志文件中没有错误不代表不存在错误。有许多原因可以造成不在日志里写下异常;可能是因为程序员认为某件事“永远不会发生”,于是就排除了这个异常;也可能是因为某些组件可以使用故障恢复机制,所以就没有记录第一次故障。

     

    示例诊断


      让我们来实际研究一个示例。您的WebLogic 应用程序表现出在负载下越来越慢的症状。您加入的用户越多,系统越慢。一旦消除负载,系统就冷静下来,没有任何后遗症。您对这一主要症状进行测试,发现并得到图2 所示的以下结果(时间测量针对的是单一典型事务的端到端完成时间)。

    表2

    负载(用户数)

    来回用时(毫秒)

    10

    300

    50

    471

    100

    892

    150

    1067

    应用程序性能在负载下越来越慢

     

    您形成了几个假设。也许这里的毛病是一个糟糕编码的组件,也许是后端系统的瓶颈。它可能是一个同步阻塞点。您怎样才能分清它们的不同呢?假设您还测试了应用程序服务器在负载运行期间的CPU整体使用情况,并得到了表3 所示的结果。

    表3

    负载(用户数)

    来回用时(毫秒)

    整体CPU 时间(%)

    10

    300

    30

    50

    471

    33

    100

    892

    37

    150

    1067

    41

    问题看起来好像是等待瓶颈

     

    现在看起来,系统不是CPU 密集型的,这就是说它的多数时间都花在等待上了。那么是它的内部(例如,同步交通阻塞)或外部(缓慢的数据库)的问题?好,让我们假设我们还稍微多搜集了一些数据,如表4 所示。

    表4

    负载(用户数)

    等待数据库连接的线程数量

    JDBC 查询用时(毫秒)

    10

    2

    58

    50

    3

    115

    100

    3

    489

    150

    4

    612


    问题是否出在一个缓慢的SQL 语句上呢?

     

    现在看起来并不是内部等待数据库连接的瓶颈,相反,好像是JDBC 查询本身的问题。JDBC 查询不仅随整体事务时间的不同而不同,而且它糟糕的性能还解释了整体性能糟糕的原因。但是,我们还不能完全确定。您仍然还有三个主要的假设要排序:是否数据库本身慢?应用程序是否对数据库进行了不合理的请求?或者问题是不是出在应用程序和数据库之间的某个层上?您拿出数据库供应商专用的工具,从它的角度查看响应时间。假设您看到如表5 所示的数字。

    表5

    负载(用户数) JDBC

    查询计时(毫秒)

    DB SQL 执行的时间(毫秒)

    10

    58

    43

    50

    115

    97

    100

    489

    418

    150

    612

    589


    实际是数据库中的SQL 语句慢

     

    如果您没有看到这条信息,那么您可能要返回JDBC 驱动程序,期待能够发现其中的某些同步问题(请记住,CPU 没有被抑制)。幸运的是,在这个案例里,您已经把具体问题的范围缩小到数据库查询上。找出查询请求是否足够合理,需要一些相关领域的知识,需要熟悉系统,但是在这个案例里,它也许就是发现查询把非索引字段和外键进行了比较。您和DBA 协作,它修改索引方案,让查询变得更快,而您则找到了您的药方。



    结束语


      诊断WebLogic J2EE 应用程序的性能瓶颈是一个艰苦的旅程。请随时保持清醒,把事实与推测分开,总是用实际的证据来确认您的推测。我希望给您带来了思考和实践问题的一些有用的想法的分类。就像调试,这仍然是一项不明确的艺术,但是深思熟虑会带您走出困境。祝您好运!

  • 性能测试指标

    2007-05-29 11:38:24

    1、SQL数据库:
    1.User 0 Connections (用户连接数,也就是数据库的连接数量);
    2.Number of deadlocks/Sec/-Total (数据库死锁)
    3.Memory\ Availalle Mbyte 内存监控(可用内存)
    4.Physicsdisk \disk time \-Total(磁盘读写总时间)(出现瓶颈时检查读磁盘的时间长还是写磁盘的时间长)
    5.Butter Caile hit(数据库缓存的选取命中率)
    6.数据库的命中率不能低于92%
    2、Web Server:
    1.Processor \ Processon time \ Tatol cpu时间
    2.Memory \ Availalle MbyteAvai 应用服务器的内存
    3.Requst Quened 进入HTTP队列的时间;队列/每秒
    4.Total request 总请求数时间
    5.Avg Rps 平均每秒钟响应次数=总请求时间/ 秒数
    6.Avg time to last byte per terstion (mstes)平均每秒迭代次数;上一个页面到下一个页面的时间是你录入角本的一个过程的执行
    7.Http Error 无效请求次数
    8.Send 发送请求次数字节数
    Webload的压力参数:
    l Load Size(压力规模大小)
    l Round Time(请求时间)
    l Rounds (请求数)
    l Successful Rounds(成功的请求)
    l Failed Rounds (失败的请求)
    l Rounds Per Second (每秒请求次数)(是指你录入角本的任务在一秒中执行的次数,类似Avg time to last byte per terstion (mstes))
    l Successful Rounds Per Second(每秒成功的请求次数)
    l Failed Rounds Per Second(每秒失败的请求次数)
    l Page Time 页面响应时间
    l Pages (页面数)
    l Pages Per Second (每秒页面响应数)
    l H it Time(点击时间)
    l Hits(点击次数,也可以是请求次数,不过有一些不一样)
    l Successful Hits (成功的点击次数)
    l Failed Hits (失败的点击次数)
    l Hits Per Second (每秒点击数)
    l Successful Hits Per Second (每秒成功的点击次数)
    l Failed Hits Per Second (每秒失败的点击次数)
    l Attempted Connections (尝试链接数)
    l Successful Connections(成功的连接数)
    l Failed Connections(失败的连接数)
    l Connect Time(连接时间)
    l Process Time(系统执行时间,一般用来显示CPU的运算量,服务器端与客户端都要记录)
    l Receive Time(接受时间)
    l Send Time(请求时间)
    l Time To First Byte ()
    l Throughput (Bytes Per Second)()
    l Response Time(回应时间)
    l Response Data Size()
    l Responses()



    Transactions per second(每秒处理事务数)http连接Get or Post方法的事务数
    Rounds per second(每秒完成数)每秒完全执行Agenda〔代理〕的数量
    Throughput(吞吐量)(bytes per second〔每秒字节数〕) 测试服务器每秒传送的字节数
    Round Time 完成一次事务所用的必要时间,单位是秒
    Transaction Time是完成一次事务的必须时间。事务:包括连接时间,发送、响应和处理时间。
    Connect Time 客户端到测试服务器的一个连接完成的时间,单位秒(包括建立和收到的TCP/IP时间)
    Send Time 是将事务写入测试服务器的缓冲必要时间,单位秒
    Response Time 是客户端请求接受测试服务器响应的必要时间,单位秒
    Process Time 处理数据的必要时间
    Load Size 负载测试时开启的虚拟客户数量〕
    Rounds 在测试会话期间执行议程脚本的时间数
    Attempted Connections 尝试连接测试服务器的数量
    HTTP Response Status 每一个http响应被结束的时间数量
    Response Data Size 由测试服务器发送的响应大小,单位字节。
  • 常用功能测试方法。

    2007-05-29 11:28:54

    功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。常用的测试方法如下:

      1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。

      2. 相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确。

      3. 检查按钮的功能是否正确:如update, cancel, delete, save等功能是否正确。

      4. 字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度,会不会出错.

      5. 字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型,会否报错.

      6. 标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键.看系统处理是否正确.

      7. 中文字符处理: 在可以输入中文的系统输入中文,看会否出现乱码或出错.

      8. 检查带出信息的完整性: 在查看信息和update信息时,查看所填写的信息是不是全部带出.,带出信息和添加的是否一致

      9. 信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理.

      10. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按”delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理.

      11. 检查添加和修改是否一致: 检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.

      12. 检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错.

      13. 重复提交表单:一条已经成功提交的纪录,back后再提交,看看系统是否做了处理。

      14. 检查多次使用back键的情况: 在有back的地方,back,回到原来页面,再back,重复多次,看会否出错.

      15. search检查: 在有search功能的地方输入系统存在和不存在的内容,看search结果是否正确.如果可以输入多个search条件,可以同时添加合理和不合理的条件,看系统处理是否正确.

      16. 输入信息位置: 注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方.

      17. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。

      18. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加*

      19. 快捷键检查:是否支持常用快捷键,如Ctrl+C Ctrl+V Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。

      20. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错.

  • 用TestManager做性能测试

    2007-05-29 11:27:28

    一般情况下,测试要用到多个测试脚本和多台计算机。在运行时,用设计的套件来协调测试脚本的回放。这些测试套件向服务器施加模拟的工作负载。可以在本地计算机上运行测试套件。

    一旦用TestManager创建了描述服务器行为基线的套件,就可以重复运行这些套件,然后用TestManager的报告生成工具分析测试结果。

     

     

    Rational TestManager与性能测试

    用TestManager做性能测试有助于在实际应用之前发现和改进性能问题。使用TestManager提供的工具可以鉴别,定位,分析性能瓶颈。

    作为一个自动负载测试工具,TestManager模拟一个或者多个真是用户各种行为。TestManager用虚拟测试者代替用户向服务器施加负载。

    因为TestManager允许在一个计算机上回放多个虚拟测试者的动作,所以可以在几台甚至一台计算机上模拟成百上千个虚拟测试者。

     

    为什么用TestManager做性能测试

    TestManager有很多用处,在解决以下性能测试问题时十分优秀:

    问题

    TestManager解决办法

    服务器在负载压力下运行正确吗?

    在最大负载下,做网络和服务器的稳定性和压力测试

    系统满足scalability(可测量性)需求吗?

    在系统发布之前确定一个服务器可以支持的虚拟测试者个数

    客户可以获得怎么样的性能?服务器在大量虚拟测试者同时访问时响应时间可以接受吗?

    测量服务器在不同交互率和负载下操作时的响应时间。除此之外,还需要确定:

    l         应用响应时间(一般情况,最好情况,最差情况)

    l         不同配置的计算机响应时间如何

    l         当一定数量的性能测试者同时运行服务器时服务器的响应时间

    l         当访问服务器的性能测试者数量增加时,客户响应时间的下降速度

    l         当做Web测试时服务器的点击率

    l         错误率和错误故障

    数据库表格的访问模式是如何影响性能的?

    表锁定或者行锁定在什么时候会发生

    在不同交互率,负载组合和服务器配置下做竞争测试,分析吞吐量和容量

    参数改变后客户端响应时间改善如何?

    在服务器上施加可重复施加的负载,来客观测量调整量

    那一种查询会引起性能问题

    Isolate queries that perform poorly

     

    TestManager环境

    用TestManager可以在一个分布式环境下运行套件。这个环境是由一台本地计算机(用来协调测试执行和回放测试脚本)和多台代理计算机(可以没有,用来回放测试脚本)组成。

    下面这张图描绘了典型的TestManager配置:

    服务器可以运行各种操作系统,通过TCP/IP网络连接到本地计算机和代理计算机。

     

    计划性能测试

    测试服务器的性能,典型的做法是用许多虚拟测试者向服务器施加负载。目的是检查服务器在负载压力下是如何运行的。

    需要回答的一些性能问题包括:

    l         在正常情况下服务器支持多少个虚拟测试者

    l         在正常条件下,服务器性能会不会在某个时候迅速下降

    l         当超出正常范围时系统运行情况如何?在最坏情况下,系统性能是适当下降呢,还是完全崩溃?

    l         在不同的硬件配置条件下系统运行情况如何?

    下面讨论计划一个测试的主要步骤:

     

    测试响应时间

    用TestManager可以测量各种性能指示器。尽管分布式功能测试可以根据通过还是失败来测量正确性,但是通过性能测试可以测量时间。例如:

    l         完成一个动作需要多长时间?

    l         在很大的负载压力下服务器可以响应多快?

    可以测量客户端响应时间或者服务器端响应时间。

     

    设置性能测试的通过/失败标准

    性能是主观的,需要设置性能是通过或者失败的标准。通过或者失败的标准通常是一个可以接受的响应时间的范围。例如,可以用下面这些值作为一个可以接受的响应时间:

    l         对于100个虚拟测试者,90%的交互响应时间为5秒或者低于5秒。所有响应时间不能超过20秒。

    l         对于500个虚拟测试者,80%的交互响应时间为10秒或者低于10秒。所有响应时间不能超过45秒。

     

    确定性能需求

    在计划性能测试时,需要确定测试所需要的硬件和软件。例如:

    l         服务器端:数据库服务器、WEB服务器、其他服务器系统

    l         客户端:Windows 2000,NT,98,95,or Me计算机、网络计算机、或者Macintosh或者UNIX工作站

    l         用于访问的数据库

    l         用于运行的应用

    除此之外,要确定以下参数:

    l         用来准确表示工作负载的测试数据库和其他测试文件的大小

    l         为了防止I/O瓶颈,数据的分布情况

    l         测试数据库时,主要的数据库参数设置

     

    设计模拟真实的工作负载

    性能测试要准确地镜像站点的工作负载。因此,必须确定站点的交互类型。

    例如,用户是偶然查询和更新数据库呢,还是经常更新数据库?如果是经常更新数据库,那么这些更新是复杂的,还是简短的?

    设计工作负载时,要考虑以下这些问题:

    l         工作负载间隔––工作负载模型表示的时间段。例如,工作负载间隔可能是一个高峰小时,一天或者an end-of-the-month billing cycle。

    l         测试变量––性能测试期间可以改变的因素。例如,为了检查在工作负载增加时,响应时间是如何下降的,需要设置不同数量的虚拟测试者来施加负载。最好一次只有一个变量发生改变。接着,如果在下一次测试时性能发生改变,就可以知道性能的改变是由哪个变量引起的。在创建一个套件时需要设置测试变量。

    l         虚拟测试者类别––在性能测试中,我们可能需要根据虚拟测试者所执行的动作将它们分为几个组。对于每一个组,需要明确虚拟测试者的个数或者占总测试者的百分比。例如,20%的虚拟测试者清算账目,30%的虚拟测试者在做数据资料登记,50%的虚拟测试者在销售。

    在一个套件中可以创建用户组。然而,在计划和测试相关的测试脚本时必须记住这些用户组。测试脚本应该能够准确的反映真实用户组的动作。

    l         用户工作情况––虚拟测试者执行的动作集合和执行动作的频率。虚拟测试者的动作应该尽可能的模拟用户实际的工作。例如,如果销售组的用户访问数据库比其他两组多70%,那么在工作负载中应该反映这一情况。

    l         用户特征––确定虚拟测试者在执行一个交互之前会暂停多长时间,确定一个交互执行的频率,确定一个交互可以连续执行多少次。因为这些值直接影响系统的整体性能,所以准确的建模真实用户特征是很重要的。例如,一个思考需要五秒,每分钟输入30个单词的用户给系统施加的负载比一个思考需要一秒,每分钟输入60个单词的用户给系统施加的负载小。用延迟和思考时间来建模虚拟测试者的特征。更多关于延迟的信息,查看263页“插入一个延迟”。更多关于思考时间的信息,查看Robot手册。

    当设计一个工作负载模型时,需要考虑以上因素以确保准确的测试环境。定义的测试目标越明确,达到目标就越快。

     

    实施性能测试

    一旦确定了通过和失败的标准,硬件和软件需求和工作负载模型,就可以创建测试脚本,建立测试了。在这个过程中需要考虑的问题是:

    l         中止条件––如果一个虚拟测试者运行失败,测试应该停止还是继续?如果大量的虚拟测试者中有一些失败,一般情况下测试可以继续。但是,如果一个虚拟测试者执行基础动作(例如,建立数据库)失败,测试应该停止。

    在套件中要设置中止条件。更多关于设置中止条件的信息,查看99页“控制套件中止方式”

    l         稳定的工作负载––测试只有在所有的虚拟测试者连接后才开始运行,还是应该立刻开始运行?如果要测量虚拟测试者的响应时间,就需要在所有的测试者都连接之后再开始实际的测试。为了做性能报告需要定义一个稳定的工作负载。关于更多的信息,查看321页“关于稳定负载的报告”

    l         将要测试的应用––测试所有的应用是不划算的。在对整体性能影响很小的应用进行测试时,消耗的时间和资源会影响测试关键应用的时间。所以在计划和设计测试时,必须考虑均衡。通常情况下,应该找出产生系统80%负载的20%的应用。例如,可以不关心只在每年年底才更新数据库的应用。

    l         将要运行测试的数据库––确定是在production数据库还是测试数据库上运行测试。

     

    性能测试举例

    这一部分总结了一些典型的性能测试。在定义测试时,每一个测试都有一张表列出了要考虑的主要因素。这些表只是作为一个指南,它们不可能包括性能测试所有可能的因素。

     

    正常条件下支持的虚拟测试者数量

    为了确保一个系统满足测量性需求,需要确定一台服务器可以支持的虚拟测试者的数量。在响应时间不可接受之前,系统可以支持多少个虚拟测试者?

    例如,估计一个数据库系统可以支持500个虚拟测试者。我们计划分别用300个,400个,500个,600个和700个虚拟测试者并发完成多个任务来运行测试。下面这张表列出了在设计测试时包括的主要元素:

    测试脚本

    套件

    报告

    用来初始化数据库的测试脚本

    虚拟测试者用来连接的测试脚本

    执行虚拟测试者动作的测试脚本:

    l         添加记录

    l         删除记录

    l         查询数据库

    l         运行工资报告

    有一个虚拟测试者的固定用户组。这个虚拟测试者登陆数据库,初始化数据库,并且进行事件设置以表明数据库被初始化了。

    有许多虚拟测试者的scalable用户组。这个用户组在登陆后,等到事件设置完成后方才执行:

    l         用来任意选择测试脚本的选择器

    l         完成每一个虚拟测试者工作的测试脚本

    测试日志用来显示是否套件中所有的虚拟测试者都成功的完成了动作。

    命令状态报告用来显示服务器是否成功完成了请求。

    两个性能报告:

    l         一个报告是从开始运行到运行两个小时这段时间的报告

    l         一个报告是从运行两个小时之后到运行终止这段时间的报告

    比较这两个性能报告后得到一个比较性能报告

     

    增量的增加虚拟测试者

    性能测试共同的需求是当不同虚拟测试者执行他们的动作时测试系统会发生什么。例如,当人们早上开始他们一天工作的时候,测试服务器运行情况。或者测试服务器如何处理在一天中不断增加的工作负载,特别是在高峰负载时服务器的响应。

    利用TestManager可以通过不断增加虚拟测试者负载来对这种类型的工作负载建模。测试工作从设计工作负载模型开始。例如,记录应用使用频率和数量。接着,当建立套件时:

    l         确定不同的用户组在套件中开始执行的时间

    l         为每一个用户组设置运行测试脚本的虚拟测试者数量和一个迭代数(可选)

    通过设置虚拟测试者的开始时间和迭代数,就可以增量的增加负载。也可以在套件运行的具体时间增加负载。

    下面描述一个重叠运行的简单测试:

    l         运行一个有100个虚拟测试者的套件。这一组虚拟测试者代表第一组登陆职员,反复重复同一组登陆交互,所以应该让每一个虚拟测试者多次迭代交互;应该设置足够多的迭代以使这组虚拟测试者直到套件结束时才停止运行测试脚本。必须确定需要多少次迭代。

    l         在套件中设置一个延迟。延迟的类型可以是在套件的开始,或者在一天的某个时刻开始。当延迟结束后,200个新的虚拟测试者开始运行。这是第二组登陆职员,他们和第一组重叠。

    l         这个组合的职员组表示高峰负载,300个虚拟测试者重复执行交互。

    下面这张表总结了重叠运行的一个简单测试:

     

    测试脚本

    套件

    报告

    用来初始化数据库的测试脚本

    虚拟测试者用来连接的测试脚本

    执行虚拟测试者动作的测试脚本:

    l         添加记录

    l         删除记录

    l         查询数据库

    l         运行工资报告

    有一个虚拟测试者的固定用户组。这个虚拟测试者登陆数据库,初始化数据库,并且进行事件设置以表明数据库被初始化了。

    有100个虚拟测试者的固定用户组。这个用户组在登陆后,等到事件设置完成后方才执行多次迭代。

     

     

     

     

    在压力条件下系统运行情况

    压力测试是试图导致服务器崩溃的测试。当怀疑服务器在一些方面有漏洞时用压力测试,在这种情况下,当一个操作执行很多次或者很长一段时间时,服务器响应就会完全崩溃或者下降。

    因为压力测试包括很多并发操作(例如,一瞬间向服务器发送成百上千个请求),所以虚拟测试者要提供执行这种压力测试最为实用和有效的方式。连续不断的执行测试脚本有助于检查在压力条件下运行应用的长期效果。

    在一个简单的压力测试中,虚拟测试者不断重复的执行同一个操作几个小时。测试可能包括:

    l         在数据库中添加成千条记录

    l         向数据库发送成千条查询请求

    下面这张表总结了一个简单的压力测试:

    测试脚本

    套件

    报告

    用来初始化数据库的测试脚本

    虚拟测试者用来连接的测试脚本

    执行虚拟测试者动作的测试脚本:

    l         添加记录

    l         删除记录

    l         查询数据库

    l         运行工资报告

    有一个虚拟测试者的固定用户组。这个虚拟测试者登陆数据库,初始化数据库,并且进行事件设置以表明数据库被初始化了。

    有1000个虚拟测试者的scalable用户组。每一个虚拟测试者登陆以后,在同步点处等候。当所有的虚拟测试者都到达同步点时,每一个虚拟测试者开始迭代执行:

    l         用来任意选择测试脚本的选择器

    l         完成每一个虚拟测试者工作的测试脚本

    测试日志用来显示套件中所有的虚拟测试者是否都成功的完成了动作。

    命令状态报告用来显示服务器响应是否正确(即使在压力条件下)

    每一个运行900个,1000个和1100个虚拟测试者的套件的性能报告。这些性能报告显示系统性能在什么时候开始下降,确保下降是适度的。

    通过比较每一个性能报告得到比较性能报告。

  • 性能:软件测试的重中之重

    2007-05-29 11:14:44

    性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样。中国软件评测中心将性能测试概括为三个方面:应用在客户端性能的测试、应用在网络上性能的测试和应用在服务器端性能测试。通常情况下,三方面有效、合理的结合,可以达到对系统性能全面的分析和瓶颈的预测。

      应用在客户端性能的测试

      应用在客户端性能测试的目的是考察客户端应用的性能,测试的入口是客户端。它主要包括并发性能测试、疲劳强度测试、大数据量测试和速度测试等,其中并发性能测试是重点。

      ◆并发性能测试是重点

      并发性能测试的过程是一个负载测试和压力测试的过程,即逐渐增加负载,直到系统的瓶颈或者不能接收的性能点,通过综合分析交易执行指标和资源监控指标来确定系统并发性能的过程。负载测试(Load Testing)是确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统组成部分的相应输出项,例如通过量、响应时间、CPU负载、内存使用等来决定系统的性能。负载测试是一个分析软件应用程序和支撑架构、模拟真实环境的使用,从而来确定能够接收的性能过程。压力测试(Stress Testing)是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。

      并发性能测试的目的主要体现在三个方面:以真实的业务为依据,选择有代表性的、关键的业务操作设计测试案例,以评价系统的当前性能;当扩展应用程序的功能或者新的应用程序将要被部署时,负载测试会帮助确定系统是否还能够处理期望的用户负载,以预测系统的未来性能;通过模拟成百上千个用户,重复执行和运行测试,可以确认性能瓶颈并优化和调整应用,目的在于寻找到瓶颈问题。

      当一家企业自己组织力量或委托软件公司代为开发一套应用系统的时候,尤其是以后在生产环境中实际使用起来,用户往往会产生疑问,这套系统能不能承受大量的并发用户同时访问? 这类问题最常见于采用联机事务处理(OLTP)方式数据库应用、Web浏览和视频点播等系统。这种问题的解决要借助于科学的软件测试手段和先进的测试工具。

      ◆举例说明:电信计费软件

      众所周知,每月20日左右是市话交费的高峰期,全市几千个收费网点同时启动。收费过程一般分为两步,首先要根据用户提出的电话号码来查询出其当月产生费用,然后收取现金并将此用户修改为已交费状态。一个用户看起来简单的两个步骤,但当成百上千的终端,同时执行这样的操作时,情况就大不一样了,如此众多的交易同时发生,对应用程序本身、操作系统、中心数据库服务器、中间件服务器、网络设备的承受力都是一个严峻的考验。决策者不可能在发生问题后才考虑系统的承受力, 预见软件的并发承受力, 这是在软件测试阶段就应该解决的问题。

      目前,大多数公司企业需要支持成百上千名用户,各类应用环境以及由不同供应商提供的元件组装起来的复杂产品,难以预知的用户负载和愈来愈复杂的应用程序,使公司担忧会发生投放性能差、用户遭受反应慢、系统失灵等问题。其结果就是导致公司收益的损失。

      如何模拟实际情况呢? 找若干台电脑和同样数目的操作人员在同一时刻进行操作,然后拿秒表记录下反应时间? 这样的手工作坊式的测试方法不切实际,且无法捕捉程序内部变化情况,这样就需要压力测试工具的辅助。

      测试的基本策略是自动负载测试,通过在一台或几台PC机上模拟成百或上千的虚拟用户同时执行业务的情景,对应用程序进行测试,同时记录下每一事务处理的时间、中间件服务器峰值数据、数据库状态等。通过可重复的、真实的测试能够彻底地度量应用的可扩展性和性能,确定问题所在以及优化系统性能。预先知道了系统的承受力,就为最终用户规划整个运行环境的配置提供了有力的依据。

      ◆并发性能测试前的准备工作

      测试环境:配置测试环境是测试实施的一个重要阶段,测试环境的适合与否会严重影响测试结果的真实性和正确性。测试环境包括硬件环境和软件环境,硬件环境指测试必需的服务器、客户端、网络连接设备以及打印机/扫描仪等辅助硬件设备所构成的环境;软件环境指被测软件运行时的操作系统、数据库及其他应用软件构成的环境。

      一个充分准备好的测试环境有三个优点:一个稳定、可重复的测试环境,能够保证测试结果的正确;保证达到测试执行的技术需求;保证得到正确的、可重复的以及易理解的测试结果。

      测试工具:并发性能测试是在客户端执行的黑盒测试,一般不采用手工方式,而是利用工具采用自动化方式进行。目前,成熟的并发性能测试工具有很多,选择的依据主要是测试需求和性能价格比。著名的并发性能测试工具有QALoad、LoadRunner、Benchmark Factory和Webstress等。这些测试工具都是自动化负载测试工具,通过可重复的、真实的测试,能够彻底地度量应用的可扩展性和性能,可以在整个开发生命周期、跨越多种平台、自动执行测试任务,可以模拟成百上千的用户并发执行关键业务而完成对应用程序的测试。

      测试数据:在初始的测试环境中需要输入一些适当的测试数据,目的是识别数据状态并且验证用于测试的测试案例,在正式的测试开始以前对测试案例进行调试,将正式测试开始时的错误降到最低。在测试进行到关键过程环节时,非常有必要进行数据状态的备份。制造初始数据意味着将合适的数据存储下来,需要的时候恢复它,初始数据提供了一个基线用来评估测试执行的结果。

      在测试正式执行时,还需要准备业务测试数据,比如测试并发查询业务,那么要求对应的数据库和表中有相当的数据量以及数据的种类应能覆盖全部业务。

      模拟真实环境测试,有些软件,特别是面向大众的商品化软件,在测试时常常需要考察在真实环境中的表现。如测试杀毒软件的扫描速度时,硬盘上布置的不同类型文件的比例要尽量接近真实环境,这样测试出来的数据才有实际意义。

      ◆并发性能测试的种类与指标

      并发性能测试的种类取决于并发性能测试工具监控的对象,以QALoad自动化负载测试工具为例。软件针对各种测试目标提供了DB2、DCOM、ODBC、ORACLE、NETLoad、Corba、QARun、SAP、SQLServer、Sybase、Telnet、TUXEDO、UNIFACE、WinSock、WWW、Java scrīpt等不同的监控对象,支持Windows和UNIX测试环境。

      最关键的仍然是测试过程中对监控对象的灵活应用,例如目前三层结构的运行模式广泛使用,对中间件的并发性能测试作为问题被提到议事日程上来,许多系统都采用了国产中间件,选择Java scrīpt监控对象,手工编写脚本,可以达到测试目的。

      采用自动化负载测试工具执行的并发性能测试,基本遵循的测试过程有:测试需求与测试内容,测试案例制定,测试环境准备,测试脚本录制、编写与调试,脚本分配、回放配置与加载策略,测试执行跟踪,结果分析与定位问题所在,测试报告与测试评估。

      并发性能测试监控的对象不同,测试的主要指标也不相同,主要的测试指标包括交易处理性能指标和UNIX资源监控。其中,交易处理性能指标包括交易结果、每分钟交易数、交易响应时间(Min:最小服务器响应时间;Mean:平均服务器响应时间;Max:最大服务器响应时间;StdDev:事务处理服务器响应的偏差,值越大,偏差越大;Median:中值响应时间;90%:90%事务处理的服务器响应时间)、虚拟并发用户数。

      应用实例:“新华社多媒体数据库V1.0”性能测试

      中国软件评测中心(CSTC)根据新华社技术局提出的《多媒体数据库(一期)性能测试需求》和GB/T 17544《软件包质量要求和测试》的国家标准,使用工业标准级负载测试工具对新华社使用的“新华社多媒体数据库V1.0”进行了性能测试。

      性能测试的目的是模拟多用户并发访问新华社多媒体数据库,执行关键检索业务,分析系统性能。

      性能测试的重点是针对系统并发压力负载较大的主要检索业务,进行并发测试和疲劳测试,系统采用B/S运行模式。并发测试设计了特定时间段内分别在中文库、英文库、图片库中进行单检索词、多检索词以及变检索式、混合检索业务等并发测试案例。疲劳测试案例为在中文库中并发用户数200,进行测试周期约8小时的单检索词检索。在进行并发和疲劳测试的同时,监测的测试指标包括交易处理性能以及UNIX(Linux)、Oracle、Apache资源等。

      测试结论:在新华社机房测试环境和内网测试环境中,100M带宽情况下,针对规定的各并发测试案例,系统能够承受并发用户数为200的负载压力,最大交易数/分钟达到78.73,运行基本稳定,但随着负载压力增大,系统性能有所衰减。

      系统能够承受200并发用户数持续周期约8小时的疲劳压力,基本能够稳定运行。

      通过对系统UNIX(Linux)、Oracle和Apache资源的监控,系统资源能够满足上述并发和疲劳性能需求,且系统硬件资源尚有较大利用余地。

      当并发用户数超过200时,监控到HTTP 500、connect和超时错误,且Web服务器报内存溢出错误,系统应进一步提高性能,以支持更大并发用户数。

      建议进一步优化软件系统,充分利用硬件资源,缩短交易响应时间。

      ◆疲劳强度与大数据量测试

      疲劳测试是采用系统稳定运行情况下能够支持的最大并发用户数,持续执行一段时间业务,通过综合分析交易执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程。

      疲劳强度测试可以采用工具自动化的方式进行测试,也可以手工编写程序测试,其中后者占的比例较大。

      一般情况下以服务器能够正常稳定响应请求的最大并发用户数进行一定时间的疲劳测试,获取交易执行指标数据和系统资源监控数据。如出现错误导致测试不能成功执行,则及时调整测试指标,例如降低用户数、缩短测试周期等。还有一种情况的疲劳测试是对当前系统性能的评估,用系统正常业务情况下并发用户数为基础,进行一定时间的疲劳测试。

      大数据量测试可以分为两种类型:针对某些系统存储、传输、统计、查询等业务进行大数据量的独立数据量测试;与压力性能测试、负载性能测试、疲劳性能测试相结合的综合数据量测试方案。大数据量测试的关键是测试数据的准备,可以依靠工具准备测试数据。

      速度测试目前主要是针对关键有速度要求的业务进行手工测速度,可以在多次测试的基础上求平均值,可以和工具测得的响应时间等指标做对比分析。

      应用在网络上性能的测试

      应用在网络上性能的测试重点是利用成熟先进的自动化技术进行网络应用性能监控、网络应用性能分析和网络预测。

      ◆网络应用性能分析

      网络应用性能分析的目的是准确展示网络带宽、延迟、负载和TCP端口的变化是如何影响用户的响应时间的。利用网络应用性能分析工具,例如Application Expert,能够发现应用的瓶颈,我们可知应用在网络上运行时在每个阶段发生的应用行为,在应用线程级分析应用的问题。可以解决多种问题:客户端是否对数据库服务器运行了不必要的请求?当服务器从客户端接受了一个查询,应用服务器是否花费了不可接受的时间联系数据库服务器?在投产前预测应用的响应时间;利用Application Expert调整应用在广域网上的性能;Application Expert能够让你快速、容易地仿真应用性能,根据最终用户在不同网络配置环境下的响应时间,用户可以根据自己的条件决定应用投产的网络环境。

      ◆网络应用性能监控

      在系统试运行之后,需要及时准确地了解网络上正在发生什么事情;什么应用在运行,如何运行;多少PC正在访问LAN或WAN;哪些应用程序导致系统瓶颈或资源竞争,这时网络应用性能监控以及网络资源管理对系统的正常稳定运行是非常关键的。利用网络应用性能监控工具,可以达到事半功倍的效果,在这方面我们可以提供的工具是Network Vantage。通俗地讲,它主要用来分析关键应用程序的性能,定位问题的根源是在客户端、服务器、应用程序还是网络。在大多数情况下用户较关心的问题还有哪些应用程序占用大量带宽,哪些用户产生了最大的网络流量,这个工具同样能满足要求。

      ◆网络预测

      考虑到系统未来发展的扩展性,预测网络流量的变化、网络结构的变化对用户系统的影响非常重要。根据规划数据进行预测并及时提供网络性能预测数据。我们利用网络预测分析容量规划工具PREDICTOR可以作到:设置服务水平、完成日网络容量规划、离线测试网络、网络失效和容量极限分析、完成日常故障诊断、预测网络设备迁移和网络设备升级对整个网络的影响。

      从网络管理软件获取网络拓扑结构、从现有的流量监控软件获取流量信息(若没有这类软件可人工生成流量数据),这样可以得到现有网络的基本结构。在基本结构的基础上,可根据网络结构的变化、网络流量的变化生成报告和图表,说明这些变化是如何影响网络性能的。PREDICTOR提供如下信息:根据预测的结果帮助用户及时升级网络,避免因关键设备超过利用阀值导致系统性能下降;哪个网络设备需要升级,这样可减少网络延迟、避免网络瓶颈;根据预测的结果避免不必要的网络升级。

      应用在服务器上性能的测试

      对于应用在服务器上性能的测试,可以采用工具监控,也可以使用系统本身的监控命令,例如Tuxedo中可以使用Top命令监控资源使用情况。实施测试的目的是实现服务器设备、服务器操作系统、数据库系统、应用在服务器上性能的全面监控,测试原理如下图。

      (暂时略)

      图:应用在服务器上的性能测试原理图

      UNIX资源监控指标和描述

      监控指标 描述

      平均负载 系统正常状态下,最后60秒同步进程的

      平均个数

      冲突率 在以太网上监测到的每秒冲突数

      进程/线程交换率 进程和线程之间每秒交换次数

      CPU利用率CPU占用率(%)

      磁盘交换率 磁盘交换速率

      接收包错误率 接收以太网数据包时每秒错误数

      包输入率 每秒输入的以太网数据包数目

      中断速率CPU每秒处理的中断数

      输出包错误率 发送以太网数据包时每秒错误数

      包输入率 每秒输出的以太网数据包数目

      读入内存页速率 物理内存中每秒读入内存页的数目

      写出内存页速率 每秒从物理内存中写到页文件中的内存页数

      目或者从物理内存中删掉的内存页数目

      内存页交换速率 每秒写入内存页和从物理内存中读出页的个数

      进程入交换率 交换区输入的进程数目

      进程出交换率 交换区输出的进程数目

      系统CPU利用率 系统的CPU占用率(%)

      用户CPU利用率 用户模式下的CPU占用率(%)

      磁盘阻塞 磁盘每秒阻塞的字节数
  • Microsoft系统结构企业数据中心功能测试

    2007-05-29 11:06:50

    基本部署

     

    基本部署测试包含了以下所有活动:准备服务器、装载操作系统、装载应用程序,将所有服务器和网络硬件升级到当前软件修订版,并配置整个系统的所有组件。 差不多所有这些活动都在《MSA EDC构建指南》中进行了说明,在此部分的测试过程中,测试团队将遵循该《构建指南》。 

    本测试部分的关注点是保证所编写的《构建指南》可以使具有相当经验的系统管理员(拥有 1 年以上 Microsoft 管理经验)能够理解并遵循。 无论测试人员何时遇到文档中有错或者可能误导目标用户的情况,测试人员都应该创建具有相应严重级别的错误报告,从而使文档能够加以更正。

    电子表格 MSA EDC Base Deployment Test Cases.xls 包含在 MSA EDC Test Case Files.exe 存档文件(本章的附录 3.1)中,为使用《MSA EDC 构建指南》构建企业数据中心进行了准备工作。 该电子表格中包含应该在系统构建的各个阶段(在《构建指南》中加以说明)之间执行的任务,这些任务在产品环境中并不需要执行,但是对于 MSA EDC 测试是必需的。

    应该在构建环境之前浏览 MSA EDC Base Deployment Test Cases.xls 的内容。 该电子表格为测试人员提供了一套跟踪部署服务器、操作系统 (OS) 完整构建过程以及在此环境中所有其他服务器的后 OS 构建过程的工具。

    在所有服务器都到达部署的后 OS 阶段之后,测试团队继续遵循《MSA EDC构建指南》完成测试的第一个阶段。 在所有服务器上构建的后 OS 阶段都完成之后,《构建指南》就可以作为本测试部分的测试用例文档了。

     

    基本网络服务

     

    基本网络服务部分测试的是中心和区域站点的网络命名服务,然后再验证跨 WAN 的数据复制。 这些服务包括 Microsoft Active Directory 目录服务、域命名系统 (DNS)、动态主机配置协议 (DHCP) Windows Internet 命名服务 (WINS) 

    基本网络服务部分测试的是中心和区域站点的网络命名服务,然后再验证跨 WAN 的数据复制。 这些服务包括 Microsoft Active Directory 目录服务、域命名系统 (DNS)、动态主机配置协议 (DHCP) Windows Internet 命名服务 (WINS) 

     

    测试项目

     

     所有中心和区域域控制器、DHCP 服务器和 WINS 服务器。 外围域控制器将在后面名为外围网络验证一节中测试。 
     
           
     测试区域服务器仅是为验证中心和外围服务器的复制和同步功能。 


     

    测试方法

     

     所有服务器都是通过构建验证测试 (BVT) 进行验证的。 
     
          
     所有服务器都要经过有负载和无负载可用性测试用例的测试。
     
     
           
     仅对 Active Directory 服务执行性能测试。 有关运行这些测试的详细信息,请参阅本指南的第 4 性能测试详细信息 


     

    资源需求

     

    本测试的可用性测试用例要求使用以下负载生成的软件:

     ADTest 负载生成工具,在本指南的第 2 MSA EDC 测试实验室环境中介绍过。 该工具可以用来模拟成千上万个用户整天都登录其桌面计算机所产生的域控制器上的负载。 
     
         
     域控制器性能数据可以用 Performance Monitor 计数器和 ADTest 工具的计数器报告功能来捕获。 计数器将在执行电子表格 MSA EDC Base Network Services Test Cases.xls 中列出的测试中进行监视,该电子表格包含在 MSA EDC Test Case Files.exe 存档文件(本章的附录 3.1)中。 


     

    基本操作系统服务

     

    本测试部分涉及到中央站点管理服务、中心和区域站点中的文件服务、中央站点中的打印服务和中央站点中的 Intranet 动态 Web 服务。 这些测试的所有测试用例都将在电子表格 MSA EDC Base OS Services Test Cases.xls 中加以详细介绍,该电子表格包含在 MSA EDC Test Case Files.exe(本章的附录 3.1)中。

     

    测试项目

     

     • 所有服务器都要经过有负载和无负载可用性测试用例的测试。 


         •
     中央站点中的 Microsoft Operations Manager (MOM) 服务器。

     
         
     Microsoft Windows 2000 文件服务,包括中心和区域站点中的动态文件系统 (DFS)
     
         
     中央站点中的 Windows 2000 打印服务。
     
         
     中央站点中连接到 Microsoft SQL Server 后端数据库的 Microsoft Internet 信息服务 (IIS)(带有简单 Microsoft Visual Basic COM+ ASP 应用程序)。 


     

    测试方法

     

     所有服务器构建都是通过 BVT 进行验证的。
     
        
     所有服务器都要经过有负载和无负载可用性测试用例的测试。
     
        
     为所有中央站点服务器(除装有 SQL Server 的计算机之外)创建和运行管理用例。 参阅本章下一节数据服务
     
        
     对文件和打印服务以及 Intranet 的动态 Web 服务执行性能测试。 对管理服务则不执行性能测试。


     

    资源需求

     

    本测试的可用性测试用例要求使用以下负载生成软件:

     Nile 试验程序可以用于端对端的动态 Web 系统测试(如本指南第 2 MSA EDC Test Lab Environment and Tools中所述)。 
     
          
     Web 负载工具 Microsoft Application Center Test (ACT) 可以与 Nile 试验程序同时运行,以模拟成千上万个用户访问 Intranet Web 应用程序。 该工具在本指南第 2 MSA EDC 测试实验室环境和工具中已详细介绍。
     
     
          
     Generic Test Tool(使用文件脚本)用来模拟成千上万个用户在中心和区域文件共享服务器上执行文件操作。 该工具在本指南第 2 MSA EDC 测试实验室环境和工具中已详细介绍。
     
     
           
     PrintStress 负载工具用来模拟成千上万个用户进行打印操作。 该工具在本指南第 2 MSA EDC 测试实验室环境和工具中已详细介绍。 


     

    度量工具

     

     服务器性能数据是用标准 Windows 2000 性能监视器计数器捕获的。 所有性能监视器计数器都在附录3.1 MSA EDC Test Case Files.exe 内的各自测试用例文件中。 


     

    数据服务

     

    本节描述了在 MSA EDC Prescrīptive Architecture Kit 中实现的测试数据服务。 所有 SQL Server 计算机都是按《MSA EDC 构建指南》中的说明文档构建的,并执行在整个 MSA EDC 环境中集成的基本级别的功能。 

    本测试部分包括一组测试,可以验证在服务器处于事务性负载时,使用高级的面向存储区域网 (SAN)  SQL Server 2000 快照 API 备份 SQL Server 数据的能力。 这些测试不是用于作为 SnapShot API 测试的全面套件,只是仅仅验证 MSA EDC 文档是否准确,指导是否正确。 

    这些测试不是用于作为全面的 SQL Server 基准测试,或者深入研究 SQL Server 功能。 它们仅用于验证服务器集成到 MSA EDC 环境中的功能。 要完成这一目标,重点应放在测试经过内部防火墙的数据路径、Active Directory 安全策略的影响、跨 WAN 的中心和区域站点之间的数据复制,以及基本验证 SQL Server 计算机群集是否能够支持读和写密集的情况。 

    MSA EDC 说明性结构中实现的数据服务由三个主要群集组成:一个 4 节点的只读网络负载平衡群集,一个 4 节点故障转移群集,以及 Unisys ES-7000 群集。 SQL Server 的功能测试主要关注以下方面: 

     验证《MSA EDC 构建指南》 的数据服务一节。 
     
          
     执行可用性、可管理性和安全性测试。
     
     
           
     测试数据服务与整个 MSA EDC 环境的集成。
     
     

    所执行的测试集中在与数据服务和 MSA EDC 结构的其他部分集成的 SQL Server 的功能上。 SQL Server 测试所有部分的测试用例都在电子表格 MSA EDC SQL2000 TestCases.xls 中已说明,该电子表格包含在 MSA EDC Test Case Files.exe 存档文件(本章的附录 3.1)中。 

     

    测试项目

     

     测试所有中央站点的 SQL Server 计算机。 
     
          
     测试 McData/Hitachi 数据系统存储环境中 SQL Server 2000 SnapShot Backup
     
     
           
     测试 4 节点的 SQL Server 群集和 4 节点网络负载平衡群集之间的数据复制。
     
     
          
     测试中心和区域 SQL Server 计算机之间的数据复制。
     
     
          
     测试使用 McData/Hitachi 数据系统存储环境中 CommVault Server  SQL Server 2000 SnapShot Backup 的备份和恢复。


     

    测试方法

     

     • 所有 SQL Server 计算机都要通过 BVT 验证。
     
         
     所有 SQL Server 计算机都要测试在有和没有测试负载应用程序时,SQL Server 的高可用性、网络连接和 SAN 可访问性。
     
         
     创建管理用例,并针对中央站点中的所有 SQL Server 计算机运行。
     
         
     执行性能测试来验证服务器间功能,这不作为基准测试。 查看(944) 评论(0) 收藏 分享 管理

  • 结合工具对WEBLOGIC进行调优。

    2007-05-29 11:00:18

    随着客户对系统性能的要求越来越高,对于任何系统来讲,如何保证系统的性能并且能够在出现性能问题之前可以预测和定位到问题,成了关键。系统上线之前的系统测试和上线之后对整个系统各个环节的性能监控是确保系统以优异性能运行的方法。

      去年的年末写了篇关于如何简单使用JPROBE发现和定位J2EE应用中的性能瓶颈,JPROBEQUEST公司的一个针对开发过程中应用程序的性能优化工具,但这不能满足上面提出的对于系统全面的性能监控和管理要求。针对这种要求,结合目前市场上的性能分析,调优和管理工具,比如IBM TivoliHP Openview等,这类工具的主要功能是对整个系统进行管理;另外一些,比如Wily,Veritas i3等,这类工具也具备一定的管理和对整个系统进行监控的能力,同时对某一技术层次拥有非常出色的调优和监控能力;其他的工具如Quest JProbe就如上面介绍的一样主要是针对开发过程中程序级别的性能优化。

      本文将结合WILYWEBLOGIC,以目前流行的应用架构来描述如何使用WILY这个工具对分布式系统进行全方位的性能监控和管理。以往针对J2EE的调优很多都是依靠开发人员或者是厂商技术人员根据经验来对问题进行定位和调优,不能做到对系统全方位的了解。借助于WILY之后,可以从客户体验出发到具体的一个SQL语句进行深入细致的分析,来完成对系统的性能的监控和管理。

      Wily公司成立于1998年,其第一个投资方是BEA,对WEBLOGIC有很好的支持。

      Wily的核心产品是InterScope,包括IntroScopeEnterprise Manager, IntroScope Agent, IntroScopeWorkStation.通过IntroScope可以明确的显示出在J2EE应用程序的什么为止出现了什么问题,比如在应用性能下降时,查明J2EE应用系统的什么位置导致问题是一个非常麻烦的工作,借助IntroScope将会变的非常简单。

    Wily Introscope的系统架构如下图

    Wily IntroScope特点

    1. 应用程序监控,低系统开销,全面监控系统性能,专有的Blame技术即时精确地辨别引起性能问题的构件;
    2. 应用服务器监控,最广泛的应用服务器支持,AutoProbe技术整合应用服务器自动获取服务器信息;多平台的支持;
    3. 对非JAVA系统的监控,通过EPAData API模块,100%线程安全;
    4. 系统管理流程整合,通过MIB与系统管理框架整合,控制台能与HP OpenView,Tivoli等整合,SmartTrigger报警系统与电子邮件,程序等整合;
    5. Wily特有的SmartStor技术可以方便快速的存储监控数据信息,并能根据数据信息完成系统历史数据分析和趋势分析;
    6. 部分专有技术成为业界的标准。

      通过IntroScope的结构图可以看到,核心部分为IntroScopeEnterprise Manager,通过部署在应用中的各种不同AGENT来收集系统运行中的各项性能指标数据,汇总到EM进行分析,并能利用对历史数据的分析对系统未来的性能表现进行评估;分析的结构可以具体的定位到什么位置除了什么问题,并将问题进行分类反馈到相应的系统维护人员,比如网络,系统硬件维护人员,或者是开发和测试人员,对出现的问题进行调整。

    WilyWeblogic的集成

    Wily有专门针对Weblogic的性能监控模板,为PowerPack,有效监控最为关键的WEBLOGIC资源,包括线程池,JDBC连接池等,并且第一个实现了对PortalBEA PORTAL,IBM PORTAL等)的性能管理和监控。通过PowerPack可以看到部署在WEBLOGIC上的应用的各种性能指标,以WEBLOGIC自带的Medical Records例子来说,如下图:

      可以看到包括系统资源在内的各种性能指标,和J2EE应用中各种组件的性能指标,通过配置可以跟踪到某一个具体的JSP或者是SERVLET的性能情况,并且可以配置在某一性能指标达到指定的阀值后进行报警操作。

      通过提供的Transaction Trace功能来分析超过指定时间的某一具体Transaction的内部情况。

      通过树状结构可以看到事务内部的调用情况并且快速的定位到某一有问题的操作,通过该技术可实时跟踪生产系统中的某个具体事务问题,提供事务的执行路径和组件响应时间的详细信息,如上图。并能及时修正事务的性能问题。

      除此之外该PowerPack包还提供了针对WEBLOGIC系统运行的一个性能查看控制台,通过该控制台可以直观的监控系统的那一部分出了问题,并且通过控制台可以方便的定制所关心的各种性能指标,定制后能通过浏览器的方式查看整个系统的运行情况。

    配置启动步骤

    1. BEA Weblogic的安装(安装时选择安装带的例子程序,详细步骤略);
    2. IntroScope的安装,安装后有IntroScope Enterprise Manager,IntroScope Workstation,IntroScope WebViewer三个组件(安装步骤略)
    3. PowerPack for WebLogic的安装。

      安装步骤,只需解压缩PowerPack包到BEA的安装目录内即可(其他目录也可以,在配置的时候进行指定即可);

    1. 配置启动Weblogic
      Weblogic自带的Medical Records服务为例子,配置方法如下
      修改启动文件startMedRecServer.cmd(不同的JVM配置略有不同)
    2.       set JAVA_OPTIONS = -Xbootclasspath/p:c:\bea\weblogic81\wily\connectors\AutoProbeConnector.jar;
    3.         c:\bea\weblogic81\wily\Agent.jar
    4.         -Dcom.wily.introscope.agentProfile=
      c:\bea\weblogic81\wily\IntroscopeAgent.profile
    1. 启动IntroScope Enterprise Manager;
    2. 启动Weblogic;
    3. 服务启动后,通过IntroScope WorkStation登陆后,可以在控制台看到被监控的应用节点和相关性能节点,展开后可以看到相应的性能指标值。

      配置启动完成后,通过设置相应的监控性能项,在控制台中可以通过各种不同类型的图表来观察系统的运行状态。

    如何发现系统性能问题?

    由于例子程序在运行中并没有很大的压力,通过控制台能看到系统的负载情况,为了模拟出和生产系统中相同的运行情况,这里借助于Segue公司的SilkPerformer来对Weblogic的例子程序进行加压(SilkPerformer也能监控到系统的各项性能指标,这里把采集的数据与Wily进行大概的比较),通过在不同负载下收集到的性能数据,来分析系统中可能存在的性能问题。

    模拟运行步骤

    1. 运行配置好的WEBLOGIC服务;
    2. 选择需要进行模拟的业务操作,如选择登陆操作。

      

    1. SilkPerformer录制这段业务操作,生成模拟压力的脚本;
    2. 进行压力模式设置,如图,设置不同的并发用户数。

    并发用户数

    测试时间

    10

    10分钟

    20

    10分钟

    压力模式设置

      可能出现的性能问题和观察到的性能指标特征描述

    性能问题

    性能指标特征

    问题描述

    系统性能随负载增加逐渐下降

    WEBLOGIC配置的线程数随负载的增加出现匮乏。

    资源瓶颈

    可预见的死锁,系统性能随运行时间的增加逐渐下降

    JDBC连接等资源无法回收,从性能指标图上可以看出可使用的该资源为0,并有大量等待。

    资源泄漏等

       10个并发系统的线程使用情况,通过WILY获取

      PendingRequestCurrentCount=0,WaitingConnectionCurrentCount=0,表明没有等待的request,系统响应很快。

      10个并发系统的JDBC使用情况,通过WILY获取

      Concurrent Invocations 最大值为8,并且平均查询的时间曲线表现也比较平稳。

      20个并发系统的线程使用情况,通过WILY获取

      ExecuteThreadCurrentIdleCount=0,PendingRequestCurrentCount开始有变化,对比10个并发用户的线程使用情况,很明显可以看出在20个并发的压力下,系统的线程资源开始不足。

      20个并发系统的JDBC使用情况,通过WILY获取

      平均查询时间有比较大的起伏,运行一段时间后可以看到该值为0Connection Count的值也保持不变,基本不响应获取连接请求。这个时候访问系统页面,无法进入。

    结论

      以上例子只是通过简单的性能指标来观察系统运行状态,对于一个复杂的系统还需要更多的性能指标数据来分析系统是否运行良好,比如可以检查系统是否存在内存泄漏,网络速度是否够快等。一般的系统调优很多都是在出了问题后,凭经验对照系统的性能表现来进行,很多时候可能会花费很多的时间才能定位的真正的性能瓶颈,借助工具之后,可以直观的对整个系统的各个部分进行监控,一旦出现问题,可以及时的报警并能迅速定位问题解决问题。

  • 性能测试的结果分析。

    2007-05-29 11:00:17

    前言:

    LORADRUNNER最重要也是最难理解的地方--测试结果的分析.其余的录制和加压测试等设置对于我们来讲通过几次操作就可以轻松掌握了.针对 results analysis我用图片加文字做一个例子,希望通过例子能给大家更多的帮助.初学LR难免会有判断错误的地方,请大家积极提出宝贵意见.

     

    机器配置:

    硬件环境:

    CPU奔四2.8E

    100G硬盘

    100Mbps

    软件环境:

    windowsXP 英文系统

    tomcat服务

    IE6.0 B/S结构系统.

     

    下面要讲述的例子添加了我们平常测试中最常用到的一些资源参数.对有些特殊的资源暂时在这里不做讲解.

     

    Mercury Loadrunner Analysis中最常用的5种资源.

    1.      Vuser

    2.      Transactions

    3.      Web Resources

    4.      Web Page Breakdown

    5.      System Resources

    Analysis中选择Add graphNew graph就可以看到这几个资源了.还有其他没有数据的资源,我们没有让它显示.

    如果想查看更多的资源,可以将左下角的display only graphs containting data置为不选.然后选中相应的点open graph即可.

     

    打开Analysis首先可以看的是Summary Report.这里显示了测试的分析摘要.应有尽有.但是我们并不需要每个都要仔细去看.

    Duration(持续时间),要知道你做这个测试一共持续了多久.你自己心里要有数这个时期内系统一共做了多少的事.以确定假如我下次增加更多的任务,这个测试又会持续多久.

    Statistics Summary(统计摘要)只是大概了解一下测试数据,对我们具体分析没有太大的作用.

    Transaction Summary(事务摘要)了解平均响应时间Average单位为秒.

    其余的看不看都可以.都不是很重要.

     

    在录制脚本中通常我们会使用到集合点,那么既然我们用到了集合点,我们就需要知道Vuser是在什么时候集合在这个点上,又是怎样的一个被释放的过程.这个时候就需要观察Vuser-Rendezvous.

    可以看到大概在350的地方30个用户才全部集中到start集合点,持续了3分多,730的位置开始释放用户,930还有18个用户,1110还有5个用户,整个过程持续了12.

    上面这张图是集合点与平均事务响应时间的比较图,较深颜色的是平均响应时间,浅色的为集合点,Vuser在集合点持续了1分后平均响应时间呈现最大值,可见用户的并发对系统的性能是一个很大的考验.

    接下来看一下与事务有关的参数分析.下看一张图.

    这张图包括Average Transaction Response TimeRunning Vuser两个数据图.从图中可以看到Vuser_init_Transaction(系统登录)对系统无任何的影响,Vuser达到15个的时候平均事务响应时间才有明显的升高,也就是说系统达到最优性能的时候允许14个用户同时处理事务,Vuser达到301,系统响应时间最大,那么这个最大响应时间是要推迟1分钟才出现的,在系统稳定之后事务响应时间开始下降说明这个时候有些用户已经执行完了操作.同时也可以看出要想将事务响应时间控制在10S.Vuser数量最多不能超过2.看来是很难满足用户的需求了.

    做一件事有时候上级会问你这件事办得怎么样了.你会说做完一半了.那么这个一半的事情你花了多少时间呢?所以我们要想知道在给定时间的范围内完成事务的百分比就要靠下面这个图(Transaction Response Time(Percentile)

    图中画圈的地方表示10%的事务的响应时间是在80S左右.80S对与用户来说不是一个很小的数字,而且只有10%的事务,.你觉得这个系统性能好么!

           实际工作中遇到的事情不是每一件事都能够在很短的时间内完成的,对于那些需要时间的事情我们就要分配适当的时间处理,时间分配的不均匀就会出现有些事情消耗的时间长一些,有些事情消耗的短一些,但我们自己清楚.LR同样也为我们提供了这样的功能,使我们可以了解大部分的事务响应时间是多少?以确定这个系统我们还要付出多少的代价来提高它.

    Transaction Response Time(Distribution)-事务响应时间(分布)

    显示在方案中执行事务所用时间的分布.如果定义了可以接受的最小和最大事务性能时间,可以通过此图确定服务器性能是否在可接受范围内.

    很明显大多数事务的响应时间在60-140S.在我测试过的项目中多数客户所能接受的最大响应时间也要在20S左右.140S的时间!很少有人会去花这么多的时间去等待页面的出现吧!

     

    通过观察以上的数据表.我们不难看到此系统在这种环境下并不理想.世间事有果就有因,那么是什么原因导致得系统性能这样差呢?让我们一步一步的分析.

    系统性能不好的原因多方面,我们先从应用程序看.有的时候我不得不承认LR的功能真的很强大,这也是我喜欢它的原因.先看一张页面细分图.

    一个应用程序是由很多个组件组成的,整个系统性能不好那我们就把它彻底的剖析一下.图片中显示了整个测试过程中涉及到的所有web.web page breakdown中显示的是每个页面的下载时间.点选左下角web page breakdown展开,可以看到每个页中包括的css样式表,js脚本,jsp页面等所有的属性.

    select page to breakdown中选择页面.

    见图.

    Select Page To Breakdown 中选择http://192.168.0.135:8888/usertasks,在下方看到属于它的两个组件,第一行中ConnectionFirst Buffer占据了整个的时间,那么它的消耗时间点就在这里,我们解决问题就要从这里下手.

    名称

    描述

    显示使用最近的 DNS 服务器将 DNS 名称解析为 IP

    址所需的时间。“DNS 查找”度量是指示 DNS 解析问

    题或 DNS 服务器问题的一个很好的指示器。

    显示与包含指定 URL Web 服务器建立初始连接所需

    的时间。连接度量是一个很好的网络问题指示器。此

    外,它还可表明服务器是否对请求作出响应。

    显示从初始 HTTP 请求(通常为 GET)到成功收回来

    查看(575) 评论(0) 收藏 分享 管理

  • 对ASP程序作负载测试

    2007-05-29 10:58:27

    介绍

    当我们从传统的CS结构的应用程序转到当前流行的Web空间的程序时,我们发现我们在尝试跟上不断增长的可测性需求和性能要求。其中一个最大的挑战在于如何确定你的程序能最多支持多少个用户的访问。你如何面对这一挑战?设定清晰的性能目标并使用Web压力测试工具会是一个好的开始。

    这篇文章将会介绍如何对你的ASP程序进行压力测试,同时将会介绍微软的压力测试工具- Web Application Stress test Tool (WAS).在接下来的一章,你将会学习到压力测试的基础,同时还会学到一些必要的技巧,通过这些学习,你将可以根据测试的结果更加有效的测试和修改你的程序。

    剧情

    假设你将要发布一个预期有1000用户使用的ASP程序。你清楚的知道你的程序至少能处理两个并发的用户的访问,因为你和你的伙伴能整天地点击这个ASP程序而不会出现任何的问题。你在怀疑到底两个用户能否精确地反映你的程序的受压能力。当然你可以使用标准的测试方法(发布你的程序,然后期待最好的结果出现),然而你还是决定预先测试你的程序的表现。这是一个好兆头!

    测试需求

    为了更好的测试你的ASP程序,你首先需要决定你的程序将来需要面对多大的压力。简单的说,压力或负载可以分解成以下数字:

    · 最低用户数量.
    (这个程序的使用者的最低数量是多少?通常这个数值可以是每日或没周或每月的点击量–当然你也可以分解成一个更可控的数值–每小时访问量,)

    · 并发用户的总量.
    (在最高峰时的糟糕状况是什么?作出相应的计划. 希望在有压力的情况下工作正常有效.)

    · 请求高峰值.
    (每秒钟需要产生多少ASP页面? 这也许是在衡量一个ASP程序对用户请求作出反应的能力时的一个最重要的因素.)

    为你的程序决定用户量和并发用户数通常是很困难的事情,而且是在你的程序在被实际使用之前。尤其是网络程序。即使是局域网程序也常常要面对用户增加的问题,所以准确的预计用户量将会是困难的。当你不知道怎么开始时,最好从基础的开始:

    Internet需要考虑的问题:

    · 分析你已有的IIS日志。这个数值会暗示出一些实际的几率

    · 你的站点将会有多流行?流行的站点一天会有100万或更多的访问量。不会那么流行?那么假设一些不同的情况?假设你有1000以上的用户群?你能通过增加更多的硬件设备来解决扩展性问题吗?或者,你的程序的架构会成为瓶颈吗?

    · 什么是最糟糕的情况?问一下你的朋友这些情况会发生吗?

    Intranet需要考虑的问题:

    · 同样地,分析你已有的IIS日志。

    · 这个ASP程序是可以给每个人用的吗?在公司内部网有多少台机器?你的系统管理员可以告诉你有关网络高峰流量的东西吗?

    · 这个程序有特定的用户对象吗?只是HR人力资源部?有多少个人力资源部的员工在使用?

    · 最糟糕的情况是怎样的?

    如果你不能提前决定适当的负载,那么确定你的程序的最高上限将是你最好的选择。如果被10个用户点击,你能在1秒内产生多少的ASP响应结果?100个呢?1000个呢?10000个呢?记录你的基准。当你从实际使用中得到你的流量日志显示你正在接近你的极限时,你将不仅会为你知道你当前的极限是什么,而且你会有时间准备解决的办法。

    介绍测试工具WAS

    虽然有很多的压力测试工具可供选择,但是在本文,我会主要集中介绍WAS(就是以前所谓的Homer),WAS
    是当前微软的标准网页压力测试工具。如果你已经对WebCat很熟悉了,你会激动的发现WAS可以很方便地导入现有的WebCat脚本。如果你以前用过InetMonitor,你会激动的发现WAS也是基于GUI的(对于很多使用命令行的WebCat的用户来说这将会是一个很好的附加特性)。另一个好处是它是免费的,我的一个好朋友常说,“如果是免费的,那么就是我的。”除了它的价格优势外,这个工具还提供了完整的功能,而且还在不断地升级更新中。Microsoft.com经常要使用它,所以他们会明白这个工具的重要性。

    但是你不需要过多地理会我的话,只管自己去尝试。我在文章的结尾会提供一个列表,列出一些第三方的压力测试工具,你可以自己决定选什么工具。底线是你需要一个工具,能够把你的ASP程序放到负载下,在发布之前测试它。

    开始使用WAS

    我会教你怎样第一次使用这个工具来测试一个ASP页面。我也会介绍怎样使用署名登录的测试和多用户并发访问的测试,因为这些东西会使初学者一头雾水。

    首先你需要下载和安装这个工具。你能从下面的链接中得到最新版本http://www.microsoft.com/technet/treeview/default.asp?url=/TechNet/itsolutions/intranet/downloads/webstres.asp. 在这个网站上还会有关于这个工具的入门指导,你可以随时回去看看。

    以下是在安装时需要注意的几点:

    · 不要把WAS安装在你的测试目标服务器上,安装在别的机器以确保得到准确的测试结果。

    · 在安装WAS的机器上需要有ADO2。1以上的版本。如果oledb32.dll的版本不是2.10.3711或以上,ADO会被WAS自动安装。

    · 在安装后你会有一个完整的安装日志,默认会在\Program Files\Microsoft Web Application Stress Tool\INSTALL.LOG.

    · 如果你已经安装了旧版本的WAS,更新时会保留数据文件完好。WAS使用Access .mdb文件作为数据存储文件。WAS的初始.mdb包是WAS.mdb,可以在程序安装路径找到。

    · WAS在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WAS存储注册信息。

    在运行我们新安装的WAS之前,我们创建一个简单的ASP脚本作为测试页面。创建一个新的叫做MyASPPage.asp 的ASP页面,然后插入以下脚本:
    MyASPPage.asp
    <%@ Language="VBscrīpt" %>
    <HTML>
    <BODY>
    <% CONST ForAppending = 8
    set ōFSO = server.CreateObject("scrīpting.FileSystemObject")
    'translate our virtual directory into a physical path
    strFilePath = Server.MapPath(Request.ServerVariables("PATH_INFO"))
    'grab the root of the virtual directory
    strFilePath = left(strFilePath, (InstrRev(strFilePath, "\")))
    strFilePath = strFilePath & "MyFile.txt"
    'write out to the screen the full file path
    Response.Write(strFilePath & "<BR>")
    set ōTS = oFSO.OpenTextFile(strFilePath,ForAppending, true)
    oTS.writeline("Session Id: " & Session.SessionId & chr(32) & _
    "Time: " & Cstr(now()))
    %>
    </BODY>
    </HTML>

    这个ASP脚本将在一个文本文件中插入SessionId及其活动时间,这样我们可以方便地确认我们的ASP页面是否在正确的执行。一旦你熟悉了这个工具,你就可以指向你实际的ASP页面以作真正的测试。

    在服务器的恰当的目录放置你的ASP页面以使它可以被匿名访问。我们在后面将会再试署名访问的测试,但是现在我们需要运行一个最基本的测试。用全路径URL浏览你的页面,包括你的服务器名。例如,一个完整的URL看起来像http://MyServer/MyVirtualDirectory/MyASPPage.asp。一旦你能成功地浏览你的ASP页面(务必检查MyFile.txt这个文件,这个文件会被程序写在虚拟目录的物理位置),你就可以运行WAS做实际的测试了。
  • 第三方模拟测试环境的搭建

    2007-05-29 10:57:34

    近年来我一直从事中间业务软件的开发与维护,所谓中间业务,就是银行作为中间人、代理人的角色帮客户和第三方委托单位办理的一些业务,比如各种话费代收、保险费代缴、水费代收等等。开发中间业务软件,难点在于银行方要与第三方(电信局等委托单位,以下简称第三方)实时交换数据,而银行与第三方的软件开发往往不是同一个软件公司承担,从而导致需求分析、接口定义的不一致性、复杂性,并且双方技术力量的不同经常导致开发进度的不一致,我行为保证开发进度以及软件质量,往往需要为第三方搭建一个模拟测试环境。以下是我在组建模拟测试环境的实践中总结的一些经验和方法。

        模拟环境要能够较为全面地模拟出第三方系统所能够实现的功能,从总体上来说,所有的交易可划分为两大块:由我方发起的交易和由对方发起的交易;为此在模拟机上要建立相应的模拟server 程序和模拟client 程序,server程序接收我方发起的交易而client程序发起对方的交易;

        模拟环境一般只模拟到对方的前置机一级,因为我方与对方系统要交换的只有请求报文和响应报文,至于各自系统中对每笔交易的帐务处理和流程对对方都是透明的。当然模拟环境也必须模拟到前置机一级,否则请求报文还没送到对方就被返回,根本没有测试到我方相关的通讯子程序,实际联调的时候还须先解决通讯中可能存在的问题,就没有起到模拟第三方的作用了。

        双方通讯采用标准的tcp/ip协议,报文交换则可有几种不同的方法,我们采用的主要有ISO8583国际标准包协议和自定义字符串方式两种,建议在对方允许的情况下尽量采用ISO8583包格式,既可减少通讯量又可利用统一的打包、解包函数。联系前面提到的server 和client 服务,则模拟前置机上可能用到的程序共有以下四个:采用ISO8583报文交换的server程序 和client程序 ,以及采用自定义字符串方式交换报文的server程序和client 程序。当然,针对某个特定的委托单位只会用到其中的一对程序。一般来说,server 程序要常驻内存,它接收请求然后返回模拟的响应报文,因为没有实际的第三方数据库可供检索和处理,server程序只能简单地根据不同的请求类型返回相对固定的响应数据,例如,对所有的用户的话费查询,server程序只能返回同样的话费余额和明细,当然,不同类型的请求报文返回的响应报文还是不一样的。如果时间充裕,还可以把server的功能做得尽可能完善:对接收到的请求报文格式作合法性检查,对每一种交易都可以有成功与失败两种返回结果,甚至考虑每一种交易的可能的自动冲正报文,等等;client 程序则做成一般的执行程序,每向我方前置机发起一个交易后即退出运行。client 程序应能模拟第三方发起的每种交易,并接收相应的返回。client 程序还应模拟第三方的可能的错误报文,以检验我方通讯程序能否正常处理。

        在确定了通讯协议和报文交换格式之后,对每一个交易,还存在一个长联接和短联接的问题:发起方发起请求后是一直保持原来的联接等待对方的响应呢还是立即断链,等对方取得响应报文后由对方重新建立新的联接?若采用前一种实现方法则称为长联接,实现起来较为简单,且可靠性较高,比较适合于业务量较小且对方业务处理延迟较小的单位和场合,长联接的缺点是不能缓冲请求报文与响应报文,当交易高峰期很多请求差不多同时到达的时候会拒绝一些请求,从而影响到业务的办理。短联接则不同,一般短联接都会在内存中建立两个消息队列,一个存放所有到达的请求报文,另一个存放所有收到的响应报文;对应每一个消息对列,有一个daemon 进程(即常驻后台运行的程序)专门处理其中的每一个报文,这样就把发起请求后等待响应报文的时间去掉了(这部分时间包括对方业务处理的时间和返回的传送时间,一般占整个交易时间的80%以上),请求daemon只管不停的把请求队列中的请求报文发出去,不需要等待任何一个响应报文的返回,而响应daemon 则专门处理收到的响应报文;这里要特别注意的是,由于业务处理系统的并发处理机制,发出去的请求报文顺序与接收到的响应报文顺序不一定相同,因而要确定一种请求报文与响应报文之间的连接方式,一般考虑用报文中某个唯一字段如主机流水号来建立两者之间的一一对应,以免造?quot;张冠李戴",即把后一个交易的响应报文作为前一个交易的响应返回给前台;当然短联接也有其缺点:对消息队列的管理不当有可能导致响应报文严重超时,例如第三方数据库down下来了,把所有的请求报文缓冲起来,等几分钟或几十分钟后数据库恢复正常,再对缓冲的请求报文进行处理,事实上此时的处理已经无效,因为发起请求的前端早就对此笔交易作超时处理,不需要它的返回报文了。


        下面简单介绍一下以socket编程的server程序和client 程序的一般处理流程:

    server端:

      1、通过socket()函数向系统申请一个套接字;

      一般用法:socket(AF_INET , SOCK_STREAM , 0 ) ;

      其中AF_INET SOCK_STREAM 为系统定义的常量,指明了所需套接字的用途。

      2、调用bind()函数为该次通讯定义一个侦听端口号

      3、调用listen()函数侦听可能的请求

      4、组织循环,处理收到的每一笔请求:

      4.1 用accept()函数建立交换数据的通道;

      4.2 用read()函数读取请求报文

      4.3 根据请求报文进行业务处理,形成响应报文

      4.4 调用write()函数返回响应报文

      4.5 调用close()函数关掉套接字


    client端:

      1、通过socket()函数向系统申请一个套接字;

      2、调用connect()函数与server 端建立连接

      3、调用write() 函数发出请求报文

      4、调用read()函数读取响应报文

      5、调用close()函数关掉套接字


        总之,第三方模拟测试环境的建立不仅有效的减少了合作双方的摩擦,提高了我方应用系统的开发进度,而且极大的方便了整个应用系统的联调,并且在系统运行、维护、优化等过程中也发挥了巨大的作用。

  • 怎样做好测试工作。

    2007-05-29 10:38:53

       在信息技术日新月异的今天,顺应世界经济一体化的潮流,中国软件行业加强了与世界同行的沟通与交流,基于本身提高软件质量的迫切需要,在国外优秀的软件企业中被证明为提高软件质量行之有效的途径,软件测试开始越来越受国内软件行业重视。各种各样的测试工具和测试理论,也都逐渐被我们所熟知。软件测试也开始成为人们平时谈论和网上探讨的热点话题。

        在软件测试倍受注目的情况下,身为一名软件测试人员,如何高质量的完成公司交给的测试任务,无疑是我们应该考虑首要问题。从事软件测试已近两年,从刚开始的一脸茫然,到如今的手到擒来,期间也经历了很多曲折,总结这两年来的经念教训,我认为有必要就软件性能测试这个话题和大家展开探讨,与大家共同分享软件测试的得失,为提高我们的测试水平尽一分薄力。

     


    引言

        作为评价产品性能的重要手段,性能测试在软件测试工作中占的比重一直很大,要最终提供一份准确,权威的测试报告,测试人员的努力工作自然不可或缺,但更重要的是测试人员清晰的工作思路,简洁的测试流程和良好的测试方法。


    目前性能测试存在的问题

        总结以往进行的性能测试,虽然测试人员自始至终对测试工作都做到了认真负责,但测试报告出炉后,大家总觉得美中不足,对测试结果都心存疑虑,尤其在那些时间跨度较长、针对不同的测试对象的性能对比测试中,或多或少都存在以下几个方面的问题:

    1. 测试准备不充分,测试目标不明确,测试计划不详细;

    2. 缺乏测试以及针对测试对象的技术储备;

    3. 测试环境的稳定性及前后一致性不足;

    4. 测试数据精确性和代表性不足;

    5. 测试描述不精练;


        下面,我们就剖析以上问题的同时,探讨一下如何解决这些问题。


    性能测试准备

        这是一个经常被测试人员忽略的环节,在接到测压任务后,基于种种其它因素的考虑,测试人员往往急于进度,立即投入到具体的测试工作去了,测试、记录、分析,忙的不亦乐乎,工作进行了一半才发现,或是硬件配置不符合要求,或是网络环境不理想,甚至软件版本不对,一时弄得骑虎难下,这都是没有做好测试准备惹的祸。

        那么我们应该如何做好性能测试的准备工作呢?

        做软件项目有需求调查、需要分析,我们做测试也一样。在拿到测试任务后,我们首要的任务就是分析测试任务,在开始测试前,我们至少要弄清以下几个问题:

    a) 要测试什么或测试的对象是谁?

    b) 要测试什么问题或我们想要弄清楚或是论证的问题?

    c) 哪些因素会影响测试结果?

    d) 需要怎样的测试环境?

    e) 应该怎样测试?

        只有在认真调查测试需求和仔细分析测试任务后,才有可能弄清以上一系例的问题,只有对测试任务非常清楚,测试目标极其明确的前提下,我们才可能制定出切实可行的测试计划。


    明确测试目标
    , 制定详尽测试计划

        在对测试需求充分了解的基础上,制定尽可能详细的测试计划,对测试的实施是大有裨益的。测试计划的制定,大多专业的测试书籍多有详述,故本文不再鏊述。

     


    测试技术准备

        在目前的大环境下,要求测试人员在短时间撑握所有的软、硬件知识是不太现实的,但平时测试人员应抓紧对测试工具和测试理论的研究,在测试计划中,应给研究测试对象和测试工具分配充足的学习时间,只有在充分撑握测试工具,完全了解测试对象的前提下,我们才能够实施测试。建力在错误的认识上的测试,既使你再努力,结果也是背道而驰,也很难证明问题,更不用说用这样的测试报告去说服用户。

     


    配置测试环境

        只有在充分认识测试测试对象的基础上,我们才知道每一种测试对象,需要什么样的配置,才有可能配置一种相对公平、合理的测试环境(这在性能对比测压中尤其重要)。

        考虑到其它因素,如网络锁、网速、显示分辩率,数据库权限、容量等对测试结果的影响。如条件允许,我们最好能配置几组不同的测试环境。

     


    测试数据的获取和处理

         在所有的测试中,测试数据的收集工作都是较为困难的,GIS软件更是如此,每一种软件都有它的文件格式,有的软件还有几种格式。在这种情况下,我们只能把第三方格式的数据转换成每一种被测试软件自已的格式。同时,还应对数据作一定的处理,如处理数据冗余,处理显示风格等。如在测试时会更新数据,操作前一定要备份数据。

        此外,还应评估数据格式和数据量对测试的影响,如有必要,应准备多组数据。

        最后,一定要检查测试数据的有效性,避免损坏数据对测试结果的影响。

     


    如何开展性能测试

        测试前期的准备工作纷繁复杂,做好测试准备工作,已是完成了测试工作的一大半,但要产生一份具有说服力的测试报告,还应正确把握测试的强度,保持测试的一致性,提高测试的精度。

        判断软件的好坏,要看软件解决实际应用的能力,只有在一定的测试强度下,才能测试出各种软件资源的消耗率,软件运行的速度,软件的稳定性。通过对比在不同的测试强度下,不同软件每一个功能模块解决实际问题的能力和软件运行的效率,我们才可能判断出不同软件的每一个模块的强弱,甚至于整个软件的优劣。

        性能测试开始后,所有参数的输入都应遵循统一的标准,无论是哪一个环节,哪怕是一点点偏差,都应立即纠正,觉不能心存侥幸。要特别注意外部环境对测试结果的影响,如果在整个测试过程中,外部境不一致,如网速、机器内存使用率不一样,就有可能导制测试结果与实际情况有出入。

     


    如何总结性能测试

        对测试的终结,实际就是对测试数据的分析和处理。我们测试工作做的再好,如最终到用户手中的是一堆杂乱无章的数据,那也是美中不足。

        首先,我们最好从所有的测试数据中,筛选出具有代表意义的数据,做出统计图,然后和开发人员一起,认真分析数据,找出软件存在的问题,得出测试结论。大多数用户,真正需要的就是科学、客观的测试结论。

     


    结论

        各种软件性能测试,范围大小不同,强度高底有别,但只要本着认真、客观,科学的工作态度,遵循本文论述的方法,做好测试工作是不难的。本篇文章主要谈的是软件性能测试方面的问题,相信对其它方面的软件测试也有一定的借鉴作用。
  • 发帖了,都是高人的精华帖。

    2007-05-29 10:37:08

    暂无
  • 261/212>