分析:这个题是一个开放性的题,答得好要涉及到全面的测试,功能测试,安全测试,性能测试以及调优等。 
这也是一个考察逻辑思维的题,透过答题能看出一个人对测试流程的掌握,测试用例的涉及角度,测试覆盖面的广度,测试经验的丰富度,开发水平的功底,实战经验等,都能涉及到。

这也是一个考验智商尤其是情商的题,测试过程中我们要不断的和产品,开发进行沟通交流,反复确认,互相支持等。也会遇到比较尴尬的沟通人物,考验我们是如何处理协调这些关系的。

==================================== 
答题: 
1首先和产品进行详细的需求确认,可通过需求评审会,也可通过其他方式,保证我们要获取到一下内容:

业务难点,重点逻辑,产品高度重视的点,产品性能预估,使用场景,上线预期时间,以及未来的定位。 
这些内容为我们下一步进行设计测试计划做铺垫。

2找开发确认并了解实现逻辑,产品需求到开发代码实现会出现很多不一致的地方,尽可能的做一遍代码静态分析,了解代码类图,方法调用关系,并对私有方法、公有方法进行使用范围的确认,从代码层面设计测试用例。另外,对方法调用和代码逻辑,我们不能完全保证没有问题,还要从黑盒思想出发,设计测试用例,进行用例覆盖等。这样,测试用例就能具备精准设计,做到有的放矢。提升测试质量,也能提升效率,节省时间。

3具体的功能测试在case设计结束并实施后,我们还要关注安全角度。尤其对基本的sql注入,token验证,加密验签等进行重点测试和关注。 
4性能方面就内容很多了,这个也根据不同人员的基础选择性的去说。我所说的只能是我目前水平的最好答案。也特别欢迎帮忙指正错误提出建议。 
a,首先,我们要做一次负载测试,使用loadrunner建议使用自动场景,从低并发数逐渐增多,慢慢达到最高并发。负载测试帮助我们了解接口性能的变化曲线,获得最大用户数,tps峰值,资源利用率,响应耗时等重要性能参数。建议多做几次,以确保结果正确合理。之前我们提到从产品那里得到对接口性能的预估,我们可以进行对比,如果不满足,就要返回开发那里,一起定位问题,进行性能调优。调优我们稍后会涉及到。

b,接口的表现满足我们的预估后,要进一步进行压力测试,测试服务在高负载情况下长时间极限状态下服务器的表现,并针对服务器的承载能力做出评估。这个测试中我们经常遇到内存溢出,磁盘日志打满,服务宕机,网络异常等。也是我们发现问题的时候。排除问题,我们继续向下走。

c有了前面的测试,我们还要针对数据库进行容量测试,比如在测试导航算路的算法中,涉及到的用例有从1公里-2000公里,不同距离对网络,内存,磁盘读写都会形成不同的冲击,以及高并发下我们对数据库的性能表现做出判断,单点还是集群?是否需要分库分表?读写是否分离?后续都会面临调优问题。

d通常,实操同事会给业务线配给不同的并发数,那么我们就要针对不同并发数进行配置测试,确定某一配置下的性能参数,为业务线提供数据支撑。 
e当这些做完后,别着急,我们要做一次基准测试。 
基准测试是为了后续调优和系统评测提供参数支持,针对整个系统进行的基准测试。有的场景是不允许我们进行全链路测试的,比如支付场景,银行业务等。但是不妨碍我们进行基准测试。

我在做基准测试的时候,是写了一个mq的发送工具,mq打满后,启动服务,观察模块消费mq的速度,计算耗时,获得数据。每个模块逐一进行测试,最后会得到如下数据: 
例如: 
模块A (3000tps) 
模块B (5000tps) 
模块C (6000tps) 
数据库 (3500tps)

由此可知,我们系统瓶颈在模块A,和数据库。 
同时,对模块B,C,我们在下次改动后做性能测试时,就有了参照数据,性能提升了还好,下降了肯定不答应他们上线。

