如何进行服务器端的测试

服务器端的测试:(服务器是互联网公司的核心——————eg:百度)

服务器端的高并发:整体的架构、协议(在测试之前要了解)

模拟所有可能发生的情况

重接口:get\post\dist

webserver:传递协议

soupserver:

三层结构:自带编程、应用层、

如何进行服务器端的测试:

1、功能测试-根据服务器的文档:服务器端接口的合法性

2、容错性测试:发送错误的请求、

3、性能测试:压力测试、负载测试

4、稳定性测试:服务器在工作的时候,不会泄漏信息

颗粒度:

1、基于接口做黑盒测试

2、灰盒测试:覆盖所有的逻辑分支(测试人员知识需要看需求文档,不需要看代码)

3、白盒测试:深入代码做白盒测试、代码的覆盖率,一般70%以上

测试的工具是不可以少的:一般正对实现的功能,这个在测试之前要提前准备好(测试经理)

服务器性能测试,你选哪种工具?

众所周知,服务器是整个网络系统和计算平台的核心,许多重要的数据都保存在服务器上,很多网络服务都在服务器上运行,因此服务器性能的好坏决定了整个应用系统的性能。
现在市面上不同品牌、不同种类的服务器有很多种,用户在选购时,怎样从纷繁的型号中选择出所需要的,适合于自己应用的服务器产品,仅仅从配置上判别是不够的,*好能够通过实际测试来筛选。而各种的评测软件有很多种,你应该选择哪个软件测试?下面就介绍一些较典型的测试工具:

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

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

Iometer(www.iometer.org):存储子系统读写性能测试

Iometer是Windows系统下对存储子系统的读写性能进行测试的软件。可以显示磁盘系统的*大IO能力、磁盘系统的*大吞吐量、CPU使用率、错误信息等。用户可以通过设置不同的测试的参数,有存取类型(如sequential ,random)、读写块大小(如64K、256K),队列深度等,来模拟实际应用的读写环境进行测试。

Iometer操作简单,可以录制测试脚本,可以准确有效的反映存储系统的读写性能,为各大服务器和存储厂商所广泛采用。

Sisoft Sandra(www.sisoftware.co.uk):WINDOWS下基准评测

SiSoft发行的Sandra系列测试软件是Windows系统下的基准评测软件。此软件有超过三十种以上的测试项目,能够查看系统所有配件的信息,而且能够对部分配件(如CPU、内存、硬盘等)进行打分(benchmark),并且可以与其它型号硬件的得分进行对比。另外,该软件还有系统稳定性综合测试、性能调整向导等附加功能。

Sisoft Sandra 测试界面

Sisoft Sandra软件在*近发布的Intel bensley平台上测试的内存带宽性能并不理想,不知道采用该软件测试的FBD内存性能是否还有参考价值,或许软件应该针对FBD内存带宽的测试项目做一个升级。

Iozone(www.iozone.org):linux下I/O性能测试

现在有很多的服务器系统都是采用linux操作系统,在linux平台下测试I/O性能可以采用iozone。

iozone是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能。可以测试Read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread ,mmap, aio_read, aio_write 等等不同的模式下的硬盘的性能。测试所有这些方面,生成excel文件,另外, iozone还附带了用gnuplot画图的脚本。

该软件用在大规模机群系统上测试NFS的性能,更加具有说服力。

Netperf(www.netperf.org):网络性能测试

Netperf可以测试服务器网络性能,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多块的速度接收数据。

Netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,用来来回传递着特殊的流量模式,以测试网络的性能。

对于服务器系统来说,网络性能显得尤其重要,有些服务器上为了节省成本,采用了桌面级的网络芯片,性能怎样,用这个软件一测便知了。

以上介绍的这几款测试工具都是可以免费从网上下载的非商业软件,但是其测试结果和认可程度均是为大多数使用者所认同的。你可以根据自己的应用需求选择不同的软件进行测试。

(二)针对应用的测试工具

随着web应用的增多,服务器应用解决方案中以Web为核心的应用也越来越多, 很多公司各种应用的架构都以web应用为主。一般的web测试和以往的应用程序的测试的侧重点不完全相同,在基本功能已经通过测试后,就要进行重要的系统性能测试了。系统的性能是一个很大的概念,覆盖面非常广泛,对一个软件系统而言包括执行效率、资源占用率、稳定性、安全性、兼容性、可靠性等等,以下重点从负载压力方面来介绍服务器系统性能的测试。系统的负载和压力需要采用负载测试工具进行,虚拟一定数量的用户来测试系统的表现,看是否满足预期的设计指标要求。负载测试的目标是测试当负载逐渐增加时,系统组成部分的相应输出项,例如通过量、响应时间、CPU负载、内存使用等如何决定系统的性能,例如稳定性和响应等。

