如何进行Web服务的性能测试

如何进行Web服务的性能测试,第1张

贴一篇我们内部的文章:
随着浏览器功能的不断完善,用户量不断的攀升,涉及到web服务的功能在不断的增加,对于我们测试来说,我们不仅要保证服务端功能的正确性,也要验证服务端程序的性能是否符合要求。那么性能测试都要做些什么呢?我们该怎样进行性能测试呢?
性能测试一般会围绕以下这些问题而进行:
1 什么情况下需要做性能测试?
2 什么时候做性能测试?
3 做性能测试需要准备哪些内容?
4 什么样的性能指标是符合要求的?
5 性能测试需要收集的数据有哪些?
6 怎样收集这些数据?
7 如何分析收集到的数据?
8 如何给出性能测试报告
性能测试的执行过程及要做的事儿主要包含以下内容:
1 测试评估阶段
在这个阶段,我们要评估被测的产品是否要进行性能测试,并且对目前的服务器环境进行粗估,服务的性能是否满足条件。
首先要明确只要涉及到准备上线的服务端产品,就需要进行性能测试。其次如果产品需求中明确提到了性能指标,那也必须要做性能测试。
测试人员在进行性能测试前,需要根据当前的收集到的各种信息,预先做性能的评估,收集的内容主要包括带宽、请求包大小、并发用户数和当前web服务的带宽等
2 测试准备阶段
在这个阶段,我们要了解以下内容:
a 服务器的架构是什么样的,例如:web服务器是什么?是如何配置的?数据库用的是什么?服务用的是什么语言编写的?;
b 服务端功能的内部逻辑实现;
c 服务端与数据库是如何交互的,例如:数据库的表结构是什么样的?服务端功能是怎样 *** 作数据库的?
d 服务端与客户端之间是如何进行交互的,即接口定义;
通过收集以上信息,测试人员整理出服务器端各模块之间的交互图,客户端与服务端之间的交互图以及服务端内部功能逻辑实现的流程图。
e 该服务上线后的用户量预估是多少,如果无法评估出用户量,那么可以通过设计测试执行的场景得出这个值;
f 上线要部署到多少台机器上,每台机器的负载均衡是如何设计的,每台机器的配置什么样的,网络环境是什么样的。
g 了解测试环境与线上环境的不同,例如网络环境、硬件配置等
h 制定测试执行的策略,是需要验证需求中的指标能否达到,还是评估系统的最大处理能力。
i 沟通上线的指标
通过收集以上信息,确定性能测试用例该如何设计,如何设计性能测试用例执行的场景,以及上线指标的评估。
3 测试设计阶段
根据测试人员通过之前整理的交互图和流程图,设计相应的性能测试用例。性能测试用例主要分为预期目标用户测试,用户并发测试,疲劳强度与大数量测试,网络性能测试,服务器性能测试,具体编写的测试用例要更具实际情况进行裁减。
用例编写的步骤大致分为:
a 通过脚本模拟单一用户是如何使用这个web服务的。这里模拟的可以是用户使用web服务的某一个动作或某几个动作,某一个功能或几个功能,也可以是使用web服务的整个过程。
b 根据客户端的实际情况和服务器端的策略,通过将脚本中可变的数据进行参数化,来模拟多个用户的 *** 作。
c 验证参数化后脚本功能的正确性。
d 添加检查点
e 设计脚本执行的策略,如每个功能的执行次数,各个功能的执行顺序等
4 测试执行阶段
根据客户端的产品行为设计web服务的测试执行场景及测试执行的过程,即测试执行期间发生的事儿。通过监控程序收集web服务的性能数据和web服务所在系统的性能数据。
在测试执行过程中,还要不断的关注以下内容:
a web服务的连接速度如何?
b 每秒的点击数如何?
c Web服务能允许多少个用户同时在线?
d 如果超过了这个数量,会出现什么现象?
e Web服务能否处理大量用户对同一个页面的请求?
f 如果web服务崩溃,是否会自动恢复?
g 系统能否同一时间响应大量用户的请求?
h 打压机的系统负载状态。
5 测试分析阶段
将收集到的数据制成图表,查看各指标的性能变化曲线,结合之前确定的上线指标,对各项数据进行分析,已确定是否继续对web服务进行测试,结果是否达到了期望值。
6 测试验证阶段
在开发针对发现的性能问题进行修复后,要再执行性能测试的用例对问题进行验证。这里需要关注的是开发在解决问题的同时可能无意中修改了某些功能,所以在验证性能的同时,也要关注原有功能是否受到了影响。
想看原文或者有测试其他相关的问题可以关注下 搜狗测试 微信公众号,我们上面有不少关于性能测试分享~

