qileilove

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

好的软件测试人员简历是什么样子的?

文章很好,以前的简历果然很垃圾,有兴趣的可以去看看大师级测试的简历

http://www.linkedin.com/in/geordiekeitt

 


这个博客也不错

http://www.testthisblog.com/
 英语很重要,每天看看想不会都难  

 


我最近阅读了大约15份简历,他们都在申请我的团队的测试工程师职位。但是没有一份表达清楚了他是如何进行测试的。

  下面我摘录了一些 信息:

  几乎所有的应聘者都罗列了成串儿的他们熟悉的“技术”(包括但不限于….Net, Unix, SQL, XML, MS Office)

  然后他们又罗列了大堆的看上去都有点过时的测试工具(包括但不限于…TestDirector, LoadRunner, QuickTest Pro, SilkTest, BugZilla)

  但是…我根本就不知道他们到底是如何进行测试的。

  所有的简历中都罗列着一串串的测试术语和名词…例如,“了解白盒测试、灰盒测试、黑盒测试、压力测试、性能测试功能测试、集成测试、可用性测试、冒烟测试、回归测试、手工测试、自动化测试以及验收测试。”

  每当看到这种调调儿的时候,我就想“好吧,你知道玻璃盒测试吗?那才是我们真正需要的。”

  有些应聘者甚至会在简历中写着“我编写过50页的测试报告”,或者“我测试的企业级项目拥有超过1000个用户”。

  好吧,那你到底如何进行测试呢?公平起见,这个问题仅仅靠几张简历是很难回答的,另一方面,也许我比较缺乏在这些字里行间挖掘信息的能力,所以我真的很难判断到底应该选择谁来参加面试。但是,如果他的简历中包含如下内容,那很可能会获得我的青睐:

  我参与的项目的测试过程如下…

  可以访问我的测试博客以进一步了解我对测试的理解…

  我最喜欢的测试书籍和博客如下…

  我喜欢测试是因为…

   唉,我想现代简历可能对于鉴别应试者的能力没什么太大作用。这就能解释为何面试问题如此重要。我为明天的面试准备了一串很好的问题来判断他们是否是很好 的测试者。其中一个是:“如果要你完整的测试后面墙上的那个电灯开关,你要如何做?”(如果那些应聘者读过我的博客,可能他们会有优势)。

  你们最喜欢的面试测试工程师的问题是什么?

————————————————华丽的分割线————————————————

  有趣回复摘录:

  Ken:好吧我同意你的愿景,你希望从简历中找到更多可用信息。但是在我工作的公司,在应聘简历被HR和招聘负责人筛选过之前,我根本连看都看不到他们。他们会用检索工具寻找那些职位要求描述中的关键字/技术词汇。所以,我只好在面试中靠问问题来做判断了。

  路人:我最喜欢的面试问题是:你最喜欢的一个bug是什么?但是我从来没有获得一个好的回答。所有的回应都是在讨论他们喜欢的bug的类型,或者他们找到这些好bug所用的方法。

   Geordie Keitt: 我的简历就是我的LinkedIn页面,我想它足够鹤立鸡群了。http://bit.ly/6TnmeL 我最喜欢的面试问题则是:“告诉我你遗漏的最严重的bug,以及你是如何补救的。”对新手来说这个问题无效,所以对他们我会准备20个问题取代之。

  Marcin Zr?da: 好文章,我的建议是简历中应该包含你的项目历史:项目名字,你的角色,测试过程等等。

  Alan: 回去我立刻着手更新自己的简历。

  Shaun: 精彩的文章,有些回复也同样精彩。如果你要申请的职位属于下列情况,你需要注意:

  1-如果你申请的职位属于一个大公司,那么它们很可能在用自动扫描工具扫描简历,所以罗列技术词汇是必要的;

  2-如果你申请的测试主管,那么你需要一个很好的求职信来推销自己;

  3-如果申请的是一家大公司的测试主管,那你就需要同时满足1和2。

  最后,你的简历可能就要20页长,可读性极差,而且求职信在google上一抓一大把(类似的求职信我算是看够了)。

  Joe: 如果求职者在简历中写着“哥测试过超过20个电灯开关”,或者“我天天读Eric Jacobson的博客”,那他岂不是已经得到面试机会啦?

  Eric Jacobson: Joe,你说到点子上了…

posted @ 2012-04-10 09:57 顺其自然EVO 阅读(3293) | 评论 (0)编辑 收藏

