性能测试中的随机数性能问题探索

author author     2023-04-05     192

关键词:

参考技术A

在软件测试中,经常会遇到随机数。我简单分成了两类:

其实第二个场景包含在第一个场景内。对于接口测试来说,通常我们直接使用第二种场景比较多,就是从某一个集合中随机取一个值。如果更复杂一些,每个值拥有不同的权重,其中这个也可以转化成第二个场景来说。

为什么要把第二个场景和第一个场景分开呢,这个问题源于之前写过的文章ConcurrentHashMap性能测试,当时发现自己封装的com.funtester.frame.SourceCode#random(java.util.List )方法性能存在瓶颈,特别消耗CPU资源。

虽然单机QPS也在50万+,但是因为这个方法很多地方都会用到,所以还是想提升一些性能。所以我就搜索了一些高性能随机数的功能,跟我之前搜到的资料一致,使用java.util.concurrent.ThreadLocalRandom这个实现类是性能最高的,方法如下:

针对第二种场景,还有一种实现思路:通过循环去集合中取即可。就是顺序去取,而不是每次都从集合中随机。

举个例子,我们有10万测试用户进行流量回放,演示代码如下:

这里调用了两次com.funtester.frame.SourceCode#random(java.util.List ),当QPS到达10万级别时候,理论上这个方法导致的瓶颈还是有一些影响的。

所以我用了新思路进行改造,下面是两种思路的对比压测用例,这个测试用例里面其实有三个实现:

用例如下:

由于测试中均达到了CPU硬件瓶颈,相同参数情况下结论比较明显,就没有进行多轮的对比测试。下面分享一下测试结果:

没想到用了java.util.concurrent.atomic.AtomicInteger反而性能更高了,这个问题略微有点深奥,暂时没有思路。

下面我们来测试一下单线程的性能,下面是我的用例:

下面是测试结果,这里我记录了执行完所有循环次数的时间,单位是ms(毫秒)。

这下结论明确了,就java.util.concurrent.atomic.AtomicInteger了。

最终写了一个新的随机对象的方法:

「BUG挖掘机·性能征服者·头顶锅盖」

读java性能权威指南(第2版)笔记26_性能测试方法下

...sp;结果的变化越大,越难判断平均值的差异是由于真正的性能问题还是随机变化1.5. 正确判断两个测试的结果是否有差异需要进行一定程度的统计分析,以确保感知到的差异不是随机波动造成的1.5.1. 要进行严谨的统计分... 查看详情

性能瓶颈

性能测试中如何定位性能瓶颈性能测试的概念是什么,基本目的是什么,我想大家都基本清楚,不作详述,总之,性能测试只是测试过程中的一种方式,帮助我们的功能更好的运行,如果功能测试是可用,易用,满足需求、用户... 查看详情

软件性能测试包括哪些

参考技术A问题一:软件测试中的性能测试包括哪些性能测试(performancetesting)就是用来测试软件在集成系统中的运行性能。其目的是为了度量系统相对于预定义目标的差距。性能测试必须有工具支持,市面上有一些专门用于GUI... 查看详情

大开测试:性能—如何解决脚本中的乱码问题(连载7)

...脚本中的乱码问题 1.问题提出平时在对Web应用程序性能测试的时候,可能会出现录制的脚本中汉字变为乱字符的现象。2.问题解答在所有字符集中,最知名的可能要数被称为ASCII的7位字符集了。它是美国信息交换标准委员... 查看详情

大开测试:性能—如何解决脚本中的乱码问题(连载7)

...解决脚本中的乱码问题1.问题提出平时在对Web应用程序性能测试的时候,可能会出现录制的脚本中汉字变为乱字符的现象。2.问题解答在所有字符集中,最知名的可能要数被称为ASCII的7位字符集了。它是美国信息交换标准委员... 查看详情

clickhouseprojection特性探索

