qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

LoadRunner中的IP欺骗的设置以及误区

最近在忙着部署web性能测试的环境后,对IP欺骗进行设置,特地做个笔记,给自己的学习历程留下点足迹。
  一. 什么是IP欺骗?
  做什么事首先要问个为什么,如果知道为什么了,即使不知道如何做,简单,google it,答案总会找得到,google.cn不行,google.com总行,来自全球的搜索结果,总会有帮助。
  IP spoof即IP 电子欺骗,我们可以说是一台主机设备冒充另外一台主机的IP地址,与其它设备通信,从而达到某种目的技术。 IP是网络层的一个非面向连接的协议, IP数据包的主要内容由源IP地址,目地IP地址,所传数据构成,IP的任务就是根据每个数据报文的目的地址,路由完成报文从源地址到目的地址的传送。至于报文在传送过程中是否丢失或出现差错,IP不会考虑,那是TCP的事。对IP来讲,源设备与目的设备没有什么关系,它们是相互独立的。IP包只是根据数据报文中的目的地址发送,因此借助高层协议的应用程序来伪造IP地址是比较容易实现的。
  二. 为什么要设置IP欺骗?
  对于某些服务器,是根据IP来分配资源,当某个IP地址访问频繁或者访问量过大时,服务器会拒绝访问,或者让你输入验证码,当然也有可能是来避免搜索引擎robot的任意爬取。
  网上还有些言论是说使用更多的IP来模拟较真实的用户使用环境,来测试负载均衡技术的处理能力,但是我始终想不明白这跟那个有什么关系,如果服务器可以接受同一IP大量访问,负载均衡不照样起作用,照样可以被测试到吗?(私人观点,意见可以保留)
  三. 设置前的准备工作
  1. 要有局域网的环境,因为只能设置局域网内的网段;
  2. 本地的IP设置不能为“自动获取”,必须指定一个静态IP。
  四. 如何设置
  第一步:
  运行Mercury LoadRunner- Tools-IP Wizard
  第二步:
  选择create new setting,点击“下一步”
  此时出现的页面是让输入服务器的IP地址,Loadrunner通过该地址更新路由表。
  客户端计算机上添加新的IP地址后,服务器需要将该地址添加到路由表,以便能够识别返回到客户端的路由。如果服务器和客户端具有相同的子网掩码、IP 类和网络,则不需要修改服务器的路由表。如果客户端和服务器计算机之间有一个路由器,则服务器需要识别经过该路由器的路径。确保将以下路由添加到服务器路由表:从 Web 服务器到路由器的路由,以及从路由器到负载生成器计算机上的所有 IP 地址的路由。
  第三步:
  在输入web服务器地址的页面中输入地址后,直接点击“下一步”
  进入IP添加页面,点击“add”进行添加
  第四步:
  在from ip 输入框中输入起始ip,在Number to输入框中输入ip地址的位数,输入正确的子网掩码,选中“verify that new ip addresses are not already used”,点击“ok”,此时IP Wizard会自动按照设置生成IP地址,并且将已经占用的IP列出。
  第五步:
  确认可用IP地址列表内容后,点击“ok”,此时IP Wizard提示需要重新启动计算机,点击“save as”保存IP列表,点击“ok”,重新启动计算机。
  注:当保存IP地址列表后,下次启用IP欺骗时直接选择load previous setting from.....
第六步:
  启用IP欺骗
  选中Tools下的Expert mode,启动专家模式Expert mode,再点击Tools下的options,在Genearl选项卡中设置以线程方式或进程方式进行性能测试,这个选项一定要与当前场景的模式相匹配,也就是说使用本地虚拟IP测试时需要选中线程方式,使用负载生成器使用虚拟IP测试时需要选中进程方式。
  在controller中,选择 Scenario-〉Enable IP Spoofer,此项设置允许使用IP欺骗。
  第七步:
  验证IP欺骗是否有效
  方法一
  计算机重新启动后,在运行行中输入:CMD,在DOS命令提示符窗口中输入:IPCONFIG,此时便可看到虚拟的IP地址均已经被启用;
  方法二
  在脚本的Action()部分增加如下代码:
  char * ip=lr_get_vuser_ip();
  if(ip)
  lr_vuser_status_message("The ip address is %s",ip);
  else
  lr_vuser_status_message("IP spoofing disabled");
  然后通过控制器设置并运行场景,日志中可以看到IP地址。
  第八步:
  这一部很重要,如果不做这一步,很多IP地址就被占用了,可能你们网管跟你闹上了呵呵。打开IP Wizard,选择restore original settings释放所有虚拟IP。
  五.误区及答疑
  到现在为止,IP spoofer设置就告终了,但是最后有些疑问或者叫误区需要分享一下。
  Q/A:
  1.自己本地的IP地址不在虚拟IP段内,有影响吗?
  答:没有
  2.是否需要配置多个load generator来对应不同的虚拟IP呢?
  答:不用,这个过程是generator自己完成的。
  3.不同的generator是否都需要设置IP spoof呢?
  答:Definitely Yes,不然的话不设IP欺骗的那台只会使用一个本地的IP执行。
  4.虚拟用户数和虚拟IP数量上有什么关系呢?
  答:如果虚拟用户数大于IP数量时,每个用户会得到不同的IP,否则,会有IP重复的现象。
  5. 还有别的办法添加虚拟IP吗?
  条条大路通罗马,试试这个。
  在一台机上虚拟的IP跨网段的处理,可通过在服务器端添加路由来实现。
  例:
  服务器IP:192.168.0.1
  测试机IP:192.168.0.206
  测试机上添加的虚拟IP: 192.168.10.1~128
  那么在服务器端执行以下命令:
  route add 192.168.10.0 mask 255.255.255.0 192.168.0.206

posted @ 2014-07-02 16:31 顺其自然EVO 阅读(529) | 评论 (0)编辑 收藏

Python和Django在Windows上的环境搭建

 作为一个.NET程序员,真心不喜欢Python以及PHP这种松散的语法。有人说,程序员应该多学几门语言,本想学习Java,无奈感觉Java的语法太啰嗦了。很多人都推荐Python,说它的语法简洁,执行效率高。趁这两天空闲,开始学习Python。
  先从搭建环境开始。作为一个Python初学者来说,一个趁手的编译器是很重要的,本想用VS来开发Python,但是感觉实际开发中没有几家公司会用VS来开发Python,没办法就换成了MyEclipse。
  一、首先下载和安装Myeclipse就略过了。
  二、安装Python。一般的开发环境是在linux,网上很多教程和视频也都是在linux下配置和开发的。我的开发环境是64位win8系统,先从官网下载64位的Python安装程序。
  可以从这里选择要下载的版本 https://www.python.org/downloads/windows/ 一般比较常用的是2.x版本,因为要学习Django,而Django只支持2.x版本,所以我安装的是2.7.7。选择一个版本后会跳转到支持的系统选择的页面。可以根据系统选择不同的版本。如果在64为系统是安装的是32位的Python会出现很多乱七八糟的问题,尤其是后面安装对MySQL的支持的时候,会提示没有安装Python。
  安装完毕后,在环境变量中添加Python的安装路径。这样才支持在命令行下执行Python命令。如果你命令行下出现如下界面,就证明安装成功:
  
  三、安装插件。安装完MyEclipse后,就要安装Python开发插件,安装PyDev有好两种方法。
  1、离线安装,下载PyDev离线包,然后解压缩到dropins文件夹下。这种方法我没试。
  2、在线安装。help --> Install from site,在work with框中填入PyDev -http://update-production-pydev.s3.amazonaws.com/pydev/updates/site.xml 。等MyEclipse解析完后会自动安装,这个过程有点长。
  一般安装完毕后会提醒你重启,重启后,只要在window --> preferences 中能看到PyDev,就表示你安装成功了。
  四、配置PyDev:
  在window --> preferences --> PyDev --> Interpreters - Python Interpreter 中点击new,然后找到你的python安装目录即可。
  