==================================== 
说到性能方面,不得不说常用的监控方式和命令: 
jconsol,jvm内存实时展示;nmon,服务器端记录机器的各种参数,详细而全面。其他不一一介绍,我们是在面试,说好要点,说清楚要点是关键,这里要精不要多。 
监视内存我们可以查看有无FGC,有无内存泄漏,内存泄漏可以通过观察swap空间是否被使用能获得。 
这里准备了一些常见的参考(转载了一部分内容): 
1、处理器队列堵塞判断方法:如果Processor queue length大于2,而处理器利用率一直很低,则存在处理器堵塞。 
2、处理器瓶颈判断方法: 排除内存因素后,如果%processor time持续大于90%,并且%interrupt time的值持续大于15%,同时网卡和硬盘的值比较低,可以断定处理器负荷过重,无法满足业务增长需要,处理器是系统瓶颈点。 
3. 监视内存不足的状况,可以通过 page/sec,Available Mbytes、page read/sec、page faults/sec等计数器的指标进行监控,还可以通过使用“页面交换”的频率来衡量。“页面交换”是使用称为“页面”的单位,将固定大小的代码和数据块从RAM移动到磁盘的过程,从而释放暂时不使用的空间,这些页面文件就是操作系统用来虚拟内存的硬盘空面。操作系统对于虚拟内存主要设置两点,即内存页面文件的大小和页面文件存放的位置,内 存页面文件的大小就是设置虚拟内存最小和最大空间量,而页面位置则是设置虚拟内存使用哪个分区中的硬盘空间。频繁的页面交换将降低系统性能,如果系统“页交换”频繁,说明内存不足。通过调优配置减少页交换,将显著提高系统响应速度。 
4. 通过pages/sec指标判断是否存在内存问题,如果pages/sec持续高于几百,则有可能需要增加内存,以减少换页的需求,此时还应该进一步研究 页交换活动。如果pages/sec指标过高(几百),而硬盘数据流量不高(几百kb/s)则可确定是内存不足问题,如果pages/sec指标较高(几百),而此时硬盘数据流量也很高(几千KB /S),则可以判定是磁盘问题。 
5.通过 available mbytes来判断是否存在严重内存泄漏问题,如果该值很小(<4M),则说明计算机上总的内存可能不足,或者某个程序始终占用而没有释放内存,系统存在严重的内存泄漏问题。 
6.如果页面读取操作速率page reads/sec指标的值很低,同时%disk time和avg.disk queue length的值却很高,则确定为磁盘瓶颈,但如果Avg.sidk queue length增加的同时page reads/sec页面读取速率指标并未降低,则确定为内存不足。

====================================

影响数据库性能的主要因素有哪些?

====================================