负载测试一般使用工具完成,有LoadRunner,Webload,QALoad等,主要的内容都是编写出测试脚本,脚本中一般包括用户常用的功能,然后运行,得出报告。

使用压力测试工具对web服务器进行压力测试。测试可以帮助找到一些大型的问题,如死机、崩损、内存泄漏等,因为有些存在内存泄漏问题的程序,在运行一两次时可能不会出现问题,但是如果运行了成千上万次,内存泄漏得越来越多,就会导致系统崩滑。

Loadrunner:预测系统行为和性能的负载测试工具

目前,业界中有不少能够做性能和压力测试的工具,Mercury(美科利)Interactive公司的LoadRunner是其中的佼佼者,也已经成为了行业的规范,目前*新的版本8.1。

LoadRunner 是一种预测系统行为和性能的负载测试工具,通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试,LoadRunner 适用于各种体系架构,能支持广范的协议和技术(如Web、Ftp、Database等),能预测系统行为并优化系统性能。它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。Loadrunner是一个强大有力的压力测试工具,它的脚本可以录制生成,自动关联。测试场景面向指标,实现了多方监控。而且测试结果采用图表显示,可以自由拆分组合。

Loadrunner 测试窗口界面

通过Loadrunner的测试结果图表对比,你可以寻找出系统瓶颈的原因,一般来说可以按照服务器硬件、网络、应用程序、操作系统、中间件的顺序进行分析。

Loadrunner 分析窗口界面

Loadrunner是一款收费软件,根据测试项目和虚拟用户数目的不同而花费不同的费用。不过你可以下载到免费使用10天的测试版本。

Webload:WEB性能压力测试

webload是RadView公司推出的一个性能测试和分析工具,它让web应用程序开发者自动执行压力测试;webload通过模拟真实用户的操作,生成压力负载来测试web的性能。

用户创建的是基于javascript的测试脚本,称为议程agenda,用它来模拟客户的行为,通过执行该脚本来衡量web应用程序在真实环境下的性能。当前*高版本是6.0。webload提供巡航控制器cruise control的功能,利用巡航控制器,可以预定义web应用程序应该满足的性能指标,然后测试系统是否满足这些需求指标;cruise control能够自动把负载加到web应用程序,并将在此负荷下能够访问程序的客户数量生成报告。

webload能够在测试会话执行期间对监测的系统性能生成实时的报告,这些测试结果通过一个易读的图形界面显示出来,并可以导出到excel和其他文件里。

Webload 报告界面

这两个软件的功能虽然强大,并且可以自动生成测试报告,但其终究是一个工具,如果你想真正的定位服务器性能的好坏和性能的瓶颈所在,需要使用工具的人对于测试软件的方方面面都要有了解,比如软件体系构架,网络拓扑,服务器硬件等知识。

结语:免费与付费的选择

无论什么工具,基本的技术都是利用线程技术模仿和虚拟用户,在这里主要的难点在于测试脚本的编写,每种工具使用的脚本都不一样,但是大多数工具都提供录制功能就算是不会编码的测试人员同样可以测试。

以上介绍的这些软件,只是众多评测软件中比较典型的几个,笔者曾经见过有的用户针对自己的应用专门写的测试软件,这样可以很快筛选出适合于自己的服务器产品。对于一般的企业用户来说,根据自己的应用需求,选择合适的评测软件是很重要的。有时候不必非得选择昂贵的商业软件,用那些免费的软件也可以很好的衡量服务器的性能。当然如果是需要搭配自己的应用软件在服务器上的测试,就需要花费财力购买正版的付费软件。这样可以更加准确的测试性能并定位导致系统瓶颈的原因了。

*新服务器测试方法详细解析

在我们平时的工作生活中,服务器的种类日益繁多,服务器检测方法更是各种各样。本文旨在给读者朋友们做*新的服务器测试方法的详细的介绍。在这里,服务器测试方法分为两个大方面,性能测试与功能测试。

我们在性能测试方面采用了新的测试方法,主要分为文件测试、数据库性能测试与Web性能测试三个方面。其中,文件性能与数据库性能采用美国Quest软件公司的Benchmark Factory负载测试和容量规划软件,Web性能测试则使用了Spirent公司提供的Caw WebAvalanche测试仪。

一、性能测试

1、文件性能测试方法

Benchmark Factory软件能按照文件读写的关键指标定制事务。软件*大支持1000个虚拟客户。