摘要 测试报告是把测试的过程和结果写成文档,并对发现的问题和缺陷进行分析,为纠正软件的存在的质量问题提供依据,同时为软件验收和交付打下基础。本文提供测试报告模板以及如何编写的实例指南。 关键字 测试报告 缺陷 正文 测试报告是测试阶段最后的文档产出物,优秀的测试经理应该具备良好的文档编写能力,一份详细的测试报告包含足够的信息,包括产品质量和测试过程的评价,测试报告基于测试中的数据采集以及对最终的测试结果分析。 下面以通用的测试报告模板为例,详细展开对测试报告编写的具体描述。 PARTⅠ 首页 01页面内容: 密级 通常,测试报告供内部测试完毕后使用,因此密级为中,如果可供用户和更多的人阅读,密级为低,高密级的测试报告适合内部研发项目以及涉及保密行业和技术版权的项目。 XXXX项目/系统测试报告 报告编号 可供索引的内部编号或者用户要求分布提交时的序列号 部门经理 ______项目经理______ 开发经理______测试经理______ XXX公司 XXXX单位 (此处包含用户单位以及研发此系统的公司) XXXX年XX月XX日 02格式要求: 标题一般采用大体字(如一号),加粗,宋体,居中排列 副标题采用大体小一号字(如二号)加粗,宋体,居中排列 其他采用四号字,宋体,居中排列 03版本控制: 版本 作者 时间 变更摘要 新建/变更/审核 PARTⅡ 引言部分 11编写目的 本测试报告的具体编写目的,指出预期的读者范围。 实例:本测试报告为XXX项目的测试报告,目的在于总结测试阶段的测试以及分析测试结果,描述系统是否符合需求(或达到XXX功能目标)。预期参考人员包括用户、测试人员、、开发人员、项目管理者、其他质量管理人员和需要阅读本报告的高层经理。 提示:通常,用户对测试结论部分感兴趣,开发人员希望从缺陷结果以及分析得到产品开发质量的信息,项目管理者对测试执行中成本、资源和时间予与重视,而高层经理希望能够阅读到简单的图表并且能够与其他项目进行同向比较。此部分可以具体描述为什么类型的人可参考本报告XXX页XXX章节,你的报告读者越多,你的工作越容易被人重视,前提是必须让阅读者感到你的报告是有价值而且值得浪费一点时间去关注的。 12项目背景 对项目目标和目的进行简要说明。必要时包括简史,这部分不需要脑力劳动,直接从需求或者招标文件中拷贝即可。 13系统简介 如果设计说明书有此部分,照抄。注意必要的框架图和网络拓扑图能吸引眼球。 14术语和缩写词 列出设计本系统/项目的专用术语和缩写语约定。对于技术相关的名词和与多义词一定要注明清楚,以便阅读时不会产生歧义。 15参考资料 1.需求、设计、测试用例、手册以及其他项目文档都是范围内可参考的东东。 2.测试使用的国家标准、行业指标、公司规范和质量手册等等 PARTⅢ 测试概要 测试的概要介绍,包括测试的一些声明、测试范围、测试目的等等,主要是测试情况简介。(其他测试经理和质量人员关注部分) 21测试用例设计 简要介绍测试用例的设计方法。例如:等价类划分、边界值、因果图,以及用这类方法(3-4句)。 提示:如果能够具体对设计进行说明,在其他开发人员、测试经理阅读的时候就容易对你的用例设计有个整体的概念,顺便说一句,在这里写上一些非常规的设计方法也是有利的,至少在没有看到测试结论之前就可以了解到测试经理的设计技术,重点测试部分一定要保证有两种以上不同的用例设计方法。 22测试环境与配置 简要介绍测试环境及其配置。 提示:清单如下,如果系统/项目比较大,则用表格方式列出 数据库服务器配置 CPU: 内存: 硬盘:可用空间大小 *** 作系统: 应用软件: 机器网络名: 局域网地址: 应用服务器配置 …… 客户端配置 …… 对于网络设备和要求也可以使用相应的表格,对于三层架构的,可以根据网络拓扑图列出相关配置。 23测试方法(和工具) 简要介绍测试中采用的方法(和工具)。 提示:主要是黑盒测试,测试方法可以写上测试的重点和采用的测试模式,这样可以一目了然的知道是否遗漏了重要的测试点和关键块。工具为可选项,当使用到测试工具和相关工具时,要说明。注意要注明是自产还是厂商,版本号多少,在测试报告发布后要避免大多工具的版权问题。