漫谈软件性能测试技术

  1、引言

  随着我国加入WTO,各行各业都面临更多的机遇和挑战。如何提高产品的质量,增 强市场竞争力,日益成为企业发展必须解决的迫切问题,对软件企业来说尤为重要。软件企业要直接参与国际软件市场的竞争,首要问题就是要保证软件的质量,同 时要加快软件产品的发布与交付使用。因此,如何提高软件质量,越来越成为当前软件产业发展中一个迫在眉睫的问题。本文只针对软件质量的性能方面,做一些探 讨。

  2、软件质量

  质量保证能力的强弱直接影响着软件业的发展和生存。那么,到底 什么是软件的质量呢?《GB/T 16260 信息技术 软件产品评价 质量特性及其使用指南》明确定义:软件质量是软件产品具有满足明确的或隐含需求能力的特征和特性总和。具体包括以下六个方面的质量特性:

  1)功能性

  与一组功能及其指定的性质有关的一组属性。这里的功能是指满足明确或隐含的需求的那些功能。

  2)易用性

  与一组规定或潜在的用户为使用软件所需作的努力和对这样的使用所作的评价有关的一组属性。

  3)可靠性

  与在规定的一段时间和条件下,软件维持其性能水平的能力有关的一组属性。

  4)效率

  与在规定的条件下,软件的性能水平与所使用资源量之间关系有关的一组属性。

  5)可维护性

  与进行指定的修改所需的努力有关的一组属性。

  6)可移植性

  与软件可从某一环境转移到另一环境的能力有关的一组属性。

  因此,为了评价软件产品的质量,需要对软件质量的每个特性实施和执行测试. 随着现代软件构架技术的发展,特别是WEB技术的发展,与软件可靠性、效率质量特性相关的软件性能问题越来越受到包括软件从业人员、专家学者以及软件使用者的重视,软件的性能指标的好坏已直接影响到软件的质量。

  3、软件性能测试技术

  软件性能的测试一般包括三个方面,即性能评测、负载测试和强度测试。每一方面的测试都有其不同的测试目标、测试技术、完成标准,具体如下:

  3.1 性能评测

  针对响应时间、事务处理速率和其他与时间相关的需求进行评测和评估。目标是验证性能需求是否都已满足。

  测试目标:

  验证所指定的事务或业务功能在以下情况下的性能行为:

  (1)正常的预期工作

  (2)预期的最繁重工作量

  测试技术:

  使用为功能或业务周期测试制定的测试过程。

  (1)通过修改数据文件来增加事务数量,或通过修改脚本来增加每项事务的迭代数量。

  (2)脚本应该在一台计算机上运行(最好是以单个用户、单个事务为基准),并在多个客户机(虚拟的或实际的客户机)上重复。

  完成标准:

  (1)单个事务或单个用户:在每个事务所预期或要求的时间范围内成功地完成测试脚本,没有发生任何故障。

  (2)多个事务或多个用户:在可接受的时间范围内成功地完成测试脚本,没有发生任何故障。

  注意事项:

  综合的性能测试还包括在服务器上添加后台工作量。 可采用多种方法来执行此操作,其中包括:

  (1)直接将“事务强行分配到”服务器上,这通常以“结构化查询语言”(SQL) 调用的形式来实现。

  (2)通过创建“虚拟的”用户负载来模拟许多个(通常为数百个)客户机。此负载可通过“远程终端仿真”(Remote Terminal Emulation) 工具来实现。此技术还可用于在网络中加载“流量”。

  (3)使用多台实际客户机在系统上添加负载。

  (4)性能测试应该在专用的计算机上或在专用的机时内执行,以便实现完全的控制和精确的评测。

  (5)性能测试所用的数据库应该是实际大小或相同缩放比例的数据库。

 3.2 负载测试

  负载测试通过使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行,以及软件的性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。

  测试目标:

  验证所指定的事务在不同的工作量条件下的性能行为时间。

  测试技术:

  使用为功能或业务周期测试制定的测试。通过修改数据文件来增加事务数量,或通过修改测试来增加每项事务发生的次数。

  完成标准:

  多个事务或多个用户:在可接受的时间范围内成功地完成测试,没有发生任何故障。

  注意事项:

  (1)负载测试应该在专用的计算机上或在专用的机时内执行,以便实现完全的控制和精确的评测。

  (2)负载测试所用的数据库应该是实际大小或相同缩放比例的数据库。

  3.3 强度测试

  强度测试目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。

  测试目标:

  验证测试对象能够在以下强度条件下正常运行,不会出现任何错误:

  (1)服务器上几乎没有或根本没有可用的内存(内存和磁盘空间)

  (2)连接或模拟了最大实际(实际允许)数量的客户机

  (3)多个用户对相同的数据或账户执行相同的事务

  (4)最繁重的事务量或最差的事务组合

  注:强度测试的目标可表述为确定和记录那些使系统无法继续正常运行的的情况或条件。

  测试技术:

  (1)使用为性能评测或负载测试制定的测试。要对有限的资源进行测试,就应该在一台计算机上运行测试,而且应该减少或限制服务器上的内存和磁盘空间。

  (2)对于其他强度测试,应该使用多台客户机来运行相同的测试或互补的测试,以产生最繁重的事务量或最差的事务组合。

  完成标准:

  所计划的测试已全部执行,并且在达到或超出指定的系统限制时没有出现任何软件故障,或者导致系统出现故障的条件并不在指定的条件范围之内。

  注意事项:

  (1)如果要增加网络工作强度,可能会需要使用网络工具来给网络加载消息或信息包。

  (2)应该暂时减少用于系统的磁盘空间,以限制数据库可用空间的增长。

  (3)使多个客户机对相同的记录或数据账户同时进行的访问达到同步。

  4、结束语

  软件质量的保证,不仅需要科学的测试策略,更要处理好整个软件生命周期中其他如需求、分析、设计、实现各阶段中出现的问题。只有对软件质量进行全面、全过程的质量控制,才能最终保证软件产品的质量,提高企业的竞争力。


posted @ 2012-04-10 09:38 顺其自然EVO 阅读(257) | 评论 (0)编辑 收藏

用CentOS 6快速配置一台企业级Web代理服务器

  Web代理服务器让企业员工可以快速安全地浏览网络。Web代理服务器可以缓存内存,让用户之后对相同网页的请求由本地缓存来处理,这比多次返 回网站来得更快速。代理服务器还能扫描入站网络流量,查找有无恶意内容,并且保护最终用户远离病毒;它们还可以控制哪些用户访问什么样的网络内容。为了充 分利用所有这些功能,本文逐步介绍安装和配置一台简单Web代理服务器(带病毒过滤功能)的整个过程。

  一个完美的安全Web代理服务器包括下列组件:

  ● Squid——主要的软件和代理服务。

  ● ClamAV——检查入站内容的反病毒软件。

  ● C-icap——采用互联网内容适配协议(ICAP)的服务,Squid需要该服务与其他服务进行联系。

  ● SquidClamav——基于ClamAV的反病毒服务,Squid通过ICAP服务连接到该服务。

  安装配置

  我们将在基本的CentOS 6平台上运行代理服务器,该平台上没有预先安装任何软件包组。如果是最基本的安装,你可以使用来自官方镜像页面的最小镜像。一旦我们安装了操作系统,就可以安装代理服务器的各组件。

  镜像下载:http://www.centos.org/modules/tinycontent/index.php?id=30

  Squid

  Squid可以从官方的CentOS 6软件库获得。只要执行yum install squid,即可安装它。确保Squid随系统自动开启和关闭,为此借助命令chkconfig squid on,把它添加到默认的系统启动和关闭级别。

   默认情况下,Squid的主配置文件/etc/squid/squid.conf允许通过常见端口的来自本地网站的请求。去掉cache_dir ufs /var/spool/squid 100 16 256这一行的注释,那样代理服务器将文件缓存在磁盘上。这个命令的参数指示代理服务器使用默认的ufs存储格式。缓存目录是/var/spool /squid,它应该可以存储最多100MB的内容,16个一级子目录和256个次级子目录。考虑将缓存大小从100MB增加到1000MB,因为 100MB太低了,满足不了如今的浏览需求。

  在同一个文件中,在默认配置信息后面,添加下列几个命令:

icap_enable on
icap_send_client_ip on
icap_send_client_username on
icap_client_username_encode off
icap_client_username_header X-Authenticated-User
icap_preview_enable on
icap_preview_size 2048
icap_service service_req reqmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav
adaptation_access service_req allow all
icap_service service_resp respmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav
adaptation_access service_resp allow all

  这个基本配置指示Squid使用在本地主机上运行的SquidClamav ICAP服务,本地主机使用TCP端口1344。对非缓存内容而言,需要使用这项服务。你可以从官方的Squid说明文档,找到关于所有配置命令的更多信息。

  ClamAV

  ClamAV并不存在于默认的CentOS 6软件库中,所以你要么从源代码安装,要么使用第三方软件库。我建议使用EPEL软件库,因为它让用户易于安装和维护。

   要将EPEL软件库安装到CentOS 6上,请运行命令rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release- 6-5.noarch.rpm。之后,要安装ClamAV,请执行yum install clamav clamav-db clamd。由于这是从EPEL软件库首次安装,你会看到关于其密钥的提醒;确认密钥正确后才能继续下一步。

  执行chkconfig clamd on,确保ClamAV后台守护进程clamd自动启动和终止。

   你可以设置最基本的ClamAV配置,只需编辑文件/etc/clamd.conf。你得至少移除显示Example的那一行,那样该服务就能启动。你 可能还考虑更改一些命令的默认值。比如说,可以定义使用ScanPE、ScanELF和ScanPDF来扫描哪些文件扩展名。为了提升性能,可以将待扫描 文件的默认最大值(MaxFileSize)由25MB改成其他值,或者更改每个文件的多少数据有待扫描(MaxScanSize)——100MB是默认 值。值越大,所需的资源就越多,代理服务器的速度也就越慢。

 ClamAV病毒特征数据库由一个名为freshclam的独立程序来更新。其配置文件是/etc/freshclam.conf。为了使用它,你同样得至少移除文件开头部分显示Example的那一行。大多数设置不用管,保持默认值就可以了。

  如果你执行没有参数的freshclam,病毒特征更新一次,程序退出。你可以将freshclam配置成一项计划任务(cron job),定期检查ClamAV更新版,或者可以在后台守护模式下启用它,只需运行freshclam -d -c 2,其中-d指明了后台守护模式,-c 2指明了每天更新几次——这个例子中每天两次。把这个命令添加到/etc/rc.local文件中,就可以确保下一次服务器重启时,它会启用。

  在/etc/freshclam.conf中可能需要更改的一项值得关注的设置是SafeBrowsing,它在默认情况下被设置成关闭。这个 设置指定了你是不是想使用谷歌的Safe Browsing(安全浏览)数据库,该数据库里面含有一份更新后的列表,收录了已知的恶意网站。你应该启用它,对性能只有一点影响,除非贵企业的最终用 户在使用已经采用该数据库的浏览器,比如Mozilla Firefox和谷歌Chrome。你只要指定SafeBrowsing yes,就可以开启它。

  C-icap

  C-icap并不存在于默认的软件库或EPEL中,所以你得从其网站的源代码安装,对其进行解压缩,然后完成标准的配置、编译和安装这个过程。

  由于C-icap是从源代码自定义安装,并不得到chkconfig的支持。因而,为了让C-icap服务器在系统启动时自动开启,就用新的一行,将其二进制可执行代码/usr/local/bin/c-icap添加到底部的/etc/rc.local。

  你可以找到默认情况下在/usr/local/etc/c-icap.conf的C-icap配置文件。大多数默认选项不用管它。指定 ServerLog /var/log/icapserver.log,将服务器的活动记录到文件/var/log/icapserver.log中;我们以后要用到服务器的 日志,确保一切都在正常运行。

  你在检查配置时,要注意ModulesDir和ServicesDir这两个命令。默认情况下,两者都指向/usr/local/lib/c_icap。这个目录是你安装ICAP服务和模块(如SquidClamav)的地方。

  SquidClamav

  你得从源代码安装SquidClamav,原因与C-icap一样。一旦你从其SourceForge网页下载它,对其进行解压缩,然后完成标准的配置、编译和安装这个过程。

  为了确保SquidClamav正确安装,要检查目录/usr/local/lib/c_icap。你应该会看到两个文件:squidclamav.la(libtool 库文件)和squidclamav.so(模块本身)。

  SquidClamav并不作为一项独立的服务来运行,所以没必要把它添加到默认的运行级别来实现自动启动。相反,它是通过C-icap服务器来访问的。

  SquidClamav的配置文件位于/etc/squidclamav.conf。这里,默认配置的大部分选项直接可以拿来用。要更改的其中 一个选项是redirect。最终用户试图下载病毒时,他们会被重定向至你在这里指定的URL。创建详细描述的一个页面,否则你这个管理员会接到大量投 诉,反映下载的内容莫名其妙地无法运行。

  为了创建重定向页面,可以使用脚本cgi-bin/clwarn.cgi,你可以在SqidClamav的源代码归档文件中找到它。只要将它上传至网站,指定redirect example.org/cgi-bin/clwarn.cgi即可。

  测试代理服务器

  至此,你的代理服务器应该已安装完毕、合理配置。为了确保所有服务自动开启,重启服务器,然后开始测试。

  你开始测试时,确保可以通过TCP端口3128这个默认代理端口,连接到服务器的IP地址。你必须在默认的CentOS 6防火墙中允许连接到这个端口,除非按基本CentOS 6安装中建议的那样禁用了防火墙。

  一旦你确保了可以连接到这个端口,对浏览器进行同样详细的配置:至于HTTP代理地址,就使用服务器的IP地址;至于端口,使用端口3128。 然后开始浏览网络,看看代理服务器与未使用代理的浏览相比结果怎样。不妨模拟一下许多用户通常浏览的场景。你可能会发现,随着更多的用户开始使用代理服务 器,服务器的资源必须随之增加。

  在服务器端,监控下列日志:

  ● Squid的日志——默认情况下,它在文件/var/log/squid/access.log中。你会在那里看到哪些用户的IP地址在提出什么样的请求。

  ● C-icap服务器的日志——与/usr/local/etc/c-icap.conf中通过ServerLog之前配置的那样,它应该在/var/log/icapserver.log中。

  对你的代理服务器来说最重要的测试就是,试着下载病毒,看看结果如何。网上有众多资源介绍如何创建含有已知病毒特征的测试文件。一旦创建了这样 一个文件,把它上传至某个地方,试着使用新建的代理服务器,用浏览器来下载它。如果一切运行正常,在C-icap服务器的日志中应该会看到这样的条目:

Wed Feb 22 01:03:57 2012, general, DEBUG squidclamav_end_of_data_handler: received from Clamd: stream: Eicar-Test-Signature FOUND
Wed Feb 22 01:03:57 2012, general, DEBUG squidclamav_end_of_data_handler: Virus redirection: http://example.org/cgi-bin/clwarn.cgi?url=http://the_url_of_your_test_virus_file: Eicar-Test-Signature FOUND.

  进一步的改进

  如果到目前为止你已经做好了本文介绍的各个步骤,应该有一个带病毒防护功能的基本代理服务器了。你可以在此基础上继续改进、添加更多的功能。下面是针对你添加额外组件来加强用户安全的几个建议:

  ● 使用安全DNS。这种DNS不仅可以阻止扩散恶意软件的域耗用资源,还能阻止成人网站,如果进行了相应配置的话。一项广受欢迎的安全DNS服务是诺顿DNS。

  ● 使用URL过滤(重定向器)。URL过滤器可与分门类别的域列表协同运行,可以根据用户拥有的许可权限,允许或禁止访问网站。这类过滤器经常用于阻止员工 访问与工作无关的网站。可与Squid协同运行的一种广受欢迎的过滤器是SquidGuard。它是免费开源的,可以与随处可见的黑名单结合使用。

  要是由于某个原因,这款开源代理解决方案无法完全满足你的需要,可以研究一下主要的几款商用产品,比如SmoothWall,以便最好地满足贵企业的需要。


posted @ 2012-04-10 09:36 顺其自然EVO 阅读(329) | 评论 (0)编辑 收藏

利用JMeter进行Web测试(简介适合初学者)

利用JMeter进行Web测试
JMeter介绍
脚本录制
运行JMeter进行测试
JMeter主要组件介绍
参数化设置
动态数据关联
使用命令行运行JMeter脚本
利用XSLT分析JMeter结果文件

JMeter介绍

JMeter, 一个100%的纯Java桌面应用,它是Apache组织的开放源代码项目,它是功能和性能测试的工具。JMeter可以用于测试静态或者动态资源的性能 (文件、Servlets、Perl脚本、Java对象、数据库和查询、ftp服务器或者其他资源)。原先Jmemer是为Web/HTTP测试而设计 的,但是它已经扩展以支持各种各样的测试模块。它和用于HTTP和SQL数据库(使用JDBC)的模块一起运送。它可以用来测试静止资料库或者活动资料库 中的服务器的运行情况,可以用来模拟对服务器或者网络系统加以重负荷以测试它的抵抗力,或者用来分析不同负荷类型下的所有运行情况。它也提供了一个可替换 的界面用来定制数据显示,测试同步及测试的创建和执行。
  Jmeter的下载地址:http://jakarta.apache.org/jmeter/usermanual/index.html
  JMeter 的特性:
  a) 能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。
  b) 完全的可移植性和100% 纯Java。
  c) 完全 Swing 和轻量组件支持(预编译的JAR使用 javax.swing.*)包。
  d) 完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。
  e) 精心的GUI设计允许快速操作和更精确的计时。
  f) 缓存和离线分析/回放测试结果。
  g) 高可扩展性:
  h) 可链接的取样器允许无限制的测试能力。
  i) 各种负载统计表和可链接的计时器可供选择。
  j) 数据分析和可视化插件提供了很好的可扩展性以及 以及个性化。
  k) 具有提供动态输入到测试的功能(包括Javascrīpt)。
  l) 支持脚本变成的取样器(在1.9.2及以上版本支持BeanShell)。