点击New按钮后弹出如下窗口:
  
  选择你刚才安装的Python路径下的Python.exe文件。
  五,配置对MySQL的支持。
  如果你用的是sqlli的话,Python是默认支持的。但是对MySQL需要安装第三方的包。
  下载地址:http://pypi.python.org/pypi/setuptools ,在页面的最底部会看到文件下载链接,下载的是Python源码,如果你不先安装SetupTools而是直接安装MySQLdb,那么很有可能会提示如下错误:
  ImportError: No module named setuptools
  下载后解压出来,在命令行下进入解压的目录。执行:
  python setup.py install
  按回车后会自动安装。接下来需要下载MySQL-Python,下载地址:http://pypi.python.org/pypi/MySQL-python#downloads 选择版本后会跳转到下载页面。官方提供的貌似只有32位的,不知道在64位系统下会不会出现不兼容现象,我是在 http://www.codegood.com/downloads 下载的64位安装程序。下载后直接安装就可以了。
  六、安装Django。
  Django是Python下最流行的Web开发框架,集成了管理后台和ORM框架,功能很强大。下载地址  https://www.djangoproject.com/ 目前版本是1.6.5。1.7是测试版。支持的Python是2.6.5.
  下载完解压出来,在命令下进入解压后的目录,找到 setup.py 文件,执行:
  Python setup.py install
  会自动安装。安装后在Python的库目录会找到Django的安装文件,在Lib\site-packages\Django-1.8-py2.7.egg\EGG-INFO\scripts 这个路径下会看到一个django-admin.py文件,这个文件时创建Django项目的核心文件,创建一个Django的Web项目以及运行Django都会用到它。
  安装完成后,在MyEclipse里面创建项目时会出现 PyDev Django Project项目。到此,Python和Django的环境就算配置完毕。

posted @ 2014-07-02 16:31 顺其自然EVO 阅读(199) | 评论 (0)编辑 收藏

常用软件测试工具的分析