一般情况下,我们可能想测试一下服务器上的文件(用户上传的或者后台写入的)是否可以被外网访问到,以进一步测试文件下载等功能。
我原本想尝试从服务器的任意目录访问文件,但是经过数次的尝试,网上教的通过修改Tomcat路径映射和自定义XML来进行文件映射都不能成功访问到目标文件。
最后查到,把文件放在Tomcat的ROOT目录下,就可以用服务器域名+“/”+“文件名(带后缀)”直接访问到文件,亲测成功,。

给你看个范例:

测试环境:
       DELL 24G memory 512M
       RH90 MySQL 32354
测试使用的是mysql缺省参数,用mysql提供的API用C编写测试程序
测试程序共启动40个线程进行数据库 *** 作,查找、插入、修改、删除各10个,每个线程独立与Sql Server连接。
数据库结构,单表,表结构如下:
       toheader         100byte 主键
       contactheader 100byte
       called       50byte
       cseq        100byte
       hashval      int
       timestamp       int  次键
对主次键分别建了索引。分别在5万、10万、50万用户环境做测试,结果如下:
 
   
查找100次
   
插入100次
   
修改100次
   
删除100次
   
5万
   
100-300ms
   
100-300ms
   
100-300ms
   
100-300ms
   
10万
   
500ms-1s
   
500ms-1s
   
500ms-1s
   
500ms-1s
   
50万
   
3s-5s
   
3s-5s
   
3s-5s
   
3s-5s
   
从此数据看性能是很不错的,因为mysql能保证每个 *** 作是原子的,所以不用考虑线程间的同步。
 
但有一个问题:即mysql的每个 *** 作是原子的,所以做每个 *** 作时,其它线程是阻塞的,在大数据量查询时,花的时间较长,会对其它线程有影响。我在保持其它线程工作不变的情况下,将每个查找线程改为做一次对所有记录的查询,在5万和10万记录时表现不错,分别为250ms和450ms,但在50万记录时,这个数值达到了22秒。而且在50万用户时,通过条件查找部分数据也很慢,如查询结果为10万记录时用11秒。
怀疑是sql server的参数影响,按数据库说明修改了几个缓冲区的参数,但没有效果。
由于首次同步发生的频率很低,象250ms和450ms这样的数据还是可以接受的,但22秒太离谱了。支持50万用户在线,需要考虑一个解决办法,现在有一个办法是建一个备份表,写备份表的请求放到一个队列里由一个单独线程处理,这样阻塞不会影响正常业务处理了。但这个线程的缓冲区要足够容纳30秒内发生的 *** 作。
 
本来担心数据量大了mysql的缓冲区不够会出错或丢数据,但测试发现,一次查询最多读了50M数据,没有出现问题,经测算我们首次同步的数据不会超过10M。
 