脚本录制


利用BadBoy进行脚本录制
利用BadBoy录制JMeter脚本(1)
通过Badboy的官方网站(http://www.badboy.com.au)下载Badboy的最新版本;
安装Badboy。安装过程同一般的Windows 应用程序没有什么区别,安装完成后你可以在桌面和Windows开始菜单中看到相应的快捷方式——如果找不到,可以找一下Badboy安装目录下的Badboy.exe 文件,直接双击启动Badboy;
启动Badboy,你可以看到下面的界面。
利用BadBoy录制JMeter脚本(2)
在地址栏(图中红色方框标注的部分)中输入你需要录制的Web应用的URL——这里我们以http://www.baidu.com 为例 。
点击 开始录制 按钮(图中蓝色圆圈标注的部分)开始录制。
开 始录制后,你可以直接在Badboy内嵌的浏览器(主界面的右侧)中对被测应用进行操作,所有的操作都会被记录在主界面左侧的编辑窗口中(图中黄色方框标 注的部分)——在这个试验中,我们在baidu的搜索引擎中输入 JMeter 进行搜索。不过录制下来的脚本并不是一行行的代码,而是一个个Web对象——这有点像LoadRunner的VuGen中的Tree View视图;
录制完成后,点击工具栏中的“停止录制”按钮(图中紫色方框标注的部分),完成脚本的录制
利用BadBoy录制JMeter脚本(3)
选择“File -> Export to JMeter”菜单,填写文件名“baidu.jmx”,将录制好脚本导出为JMeter脚本格式。也可以选择“File -> Save”菜单保存为Badboy脚本;
启动JMeter并打开刚刚生成的测试脚本,就可以用JMeter进行测试了

利用JMeter的代理服务器功能进行脚本录制
利用JMeter的代理服务器功能
进行脚本录制(1)
在测试计划中添加线程组,在线程组中添加逻辑控制器-录制控制器。
在工作台中添加非测试元件-HTTP代理服务器。
端口:即代理服务器的监听端口,我们设为8080。
目标控制器选择:测试计划>线程组;
分组选择:每个组放入一个新的控制器。
在HTTP代理服务器中添加定时器-高斯随机定时器(用于告知Jmeter来在其生成的HTTP请求中自动的增加一个定时器)。定时器将会使相 应的的取样器被延迟。 延时的规则是,在上一个访问请求被响应并延时了指定的时间后,下一个被定时器影响的取样访问请求才会被发送出去。

如果在代理服务器元件里使用了高斯随机定时器,就应该在其中的固定延迟偏移(Constant Delay Offset)设置项里添上${T}(用于自动引用纪录的延迟时间)。
代理服务器配置好以后,点击启动,代理服务器就会开始记录所接受的HTTP 访问请求。
打开浏览器,打开Internet选项,将局域网(LAN)设置中的代理服务器设为:localhost,端口为在代理服务器中设的端口:8080。
在浏览器地址栏中输入地址并进行相关的操作进行录制,录制完成后, 停止HTTP 代理服务器; 在录制控制器元件上单击右键将记录的元件保存为一个文件用于以后重用,另外,不要忘了恢复浏览器的代理服务器设置。

运行Jmeter进行测试(1)


脚本录制完毕后,就可以运行JMeter来进行我们的测试了。
到JMeter的网站http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi
下载JMeter的最新版本,将zip文件解压缩到D:/JMeter,运行D:/JMeter/bin下的jmeter.bat即可。
打开JMeter会有一个默认的测试计划,点击文件-打开,选中录制的脚本文件如:WebXSample_addUser.jmx,打开脚本进行测试。
在线程组上添加监听器-聚合报告(用于分析测试结果)后,点击运行-启动,开始测试,测试完毕后在聚合报告中就可以看到测试结果。一个简单的测试计划就完成了。
聚合报告显示测试结果
Label:每个 JMeter 的 element (例如 HTTP Request )都有一个 Name 属性,这里显示的就是 Name 属性的值
#Samples:表示你这次测试中一共发出了多少个请求,如果测试计划模拟10个用户,每个用户迭代10次,这里就会显示100
Average:平均响应时间 — 默认情况下是单个 Request 的平均响应时间,当使用了事务控制器时,也可以以事务为单位显示平均响应时间
Median:中位数,也就是 50 %用户的响应时间
90% Line: 90 %用户的响应时间
Min:最小响应时间
Max:最大响应时间
Error%:错误率,本次测试中出现错误的请求的数量 / 请求的总数
Throughput:吞吐量 —— 默认情况下表示每秒完成的请求数( Request per Second )
KB/Sec:每秒从服务器端接收到的数据量
测试计划(Test Plan)是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
线程组(Thread Group)代表一定数量的并发用户,它可以用来模拟并发用户发送请求。
取样器(sampler)定义实际的请求内容,被线程组包含,我们主要用HTTP请求。
监听器(Listener)
逻辑控制器(Logic Controller)
断言(Assertions)
配置元件(Config Element)
前置处理器(Pre Processors)和后置处理器(Post Processors)
定时器(Timer)

JMeter主要组件介绍-测试计划


测试计划(Test Plan)是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
名称:你可以为你的测试计划取一个有意义的名字。
注释:对测试计划的注释。
用户定义的变量:用户可以自己定义变量,在用到此变量的时候直接用${变量名}引用即可。例:变量名=url,值=http://www.baidu.com,在需要http://www.baidu.com时直接用${url}即可。
Add directory or jar to classpath:向类路径即%JMETER-HOME%\lib中添加目录及jar包。
JMeter主要组件介绍-线程组
名称:为线程组起名字。
线程属性-线程数:设置发送请求的用户数目 ,即并发数。
线程属性-Ramp-Up Period(in second):线程间的时间间隔,单位是秒。即所有线程在多少时间内启动。
线程属性-循环次数:请求的重复次数,如果选择后面的forever(默认),那么 请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复指定的次数,如果输入1,那么请求将执行一次,如果是0,会出现问题。
调度器配置-启动时间:测试计划什么时候启动,启动延迟会覆盖它。
调度器配置-结束时间:测试计划什么时候结束,持续时间会覆盖它。
调度器配置-持续时间:测试计划持续多长时间,会覆盖结束时间。
调度器配置-启动延迟:测试计划延迟多长时间启动,会覆盖启动时间。
JMeter主要组件介绍-取样器(HTTP请求)
名称:HTTP请求的名字。
Web服务器-服务器名称或IP、端口号,脚本录制时自动添加,也可以使用“用户自定义变量”。
HTTP请求:用默认值即可。
同请求一起发送参数:请求中的参数、值可以在此设置,需要用到参数化及动态数据关联,我们在后面专门介绍。
同请求一起发送文件:我可以制定同请求一起发送哪个文件。
其他任务包括:从HTML文件中获取所有内含的资源、用作监视器、Embedded URLs must match
监听器(Listener)负责收集测试结果,同时也被告知了结果显示的方式。我们常用的包括:聚合报告、查看结果树、用表格查看结果,都支持将结果数据写入文件。其他的添加上去看看就行。聚合报告前面我们介绍过,后面是查看结果树和用表格查看结果的截图。
JMeter主要组件介绍-监听器(用表格查看结果)

JMeter主要组件介绍-逻辑控制器

逻辑控制器(Logic Controller)可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
循环控制器可以设置请求的循环次数或永远循环(如果选中永远的话)。
事务控制器可以将多个请求放在同一个事务中。如果选中Gegerate parent sample,则聚合报告中只显示事务控制器的数据,而不会显示其中的各个请求的数据,反之则全部显示。

JMeter主要组件介绍-断言

断言(Assertions)可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。

JMeter主要组件介绍-配置元件


配置元件(Config Element)维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。我们主要在参数化中用到CSV Data Set Config


JMeter主要组件介绍-前置处理器和后置处理器

前置处理器(Pre Processors)和后置处理器(Post Processors)负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。我们主要在动态关联中用到后置处理器的正则表达式提取器。     

JMeter主要组件介绍-定时器


定时器(Timer)负责定义请求之间的延迟间隔。

参数化设置


在我们的测试计划中我们使用的都是HTTP请求,在HTTP请求中常常会提交一些参数,我们为了不想在每一次请求中都使用相同的参数值,就要想办法让每一次请求的参数的值都是不一样的,我们就需要进行参数化设置,这里我们介绍两种参数化设置的方法。
一种是利用函数助手中的_Random函数进行参数化设置;
一种是利用配置元件中的CSV Data Set Config进行参数化设置。

参数化设置-函数助手(1)

JMeter中有一个函数助手的功能,里面内置了多个函数,我们可以利用其中的_Random函数来进行请求中的参数化设置。
在JMeter中选择“选项-函数助手对话框”打开函数助手对话框。
选择一个功能_Random。
设定最小值为1。
设定最大值为100。
函数名称设为func1。
点击生成将生成一个引用字符串${_Random(1,100,func1},在需要的请求参数中拷贝该字符串即可。
其中函数名称用来在引用中作区别,即我们可以设定不同的名称在不同的地方引用同一个函数的功能
例如:我们生成了两个串${_Random(1,100,func1)}、 ${_Random(1,100,func2)},在添加图书的请求中,我们在bookName的参数值中引 用${_Random(1,100,func1)},在bookConcern的参数值中应用${_Random(1,100,func2)},见截图, 这样测试运行时不同的线程将产生不同的bookName和bookConcern。

参数化设置-CSV Data Set Config(1)


在线程组上点击右键选择添加-配置元件-CSV Data Set Config,打开CSV Data Set Config。
Filename文件名:即参数化要引用的文件名。这里是d:\number.txt
File encoding文件编码:可以不填。
Variable Names(comma-delimited)变量名(用逗号分割):多个变量可以引用同一个文件,用逗号分割。这里是num1,num2
Delimiter(use ‘\t’ for tab):参数文件中多个变量值的分隔符,\t表示用tab键分割,默认是逗号。
Recycle on EOF?:结束后是否循环?默认是True.
Number.txt文件内容见截图。

参数化设置-CSV Data Set Config(2)


在添加图书的请求中,我们在bookName的参数值中引用${num1},在bookConcern的参数值中应用${num2},见截图,这样测试运行时不同的线程将产生不同的bookName和bookConcern。

动态数据关联

在HTTP请求的参数中经常会遇到一些参数的值是从服务器相应的动态数据,这些数据需要进行关联才能使得每一次请求都能成功得被服务器接受,在JMeter中采用正则表达式提取器来获取这些动态的数据。
正则表达式允许用户从服务器响应中获取数据,作为一个后置处理器,正则表达式提取器会在每一个请求执行后再执行,正则表达式提取请求的参数值,产生模板字符串,并将结果保存到给出的变量中。

动态数据关联(1)-正则表达式提取器


在HTTP请求的参数中经常会遇到一些参数的值是从服务器相应的动态数据,这些数据需要进行关联才能 使得每一次请求都能成功得被服务器接受,在JMeter中采用正则表达式提取器来获取这些动态的数据。比如我们想要获得从服务器相应的TOKEN,就可以 使用下面的正则表达式提取器。
使用时就可以使用${token_g1}来表示获取到的TOKEN值。如下图:

使用命令行运行JMeter脚本


JMeter -n -t my_test.jmx -l log.jtl
-n告知JMeter采用非图形化运行JMeter脚本
-t指定要运行的脚本文件
-l指定保存执行结果的文件名
执行命令前要检查当前目录是否是%JMeter_Home%\bin 目录;
如果 JMeter 脚本不在当前目录,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径。

利用XSLT分析JMeter结果文件(1)


将结果文件的扩展名改为xml,例:将log.jtl改为log.xml。
在log.xml的文件头
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
中添加
<?xml-stylesheet type=“text/xsl” href=“jmeter-results-report.xsl” ?>
使之变成
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="jmeter-results-report.xsl" ?>
<testResults version="1.2">
其中href指定xsl文件的路径,如果与xml文件在同一目录,则只写文件名即可,否则要写明详细路径。
利用XSLT分析JMeter结果文件(2)
将修改后的xml文件用浏览器打开即可得到统计结果
JMeter中进行分布式测试
作为一个纯 JAVA 的GUI应用,JMeter对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心, 甚至还会引起JAVA内存溢出的错误。不过,JMeter也可以像 LoadRunner 一样通过使用多台机器运行所谓的代理来分担负载产生器自身的压力,并借此来获取更大的并发用户数,我们只需手动配置一下即可。
1、在所有期望运行 JMeter作为 负载产生器的机器上安装JMeter,并确定其中一台机器作为 控制器,其他的机器作为 代理。然后运行所有 代理 机器上的JMeter-server.bat文件—假定我们使用两台机器172.20.80.47和172.20.80.68作为 代理;
2、在Controller 机器的JMeter安装目录下找到 bin 目录,再找到 jmeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;
3、 在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行JMeter代理的机器,这里需要修改为“remote_hosts=172.20.80.47,172.20.80.68”;
4、保存文件,并重新启动控制器机器上的JMeter,并进入启动 ->远程启动菜单项。就会看到我们刚才添加的两个代理的地址,选中即可运行,如果想同时启动所有代理,选择远程全部启动即可。
要进行分布式测试代理机器上需要添加环境变量,即添加用户变量JMETER_HOME=d:\jmeter,系统变量中的path中添加d:\jmeter\bin(假设jmeter放在d盘根目录下)。

OK  简单的介绍到此  希望大家多动手练 才是王道~












posted @ 2012-04-09 14:37 顺其自然EVO 阅读(43242) | 评论 (1)编辑 收藏

Jmeter Linux资源监控器

最近完成了jmeter linux资源监控器的开发,方法并不怎么高明,但相信可以帮助很多用jmeter来做性能测试的同仁解决jmeter缺少linux资源监控的问题
附件中是编译好的包以及linux上所用的脚本。基本的原理是利用shell脚本生成资源xml,让jmeter利用http请求获取该xml,解析展现数据。
欢迎各位同仁测试使用,有问题也可以与我交流。

监控器实现的是linux系统上的资源监控,要求:服务器上至少有一个web server(因需要通过http请求获取资源xml),用于生成服务器资源xml的脚本中使用了sysstat包中的指令,所以需要安装sysstat包。
使用方法:
下载:

LinuxResourcesMonitor.rar
(2008-08-01 20:56:32, Size: 756 kB, Downloads: 0)


首先解开压缩包,取出status脚本,登录到被监控的服务器上,将status脚本放上去。该脚本执行时会在所在路径生成status.xml文件,可以直接将status脚本放在web server的目录下,也可以用软链接来链到status.xml文件。下面介绍在基于apache的web server上的配置方法:
在apache的配置文件httpd.conf中找到DocumentRoot,一般默认是apache目录下的htdocs,将status脚本放到该目录下;
更改执行权限:
chmod 744 status
启动该脚本:
./status start
启动起来之后就会在当前目录下产生status.xml文件
不需要监控时,停止该脚本:
./status stop




然后到运行jmeter的机器上,解开压缩包里的ext.rar包,将解压得到的两个jar包:ApacheJMeter_core.jar和ApacheJMeter_monitors.jar,复制到jmeter的lib/ext目录下,覆盖原来的jar包。
之后就可以到jmeter上来监控了:打开jmeter,建立一个线程组,添加一个http请求,ip就是要监控的服务器地址,端口号就是apache侦听的http端口,协议是“http”,路径是“/status.xml”,勾选“用作监视器”;



http request.JPG

再为该http请求添加一个“固定定时器”组件和一个“监视器结果”组件,“固定定时器”的延时要设置为大于1秒的时间,即数据的采样时间。



timer.JPG

在线程组中循环次数设置勾选“永远”;



thread group.JPG

Run一下,就可以在监视器结果上看到刚刚添加的监控服务器了,目前已经监控了6个参数:cpu%user,cpu%iowait,load,mem%(used/total),swap in,swap out。


monitor.JPG


如果被监控的linux上没有安装sysstat包,是无法正常生成监控数据的,这里附上sysstat包的安装方法:
首先到http://perso.wanadoo.fr/sebastien.godard/下载最新的版本,最好是源码包,比如sysstat-5.1.1.tar.gz

1.解包:

tar zxvf sysstat-5.1.1.tar.gz


2.安装:

cd sysstat-5.1.1

make config
这步可以省略,有些发行版中会出错;如果不用这个命令,可以直接安装到其默认的/usr/local/lib目录中

make
编译

make install
安装

这样就安装好了。

posted @ 2012-04-09 11:36 顺其自然EVO 阅读(1907) | 评论 (0)编辑 收藏

jmeter利用http代理服务器组件录制脚本

by jack

在“工作台”添加“HTTP代理服务器”

端口:

代理服务器的端口,默认8080,可自行修改,但不要与其它应用端口冲突

目标控制器:录制的脚本存放的位置,可选择项为测试计划中的线程组

 

分组:

对请求进行分组。“分组”的概念是将一批请求汇总分组,可以把url请求理解为组。

      “不对样本分组”:所有请求全部罗列

      “在组间添加分隔”:加入一个虚拟的以分割线命名的动作,运行同“不对样本分组”,无实际意义

      “每个组放入一个新的控制器”:执行时按控制器给输出结果

      “只存储每个组的第一个样本”:对于一次url请求,实际很多次http请求的情况,这个选项很好用,因为我们常常是不关心后面的那些请求的。

 

记录HTTP信息头:

录制requesthead信息

添加断言:

录制时加入空的检查点(需自行填写内容)

Regex matching

录制时加入空的正则匹配(需自行填写内容)

 

在浏览器中录制

启动HTTP代理服务器后,打开浏览器(IEFirefoxOpera等),添加代理,地址填写本机iphost name,端口填写刚刚设置的代理端口(本例中8080),在浏览器中进行正常网页浏览,即可录制下对应的http请求。IE上的设置:


在一些用到JS很多的网页中,JS的动作也会被录制进来,像其中的/complete/search是输入提示框JS的动作,可以删掉的。

JMeter的脚本录制就是这样,另外还可以利用别的工具,例如Badboy,它的使用更加简单,具体可以参考官方网站http://www.badboy.com.au/.

最后,在设置HTTP代理服务器的时候,有两个地方需要注意:

  1. 要确认8080端口是否有冲突,被别的程序,例如Web服务器占用。如果有冲突,可以更改为别的没有冲突的端口
  2. JMeter HTTP代理服务器的端口和浏览器设置的端口要一致

posted @ 2012-04-09 11:33 顺其自然EVO 阅读(3273) | 评论 (1)编辑 收藏

ruby开学!

至于怎么安装ruby 我就不多说了  网上到处都是 人不能太懒 ,我在windows和linux下都安装了  亲  学习要靠自己哦

http://blog.csdn.net/gumanren/article/details/4914586(Eclipse 集成ruby的环境插件)



介绍

这是一个短小的Ruby入门,完全读完只需20分钟。这里假设读者已经安装了Ruby,如果你没有安装的话,请在阅读文前访问Ruby官方网站进行下载并安装。

交互式的Ruby

打开IRB(交互式Ruby外壳):
如果你使用Mac OS X,那么请打开终端窗口输入irb;
如果你使用Linux,那么请打开shell输入irb;
如果你使用windows,那么请在开始菜单中找到Ruby->fxri,并执行它。

image   

Ok,在打开IRB之后,在其中输入"Hello World"。

image

Ruby听从你的安排!   

发生了什么?我们刚才编写了世界上最短小的“Hello World”程序吗?这么说不太确切。第二行输出是IRB告诉我们:上一个表达式的评估结果。如果我们希望打印出“Hello World”,那么就还需要一点努力:

image

puts在Ruby中是一个简单的打印输出命令。后面的“=> nil”表示什么?——那是表达式的结果。Puts总是返回nil,这是Ruby中表示“绝对无值”(absolutely-positively- nothing value)的方式,看上去有些类似Java中的null。

你的免费计算器在这里!

无需做什么,我们就能把IRB作为一个简单的计算器使用:

image

这样就能计算3+2。够简单的!那么3乘以2如何?你可以在下面继续输入3*2,也可以回到上面(3+2处)重新修改你刚刚输入的计算公式。使用键盘上的向上键,使光标到达3+2那一行,再用左键移动光标到加号上,然后使用空格键进行修改。

image   

下面,让我们尝试计算3的平方:

image  

在Ruby语言中,**表示幂运算。那么如何计算平方根呢?

image

Ok,等一下,表达式中的sqrt(9)表示什么?你一定能猜到这是计算9的平方根。而Math表示什么?不要着急,下面就让我们进一步了解像Math这样的模块。

模块——按照主题分组的代码

Math是Ruby内建的数学模块。在Ruby中,模块提供了两种角色:一种角色是将类似的方法聚集在同一个“家 族”名下。因此,Math也包括sin、tan这样的方法。第二种角色是一个圆点(dot),它标记了消息的接收者。什么是消息?在上面的例子 中,sqrt(9)便是消息,它意味着调用sqrt方法取出9的平方根。

Sqrt方法调用的结果是3.0。你可能注意到它并不是3。这是因为多数情况下,数字的平方根并不是整数,所以这里返回了一个浮点数。

那么我们如何记住这些计算结果呢?——将结果赋值给变量。

image


这是一个短小的Ruby入门,完全读完只需20分钟。让我们从编写世界上最简单的“Hello,World”程序开始逐步深入了解Ruby的类、block、迭代器等特征,也许这对你来讲还远远不过,但对于20分钟的入门来讲已经非常难得了。

AD:

如何定义方法?

如何才能方便省事地随意输出字符串,而无需过多地劳烦我们的手指呢?——我们需要定义一个方法!

image

上面的代码中第一行“def h”标志着方法定义的开始。它告诉Ruby我们正在定义一个名为h的方法。下面一行是方法体:puts "Hello World"。最后,也就是第三行“end”通知Ruby我们完成了方法定义。Ruby的回应“=> nil”告诉我们它已经知道我们定义了此方法。

简短、重复地调用方法

现在,让我们尝试多次执行这个方法:

image    

哈,这太容易了。在Ruby中调用某个方法只需将方法名提交给Ruby。当然,这是在方法没有参数的情况下。如果你愿意也可以添加一个空白的括号,但是这没有必要。

如果我们想对某个人说hello而不是整个“世界”(world),那该怎么做?——重定义h方法使它接收name参数。

image

嗯,现在看来工作正常。

字符串中的奥秘 

“#{name}”是什么意思?这是Ruby在某个字符串中插入其它字符的方式。在大括号之间放入的字符串(这里是指name)将被外部的字符串代替。你也可以使用字符串类内建的capitalize方法来确保某人名字的首字母大写:

image

上面的代码有两个地方需要说明:

第一,我们通过无括号的方式调用方法,因为括号是可选的;

第二,这里的默认参数值为“World”。也就是说在调用方法时如果没有提供name参数,则使用默认值“World”。

进化为Greeter!

我们是否需要一个真正的问候者(greeter),他能记住你的名字、问候你、总是尊重地向你示好?那么这就最好建立一个“Greeter”类:

image

在上面的类代码中定义了一个称为Greeter的类和一些类方法,其中出现了一些新的“关键词”:请注意“@name”,它是类的实例变量,并对类中的所有方法(say_hi和say_bye方法)都有效。

这是一个短小的Ruby入门,完全读完只需20分钟。让我们从编写世界上最简单的“Hello,World”程序开始逐步深入了解Ruby的类、block、迭代器等特征,也许这对你来讲还远远不过,但对于20分钟的入门来讲已经非常难得了。

AD:

如何让Greeter类发挥作用?现在让我们来建立一个Greeter对象并使用它!

image

Greeter类的实例对象g被建立后,它便接受了name参数(值为Pat)。那么我们能直接访问name吗?

image

看看上面的编译错误来看,这样直接访问name是行不通的。 

窥视对象的内部    

对象中的实例变量总是隐藏于其中,但也并非毫无踪迹可寻,通过审查(inspect)对象便会见到它们。当然还有其它的访问方法,但是Ruby采用了良好的面向对象的方式来保持数据的隐藏性。

image

喔!这么多方法,可是我们只定义了两个方法呀?其它的方法又出自何处?不要担心,instance_methods方法列出了Greeter对象的 所有方法,其中包括父类中定义的方法。如果我们只想对Greeter类的方法进行列表的话,那么把false作为参数调用 instance_methods方法即可。false意味着我们不需要父类定义的方法。

image

哈哈,这才是我们想要的。下面让我们看看Greeter对象能回应哪些方法:

image

它知道say_hi、to_s(此方法将对象转换为字符串,是任何对象都必备的默认方法,很想Java中的toString方法),但它不知道name。

随时修改类定义

如何才能查看或者修改name呢?Ruby提供了访问对象变量的简单方法:

image

在Ruby语言中,你能够多次打开某个类并修改它。而修改所带来的变化将应用在此后建立的任何新对象中、甚至现存的此类对象中。下面让我们建立一个新对象并访问它的@name属性。

image

我们通过使用attr_accessor定义了两个方法:

“.name”用来获取name属性值;

“.name=”用来设置namee属性值。

这很类似在Java类中访问被Public修饰的成员变量。



向每个人问候,MegaGreeter不会漏掉一个人

Greeter并不完美,因为它只能一次服务一个人。所以我们在这里设计一个能够一次向全世界、世界上每个人或者在名单中的人发送问候的MegaGreeter类。在这里,我们将放弃从前的IRB交互模式,转而改为编写Ruby程序文件。

退出IRB的方法:输入“quit”、“exit”或者按下Control+D的组合键。

image

保存上面的代码到名为“ri20min.rb”的文件中,并使用“ruby ri20min.rb”的命令执行它。程序输出如下:

image

下面我们将深入了解一下上面的代码。

请注意上面代码中的起始行,它以#开头。在Ruby语言中,任何以#开头的行都被视为注释,并被解释程序忽略。

我们的say_hi方法已经发生了变化:

image

它查找@names参数并按照其参数值作出决定:

如果参数值为nil,它将打印三个圆点。

那么@names.respond_to?("each")表示什么?

循环——也叫迭代

如果@names对象具有each方法,那么它是可以被迭代的,进而可以对其进行迭代,从而问候列表中每个人。如果@names不具备each方法,则将它自动转换为字符串,并执行默认的问候。

image

each是一种方法,它接受一个代码块(block of code),然后针对列表中的每个成员执行这个代码块,而在do和end之间的部分便是这个非常类似匿名函数的代码块。在管道符之间的变量是代码块的参数 name,它作为代码块参数被绑定为列表成员,而代码块puts "Hello #{name}!"将使用这个参数进行输出。

大多数其它的编程语言使用循环遍历列表,下面是C语言的循环示例:

image

上面的代码显然可以工作,但它不够“优雅”!你不得不用i这个多余的循环变量,还需要指出列表的长度,然后再解释如何遍历列表。

Ruby的迭代方式则更加优雅,所有的内部管理细节都隐藏在each方法中,你所需做的就是告诉它如何处理其中的每个成员。

块(block),Ruby边缘的高亮点!

块(block)的真正优势在于:能够处理比列表更加复杂的对象。除了在方法中可以处理简单的内部管理细节外,你还能处理setup、teardown和所有错误,而不让用户有所察觉。

image

say_bye方法没有使用each,而是检查@names是否具有join方法,如果具有join方法,则调用join方法。否则它将直接打印@names变量。

此方法并不关心变量的实际类型,这依赖于它所支持的那些被称为“Duck Typing” 的方法:duck typing是动态类型的一种形式:变量的值自身隐含地决定了了变量的行为。这暗示了某个对象与其它实现了相同接口的对象之间是可交换的,不管对象之间是 否具有继承关系。鸭子测试(duck test)是对duck typing的一种形象比喻——“如果它走路像鸭子,那么也一定像鸭子一样呷呷地叫,那么它必定是一只鸭子”。duck typing是某些编程语言的特性:如Smalltalk, Python, Ruby, ColdFusion。

Duck Typing的益处是无需对变量的类型进行严格地限制,如果某人使用一种新类型的列表类,只要它实现了与其它列表相同语义的join方法,便可以拿来使用。

启动脚本

文件上半部分是MegaGreeter类的代码,而后面剩下的部分则是对这些类方法的调用。而这是我们最后值得注意的一点:

image

__FILE__是一个“具有魔力”的变量,它代表了当前文件名。$0是用于启动程序的文件名。那么代码“if __FILE__ == $0”便意味着检查此文件是否为将被使用的主程序文件。这样做可以使程序文件作为代码库使用,而不是可执行代码;但当此文件被用作执行文件时,也可被执 行。

如何进一步学习Ruby

到此便是本入门的尾声了。当然还有许多值得浏览的:Ruby提供的各种不同的控制结构;块和yield的使用;模块作为mixins使用等。希望这次Ruby初体验能使你对Ruby更感兴趣。

注:mixin在面向对象编程语言中是一种提供某些功能给子类继承的类,但mixin并不能实例化。从某个 mixin继承并不是什么特殊的形式,而它更适于收集功能。某个子类甚至可以通过继承一个或者多个mixin选择继承它的全部或者多数功能。一个 mixin能延期定义和绑定方法直到运行时,而属性和实例参数也将在编译时才被定义。这不同于多数常见的方式:定义所有的属性、方法,并在编译时进行初始 化。

posted @ 2012-04-05 17:52 顺其自然EVO 阅读(1953) | 评论 (0)编辑 收藏

测试的一些工具

WEB前端的性能测试综合的测试工具有pagespeed、yeslow,httpwatch,IE开发者工具,主要是通过工具访问功能点,根据HTTP协议进行性能分析。
js的性能要怎么测试

  JS的性能可以不通过并发就可以验证,IE8、IE9的开发者工具就是一个非常不错的验证JS性能的分析器,主要分析调用时间跟调用次数。

在日常的测试工作时如何进行性能测试

  日常的性能测试主要是从业务功能点中抽取具有并发特点的,高风险的、大数据量处理的业务,整理成测试用例,制定相应的指标,然后用工具或者手工进行性能测试并分析, 主要做单功能点的基准测试与组合场景的稳定性测试。

 (2)关于队列的性能测试如何进行

  队列由于有一个队列的长度限制,一般不通过用LR等工具来进行性能测试,主要是通过准备大数据量的待调度事件来进行测试,比如工作流调度队列,你可以准备1万条待调度的流程。

  (3)测试过程中发现了性能问题,问题要如何进行定位

   如果发现性能问题,我想首先是响应时间不达标,然后就是定位分析了,定位分析需要一个过程了,一般程序是通过前端到后端进行分层分析,一般分为客户机 层、应用服务器层、数据库层,像WEB程序,客户机层就是通过分析JS或者http交互过程或者是LR的页面切割来分析,然后一层层的分析下去,知道定位 程序的某个功能点、数据库的某条SQL语句,或者某些不适合的配置参数。

 3、如何成为一名性能架构师?

  成为性能架构师有两条路可走,一条是从开发转向架构,然后精力集中放在与性能相关的领域,如性能测试、性能分析、性能优化,从软件架构层面把握软件的性能问题,积累到一定程度就可称得上一名合格的性能架构师。

  另一条路是从性能测试逐步积累经验,当然这也需要较深的代码功底,起码你能定位问题、分析出问题的本质,能给开发人员提供优化的建议,经常与架 构团队交流,从他们那里吸取宝贵的经验然后自己消化掉,在性能测试方面要有很强的设计能力,如果对架构有很熟,反过来可以对架构设计产生影响,那就是实现 1+1>2了,随着经验的积累自然可以担当性能架构师的角色。

  4、我比较关注Oracle性能优化的问题,下面是我想了解的几个问题:

  Oracle性能监控需要注意哪些要点?有哪些Oracle性能监控工具可以用?

  Oracle平常监控主要用EM的性能监控视图、主要关注TOP SQL以及SQL的执行计划、阻塞与锁等待分析,另外可用ASH、AWR报告分析top5 event分析重要事件,报告中主要关注那些逻辑读、物理读比较大的SQL,还有各缓存的命中率, 数据库的报警日志文件也很重要,也要定期分析。

  5、金蝶ERP产品的性能测试是如何做的?采用什么工具进行测试?如何从性能测试指标结果定位性能瓶颈?

  金蝶的ERP性能测试主要是通过让性能测试常态化,性能测试分为基准测试、稳定性测试、大数据量测试、窄带宽测试、实验室测试,平常在研发环节 主要是将ERP中重要的功能点整理成测试用例,通过基准测试对每个功能按约定的设计要求进行并发测试,以便验证是否符合预期指标, 基准测试完后,按典型业务场景进行案例组合的稳定性测试,金蝶要求做7*24小时的稳定性测试,以此验证产品的稳定性,产品的大版本一般跟IBM合作进行 实验室测试。

  金蝶平常用自己开发的性能测试工具,在项目测试的时候用由客户提供的LoadRunner进行测试定位性能瓶颈首先要从响应时间指标中检测是否符合预期,然后验证CPU,内存的消耗是否符合预期指标。

  6、J2EE平台的性能监控一般监控哪些方面?数据库、WEB服务器、应用服务器?还有什么?监控一般推荐用什么工具啊?

  J2EE平台的性能监控一般监控响应时间、分析JS性能,分析HTTP交互、网络流量、JVM线程、JVM内存,JVM垃圾回收、JDBC连接池、数据库,数据库与应用服务的流量,数据量的TOP SQL,服务器层面监控CPU、内存、IO等待、端口连接数等。

  监控工具要分类划分,IE端有分析http交互的httpwatch, fiddler2,分析JS性能有IE8、IE9的开发者工具,如果是互联网应用还可以用yeslow等工具进行综合分析,应用服务器。

  如果分析少量并发性能可以用Jprofile,Jprob等工具,如果是并发大测试可以通过定期抓取jvm线程堆栈来分析性能瓶颈,同时将GC日志输出进行分析,对于数据库端,oracle有很多工具,如EM动态性能视图,db2有db2top。

  7、LoadRunner的性能测试结果一般重点看哪些内容?如何分析测试结果?

  LoadRunner的性能测试结果一般重点看响应时间、TPS、吞吐量, STD、失败率是否符合指标,不仅要看是否是否符合要求,还要看是否平稳。

  8、想了解一下云计算的性能压力测试是怎么做的?与普通传统应用的性能测试有什么区别?

  具体我还没做过云计算项目的性能压力测试,我想从技术角度分析一下,云技术肯定是由负载分发器、计算池、存储分发器、存储池构成的,上线的环境 我估计由于云池太大很难以测试,换个思路,我们通过换算或估算的方式,走小范围性能测试+技术架构分析的路子,性能测试用来验证任务的分发与少部分计算池 上的性能,再结合对技术架构的分析,重点验证那些关键技术点,这样应该是可行的。

posted @ 2012-04-05 10:24 顺其自然EVO 阅读(313) | 评论 (0)编辑 收藏

最近一些开源的自动化测试网站

http://blog.csdn.net/zhangren07/article/details/5318821
http://www.oschina.net/p/scriptcover
http://www.qzonn.com/heikeruanjian/ruqin/AppScan.html
http://www.oschina.net/p/watir

http://wiki.openqa.org/display/WTR/Example+Test+Case

posted @ 2012-03-30 16:29 顺其自然EVO 阅读(233) | 评论 (0)编辑 收藏

http://www.testlink.org.cn/index.php

http://www.testlink.org.cn/index.php

posted @ 2012-03-23 17:55 顺其自然EVO 阅读(346) | 评论 (0)编辑 收藏

仅列出标题
共394页: First 上一页 338 339 340 341 342 343 344 345 346 下一页 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