...on在其公司内部的实践。分享包括了projection原理、使用、性能测试等内容。从性能测试的数据上看,projeciton对查询性能有着百倍级别的提升,意味着之前分钟级的查询响应延迟,将会提升到秒级响应。秒级的查询响应延迟,将... 查看详情

软件测试中的性能测试包括哪些

软件性能测试主要关注响应时间、并发用户数、吞吐量、性能计算数,下面给你例举几种性能测试:第一,验证软件的性能在正常或者特定环境和系统条件下使用是否还能满足性能指标。例如一款游戏在运行时CPU和内存占用率、... 查看详情

好评如潮,perfdog两年迭代正式启动商业化探索

移动端性能测试因为涉及工具繁多、ROOT/越狱难、工具准确性存疑,数据结果不稳定等因素成为众多性能测试人员的烦恼。为了帮助性能测试人员更好的完成客户端方面的性能测试,腾讯研发了一款移动性能测试工具——... 查看详情

CUDA 中的矩阵向​​量乘法:基准测试和性能

】CUDA中的矩阵向​​量乘法:基准测试和性能【英文标题】:Matrix-vectormultiplicationinCUDA:benchmarking&performance【发布时间】:2014-12-1214:12:10【问题描述】:我正在用一些新的基准测试结果更新我的问题(我还重新表述了问题以更... 查看详情

空指针测试性能

】空指针测试性能【英文标题】:Nullpointertestperformance【发布时间】:2012-12-2601:27:22【问题描述】:与测试小于零甚至小于零的整数相比,测试C#中的引用类型变量是否为空指针(如if(x==null)...)的性能如何bool为假?是否还有其... 查看详情

高性能 Linpack 基准测试中的编码变体是啥?

】高性能Linpack基准测试中的编码变体是啥?【英文标题】:WhatistheencodedvariantinHigh-PerformanceLinpackBenchmark?高性能Linpack基准测试中的编码变体是什么?【发布时间】:2022-01-0607:26:35【问题描述】:当我使用多个选项(例如不同的问... 查看详情

性能测试入门:性能测试中的各项指标告诉我们什么

性能测试性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。按照不同的目标,可以分为负载测试、压力测试、容量测试、稳定性测试。平时工作中如果不是专业的测试机... 查看详情

gson和fastjson性能测试

...组,People对象中包含一个Food对象引用。各个字符串采用随机数模拟;尽量模拟列表请求数据。 StringmString="abcdefghijklmnopqrstuvwxyz012345 查看详情

Spring数据保存与saveAll性能

】Spring数据保存与saveAll性能【英文标题】:SpringdatasavevssaveAllperformance【发布时间】:2018-09-2621:35:21【问题描述】:我试图理解为什么saveAll比保存在SpringData存储库中的性能更好。我正在使用CrudRepository,可以看到here。为了测试... 查看详情

验收/功能测试中的性能分析

】验收/功能测试中的性能分析【英文标题】:Performanceprofilinginacceptance/functionaltests【发布时间】:2016-06-0309:28:50【问题描述】:我使用了一个简单的验收测试,它执行以下操作:加载网站的起始页;执行授权尝试;执行注销尝... 查看详情

性能测试应用领域

  前几天写了点性能测试方法概述,到最后发现好像还是不能省掉应用领域这一环,那就写全吧。简单来说,就是性能测试可以应用在哪些方面,或者换个说法,你做性能测试的目的是什么,概括一下可以分为5个不同的领域... 查看详情

简谈性能测试

 性能测试(PerformanceTest)通过测试工具和测试手段,监测和收集测试过程中的软件系统运行数据,度量系统与预定义目标的差距。而预定义目标就是通过性能需求来表示。监测和收集:1.收集,根据项目历史数据,或者根据... 查看详情

性能测试--jmeter随机生成//随机选取/csv读取关键字

Jmeter随机生成/随机选取/csv读取关键字一、随机生成关键字随机生成关键字,需要组件:随机变量配置元件(RandomVariable)  该组件的作用是生成字符+随机数字格式的字符串,并保存在变量中,以便后续使用  下面几... 查看详情