在MySQL中启动了innoDB引擎后,可以实现真正的行级锁,select和update *** 作可以并发,这样在全表查询进行中间可以进行其它的select和update *** 作,但insert和delete不行。
性能也有很大提高,50万记录时100次 *** 作300ms,全表查询11秒多
 
 
常用参数 [options] 详细说明:--auto-generate-sql, 
-a 自动生成测试表和数据,表示用mysqlslap工具自己生成的SQL脚本来测试并发压力。
--auto-generate-sql-load-type=type 测试语句的类型。代表要测试的环境是读 *** 作还是写 *** 作还是两者混合的。取值包括:read,key,write,update和mixed(默认)。
--auto-generate-sql-add-auto-increment 代表对生成的表自动添加auto_increment列,从5118版本开始支持。--number-char-cols=N, 
-x N 自动生成的测试表中包含多少个字符类型的列,默认1--number-int-cols=N, -y N 自动生成的测试表中包含多少个数字类型的列,默认1--number-of-queries=N 总的测试查询次数(并发客户数×每客户查询次数)
--query=name,-q 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。--create-schema 代表自定义的测试库名称,测试的schema,MySQL中schema也就是database。--commint=N 多少条DML后提交一次。
--compress, -C 如果服务器和客户端支持都压缩,则压缩信息传递。--concurrency=N, -c N 表示并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者--delimiter参数指定的值做为分隔符。例如:
--concurrency=100,200,500。
--engine=engine_name, -e engine_name 代表要测试的引擎,可以有多个,用分隔符隔开。例如:--engines=myisam,innodb。--iterations=N, -i N 测试执行的迭代次数,代表要在不同并发环境下,各自运行测试多少次。
--only-print 只打印测试语句而不实际执行。--detach=N 执行N条语句后断开重连。--debug-info, -T 打印内存和CPU的相关信息。说明:测试的过程需要生成测试表,插入测试数据,这个mysqlslap可以自动生成,默认生成一个mysqlslap的schema,如果已经存在则先删除。可以用--only-print来打印实际的测试过程,整个测试完成后不会在数据库中留下痕迹。各种测试参数实例(-p后面跟的是mysql的root密码):单线程测试。测试做了什么。
# mysqlslap -a -uroot -p123456多线程测试。使用–concurrency来模拟并发连接。# mysqlslap -a -c 100 -uroot -p123456迭代测试。用于需要多次执行测试得到平均值。# mysqlslap -a -i 10 -uroot -p123456# mysqlslap ---auto-generate-sql-add-autoincrement -a -uroot -p123456# mysqlslap -a --auto-generate-sql-load-type=read -uroot -p123456# mysqlslap -a --auto-generate-secondary-indexes=3 -uroot -p123456# mysqlslap -a --auto-generate-sql-write-number=1000 -uroot -p123456# mysqlslap --create-schema world -q "select count() from City" -uroot -p123456# mysqlslap -a -e innodb -uroot -p123456# mysqlslap -a --number-of-queries=10 -uroot -p123456测试同时不同的存储引擎的性能进行对比:# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --engine=myisam,innodb --debug-info -uroot -p123456执行一次测试,分别50和100个并发,执行1000次总查询:# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --debug-info -uroot -p12345650和100个并发分别得到一次测试结果(Benchmark),并发数越多,执行完所有查询的时间越长。为了准确起见,可以多迭代测试几次:# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --debug-info -uroot -p123456

众所周知,服务器是整个网络系统和计算平台的核心,许多重要的数据都保存在服务器上,很多网络服务都在服务器上运行,因此服务器性能的好坏决定了整个应用系统的性能。

现在市面上不同品牌、不同种类的服务器有很多种,用户在选购时,怎样从纷繁的型号中选择出所需要的,适合于自己应用的服务器产品,仅仅从配置上判别是不够的,能够通过实际测试来筛选。而各种的评测软件有很多种,你应该选择哪个软件测试?下面就介绍一些较典型的测试工具:

(一)服务器整机系统性能测试工具

一台服务器系统的性能可以按照处理器、内存、存储、网络几部分来划分,而针对不同的应用,可能会对某些部分的性能要求高一些。

Iometer(>

allure在自动化测试中经常用来生成漂亮的报告,但是网上及官网上给出的例子都仅仅是针对单个测试用例文件的形式介绍的,实际使用中,自动化测试往往需要包含不止一个产品或项目,本文介绍如何使用nginx+allure来管理自动化测试报告,使自动化测试报告可以按照产品分开查看,且可以查看 历史 报告。

自动化测试工程示例结构

nginx配置目录服务器

配置nginxconf配置文件

启动nginx之后,访问>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10286040.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存