====================================
很多面试中,都会问道如何测试一个接口?我尝试着用自己现有的知识进行回答,等以后某年某月自己回来看看时自己提升了多少。

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

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

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

====================================
答题:
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页面读取速率指标并未降低,则确定为内存不足。

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

====================================
以下内容转自(https://zhidao.baidu.com/question/215720334.html)

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

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

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的使用率。
数据库管理员可以通过查看vsysstat数据字典中“CPUusedbythissession”统计项得知ORACLE数据库使用的CPU时间,查看“OSUserlevelCPUtime”统计项得知操作系统用户态下的CPU时间,查看“OSSystemcallCPUtime”统计项得知操作系统系统态下的CPU时间,操作系统总的CPU时间就是用户态和系统态时间之和,如果ORACLE数据库使用的CPU时间占操作系统总的CPU时间90%以上,说明服务器CPU基本上被ORACLE数据库使用着,这是合理,反之,说明服务器CPU被其它程序占用过多,ORACLE数据库无法得到更多的CPU时间。数据库管理员还可以通过查看vsysstat数据字典中“CPU used by this session”统计项得知ORACLE数据库使用的CPU时间,查看“OS User level CPU time”统计项得知操作系统用户态下的CPU时间,查看“OS System call CPU time”统计项得知操作系统系统态下的CPU时间,操作系统总的CPU时间就是用户态和系统态时间之和,如果ORACLE数据库使用的CPU时间占操作系统总的CPU时间90%以上,说明服务器CPU基本上被ORACLE数据库使用着,这是合理,反之,说明服务器CPU被其它程序占用过多,ORACLE数据库无法得到更多的CPU时间。 数据库管理员还可以通过查看vsesstat数据字典来获得当前连接ORACLE数据库各个会话占用的CPU时间,从而得知什么会话耗用服务器CPU比较多。
出现CPU资源不足的情况是很多的:SQL语句的重解析、低效率的SQL语句、锁冲突都会引起CPU资源不足。
1、数据库管理员可以执行下述语句来查看SQL语句的解析情况:
SELECT * FROM VSYSSTATWHERENAMEIN(‘parsetimecpu′,‘parsetimeelapsed′,‘parsecount(hard)′);这里parsetimecpu是系统服务时间,parsetimeelapsed是响应时间,用户等待时间waitetime=parsetimeelapsed–parsetimecpu由此可以得到用户SQL语句平均解析等待时间=waitetime/parsecount。这个平均等待时间应该接近于0,如果平均解析等待时间过长,数据库管理员可以通过下述语句SELECTSQLTEXT,PARSECALLS,EXECUTIONSFROMVSYSSTAT WHERE NAME IN (‘parse time cpu’, ‘parse time elapsed’, ‘parse count (hard)’); 这里parse time cpu是系统服务时间,parse time elapsed是响应时间,用户等待时间 waite time = parse time elapsed – parse time cpu 由此可以得到用户SQL语句平均解析等待时间=waite time / parse count。这个平均等待时间应该接近于0,如果平均解析等待时间过长,数据库管理员可以通过下述语句 SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS FROM VSQLAREA
ORDER BY PARSE_CALLS;
来发现是什么SQL语句解析效率比较低。程序员可以优化这些语句,或者增加ORACLE参数SESSION_CACHED_CURSORS的值。
2、数据库管理员还可以通过下述语句:
SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM VSQLAREA;查看低效率的SQL语句,优化这些语句也有助于提高CPU的利用率。3、3、数据库管理员可以通过vSQLAREA; 查看低效率的SQL语句,优化这些语句也有助于提高CPU的利用率。 3、3、数据库管理员可以通过vsystem_event数据字典中的“latch free”统计项查看ORACLE数据库的冲突情况,如果没有冲突的话,latch free查询出来没有结果。如果冲突太大的话,数据库管理员可以降低spin_count参数值,来消除高的CPU使用率。
内存参数的调整
内存参数的调整主要是指ORACLE数据库的系统全局区(SGA)的调整。SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。
1、 1、 共享池由两部分构成:共享SQL区和数据字典缓冲区,共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。数据库管理员通过执行下述语句:
select (sum(pins - reloads)) / sum(pins) “Lib Cache” from vlibrarycache;来查看共享SQL区的使用率。这个使用率应该在90%以上,否则需要增加共享池的大小。数据库管理员还可以执行下述语句:select(sum(gets−getmisses−usage−fixed))/sum(gets)“RowCache”fromvlibrarycache; 来查看共享SQL区的使用率。这个使用率应该在90%以上,否则需要增加共享池的大小。数据库管理员还可以执行下述语句: select (sum(gets - getmisses - usage - fixed)) / sum(gets) “Row Cache” from vrowcache;
查看数据字典缓冲区的使用率,这个使用率也应该在90%以上,否则需要增加共享池的大小。
2、 2、 数据缓冲区。数据库管理员可以通过下述语句:
SELECT name, value FROM vsysstatWHEREnameIN(‘dbblockgets′,‘consistentgets′,′physicalreads′);来查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=1−(physicalreads/(dbblockgets+consistentgets))。这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。3、3、日志缓冲区。数据库管理员可以通过执行下述语句:selectname,valuefromvsysstat WHERE name IN (‘db block gets’, ‘consistent gets’,’physical reads’); 来查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=1 - ( physical reads / (db block gets + consistent gets) )。 这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。 3、 3、 日志缓冲区。数据库管理员可以通过执行下述语句: select name,value from vsysstat where name in (‘redo entries’,’redo log space requests’);查看日志缓冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请失败率:
申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。

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

关于测试一个接口的面试题相关推荐

  1. QPS\TPS指的是什么?怎样测试一个接口得QPS

    文章目录 一.概念梳理 1.TPS. 2.QPS. 二.测试一个接口得QPS. 准备步骤: 报告解析 一.概念梳理 1.TPS. 全称: Transactions Per Second , 也就是 每 ...

  2. 软件测试面试题:如何测试一个纸杯?

    如何测试一个纸杯? 功能度:用水杯装水看漏不漏:水能不能被喝到 安全性:杯子有没有毒或细菌 可靠性:杯子从不同高度落下的损坏程度 可移植性:杯子在不同的地方.温度等环境下是否都可以正常使用 兼容性:杯 ...

  3. 1、使用类与接口的知识完成如下要求:(1)定义一个接口CanFly,描述会飞的方法public void fly();(2)分别定义类飞机和鸟,实现CanFly接口。(3)定义一个测试类,测试飞

    1.使用类与接口的知识完成如下要求: (1)定义一个接口CanFly,描述会飞的方法public void fly(); (2)分别定义类飞机和鸟,实现CanFly接口. (3)定义一个测试类,测试飞 ...

  4. /*按要求编写一个Java应用程序程序:(1)定义一个接口CanFly,描述会飞的方法public void fly();(2)分别定义类飞机和鸟,实现CanFly接口。(3)定义一个测试类,测试飞机

    /* 按要求编写一个Java应用程序程序: (1)定义一个接口CanFly,描述会飞的方法public void fly(); (2)分别定义类飞机和鸟,实现CanFly接口. (3)定义一个测试类, ...

  5. 松勤软件测试试题,如果让你测试一个完全不熟悉的系统,你会怎么办?

    (松勤软件测试讯)在软件测试面试过程中,可能会遇到「如果让你测试一个完全不熟悉的系统,你会怎么办?」的面试问题,面试官与应聘者对话如下: 面试官诡异的微笑:"如果让你测试一个你完全不熟悉的系 ...

  6. 关于快速测试API接口的一个新技能

    这篇文章以亚马逊接口为例展示测试接口,主要给大家介绍了关于快速测试API接口的一个新技能,对大家的学习或者工作具有一定的参考学习价值 一.获取方式 打开测试网站,选取获得AMAZON商品详情 输入ke ...

  7. 经典面试题(6):NaN 是什么?如何测试一个值是否等于 NaN ?

    NaN 属性代表一个"不是数字"的值.这个特殊的值是因为运算不能执行而导致的,不能执行的原因要么是因为其中的运算对象之一非数字.例如: "abc" / 4,要么 ...

  8. 如何测试一个纸杯?【经典面试题】

    功能测试: 1.杯子是否可以装水 2.是否防摔 3.是否漏水 4.是否可以装饮料.腐蚀性物质 5.杯子是否可以放冰箱: 6.水可不可以被喝到. 7.能承受的最低最高的温度 8.杯子的容量与生产要求是否 ...

  9. Java并发异步编程,原来十个接口的活现在只需要一个接口就搞定!

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:锦成同学 juejin.im/post/5d3c46d2f265da1b9163db ...

最新文章

  1. 软考之运筹学计算-车床问题
  2. 关于考研一些问题的思考2017-12-23
  3. malloc和free的深层次分析
  4. 使用 iosOverlay.js 创建 iOS 风格的提示和通知
  5. 漫谈 Windows Server 管理工具
  6. 干货 | 双目摄像头实现手势识别,完美还原人体运动手势
  7. 夺命雷公狗ThinkPHP项目之----企业网站2之数据库的快速设计
  8. VS2017 修改文件编码为UTF-8的插件
  9. SQL/PLUS创建JAVA SOURCE的问题,符号提示输入内容
  10. 名词解释:什么是RSS? [转贴]
  11. npcap lookback adapter回环网卡是什么 它的作用是什么
  12. 单片机定时器TMOD与TCON详解!
  13. 读书分享《The art of CRM》--CRM的艺术
  14. 美国计算机基础课课程教学,美国大学计算机基础课程设置
  15. 家庭花卉养殖技巧及技术收集
  16. bnuoj 29065 鸣人的查克拉
  17. CF35C Fire Again
  18. paddleocr文本识别模型的训练
  19. unity,时间控制插件vp_Timer简单介绍
  20. 微信抢红包代码 python_Python实现的微信红包提醒功能示例

热门文章

  1. 除了要求app随手机壳颜色变之外,产品还要求....
  2. 第六节:教你如何在html中绑定数据
  3. SQL | 目录(持续更新)
  4. 无监督学习 | 层次聚类 之凝聚聚类原理及Sklearn实现
  5. 机器学习算法-随机森林初探(1)
  6. 搞生物的速看!有了它,30分钟可以把一天的工作都给干完!
  7. http抓包神器:Charles for Mac 特别版v4.6
  8. P1255 数楼梯 方法二(python3实现)
  9. js原生实现过渡效果的返回顶部功能实例
  10. hibernate实战第二版 蒲成带目录_太NB了! 阿里程序员带你玩转Spring:脑图+实战五+面试百问+知识总结...