本次测试环境包括10台配置为PIII800/128MB内存/20G硬盘以上的客户端,它们用来模拟虚拟用户。控制台为配置是PIII 850/128MB内存/40G硬盘的Acer笔记本电脑。交换机为带有两个千兆GBIC接口、24个10/100M自适应端口的Cisco 2950,客户端与控制台通过100M网卡连到交换机上,被测服务器则通过千兆光纤网卡与交换机相连接。

被测服务器均安装带SP4的Windows 2000 Advanced Server操作系统,在所有三项性能测试中都统一RAID级别为5。

在具体测试方案设置上,测试软件把决定文件读写操作的关键因素设定为:读/写、随机/顺序、操作块大小、对象大小四个。在本次测试中,考虑到我们设有单独的数据库及Web测试项目,所以在文件测试中,我们把目标确定为测试服务器基本的I/O性能,这主要由网络接口、系统带宽、磁盘子系统等几大部分所决定。同时,从几部分的作用看,以大操作块读写大对象文件,小操作块读写小对象文件,较能反映服务器*基本的I/O性能,即“大操作块读写大文件”对系统带宽、缓存的考察,以及“小操作块读写小文件”对磁盘子系统、网络接口的考察。*终我们确定的四个事务是:

◆大文件顺序读写(操作块8KB,对象文件80% 500KB、20% 1MB)

◆大文件随机读写(操作块8KB,对象文件80% 500KB、20% 1MB)

◆小文件随机读(操作块1KB,对象文件80% 1KB、10% 10KB、10% 50KB)

◆小文件顺序写(操作块1KB,对象文件80% 1KB、10% 10KB、10% 50KB)

每个事务的用户数均以固定步长逐渐增加,*大可增加到1000个虚拟用户。其中,“大文件顺序读写”事务的用户数按照40的步长从1可增加到400个(测试至强服务器)或200个(测试TUALATIN服务器),其他事务则将用户数按照100的步长从1增加至1000。我们期望得到其在不同用户数时被测服务器的性能表现。总体上其走势及峰值反映了该服务器的性能。每项事务均运行三次,每次之间被测服务器进行重启,*终结果为三次平均值。

2、数据库性能测试方法

数据库性能测试同样使用了Benchmark Factory 软件,测试环境如同文件性能测试。测试时,在被测服务器上安装SQL Server 2000使用企业版。首先在被测服务器上创建新的数据库,通过使用Benchmark Factory预定义的Database Spec项目向数据库中创建表,装载数据。在服务器端创建以CPU计算为主的存储过程,通过10台客户机模拟用户、按照40个虚拟用户的步长递增到400个用户,执行该存储过程。结果是以获得的每秒事务数(TPS)衡量服务器的数据库事务处理能力。整个测试分为三次,每次之间重新启动被测服务器,*终取三次平均值作为评价结果。

3、Web性能测试方法

Web性能测试工具是由Spirent公司提供的Caw WebAvalanche。WebAvalanche 模拟实际的用户发出HTTP 请求,并根据回应给出具体的详细测试结果。它有以下特点:能够模拟成百上千的客户端对服务器发出请求;能够模拟真实的网络应用情况,比如网站在高峰期的访问量应该是动态的维持,有新客户端的加入,同时也有原客户的离去,访问量不是固定不变的;可以产生20000个连接/秒请求量,足以满足测试的需要;测试项目丰富,有访问请求的成功失败数,有URL和页面的响应时间,有网络流量数,还有HTTP和TCP协议的具体情况。

测试时,被测服务器与WebAvalanche上都装有千兆光纤网卡,两网卡通过光纤直接连接。监控端(配置为PIII 1GHz/128M内存/20G硬盘)安装了带SP4的Windows 2000 Server,该监控端与WebAvalanche 通过交叉线直连。在监控端通过Web浏览器配置WebAvalanche,在被测服务器安装了SQL Server 2000企业版,并用微软的IIS建立了Web服务器。

测试分为静态性能与动态性能两部分。主要是因为在实际的Web应用中,有的站点静态内容居多,提供的服务也*大多数是静态的,因此,他们就会特别的关心服务器静态性能;同样,有的站点提供的服务交互性的内容居多,他们就会更关心服务器的动态性能。

被测网站中页面大小及静态、动态页面所占比例均参照实际网站得出,整个网站静态、动态页面所占比例是70%和30%,使用的动态页面类型为ASP。请求页面样本的文件大小分布比例与整个网站的相同。