工具名称:WinRunner
  来源: Mercury公司
  类型:功能性测试
  费用:收费昂贵
  功能概要: Winrunner 最主要的功能是自动重复执行某一固定的测试过程,它以脚本的形式记录下手工测试的一系列操作,在环境相同的情况下重放,检查其在相同的环境中有无异常的现象或与实际结果不符的地方。可以减少由于人为因素造成结果错误,同时也可以节省测试人员大量测试时间和精力来做别的事情。功能模块主要包括:GUI map、检查点、TSL 脚本编程、批量测试、数据驱动等几部分
  工具名称: LoadRunner 来源 : Mercury公司
  类型 :性能与负载压力
  费用 :收费昂贵
  功能概要:LoadRunner? 是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使用LoadRunner ,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。LoadRunner 是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner 的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。此外,还能支持广范的协议和技术,为您的特殊环境提供特殊的解决方案。
  工具名称:QuickTest Pro
  来源 :Mercury公司
  类型 :功能测试和回归测试
  费用 :收费昂贵
  功能概要:QTP是一个B/S系统的自动化功能测试的利器,软件程序测试工具。Mercury的自动化功能测试软件QuickTest Professional ,可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。Mercury QuickTest Pro 是一款先进的自动化测试解决方案,用于创建功能和回归测试。它自动捕获、验证和重放用户的交互行为。 Mercury QuickTest Pro为每一个重要软件应用和环境提供功能和回归测试自动化的行业最佳解决方案。
  工具名称:TestDirector
  来源 :Mercury公司
  类型 :测试管理
  费用 :收费昂贵
  功能概要 :基于WEB的测试管理工具,他能够让你系统地控制整个测试过程,并创建整个测试工作流的框架和基础,使整个测试管理过程变得更为简单和有组织。他能够帮助你维护一个测试工程数据库,并且能够覆盖你的应用程序功能性的各个方面。T并且还为你提供了直观和有效的方式来计划和执行测试集、收集测试结果并分析数据。还专门提供了一个完善的缺陷跟踪系统。并可以同Mercury公司的测试工具、第三方或者自主开发的测试工具、需求和配置管理工具、建模工具的整合功能。你可以通过他进行需求定义、测试计划、测试执行和缺陷跟踪,即整个测试过程的各个阶段。
  工具名称:SilkTest
  来源 : Segue公司
  类型 :功能测试和回归测试
  费用 :收费昂贵
  功能概要:SilkTest 是面向Web应用、Java应用和传统的C/S应用,进行自动化的功能测试和回归测试的工具。它提供了用于测试的创建和定制的工作流设置、测试计划和管理、直接的数据库访问及校验等功能,使用户能够高效率地进行软件自动化测试。为提高测试效率,SilkTest提供多种手段来提高测试的自动化程度,包括:从测试脚本的生成、测试数据的组织、测试过程的自动化、测试结果的分析等方面。在测试脚本的生成过程中,SilkTest通过动态录制技术,录制用户的操作过程,快速生成测试脚本。在测试过程中,SilkTest还提供了独有的恢复系统(Recovery System),允许测试可在24×7×365全天候无人看管条件下运行。在测试过程中一些错误导致被测应用崩溃时,错误可被发现并记录下来,之后,被测应用可以被恢复到它原来的基本状态,以便进行下一个测试用例的测试。
 工具名称:SilkPlan Pro
  来源 : Segue公司
  类型 :测试管理
  费用 :收费昂贵
  功能概要:SilkPlan Pro 是一个完整的测试管理软件,用于测试的计划管理、文档管理和各种测试行为的管理,能够跨越应用的全部生命周期,从早期的计划阶段直至测试设计都自动安排和执行。它包括需求的检查及确认,测试执行的安排和产品是否具备发布条件的评估的报告功能。此外,还提供了基于Web的自动测试功能。在软件开发的过程中,SilkPlan Pro可以使测试过程自动化。  SilkPlan Pro 为所有的自动化测试用例提供了基于Web的管理。
  工具名称:SilkPerformer
  来源 : Segue公司
  类型 :负载压力测试
  费用 :收费昂贵
  功能概要:SilkPerformer 是一种在工业领域最高级的企业级负载测试工具。它可以模仿成千上万的用户工作在多协议和多计算的环境下。利用SilkPerformer 可以在企业电子商务应用部署前预测它的性能,不管它的大小和复杂性。可视的用户化界面、实时的性能监控和强大的管理报告可以帮助用户迅速地解决问题。SilkPerformer 提供了在广泛的、多样的状况下对电子商务应用进行弹性负载测试的能力,通过TrueScale 技术,SilkPerformer 可以从一台单独的电脑上模拟成千上万的并发用户,在使用最小限度的硬件资源的情况下,提供所需的可视化结果确认的功能。在独立的负载测试中,SilkPerformer 允许用户在多协议多计算环境下工作,并可以精确地模拟浏览器与Web应用的交互作用。 SilkPerformer 的TrueLog 技术提供了完全可视化的原因分析技术。通过这种技术可以对测试过程中用户产生和接收的数据进行可视化处理,包括全部嵌入的对象和协议头信息,从而进行可视化分析,甚至在应用出现错误时都可以进行问题定位与分析。
  工具名称:ClearQuest
  来源 : IBM公司
  类型 :缺陷管理
  费用 :收费昂贵
  功能概要:提供基于活动的变更和缺陷跟踪。以灵活的工作流管理所有类型的变更要求,包括缺陷、改进、问题和文档变更。能够方便地定制缺陷和变更请求的字段、流程、用户界面、查询、图表和报告。开箱即用特性提供了预定义的配置和自动电子邮件通知和提交。 与 Rational ClearCase 一起提供完整的 SCM 解决方案。提供基于活动的变更和缺陷跟踪。 以灵活的工作流管理所有类型的变更要求,包括缺陷、改进、问题和文档变更。 能够方便地定制缺陷和变更请求的字段、流程、用户界面、查询、图表和报告。 开箱即用特性提供了预定义的配置和自动电子邮件通知和提交。 与 Rational ClearCase 一起提供完整的 SCM 解决方案。 拥有“设计一次,到处部署”的能力,从而可以自动改变任何客户端界面(Windows、Linux、UNIX 和 Web)。 可与 IBM WebSphereStudio、Eclipse 和 Microsoft .NET IDE 进行紧密集成,从而可以即时访问变更信息。 支持统一变更管理,以提供经过验证的变更管理过程支持。 易于扩展,因此无论开发项目的团队规模、地点和平台如何,均可提供良好支持。
  常用软件测试工具的分析
  随着软件测试的地位逐步提高,测试的重要性逐步显现,测试工具的应用已经成为了普遍的趋势。目前用于测试的工具已经比较多了,测试工具的应用可以提高测试的质量、测试的效率、减少测试过程中的重复劳动、实现测试自动化,这些测试工具一般可分为白盒测试工具、黑盒测试工具、性能测试工具,另外还有用于测试管理的工具,本文对常用的测试工具作一个分析比较。
  1、 白盒测试工具
  白盒测试工具一般是针对代码进行测试,测试中发现的缺陷可以定位到代码级,根据测试工具原理的不同,又可以分为静态测试工具和动态测试工具。静态测试工具直接对代码进行分析,不需要运行代码,也不需要对代码编译链接,生成可执行文件。静态测试工具一般是对代码进行语法扫描,找出不符合编码规范的地方,根据某种质量模型评价代码的质量,生成系统的调用关系图等;动态测试工具与静态测试工具不同,动态测试工具的一般采用“插桩”的方式,向代码生成的可执行文件中插入一些监测代码,用来统计程序运行时的数据。其与静态测试工具最大的不同就是动态测试工具要求被测系统实际运行。
  (1) Jtest
  是一个代码分析和动态类、组件测试工具,是一个集成的、易于使用和自动化的Java单元测试工具。它增强代码的稳定性,防止软件错误。
  (2) Jcontract
  Jcontract在系统级验证类/部件是否正确工作并被正确使用。Jcontract 是个独立工具,在功能上是Jtest 的补充。可以用Jcontract插装按DbC注解的Java代码。当您将类/部件组装成系统时,Jcontract 在运行时监视并报告错用和功能性问题。Jcontract 帮助每个开发人员有效地考核类/部件的系统级行为。
  (3) C++ Test
  C++Test可以帮助开发人员防止软件错误,保证代码的健全性、可靠性、可维护性和可移植性。 C++Test自动测试C和C++类、函数或组件,而无需编写单个测试实例、测试驱动程序或桩调用。 (4) CodeWizard
  CodeWizard 代码静态分析工具,先进的C/C++源代码分析工具,使用超过500 个编码规范自动化地标明危险的,但是编译器不能检查到的代码结构。
  (5) Insure++
  Insure++是一个基于C/C++的自动化的内存错误、内存泄漏的精确检测工具。 Insure++能够可视化实时内存操作,准确检测出内存泄漏产生的根源。Insure++还能执行覆盖性分析,清楚地指示那些代码已经测试过。
  (6) .test .TEST是专为.NET开发而推出的使用方便的自动化单元级测试与静态分析工具。使用超过2002条的工业标准代码规则对所写代码自动执行静态分析。这些规则立即应用.NET 工业专家深入、全面的编程知识到你的代码当中,迅速、彻底地防止错误的出现。自动测试代码构造与功能。 .TEST非常智能。他能提取刚完成的代码,对其进行读取,并提出如何对这些代码进行单元测试,不需要任何的人为干涉。所有由.TEST产生的单元测试都

  (7) BoundsChecker
  BoundsChecker Visual C++ Edition 是针对 Visual C++开发人员的首选的运行时的错误检测和调试工具。它通过驻留在 Visual C++ 开发环境内部的自动调试处理程序来加速应用程序的开发,缩短产品发布的时间。BoundsChecker 对于编程中的错误,大多数是 C++中特有的提供了清晰的详细的分析。它能够检测和诊断出在静态,堆栈内存中的错误以及内存和资源泄漏问题。在运行状态下,BoundsChecker 验证超过 8,700 APIs 和 OLE 方法,包括最新的 Windows APIs, ODBC, ActiveX,DirectX, COM 和 Internet APIs。
  (8) TrueTime
  代码运行缓慢是开发过程中一个重要问题。一个应用程序运行速度较慢,程序员不容易找到 到底是在哪里出现了问题,如果不能解决应用程序的性能将降低并极大的影响应用程序的质量,于是查找和修改性能瓶颈是调整整个代码性能的关键。如何快速的查找性能瓶颈呢?TrueTime 的出现就使这个问题变得很容易了。当我们在测试程序时,每完成一次应用话路,TrueTime 都能提供这次对话中函数的调用时间,提供详细的应用程序和组件性能的分析,并自动定位到运行缓慢的代码。这样就能帮助程序员尽快地调整应用程序的性能。TrueTime 支持C++, JAVA, Visual Basic语言环境。
  (9) FailSafe FailSafe
  是Visual Basic语言环境下的自动错误处理和恢复工具,FailSafe将插入额外的代码对你的程序进行插装,当程序执行时,FailSafe通过这些插装的代码捕获、记录错误信息。
  (10) Jcheck Jcheck
  是DevPartner Studio开发调试工具的一个组件,他使用事件调试技术,可以收集Java程序运行中准确的实时信息。我们在Java程序中经常要使用线程,而关于线程的常见错误有死锁、系统崩溃、同步问题等。JCheck 通过监视和分析当前内存中所有线程的运行状况,找到出错的根源,并且可以定位到具体是程序中的哪个方法出错,错误位于程序的哪一行。
  (11) TrueCoverage
  TrueCoverage是一个代码覆盖率统计工具,在开发过程中,对一个应用程序通过手工测试,总会有一部分代码功能没有被检测到,或者说逐个检测每一个函数的调用是相当费时间的;未被检测的代码我们不能保证它的可靠性,以后程序的失败可能往往就是由这部分未检测的代码造成的。 现在我们可以用TrueCoverage 来帮助我们解决这些问题,我们在测试程序时,每完成一次应用话路,TrueCoverage 就能够列出在这次对话中所有函数被调用次数、所占比率等,并可以直接定位到源代码,当然我们也可以合并多个应用话路来进行检测。所以说TrueCoverage 能通过衡量和跟踪代码执行及代码稳定性,帮助开发团队节省时间和改善代码可靠性。TrueCoverage支持C++, JAVA,Visual Basic语言环境。
  (12) SmartCheck
  SmartCheck 是针对 Visual Basic的主要的自动错误检测和调试工具。它能够自动检测和诊断 VB运行时的错误,并将一些表达不清楚的错误信息转换为确切的错误描述。它的EventDebugging 特性为 Visual Basic开发小组和独立的开发人员解决最棘手的问题提供了简便的方法。它可以进行致命错误的分析、兼容性检查、定位到源代码。 不是 Visual Basic 中所有的问题都是运行时或系统的错误。许多的问题来自于未预期的程序流程的结果。如果没有 EventDebugging,将问题分离出来是相当困难,甚至不可能的。当简单的动作比如设置控件的属性发生时,会触发一些编程人员想象不到的事件的发生,从而使的错误检测和调试边的更加复杂。SmartCheck 显示使用时的属性,方法和事件以便于将这些事件驱动的问题隔离出来。SmartCheck EventDebugging 跟踪事件以简化错误的定位。举个例子,SmartCheck 在事件被设置或只读时将其方法和属性全部显示,连同由这些事件触发的形式。
  (13) CodeReview
  对于Visual Basic开发人员来说,CodeReview是最好的自动源代码分析工具,它对应用程序的组件、逻辑、Windows和Vb自身潜在的数百个问题进行严格地源代码检查。CodeReview分析的类型包括Y2K 问题,逻辑错误,应用程序性能和可用性问题,Windows API调用和标准一致性问题等。可以检测整个的VB工程或指定的模块,并能定制检错的种类;对检测的结果有详细的说明,提供帮助和推荐解决方案,而且能够直接的链接到源代码。CodeReview 系统还提供了两个子模块,一个是Metrics:通过对VB工程(vbp)的执行,计算出代码的长度、复杂度、理解度、语言的使用等级、出错的可能性等数据;另一个是Namer:它调用一个VB工程,自动并规则地对其中的对象重新命名,并备份原来没有规则命名的工程文件,使开发人员对程序能够有条理地管理。
  2、黑盒测试工具
  黑盒测试工具适用于黑盒测试的场合,黑盒测试工具包括功能测试工具和性能测试工具。黑盒测试工具的一般原理是利用脚本的录制(Record)/回放(Playback),模拟用户的操作,然后将被测系统的输出记录下来同预先给定的标准结果比较。黑盒测试工具可以大大减轻黑盒测试的工作量,在迭代开发的过程中,能够很好地进行回归测试。
  (1) WinRunner
  Mercury Interactive 公司的WinRunner 是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳定运行。 企业级应用可能包括Web 应用系统,ERP 系统,CRM 系统等等。这些系统在发布之前,升级之后都要经过测试,确保所有功能都能正常运行,没有任何错误。如何有效地测试不断升级更新且不同环境的应用系统,是每个公司都会面临的问题。如果时间或资源有限,这个问题会更加棘手。人工测试的工作量太大,还要额外的时间来培训新的测试人员等等。为了确保那些复杂的企业级应用在不同环境下都能正常可靠地运行,你需要一个能简单操作的测试工具来自动完成应用程序的功能性测试,WinRunner能够做到这点。
  (2) Astra Quicktest 4
  (3) Robot Robot是IBM Rational公司的功能测试工具,通过Script 自动模拟输入输出。
  (4) QARun QARun
  Compuware 公司的软件功能测试工具,为客户/服务器、电子商务到企业资源_____计划提供重要的商务功能测试。通过将耗时的测试脚本开发和执行任务自动化,QARun 帮助测试人员和QA管理人员更有效地工作,以加速应用开发,它提供快速、有效地创建和执行测试脚本,验证测试并分析测试结果的功能。它能够通过加快运行周期来保持测试同步,提高测试投资回报和质量,该工具的功能有:创建测试和执行测试、测试验证、测试结果分析、可改进的数据函数、广泛的支持、集中式知识库、网站分析、智能化测试脚本、自动同步。
  (5) SilkTest SilkTest International
  Segue公司的标准的、面向多语种企业级应用的功能和回归测试工具。让用户能跨语种、跨平台和跨Web浏览器,高效率地进行各种类型的应用可靠性测试。
  (6) e-Test e-Test 是Empirix公司的软件功能测试工具,功能很强大,由于不是采用Post URL的方式回放脚本,所以可以支持多内码的测试数据(当然要程序支持)。基本上可以应付大部分的Web Site。
  (7) WAS Microsoft的Web Application Stress Tool(WAS,Web应用负载测试工具)是Microsoft的可以免费下载的软件性能测试工具。WAS要求Windows NT 4.0 SP4或者更高,或者Windows 2000。 为了对网站进行负载测试,WAS 可以通过一台或者多台客户机模拟大量用户的活动。WAS 支持身份验证、加密和Cookies,也能够模拟各种浏览器类型和Modem速度,它的功能和性能可以与数万美元的产品相媲美。WAS 只能用于B/S构架的软件性能测试。
  (8) LoadRunner
  LoadRunner是MI公司的预测系统行为和性能的负载测试工具,它通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。LoadRunner 是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner 的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题,LoadRunner 能支持广范的协议和技术。
  (9) Qaload
  QALoad是Compuware公司开发的并发性能压力测试工具。软件针对各种测试目标提供了MS SQLServer、 Oracle、ODBC、WWW、NetLoad、Winsock 等不同的测试接口(Session),应用范围相当广泛。例如在测试基于C/S运行模式、客户端通过DBLib访问服务器端SQLServer数据库的系统时,QALoad 通过模拟客户端大数据量并发对服务器端进行查询、更新等操作,从而达到监控系统并 发性能和服务器端性能指标的目的。
  (10) Webload
  Webload 是RadView 公司推出的一个性能测试和分析工具,它让web 应用程序开发者自动执行压力测试;webload 通过模拟真实用户的操作,生成压力负载来测试web 的性能用户创建的是基于javascript的测试脚本,称为议程agenda,用它来模拟客户的行为,通过执行该脚本来衡量web应用程序在真实环境下的性能。 5webload 提供巡航控制器cruise control的功能,利用巡航控制器,可以预定义web 应用程序应该满足的性能指标,然后测试系统是否满足这些需求指标;cruise control 能够自动把负载加到web应用程序,并将在此负荷下能够访问程序的客户数量生成报告,webload能够在测试会话执行期间对监测的系统性能生成实时的报告,这些测试结果通过一个易读的图形界面显示出来,并可以导出到excel和其他文件里。
  (11) Silkperformer
  SilkPerformer 是业界最先进的企业级负载测试工具,和Loadrunner 是同种类型的测试工具。它能够模拟成千上万的用户在多协议和多种计算环境下工作。SilkPerformer 可以让你在使用前,就能够预测企业电子商务环境的行为—不受电子商务应用规模和复杂性影响。可视化的用户化、负载条件下可视化的内容校验、实时的性能监视和强大的管理报告可以帮助您迅速将问题隔离,这样,通过最小化测试周期、优化性能以及确保可伸缩性,加快了投入市场的时间,并保证了系统的可靠性。
  (12) OpenSTA
  OpenSTA 是专用于B/S 构架的、免费的性能测试工具。它的优点除了免费、源代码开放的优点外,还能对录制的测试脚本进行,按指定的语法进行编辑。测试工程师在录制完测试脚本后,只需要了解该脚本语言的特定语法知识,就可以对测试脚本进行编辑,以便于再次执行性能测试时获得所需要的参数,之后进行特定的性能指标分析。OpenSTA以最简单的方式让大家对性能测试的原理有较深的了解,其较为丰富的图形化测试结果大大提高了测试报告的可阅读性。
  3、其他测试工具
  除了上述的测试工具外,还有一些专用的测试工具,例如,针对数据库测试的TestBytes,对应用性能进行优化的EcoScope等工具。
  4、测试管理工具
  测试管理工具用于对测试进行管理。一般而言,测试管理工具对测试计划、测试用例、测试实施进行管理,并且,测试管理工具还包括对缺陷的跟踪管理。

