性能测试面试题1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yiqin3399/article/details/79904107

    今天去面试的时候,面试官出了一道题,要测试一个系统,已知预期的TPS为500,用LR模拟500万用户发压,参数有500万条,分别是经度、纬度和numID。你准备怎么设计并完成测试?
    当时我有点懵,我再一次请教他确定要500万个用户?他回答是肯定的。当时我觉得是不可能实现的,每个虚拟用户要开启一个线程,对负载机配置要求会非常高,而且要考虑宽带的问题。总之在我测试的项目里很少有用户数超过1000的。回来查了一下,安装的时候需要New License,golba-100是指全部协议都可以支持100Vuser,web-10000是指web类协议支持10000Vuser。如果付费使用的话,不知道是什么样的上限。其次,500万用户只发500TPS的压力也很奇怪呀,每个用户才发0.0001的压力?!我想大概他不是这个意思吧!
不过我也一直在想用户数和TPS的关系,在我工作中,主要是考察后端服务器的性能,依据资源(一般是CPU的资源)来测试最大的TPS,这也是合乎情理的。但我们知道通过LR的pacing既可以用100用户发到500TP的压力,也可以用200用户发到500TPS的压力,这两种方式显然后者对负载机和服务器的压力都会更大,所以我认为测试结果中不仅要说明最大TPS也要说明相应的用户数。
    回归到题目,暂且不管要求的用户数。假如测试环境已经部署好了,如果需要挡板也部署好了,还有测试中涉及的数据库表的数量级要与生产保持一致。我会分析一下测试环境和生产环境的资源差异,根据逻辑CPU数量做一个折算得到测试指标TPS。假设测试环境与生产保持一致,交易数为1,则不用考虑占比和是否有前置交易等,那么确认一下要做哪些测试用例。接着准备测试脚本,然后我问他是否后端接收的数据要唯一,我想表达的是像用户注册交易的用户名则必须唯一,参数是否会失效,能否重复多次使用?他又只说给了我500万条数据。考虑到缓存的问题,如果让数据唯一,估算测试用例场景跑多久,比如1个小时,则实际只需要500TPS*3600s=180万条数据。如果真的要参数化500万条数据,怎么弄呢?我算了一下,按照它要的数据,经度、纬度、numID,500万条大概有150M,而LR最大能支持文本文档大概20M,而excel的话,Excel2003:65536行;Excel2007/2010:1048576行,似乎也不行。当时我说写个服务,因为在我工作中就是这么解决的,当数据量太大或者数据需要加工(比如加密)会写个java服务放在服务器上用来处理和返回数据,有个缺陷就是每次只返回一条,这样每发一次请求之前就要先请求这个服务返回数据,亲测过返回少量数据速度是很快的。他说不用这么麻烦的。然后他说可以把数据分成多个文件,然后在场景中用多个相同的交易。嗯~虽然平时也这么用过,比如一个交易占比太大,产生的压力很大,可以把这个交易分别放在多台压力机上。当时没想到,反正最近脑子不够使!
    在我工作中,如果数据可以重复使用,关于参数的多少没有规定,比较随意。我认为比较好的做法是参照现有系统的数据量。包括参数的来源一般也是从现有数据库捞数脱密后使用,选取百分之多少的数作为参数且最好大小能被LR直接使用。
    如果压力太大的话,要用多台压力机。如果是新的系统,则首先要试测一下,做好监控,直接发500TPS可能让服务器崩溃。然后是一个发现问题解决问题,复测这样子。

猜你喜欢

转载自blog.csdn.net/yiqin3399/article/details/79904107