静态性能测试模拟发出的均是静态页面请求。在测试动态性能时,动态页面的访问请求占20%,其余80%为静态页面请求。我们根据实际的Web 服务器一天中的运行情况建立了一个服务器页面请求模型,该模型由4个阶段组成,*阶段是预热阶段,WebAvalanche发出的请求量由0慢慢上升到200;第二阶段是逐步加压阶段,请求量逐步累加到*大值8200;第三阶段是动态维持阶段;第四阶段是下降阶段,请求量由*大值迅速下降为0。其中,*大请求量略大于实际服务器能够提供的事务处理量。

被测服务器的静态与动态测试分别测试三遍,每遍之间被测服务器和测试仪均重启,结果取三次的平均值。由此可见,此服务器测试方法立志于*终结果的准确性。

二、功能测试

在功能测试方面,我们对被测服务器的可扩展性、可用性以及可管理性进行了综合评价,其中可扩展性包括硬盘、PCI槽以及内存等的扩展能力,可用性包括对热插拔、冗余设备(如硬盘、电源、风扇、网卡等)的支持,可管理性则指的是服务器随机所带的管理软件。

我们在对服务器进行总体评价时,综合了性能、功能和价格三方面因素,依据《网络世界》所做的用户调查结果,分别给予不同权重,性能占50%,功能占40%,而价格则占10%。在分析性能时,数据库性能占其中的50%,而文件性能占30%,Web性能占20%。

综上所述,这种全新的服务器测试方法更够更准确更直接的对服务器进行测试,而且数据更加精确。希望能给又需要的读者朋友带来一定的帮助。

服务器测试包含的主要测试

服务器端测试:

1.直接对WEB或者APP的服务端进行测试;

2.对更后端的数据库、缓存系统、中间件、文件系统等进行测试;

3.还有就是对服务器硬件的测试:

包括HDD,内存,CPU,主板,PCI/PCIe设备,电源等

其中也包括BIOS以及各硬件的Firmware信息等内容。

具体包括以下几个大类:

机型配置—主要是测组装硬件的基本信息

功耗—整机运行时的功耗,包括CPU 内存 电源

性能测试—包括CPU 内存 HDD

可运维测试—具体指在linux系统下通过系统指令得到一些基本的信息,系统支持则涉及该机器在安装os之后的一些特定功能以及插件

在系统整合性测试中包括:RMC远程管理模块的测试,BIOS测试,Function测试,BMC的测试,Nic网口测试,performance性能测试,稳定性测试。

如何给已有的服务器代码添加单元测试?

大佬们,小弟*近接手了公司的服务器代码( C++),比较尴尬的是之前没做过服务器开发,只做客户端开发。还有之前也从来没写过单元测试。由于以前的服务器代码写的比较凌乱飘逸,所以我准备大改一下,由于没有单元测试加上对服务器代码逻辑没有完全掌握,所以一点改动都会造成很多 bug。

所以想请教大佬们,如果给已经写好的,不算太小的项目添加单元测试?如何测试像 timer,异步操作这样的情景? 非常感谢!

arrow8899 2019-08-08 15:25:39 +08:00
重构一时爽,改 BUG 改到火葬场:doge:
c0011 2
c0011 2019-08-08 18:01:38 +08:00
@arrow8899 哈哈哈
des 3
des 2019-08-08 18:50:37 +08:00 via Android
劝你别改
kaedea 4
kaedea 2019-08-08 18:51:55 +08:00 via Android
几乎没办法,单元测试是一个研发流程,而不是测试流程
comwrg 5
comwrg 2019-08-08 19:13:29 +08:00 via Android
大家都说这是屎山 你应该知道咋办了吧
c0011 6
c0011 2019-08-08 21:56:00 +08:00
@des 就我一个人,不改的话自己以后还是难受。
c0011 7
c0011 2019-08-08 21:56:22 +08:00
@comwrg 要怎么办嘛
MiffyLiye 8
MiffyLiye 2019-08-08 22:24:00 +08:00
学习一下 Re-Engineering Legacy Software
https://book.douban.com/subject/26382368/
c0011 9
c0011 2019-08-08 22:45:08 +08:00
@MiffyLiye 也不算遗留代码,一直线上运行,就是代码写的很随意。耦合度超级高。然后就是代码量不算太多,不过业务逻辑超级复杂,

服务器伪装信息修改法

测试的服务器:redhat7.0,redhat7.1,mandrake7.1

本文主要讨论linux服务器的伪装,对于Sun、hp等可以查找相关资料,本文只提供思路。

前言:为什么要伪装?

动物伪装,为了逃避天敌,或为了更好的获取猎物。

人伪装,使你不知他的底细。

服务器伪装,目的是要使攻击者很难搜集到服务器真正的信息,使他的进一步攻击造成难度,进而起到一定的保护作用,当然还有更深的用法,等着你去发现。