1、1、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用Oracle数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。 
2、2、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。 
3、3、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了oracle数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。 
4、4、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。 
5、5、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。 
6、6、调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。 
实际上,上述数据库优化措施之间是相互联系的。ORACLE数据库性能恶化表现基本上都是用户响应时间比较长,需要用户长时间的等待。但性能恶化的原因却是多种多样的,有时是多个因素共同造成了性能恶化的结果,这就需要数据库管理员有比较全面的计算机知识,能够敏感地察觉到影响数据库性能的主要原因所在。另外,良好的数据库管理工具对于优化数据库性能也是很重要的。 
ORACLE数据库性能优化工具 
常用的数据库性能优化工具有: 
1、1、ORACLE数据库在线数据字典,ORACLE在线数据字典能够反映出ORACLE动态运行情况,对于调整数据库性能是很有帮助的。 
2、2、操作系统工具,例如UNIX操作系统的vmstat,iostat等命令可以查看到系统系统级内存和硬盘I/O的使用情况,这些工具对于管理员弄清出系统瓶颈出现在什么地方有时候很有用。 
3、3、SQL语言跟踪工具(SQL TRACE FACILITY),SQL语言跟踪工具可以记录SQL语句的执行情况,管理员可以使用虚拟表来调整实例,使用SQL语句跟踪文件调整应用程序性能。SQL语言跟踪工具将结果输出成一个操作系统的文件,管理员可以使用TKPROF工具查看这些文件。 
4、4、ORACLE Enterprise Manager(OEM),这是一个图形的用户管理界面,用户可以使用它方便地进行数据库管理而不必记住复杂的ORACLE数据库管理的命令。 
5、5、EXPLAIN PLAN——SQL语言优化命令,使用这个命令可以帮助程序员写出高效的SQL语言。 
ORACLE数据库的系统性能评估 
信息系统的类型不同,需要关注的数据库参数也是不同的。数据库管理员需要根据自己的信息系统的类型着重考虑不同的数据库参数。 
1、1、在线事务处理信息系统(OLTP),这种类型的信息系统一般需要有大量的Insert、Update操作,典型的系统包括民航机票发售系统、银行储蓄系统等。OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,这类系统使用的ORACLE数据库需要主要考虑下述参数: 
l l 数据库回滚段是否足够? 
l l 是否需要建立ORACLE数据库索引、聚集、散列? 
l l 系统全局区(SGA)大小是否足够? 
l l SQL语句是否高效? 
2、2、数据仓库系统(Data Warehousing),这种信息系统的主要任务是从ORACLE的海量数据中进行查询,得到数据之间的某些规律。数据库管理员需要为这种类型的ORACLE数据库着重考虑下述参数: 
l l 是否采用B*-索引或者bitmap索引? 
l l 是否采用并行SQL查询以提高查询效率? 
l l 是否采用PL/SQL函数编写存储过程? 
l l 有必要的话,需要建立并行数据库提高数据库的查询效率 
SQL语句的调整原则 
SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现,但是语句的执行效率是很不相同的。程序员可以使用EXPLAIN PLAN语句来比较各种实现方案,并选出最优的实现方案。总得来讲,程序员写SQL语句需要满足考虑如下规则: 
1、1、尽量使用索引。试比较下面两条SQL语句: 
语句A:SELECT dname, deptno FROM dept WHERE deptno NOT IN 
(SELECT deptno FROM emp); 
语句B:SELECT dname, deptno FROM dept WHERE NOT EXISTS 
(SELECT deptno FROM emp WHERE dept.deptno = emp.deptno); 
这两条查询语句实现的结果是相同的,但是执行语句A的时候,ORACLE会对整个emp表进行扫描,没有使用建立在emp表上的deptno索引,执行语句B的时候,由于在子查询中使用了联合查询,ORACLE只是对emp表进行的部分数据扫描,并利用了deptno列的索引,所以语句B的效率要比语句A的效率高一些。 
2、2、选择联合查询的联合次序。考虑下面的例子: 
SELECT stuff FROM taba a, tabb b, tabc c 
WHERE a.acol between :alow and :ahigh 
AND b.bcol between :blow and :bhigh 
AND c.ccol between :clow and :chigh 
AND a.key1 = b.key1 
AMD a.key2 = c.key2; 
这个SQL例子中,程序员首先需要选择要查询的主表,因为主表要进行整个表数据的扫描,所以主表应该数据量最小,所以例子中表A的acol列的范围应该比表B和表C相应列的范围小。 
3、3、在子查询中慎重使用IN或者NOT IN语句,使用where (NOT) exists的效果要好的多。 
4、4、慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询。一般对视图的查询最好都分解为对数据表的直接查询效果要好一些。 
5、5、可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间,连续的内存空间有益于存放大的SQL程序包。 
6、6、ORACLE公司提供的DBMS_SHARED_POOL程序可以帮助程序员将某些经常使用的存储过程“钉”在SQL区中而不被换出内存,程序员对于经常使用并且占用内存很多的存储过程“钉”到内存中有利于提高最终用户的响应时间。 
CPU参数的调整 
CPU是服务器的一项重要资源,服务器良好的工作状态是在工作高峰时CPU的使用率在90%以上。如果空闲时间CPU使用率就在90%以上,说明服务器缺乏CPU资源,如果工作高峰时CPU使用率仍然很低,说明服务器CPU资源还比较富余。 
使用操作相同命令可以看到CPU的使用情况,一般UNIX操作系统的服务器,可以使用sar –u命令查看CPU的使用率,NT操作系统的服务器,可以使用NT的性能管理器来查看CPU的使用率。 
数据库管理员可以通过查看vsysstatCPUusedbythissessionORACLE使CPUOSUserlevelCPUtimeCPUOSSystemcallCPUtimeCPUCPUORACLE使CPUCPU90CPUORACLE使CPUORACLECPUvsesstat数据字典来获得当前连接ORACLE数据库各个会话占用的CPU时间,从而得知什么会话耗用服务器CPU比较多。 
出现CPU资源不足的情况是很多的:SQL语句的重解析、低效率的SQL语句、锁冲突都会引起CPU资源不足。 
1、数据库管理员可以执行下述语句来查看SQL语句的解析情况: 
SELECT * FROM VSYSSTATWHERENAMEIN(parsetimecpu,parsetimeelapsed,parsecount(hard 标签: 接口测试