posted @ 2014-07-02 16:30 顺其自然EVO 阅读(186) | 评论 (0)编辑 收藏

Android启动过程深入解析

当按下Android设备电源键时究竟发生了什么?
  Android的启动过程是怎么样的?
  什么是Linux内核?
  桌面系统linux内核与Android系统linux内核有什么区别?
  什么是引导装载程序?
  什么是Zygote?
  什么是X86以及ARM linux?
  什么是init.rc?
  什么是系统服务?
  当我们想到Android启动过程时,脑海中总是冒出很多疑问。本文将介绍Android的启动过程,希望能帮助你找到上面这些问题的答案。
  Android是一个基于Linux的开源操作系统。x86(x86是一系列的基于intel 8086 CPU的计算机微处理器指令集架构)是linux内核部署最常见的系统。然而,所有的Android设备都是运行在ARM处理器(ARM 源自进阶精简指令集机器,源自ARM架构)上,除了英特尔的Xolo设备(http://xolo.in/xolo-x900-features)。Xolo来源自凌动1.6GHz x86处理器。Android设备或者嵌入设备或者基于linux的ARM设备的启动过程与桌面版本相比稍微有些差别。这篇文章中,我将解释Android设备的启动过程。深入linux启动过程是一篇讲桌面linux启动过程的好文。
  当你按下电源开关后Android设备执行了以下步骤。
  Android启动流程/过程
  第一步:启动电源以及系统启动
  当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行。
  第二步:引导程序
  引导程序是在Android操作系统开始运行前的一个小程序。引导程序是运行的第一个程序,因此它是针对特定的主板与芯片的。设备制造商要么使用很受欢迎的引导程序比如redboot、uboot、qi bootloader或者开发自己的引导程序,它不是Android操作系统的一部分。引导程序是OEM厂商或者运营商加锁和限制的地方。
  引导程序分两个阶段执行。第一个阶段,检测外部的RAM以及加载对第二阶段有用的程序;第二阶段,引导程序设置网络、内存等等。这些对于运行内核是必要的,为了达到特殊的目标,引导程序可以根据配置参数或者输入数据设置内核。
  Android引导程序可以在\bootable\bootloader\legacy\usbloader找到。
  传统的加载器包含的个文件,需要在这里说明:
  init.s初始化堆栈,清零BBS段,调用main.c的_main()函数;
  main.c初始化硬件(闹钟、主板、键盘、控制台),创建linux标签。
  更多关于Android引导程序的可以在这里了解。
  第三步:内核
  Android内核与桌面linux内核启动的方式差不多。内核启动时,设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第一个进程。
  第四步:init进程
  init是第一个进程,我们可以说它是root进程或者说有进程的父进程。init进程有两个责任,一是挂载目录,比如/sys、/dev、/proc,二是运行init.rc脚本。
  init进程可以在/system/core/init找到。
  init.rc文件可以在/system/core/rootdir/init.rc找到。
  readme.txt可以在/system/core/init/readme.txt找到。
  对于init.rc文件,Android中有特定的格式以及规则。在Android中,我们叫做Android初始化语言。
  Android初始化语言由四大类型的声明组成,即Actions(动作)、Commands(命令)、Services(服务)、以及Options(选项)。
  Action(动作):动作是以命令流程命名的,有一个触发器决定动作是否发生。
 语法
on <trigger>
<command>
<command>
<command>
  Service(服务):服务是init进程启动的程序、当服务退出时init进程会视情况重启服务。
  语法
service <name> <pathname> [<argument>]*
<option>
<option>
...
Options(选项)
  选项是对服务的描述。它们影响init进程如何以及何时启动服务。
  咱们来看看默认的init.rc文件。这里我只列出了主要的事件以及服务。
Table
Action/Service 描述
on early-init 设置init进程以及它创建的子进程的优先级,设置init进程的安全环境
on init 设置全局环境,为cpu accounting创建cgroup(资源控制)挂载点
on fs 挂载mtd分区
on post-fs 改变系统目录的访问权限
on post-fs-data 改变/data目录以及它的子目录的访问权限
on boot 基本网络的初始化,内存管理等等
service servicemanager 启动系统管理器管理所有的本地服务,比如位置、音频、Shared preference等等…
service zygote 启动zygote作为应用进程
  在这个阶段你可以在设备的屏幕上看到“Android”logo了。
  第五步
  在Java中,我们知道不同的虚拟机实例会为不同的应用分配不同的内存。假如Android应用应该尽可能快地启动,但如果Android系统为每一个应用启动不同的Dalvik虚拟机实例,就会消耗大量的内存以及时间。因此,为了克服这个问题,Android系统创造了”Zygote”。Zygote让Dalvik虚拟机共享代码、低内存占用以及最小的启动时间成为可能。Zygote是一个虚拟器进程,正如我们在前一个步骤所说的在系统引导的时候启动。Zygote预加载以及初始化核心库类。通常,这些核心类一般是只读的,也是Android SDK或者核心框架的一部分。在Java虚拟机中,每一个实例都有它自己的核心库类文件和堆对象的拷贝。
  Zygote加载进程
  加载ZygoteInit类,源代码:/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
  registerZygoteSocket()为zygote命令连接注册一个服务器套接字。
  preloadClassed “preloaded-classes”是一个简单的包含一系列需要预加载类的文本文件,你可以在<Android Source>/frameworks/base找到“preloaded-classes”文件。
  preloadResources() preloadResources也意味着本地主题、布局以及android.R文件中包含的所有东西都会用这个方法加载。
  在这个阶段,你可以看到启动动画。 第六步:系统服务或服务
  完成了上面几步之后,运行环境请求Zygote运行系统服务。系统服务同时使用native以及java编写,系统服务可以认为是一个进程。同一个系统服务在Android SDK可以以System Services形式获得。系统服务包含了所有的System Services。
  Zygote创建新的进程去启动系统服务。你可以在ZygoteInit类的”startSystemServer”方法中找到源代码。
  核心服务:
  1.启动电源管理器;
  2.创建Activity管理器;
  3.启动电话注册;
  4.启动包管理器;
  5.设置Activity管理服务为系统进程;
  6.启动上下文管理器;
  7.启动系统Context Providers;
  8.启动电池服务;
  9.启动定时管理器;
  10.启动传感服务;
  11.启动窗口管理器;
  12.启动蓝牙服务;
  13.启动挂载服务。
  其他服务:
  1.启动状态栏服务;
  2.启动硬件服务;
  3.启动网络状态服务;
  4.启动网络连接服务;
  5.启动通知管理器;
  6.启动设备存储监视服务;
  7.启动定位管理器;
  8.启动搜索服务;
  9.启动剪切板服务;
  10.启动登记服务;
  11.启动壁纸服务;
  12.启动音频服务;
  13启动耳机监听;
  14.启动AdbSettingsObserver(处理adb命令)。
  第七步:引导完成
  一旦系统服务在内存中跑起来了,Android就完成了引导过程。在这个时候“ACTION_BOOT_COMPLETED”开机启动广播就会发出去。

posted @ 2014-06-30 18:49 顺其自然EVO 阅读(873) | 评论 (0)编辑 收藏

使用Jazz Automation编写自动化测试

  Jazz Automation是一个测试框架,构建它的目的是为所有类型的Web系统或者静态网站自动化同时加速验收/功能测试。它还能够容易地实现自动化集成测试。以前的时候这种类型的测试需要人工完成,劳动强度大又不准确。借助于自动化测试,公司能够创造高质量的应用程序,创造的产品bug更少,同时又加快了投入市场的速度。Jazz Automation支持以下Web浏览器:IE、Firefox、Safari和Chrome。
  Jazz Automation和其他的自动化测试框架不同,它允许测试编写者使用纯英语描述软件的工作原理。
  大多数自动化测试框架在执行测试之前必须使用Java和Ruby这样的语言编程,例如Selenium和Cucumber。Jazz Automation提供了一个抽象层,测试编写者和配置人员不需要编程。
  编写第一个测试脚本
  让我们看看下面这个测试一个电子商务网站的规格。
Feature: Go to the Amazon web site, search for Harry Porter in the book section. Find
Harry Potter and the Chamber of Secrets (book2) and then add it to the cart.
Background: Establish the test settings for the test
Given the following settings:
| url             | http://www.amazon.com |
| platform        | Vista                 |
| browser         | firefox               |
| browser version | 23                    |
Scenario: Verify that we have an empty cart on the amazon home page
Given I am ON the "HomePage"
Then I should EXPECT
| cartCount       | 0                     |
Scenario: Search for Harry Porter from the books category
Given I am ON "HomePage"
And I click "allButton"
And I select
| selectCategory  | Books                  |
And I enter
| searchField     | Harry Potter           |
And I click "go"
And I wait 5 seconds
Then I should be ON the "SearchResultsPage"
Scenario: From the Search Results Page, verify the first result Special
Edition Harry Potter Paperback Box Set
Given I am ON "SearchResultsPage"
Then I should EXPECT
| firstResult           | Special Edition Harry Potter Paperback Box Set |
| chamberOfSecretsBook2 | visible
|
Scenario: Click on the Chamber Of Secrets Book2 to reveal the details
Given I am ON "SearchResultsPage"
And I CLICK "chamberOfSecretsBook2"
Then I should be ON the "BookDetailPage"
Scenario: Verify the details
Given I am ON the "BookDetailPage"
Then I should EXPECT
| kindlePrice          | $7.99                    |
| hardcoverPrice       | $13.94                   |
| paperbackPrice       | $8.56                    |
Scenario: Add the book to my cart
Given I am ON the "BookDetailPage"
And I click "hardcover"
And I click "addToCart"
Then I should be ON the "PreCheckoutPage"
Scenario: On the pre-checkout page, verify the details
Given I am ON the "PreCheckoutPage"
Then I should EXPECT
| orderSubtotal            | 13.94       |
| cartCount                | 1           |
Scenario: proceed to checkout
Given I am ON the "PreCheckoutPage"
And I click "proceedToCheckout"
Then I should be ON the "SignInPage"
The test script should be extremely easy to read and understand, right?
 上面显示的测试用例所使用的语言是Gherkin。Gherkin是一种领域特定语言(DSL),它允许用户使用纯的、可理解的英语描述一个应用程序应该如何工作。在开发测试脚本的时候,脚本编写者不需要理解或者描述实现。上面的规格大部分都是自由的文本,但是Gherkin也有一些关键词:Feature、Scenario、Given、When、And和Then。Jazz Automation扩展了这个关键词列表,增加了Expect、On、Click、Hover、Wait、Refresh、Enter、Select、Forward、Backward、Visible和Invisible。
  与Gherkin相关的内容有很多,本文只讨论了其中的一部分;但是必须要清楚的一件事情是:它使用基于行的格式,必须保证完整性让它能够清楚如何为每一个功能执行相关步骤。
  借助于Jazz Automation,执行上面的测试我们不需要使用Java、Ruby等语言编写任何代码。使用Jazz Automation,每一个网站页面都必须被定义为一个页面(Page)。JSON和XML都可用于页面配置。每一个页面都包含了能够让Jazz Automation验证页面是否被正确加载的高层属性。同时,每一个页面还应该有一个或者多个元素的定义。仔细看看上面的这个规格,你将会注意到有一些单词是用双引号括起来的。双引号中的对象对于Jazz Automation而言是非常重要的。它们代表了页面对象或者页面上的元素。对于每一个项目,这些元素定义在一个或者多个页面文件中。
  让我们看看测试文件夹的目录结构。
  首先我们注意一下/features目录。我们应该将所有的测试规格都保存在这里。文件是.feature类型的,Jazz Automation可以一次性执行一个或者多个功能。功能和它们的执行顺序定义在jazz.properties文件中。其次,我们注意到在/pages目录下有一些“页面文件”。该目录是测试配置程序(Test Configurator)定义每一个页面和页面元素的地方,定义的内容将会在测试期间访问。测试规格只能引用在这里定义的页面和在页面文件中定义的页面元素。稍后我们将会介绍如何为页面文件自定义位置。在文章的最后,我们将会介绍强制的jazz.properties文件,现在我们先跳过它。
  继续页面配置
  测试配置程序是正确配置一个Jazz Automation测试的关键。Jazz Automation支持使用JSON和XML进行页面配置。
  测试配置员需要对jQuery这样的web技术有一定的经验。测试配置员需要为要访问的每一个Web页面创建一个页面(Page)。
  一个页面有一些必须的属性。每一个页面必须有一个pageName属性,同时至少有一个domElement。功能会频繁地使用pageName,同时它应该是有意义的,这样测试员才能够准确地知道它所引用的Web页面。DomElements是用于验证软件的Web页面元素。通常情况下它们指标签值、下拉框值、图片、按钮、显示的数据(定价等)。这些元素的名称应该是有意义的,这样测试编写者才能够理解每一个组件的目的。
  让我们看看下面这个JSON页面配置。
{
"pageName":"HomePage",
"title": "Amazon.com: Online Shopping for Electronics, Apparel,
Computers, Books, DVDs & more",
"urlExtension": "www.amazon.com",
"keyDomElementName": "searchField",
"domElements" :
{
"cartCount" :
{
"jquery": "$('#nav-cart-count')"
},
"allButton" :
{
"jquery": "$('#nav-search-in')"
},
"selectCategory" :
{
"jquery": "$('#searchDropdownBox')"
},
"searchField" :
{
"jquery": "$('#twotabsearchtextbox')"
},
"go" :
{
"jquery": "$('.nav-submit-input')"
}
}
}
我们定义一个页面配置文件的关键组件。
  就是这样!
  一旦剩下的页面被定义完,我们就能够通过“完成”运行场景了。测试配置员必须要清楚下面的内容之一:jQuery、XPath或者CSS。我们使用它们“选择”需要测试的Web元素。jQuery是Jazz Automation最喜欢的选择器机制,同时对于大多数QA分析师而言他们要学会jQuery只需要几天的时间,特别是有那么多的在线教程并且可以使用现代Web浏览器的开发者工具。
  普通配置
  要讨论的最后一部分内容是必须的jazz.properties文件。该配置文件包含一些普通的配置项,例如项目名称(用于报告)、一个表明测试应该在远程运行还是在本地系统上运行的标记、动作和页面速度以及要执行的功能。其他的可选配置属性我们就不在此一一介绍了。
#project name
projectName: Amazon
# turn on remote support. if useRemote true, you must specify the following
remoteWebDriverUrl property.
useRemote: false
# remote web driver url - usually your sauceLabs url
remoteWebDriverUrl: http://jazzautomation:****@ondemand.saucelabs.com:80/wd/hub
# you can customize you folder name of pages. By default it is pages
#pagesDirectoryName: pages
# page pacing between two pages loading
pagePace: 10
#action pacing between two actions on the same page. The default value is "1 second".
actionPace: 1
# features: can be a list of features, separated by comma
features:searchForHarryPotter
  报告
  对于每一个测试,Jazz Automation都会产生一个描述测试运行详细信息的报告。如果测试执行成功了,那么会生成一个展示成功率为100%的简单报告。如果测试执行失败了,那么会对错误发生的地方创建一个屏幕截图并插入到报告中。除此之外,报告是根据测试运行期间产生的数据文件生成的。该数据文件可用于历史追踪、图表和趋势分析。
  让我们看看下面这个失败的测试报告:
  
  结论
  到现在为止我们已经结束了使用Jazz Automation编写自动化测试的旅程。对于好奇的读者,还有大量的内容需要学习。例如,Jazz Automation还能够通过Sauce Labs这样的公司所提供的技术在远程使用,这样的话你的组织就不需要维护进行全范围测试所必须的每一种浏览器和操作系统的可能组合。你还能够深入探索Jazz Automation如何应用于没有使用jQuery的网站。提示:这需要使用动态插入。
  Jazz Automation还通过用户界面测试和提供即时反馈完成了持续集成的循环。这比以往任何时候都要更加重要,因为产业已经转移到富HTML5和JavaScript用户界面上了。组织需要立即知道应用程序自上而下都在按照期望运行。另外,使用Gherkin作为我们的领域特定语言还允许关键的利益相关方明确地表达出他们对系统应该如何工作、如何与技术资源有效沟通的理解,让开发团队能够解放出来专心构建产品。
  我们不能将Jazz Automation错误地理解为可以替代传统的单元测试和集成测试框架,例如JUnit和TestNG。单元测试和集成测试在成功的软件开发中依然非常重要,Jazz Automation只是更进了一步,用户能够使用它编写针对用户界面的自动化测试。另外,Jazz Automation是DOM级别的测试,所以你能够在一个Web页面中到处移动条目,这样并不会导致测试错误。
  自动化用户界面测试并不是每一个组织优先考虑的事情,但是如果首先考虑了它,那么前端测试和回归测试就不会让你再次慢下来。
  关于作者
  Dedrick Boyd 是一位老道的IT专家,他在完整软件开发和产品生命周期等领域有丰富的经验。他有技术技能,同时拥有管理各种产业中的大型和小型开发团队的经验,包括零售业、制药业、媒体及娱乐、医疗保健和金融服务业。Dedrick现在就职于Statement,在那里他是一位技术创新者,同时也是一位关系经理。他拥有佛罗里达州立大学管理信息系统(Management Information Systems)的学士学位。Dedrick的业余爱好包括:环游世界、读书、烹饪、美式足球和与家人共度光阴。

posted @ 2014-06-30 18:48 顺其自然EVO 阅读(200) | 评论 (0)编辑 收藏

性能测试实用linux 命令netstat等

  Netstat 用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。 通过netstat可以查看网络连接、端口号等占用情况
  查看进程和端口号相关:
  1.  查看TCP/UDP端口:
  netstat -tuoln
  2. 查看进程名运行的端口号:
  netstat -anp|grep 进程名
  当需要监控某个服务的端口号时可以首先获取该服务的监听端口号,如tomact进程
  netstat -anp|grep tomcat
  3.  根据端口查看运行的进程:
  netstat -anp|grep 端口号
  或
  lsof -i:端口号
  通常用于查看某个端口号下建立的连接数,如8083端口号下的连接数统计:
  netstat -anp|grep:8083|wc -l
  4. netstat -tln 查看服务监听端口
  其它:
  1. 结束进程
  kill -15 pid 立即释放资源
  kill -9 pid 不会立即释放资源
  2. 查看进程
  ps aux
  查看指定服务的进程号,如tomcat服务
  ps aux|grep tomcat
  3. 查看网卡信息:
  cat  /sbin/ifconfig
  4. 查看cpu配置
  cat /proc/cpuinfo
  5. 查看mem配置
  cat /proc/meminfo
  6. 修改hosts配置
  vim /etc/hosts
Netstat 详细参数列表
  NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
  -a 显示所有连接和监听端口。
  -b 显示包含于创建每个连接或监听端口的可执行组件。在某些情况下已知可执行组件 拥有多个独立组件,并且在这些情况下包含于创建连接或监听端口的组件序列被显示。 这种情况下,可执行组件名在底部的 [] 中,顶部是其调用的组件,等等,直到 TCP/IP 部分。注意此选项可能需要很长时间,如果没有足够权限可能失败。
  -e 显示以太网统计信息。此选项可以与 -s 选项组合使用。
  -n 以数字形式显示地址和端口号。
  -o 显示与每个连接相关的所属进程 ID。
  -p proto 显示 proto 指定的协议的连接;proto 可以是 下列协议之一: TCP、UDP、TCPv6 或 UDPv6。
  如果与 -s 选项一起使用以显示按协议统计信息,proto 可以是下列协议之一: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
  -r 显示路由表。
  -s 显示按协议统计信息。默认地,显示 IP、 IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;
  -p 选项用于指定默认情况的子集。
  -v 与 -b 选项一起使用时将显示包含于 为所有可执行组件创建连接或监听端口的 组件。
  interval 重新显示选定统计信息,每次显示之间 暂停时间间隔(以秒计)。按 CTRL+C 停止重新 显示统计信息。如果省略,netstat 显示当前 配置信息(只显示一次)
  Netstat的一些常用选项
  netstat -s——本选项能够按照各个协议分别显示其统计数据。如果你的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么你就可以用本选项来查看一下所显示的信息。你需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。
  netstat -e——本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量。
  netstat -r——本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的 信息。除了显示有效路由外,还显示当前有效的连接。
  netstat -a——本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接,断开连接(CLOSE_WAIT)或者处于联机等待状态的(TIME_WAIT)等
  netstat -n——显示所有已建立的有效连接。

posted @ 2014-06-30 18:46 顺其自然EVO 阅读(286) | 评论 (0)编辑 收藏

我怎么做性能测试

今天和同事交流关于性能测试的东西,以前也做过性能测试,突然想写点自己关于如何做性能测试的认识。
  基于B/S架构的系统,利用loadrunner做性能测试,利用nmon监控系统资源(用linux自带的top,vmstat等命令也可以,写一些简单的shell脚本就行了)。
  那么到底该怎么去做性能测试呢?
  1、首先要了解被测系统的结构和有关知识的储备。
  了解了被测系统,在后期性能出现异常的时候,定位就相对容易一些;而且知道在测试的过程中需要监控什么。
  一个简单B\S系统结构图:
  该系统有一下及部分组成:
  APP:一台nginx,兼做web和应用服务器
  Memcached:负责做数据缓存
  lucene:负责做搜索
  RabbitMQ:负责某些业务的队列处理
  mysql:数据库服务器,一个主库,一个从库
  从以上系统结构来看,要搭建和维护性能测试环境,需要的一些必要的知识。
  对于APP:需要了解nginx的相关知识,怎么修改配置,在哪里看日志
  对于Memcached:怎么搭建Memcached,怎么查看命中率,Memcached的作用是什么
  lucene:这个lucene是干什么用的,要怎么配置
  RabbitMQ:MQ要如何配置,都那些业务用到了MQ。
  Mysql:如何配置主从,为什么要配置主从,主从如何同步等等
  在搭建环境的过程中肯定会遇到这样或那样的问题,要自己找资料,或者相关的开发人员一起解决,并注意做笔记,防止以后同样的问题再出现。
  2、了解了系统结构,开始搭建测试环境,并准备数据。
  测试环境尽量要和生产环境的结构保持一致,还有配置文件等也要保持一致,这样能保证性能测试的结果更加真实和接近生产环境。
  数据准备一定要充足,而且数据量要大于等于生产环境,这样能更真实的模拟生产环境。比如对一个select语句而言,10W的数据,和1000W的数据,查询时间肯定有差别。如果数据量太小就不能反映真实情况下性能了。(可以把线上的数据导入到测试环境,但是要注意把用户比较隐私的数据都替换掉)
  如果有可能的话,测试环境的数据要比生产环境多出20%,做一些性能上边的冗余,防止发生突然的性能尖峰
 3、了解需求,找出测试点
  和产品、技术沟通需要做性能测试的业务;并了解相应的业务的性能指标,如页面的响应时间,TPS(事物处理)或者系统期望能承受多少并发等。
  4、设计性能能测试用例
  根据业务编写相应的性能测试用例。
  功能
  在线用户达到高峰时,用户可以正常发帖,保证200个以内用户可以同时发表帖子。
  目的
  测试系统200个以内的用户同时在线发帖。
  方法
  采用LoadRunner的录制工具录制一个邮件发送过程,然后对脚本进行优化,加上事物点,检查点等。过程中监视B端的响应,还有网络传输,web服务和数据库服务器的性能,并观察服务器相应服务的日志,检查MQ的状态,memcached服务器的状态和性能
  预期结果
  符合业务的预期,日志木有异常等(不详细列举)
  5、编写并优化脚本
  根据测试用例录制发帖的脚本,加入事物点、检查点、参数化,并回放,确保脚本没有问题,可以正常运行。
  6、设计性能测试场景
  设置一个渐进的场景10-30-60-100-150-200,这么做的目的防止一下子上去就是200个并发,出了问题,不知道系统最佳的并发是多少。
  (上边的渐进场景不一定合理,只做示意)
  7、启动监控,并开始跑性能测试场景
  设置场景完毕后,开始在服务器端启动监控,然后开始启动场景。
  8、监控场景执行,监控服务器的资源
  loadrunner可以搜集一些性能测试数据,事物的pass数,fail数,error数,都要做统计。
  监控服务器的资源,可以利用nmon,也可以是用linux自带的命令top,vmstat等。
  也要监控服务器的日志输出,看是否有异常出现。例如:查看mysql的慢日志,nginx的日志等。
  9、搜集结果数据,分析探讨
  最后对性能测试搜集的数据进行分析,找出性能测试的拐点。
  10、对系统进行优化,并重复7-9步,直至测试结束
  PS:性能测试不是一个人的事情,中间设计了,开发,产品,运维,QA,DBA,要大家共同协作,才能做好性能测试。
  限于水平有限,用疏漏之处,多多包涵。

posted @ 2014-06-30 18:45 顺其自然EVO 阅读(762) | 评论 (0)编辑 收藏

我眼中的测试工作

 从2011年毕业到现在,从事软件测试工作已经有将近三年了,随着工作的经验的积累,对测试的认识也在不断的提高。
  经常会听到身边有人抱怨,我做测试天天就是点鼠标,做功能测试,累死了,烦死了;想学学做自动化,性能方面的测试。
  相信很多做测试工作的同学会有相同的感觉。
  最近换了工作,面试了两家公司,又对测试有了更进一步的认识。
  首先,我觉得作为一名测试人员,有两项很重要技能:测试点的发掘和丰富的测试手段,而测试点的发掘则是最重要的。下面就这两个方面聊一聊我眼里边的测试。
  测试点的发掘:如果作为一名测试人员,不能发掘一个需求或系统需要测试的点,那么就不能算是一个合格的测试人员,那么该怎么去发掘出测试点呢?
  关于测试点,业界有比较成熟的模型--软件质量模型,供大家从不同的方面去分析需求或这系统需要测试的测试点。
  从以上模型,基本可总结出需求或者系统需要测试的测试点。
  比如给你一个需求或系统,首先要考虑的就是,这个需求或者系统是要做什么的(功能),是不是安全(功能),好不好用(易理解性)等。
  只有发掘了测试点,测试工作才有依据,所以大家一定不要舍本逐末。
  再者就是丰富的测试手段这个技能了。
  这个技能是建立在测试点的发掘的技能之上的,不然没法开展测试工作。
  对于以上所说的,功能测试就是点击鼠标,又累又烦躁,这点我认同。所以想去做自动化或者性能测试
  什么是自动化?
  自动化就是用程序自动执行的方式,替代人工去执行测试用例,去除重复的劳动,节省一些回归时候的人力成本。
  举个列子来说吧。
  某个人认为整天点鼠标是在浪费生命,不行去点击鼠标了,就想到了把点击鼠标的事情交给自动化来实现,这个时候,同事大家所说的自动化,就是基于GUI的UI自动化,即用代码去默认键盘,鼠标和系统的交互,通过这样的方式来完成测试。
  接下来,大家会面临一个问题,互联网随时都在变化,你的需求和系统也在随时变更(我也讨厌变更,哈哈),不停的改版,你会发现原来的UI自动化代码也得跟着变化或者经常找不到页面元素(稳定性令人抓狂),不停的去维护已经写好的代码,甚至有时候要重构你的UI自动化代码,成本很高,投入产出比不理想,那这个时候该怎么办呢?
  向后挖!
  GUI所展示的数据都是以后服务端的API接口返回的,经过浏览器的渲染,以GUI(图形用户接口)的形式展现给用户,那么我们为什不对系统的API进行测试呢,可以避免掉系统界面的频繁变更和找不到页面元素的问题,QA也能更早的介入测试,保证接口的质量。所以可以对接口进行自动化测试。
  再往后,我们就可以接触到代码,可以对代码进行自动化白盒测试。
  对性能测试来说也是一个道理。
  拿loadrunner做性能测试来说吧。
  其实loadrunner做性能测试,就是直接通过接口来做的性能测试。通过模拟API请求。然后开启很多进程或者线程,同时去模拟API调用,借此对服务器形成压力。
  根据系统结构图,我们知道需要优化各个组件的配置,设置一些合适的参数,这就要求我们了解这些配置是干什么用的。
  对代码来说,可以对服务进行代码级别的性能测试。
  对数据库来说,可能要审查一下sql语句,数据表的字段,大小,索引是否合适等。以后会写这方面的文章。
  在发掘测试点的基础上,再去丰富自己的测试手段,再能在测试上走的更远。

posted @ 2014-06-30 18:42 顺其自然EVO 阅读(214) | 评论 (0)编辑 收藏

casperjs进行web功能自动化测试demo

 通过一周多的学习和总结,终于掌握了casperjs用于自动化的方法,填平了大大小小的各种坑。
  casperjs是一个新兴的测试框架,网上资料很少,基本上靠翻译英文资料。
  贡献出来,供大家参考:
//page.js,存放页面元素
//c表示通过css选择元素,x表示通过xpath选择元素
var baseurl="http://www.cnblogs.com/reach296/";
var base={
//首页
url:baseurl,
c:{
登录表单:'form#login',
登录按钮:'.btn'
}
};
var index={
//登录后成功后跳转页
url:baseurl+"/seven/index"
};
var sidebar={
//左边框
url:baseurl+"/seven/sidebar.jsp",
x:{
应用库:"//span[contains(text(),应用库)]",
应用分类:"//ul[@class='submenu']/li/a[1]"
}
};
var category_list={
//应用分类page
url:baseurl+"/seven/app/category-list",
c:{
名称:'td.sorting_1'
},
x:{
表格:'//*[@id="sample-table-2"]/tbody/tr',
名称:'//*[@id="sample-table-2"]/tbody/tr/td[1]',
海报:'//*[@id="sample-table-2"]/tbody/tr/td[2]',
编辑:'//*[@id="sample-table-2"]/tbody/tr/td[3]'
}
}
//common.js,存放全局变量和方法
var path={
capture:'cms/capture/',
lib:'cms/lib/'
};
var cap={
clipRect:{top: 0,left: 0,width: 1024,height: 768},
// clipRect:{width: 1024,height:768},
imgOptions:{format: 'jpg',quality:100}
};
var account={'loginName':'reachwang','passwd':'test12345'};
function get_menu_links(){
//获取一级模块
var links = window.frames[0].document.getElementsByTagName("frame")[0].contentDocument.getElementsByClassName("menu-text");
return Array.prototype.map.call(links, function(e) {
return e.innerText;
});
};
function get_submenu_links(){
//获取二级模块
var links = window.frames[0].document.getElementsByTagName("frame")[0].contentDocument.querySelectorAll('.submenu a');
return Array.prototype.map.call(links, function(e) {
return (e.innerText).replace(/(^\s*)|(\s*$)/g, "");
});
};
//应用分类测试用例,检查应用分类页面是否正常展示,分类数据是否存在
casper.test.begin('应用分类测试用例',function suite(test) {
casper.options.verbose = true;
casper.options.logLevel = "debug";
casper.options.viewportSize={width: 1024, height: 768};
casper.options.waitTimeout=20000;
// casper.options.clientScripts=[
// path.lib+'common.js'
// ];
casper.test.comment('检查应用分类页面是否正常展示,分类数据是否存在');
casper.start(base.url, function() {
this.echo("1、打开登录页面");
test.assertHttpStatus(200,"检查http请求状态");
});
casper.waitForSelector(base.c.登录按钮, function() {
this.echo("2、登录页面截图");
this.capture(path.capture+"登录页面.jpg",cap.clipRect, cap.imgOptions);
});
casper.then(function() {
this.echo("3、登录页面检查");
test.assertTitle("TCL CMS", "标题正确");
test.assertExists(base.c.登录表单, "帐号登录表单存在");
this.echo("4、输入帐号和密码");
this.fill(base.c.登录表单, account, true);
this.echo("5、点击登录按钮");
test.assertExists(base.c.登录按钮, "登录按钮存在");
this.mouse.click(base.c.登录按钮);
});
casper.waitForUrl(index.url,function(){
test.assertHttpStatus(200,"跳转到登录完成页");
this.capture(path.capture+'跳转到登录完成页.jpg',cap.clipRect, cap.imgOptions);
});
casper.withFrame(0,function(){
this.echo("切换到mian frame里");
casper.withFrame(0,function(){
this.echo("切换到mian frame下的sider frame里");
this.echo("6、点击应用库");
this.click({type: 'xpath',path:sidebar.x.应用库});
this.echo("7、点击应用分类");
this.click({type: 'xpath',path:sidebar.x.应用分类});
});
});
casper.waitForUrl(index.url,function(){
test.assertHttpStatus(200,"跳转到应用分类页");
this.capture(path.capture+'打开应用分类.jpg',cap.clipRect, cap.imgOptions);
});
casper.withFrame(0,function(){
this.echo("切换到mian frame里");
casper.withFrame(1,function(){
this.echo("应用分类页面")
test.assertExists({type: 'xpath',path:category_list.x.表格},"表格检查");
test.assertExists(category_list.c.名称,"名称字段检查");
test.assertExists({type: 'xpath',path:category_list.x.海报},"海报字段检查");
test.assertExists({type: 'xpath',path:category_list.x.编辑},"编辑字段检查");
});
});
casper.run(function() {
test.done();
});
});

posted @ 2014-06-30 18:41 顺其自然EVO 阅读(330) | 评论 (0)编辑 收藏

如何对待测试开发团队中那个拖后腿的人?

  每个开发团队中总有一个人是最差的,老跟不上整体水平。据我观察,队友们对待这个差生的态度是团队健康状况的重要标志。(注:原文用“贝尔曲线(bell curve)”,也就是“正态分布”来衡量团队的整体水平分布,这里意译成“整体水平”。)
  我运气一直不错,在过去的几十年里,干过各种的行业和职业,在不少团队中待过,都是气氛融洽和技能娴熟的开发团队。并不是说每个项目都是成功的,(外部因素无法控制),但是经验永远有深刻的价值。
  在成功的开发团队里,最显著的特点是队员们互相尊重——“他擅长做这个,也喜欢做这个。好极了。因为我不喜欢做这个”)。每个人都明白人多力量大的道理,并懂得珍惜队友的技能。如果你在这样的团队中待过(或者你曾管理过这样的一群家伙),你懂我的意思。
  不论这些黄金组合团队是网络社区、公司部门还是志愿者组织,都有个共同特点:每个团队中都有这样的一个人——我们可以无恶意的称之为笨蛋,但重点是,大家却对这个人很好。
  在我待过的一个志愿软件开发团队中,Elliot就是那个笨蛋。准确形容的话,这家伙是个热心但没脑子的人。像一只大小狗一样,他是个热心肠,但往往好心办坏事。他乐于助人,而且很羡慕别人做得比他好。(实际上所有人都做得比他好。)
  Elliot总把事情办砸,哪怕他已非常的认真和努力。没人会把关乎项目成败的关键任务交给他办。他也从未意识到自己交付的活有问题,比方说我总是要帮他重写文档,而发布后的文档与他的大意一致,以至于他根本都没有意识到被人重写了。Elliot常常对大伙做的事摸不着头脑,但他依然兴高采烈地跟在那些他认为知道要做什么以及怎样去做的人的屁股后面。
  但每个人都体谅他。运作志愿者团队的人想方设法地帮助他,让他能真正贡献自己的一分力量,并把他高昂的工作热情和乐于奉献的精神看做他的优点。就算是搞社区活动也需要人手去摆放折叠椅或者在前台迎宾吧。我们把所有类似的活都交给他干。
  他是有点笨,但他是我们的笨笨。我们私下里也会抱怨,大家翻白眼,叹气或埋怨:“没办法,Elliot就是这样的。” 可是如果有外人胆敢欺负他,我们会扭折他的脖子。我想说的是,Elliot几年前去世了。组织里所有认识他的人都参加了他的葬礼。生活并没有像我们那般关怀他。对于我们每一个人,他都是值得怀念的。
  自从我认识Elliot以后,我开始观察这种现象。每个开发团队,不管多么优秀或者蹩脚,总有个在垫底的(不论是从智商,工作效率或其他的方面看)。团队的整体水平根据行业的种类而定–衡量一组科学家的工作价值和效率的标准跟衡量一组园林景观设计师完全不同。
  你们团队里垫底的那个Elliot,换到另外一个场合,也许是个高手。但总是会有那么一个垫底的人。
  在不和谐的团队里,这个笨笨会被当成白痴。人们欺负他,瞧不起他,对他不友好,你能猜想到这会产生多少不良影响。但对于懂得相互理解体谅能力差距的团队而言,情况就不一样了。
  这种积极的特性在重于参与的团队中尤为明显,比如用户群,开源项目组,社区组织。这些情况下,你不可能因为某个成员工作质量有所欠缺而开除他,所以你必须积极地跟那些志愿者们打交道。商业组织也要以此为鉴,我们都看到过组织开除某个过能力稍微欠缺的人而不是帮助他们找到能够胜任的工作岗位。
  问题是,你–作为项目经理–是如何对待你手下的这个笨笨的?你的团队又是如何对待她的?
  我很想能为你提供一些以“怎样才能…”打头的建议…..但实际上这些都没用。不是简单地知道要做什么就行了,而要考虑到你团队的文化氛围。团队和领导如何对待后进员工代表了团队的文化,标志了团队的和谐度。如果你对他们好,他们会报答你的,结果会在最终的产品里体现出来。
  如果你知道关于团队如何对待最差成员的例子,对公司文化的团队的功能产生了怎样的影响,不管是好是坏,请告诉我。

posted @ 2014-06-30 18:41 顺其自然EVO 阅读(193) | 评论 (0)编辑 收藏

仅列出标题
共394页: First 上一页 91 92 93 94 95 96 97 98 99 下一页 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