正文:

1. Telnet信息伪装

首先看一次telnet过程:

[yxg@localhost yxg]$ telnet xx.xx.xx.xx

Trying xx.xx.xx.xx…

Connected to xxxx.

Escape character is ^].

Red Hat Linux release 7.1 (Seawolf)

Kernel 2.4.2-2 on an i686

login:

从中可以看到操作系统为Red Hat Linux release 7.1,内核版本2.4.2-2,计算机为:intel686。攻击者得到这些信息就可以用相应的攻击程序。所以我们不能告诉他们真正的情况。

telnet信息存放于/etc/issue.net

[root@database /etc]# cat issue.net

Red Hat Linux release 7.1 (Seawolf)

Kernel 2.4.2-2 on an i686

修改它成为你想要的任何字符,甚至什么也不要。

我的改为Sun的提示:

[yxg@localhost yxg]$ cat /etc/issue.net

SunOS 8.0

要注意必要的空行,改完和伪装的对象比较,直到一模一样才行。

对于本机的用户,提示信息在/etc/issue,改不改随你。

注意:如果你想重启后issue.net内容不变,修改/etc/rc.local,在这些行前加#

# This will overwrite /etc/issue at every boot. So, make any changes you

# want to make to /etc/issue here or you will lose them when you reboot.

# echo “” > /etc/issue

# echo “$R” >> /etc/issue

# echo “Kernel $(uname -r) on $a $SMP$(uname -m)” >> /etc/issue

# cp -f /etc/issue /etc/issue.net

# echo >> /etc/issue

2. ftp信息伪装

现在有很多对于wu-ftp的攻击程序,所以我就拿wu-ftp作例子。

先看一下ftp的过程:

[yxg@localhost yxg]$ ftp xx.xx.xx.xx

Connected to xxxx.

220 database FTP server (Version wu-2.6.1-16) ready.

如果想要不显示出wu-ftp,可以有多种方法。

其一:

察看in.ftpd就能发现版本号写在了程序中

[root@database /root]# strings /usr/sbin/in.ftpd

………………….

/var/log/lastlog

Could not write %.100s: %.100s

Version wu-2.6.1-16

你可以用16进制编辑器修改版本的字符串,改为proftp什么的,保准有人会上当。

其二:

/etc/ftpaccess里有两个参数

指示参数:greeting full | brief | terse

greeting text

允许控制远程用户登陆进来以后,给用户多少信息及信息内容。

banner

banner消息是在用户名和密码以前显示给用户的。

3. 修改telnet和ftp的默认端口号

有很多扫描器并不是逐个端口扫描的,所以来个乾坤大挪移来使扫描失效。

具体是修改/etc/services 或者是/etc/inetd.conf。

4. 操作系统指纹伪装

nmap等扫描器能通过操作系统指纹判断操作系统类型,所以我们要采取一些策略保护自己。现在有一些工具可以修改操作系统指纹,像fpf等,fpf可以在www.xfocus.org下载,它是一个lkm,加载到内核中,可以模拟很多操作系统。当然你可能要对源程序进行修改,也可以加入一些新的功能,如自动隐藏等。

5. 改装uname

如果不幸被一个攻击者闯入,它可以用uname来获取真正的操作系统信息,然后来个本地溢出,你就哭吧。

所以我们要修改uname的源程序,使它显示我们想要它显示的内容。

打开uname.c,找到如下行:

print_element (PRINT_SYSNAME, name.sysname);//操作系统名如linux

print_element (PRINT_NODENAME, name.nodename);//主机名

print_element (PRINT_RELEASE, name.release);//发行版本,如:2.2.16-22

print_element (PRINT_VERSION, name.version);//

print_element (PRINT_MACHINE, name.machine);//机器类型,如i686

print_element (PRINT_PROCESSOR, processor);//处理器类型

知道怎么改吧,不知道?提示一下,如果要显示操作系统为SunOS,替换*行为:

print_element(PRINT_SYSNAME,”SunOS”);

编译后,运行./uname –s,就会显示SunOS

当然你应该把每一项都进行修改,使人看不出破绽。

*后把改好的uname拷到/bin目录。

我在修改时还加了一个-Y的参数,目的是显示真正的信息,给自己看的。默认显示修改过的信息。

6. 其他一些杂项

建议你尽量关掉不必要的服务,对于开放的其他服务要仔细检查,使它不至于有泄密的信息。

不同操作系统的shell提示符也不太一样,尽量修改的和伪装目标一致。

结束语:

当然,要想保证服务器安全,这一点是远远不够的,它只能减小被攻击成功的概率。