关于性能测试:MegEngine-使用小技巧如何做-MegCC-的模型性能评测

MegCC 是一个深度学习模型编译器,具备以下特点: 极轻量级运行时:只在二进制文件中保留所需的计算内核。例如,MobileNet v1 的81KB运行工夫高性能:每个操作都通过专家精心优化便携:只生成计算代码,易于在 Linux、Android、TEE、BareMetal 上编译和应用Low Memory Usage while Boot Instantly:模型优化和内存布局在编译时生成。取得最先进的内存使用率,并且在推理过程中不破费额定的 CPUMegCC 反对了根底的 Benchmark 模块用于测试各类模型的推理性能,获取推理时各个 Kernel 的性能数据,分析模型性能瓶颈。 如何应用 MegCC 基准测试介绍MegCC Benchmark 是一个简略的工具,能够在 MegCC 中获取不同模型的基准测试后果,文件构造如下所示: ├── clean.sh├── CMakeLists.txt├── main.cpp├── model│ ├── model_arm.json│ ├── model_riscv.json│ ├── model_x86.json│ └── request.txt├── python│ ├── example.py│ ├── format.sh│ └── src│ ├── benchmark.py│ └── models.py├── README.md├── src│ ├── benchmark.h│ ├── build_config.h.in│ ├── CCbenchmark.cpp│ ├── CCbenchmark.h│ ├── MGEbenchmark.cpp│ └── MGEbenchmark.h└── tools ├── cc_analysis.py └── inference_visual.py在 src 中,它是一个 c++ 应用程序,用于在不同平台上运行基准测试后果。在 python 中,蕴含了模型转换,其余相干筹备工作和基准测试示例,并给出了一些可用来剖析基准测试后果工具脚本 ...

June 14, 2023 · 1 min · jiezi

关于性能测试:构建可靠的物联网系统了解-MQTT-性能测试

引言近十年来,物联网迎来了爆炸式的增长。面对海量的设施及其产生的数据,物联网利用和服务变得越来越简单。咱们不仅要保障这些物联网零碎的业务性能正确无误,还要保证系统可能反对大量设施之间继续稳固地通信。 因而,咱们须要通过性能测试以确保所构建的物联网零碎是稳固牢靠的。 为何性能测试对于物联网零碎如此重要?对物联网零碎进行集成测试和端到端测试,以保证系统性能的正确性,曾经是业界的通用做法。 性能测试是一种测验零碎健壮性的办法,它关注扩展性、可用性、可靠性等指标,能够帮忙发现零碎在失常应用场景下以及在极限应用场景下的体现。 在物联网零碎的开发过程中,性能测试能够提供一种基于给定指标的评估。通过将测试后果与基准值进行比拟,能够判断零碎性能是否有降落。 将性能测试纳入继续集成有助于发现零碎性能的瓶颈,并在问题尚未造成较高损失之前加以解决。 此外,性能测试还为容量布局提供了根据,有助于用户提前做好筹备。 物联网零碎性能测试的关注点有哪些?在对物联网零碎进行性能测试时,应次要从以下两个角度思考。 物联网零碎的性能体现如何。次要关注零碎是否可能应答负载减少,是否可能解决极其状况下的问题和故障,零碎的提早是否在正当的范畴内。有一些指标能够量化这些属性,如响应工夫、吞吐量、成功率、偏差等。为了达到预期的零碎性能,须要耗费多少计算资源。在能实现雷同指标的前提下,应用更少的计算资源无疑能够节省开支,减少收益。量化计算资源的指标包含 CPU 使用率、内存使用率、磁盘 I/O 速率、数据包传输率等。MQTT 性能测试的常见场景尽管不同的零碎和协定有各自的特定需要,须要设计不同的场景和测试用例,然而在为物联网零碎设计性能测试时,咱们能够参考以下几种常见的类型: 测试零碎在稳固状态下的性能体现。目标是验证零碎是否合乎失常应用的冀望。测试零碎在短时间内接受过载的性能体现。目标是验证零碎在遭逢突发压力时是否仍能失常工作或者迅速复原。测试零碎长期运行的性能体现。目标是验证零碎如果继续运行一段时间是否保持稳定。测试零碎在不稳固的网络环境下的性能体现。目标是验证零碎是否可能应答弱网络(这对于物联网服务来说很常见)的状况。因为 MQTT 是物联网畛域最宽泛应用的协定,咱们也依据理论客户需要列举了一些 MQTT 协定的常见测试场景: 连贯(Connection):客户端在肯定工夫内连贯到 Broker,并与 Broker 维持连贯一段时间。播送(Fan-out):大量客户端作为订阅者,只有多数或单个发布者。点对点(Point-to-point):发布者客户端和订阅者客户端数量雷同。上报(Fan-in):大量客户端作为发布者,只有多数或单个订阅者。在公布/订阅模型的背景下,设计 MQTT 测试场景的关键在于思考如何模仿发布者和订阅者的不同行为。 MQTT 性能测试面临的挑战对物联网零碎进行性能测试也面临着一些挑战。物联网零碎在架构、网络模式、通信协议等方面与传统的互联网零碎有所区别。因而,传统的性能测试方法不能间接套用到物联网零碎中。 首先,物联网零碎须要与大量设施进行连贯和通信,并产生海量的数据。在性能测试中,模仿实在的规模十分重要,这须要对生成负载的工具进行更精密的设计,以及对测试后果进行更无效的剖析。 其次,物联网的通信形式与互联网不同,因而多种物联网通信协议应运而生。 对于 MQTT 协定,它所具备的一些特点使其与互联网音讯协定有很大的区别: MQTT 是轻量级的,专为不稳固的网络连接和节俭带宽而设计。MQTT 应用 QoS 来反对简单的设施网络环境。MQTT 与数据无关。MQTT 具备长久会话的个性。因而在对 MQTT 协定进行测试时,要留神思考它的独特个性。 EMQ 的性能测试解决方案性能测试对于物联网零碎来说十分重要,它能够升高危险,进步健壮性,帮忙企业在疾速倒退的物联网行业中达成业务指标。 EMQ 推出了 MQTT 凋谢基准测试标准,为 MQTT 基准测试提供了一种无效的办法。它剖析了性能评估的要害指标,并提供了基准测试的理论用例。开发人员能够取得不同 MQTT Broker 之间主观的比拟参考,从而做出理智的抉择。 理解更多信息:MQTT 凋谢基准测试标准:全面评估你的 MQTT Broker 性能XMeter是 EMQ 的另一款产品,它提供对 MQTT 协定以及其余物联网协定的负载测试服务。XMeter 能够程度扩大,可能模仿百万级 MQTT 客户端。它以流式形式收集和解决数据,并生成蕴含次要性能指标的报告。如需理解更多对于全托管 XMeter 云服务的信息,请参考 XMeter:全托管 MQTT 负载测试服务。 ...

June 5, 2023 · 1 min · jiezi

关于性能测试:优分享JMeter源码解析之结果收集器

本文作者 优测性能测试专家高源。简介:本文以最新的JMeter 5.5版本源代码为例具体介绍了单机模式和分布式模式下后果收集器的工作原理。通篇干货,还不快来理解一下! 一、JMeter后果收集器概述JMeter是在压力畛域中最常见的性能测试工具,因为其开源的特点,受到宽广测试和开发同学的青眼。然而,在理论利用过程中,JMeter存在的一些性能瓶颈也凸显进去,常常会遇到大并发下压不下来的状况。笔者通过深入分析其源码实现,找到JMeter存在的瓶颈问题及根本原因,为当前更好地应用工具提供一些思路。后果收集器:在JMeter中负责报告数据收集的重任,无论是单机模式还是master-slave模式,每一个申请的后果都是通过相应的后果收集器进行数据采集的。在单机模式下用Result Collector这个监听器去采集,在分布式(master-slave)场景下通过配RemoteSampleListenerWrapper下的指定sender进行收集,具体配置jmeter.property文件的mode属性和队列长度实现。上面咱们以以后最新的JMeter 5.5版本的源代码为例具体介绍下单机模式和分布式模式下后果收集器的工作原理。二、单机模式1、初始化在命令行模式下,JMeter会依据用户的logfile配置抉择是否增加Result Collector,个别在理论测试的时候,咱们都是须要有具体统计报告生成的,所以都会增加Result Collector,收集器放在了整个hashtree的第一个节点,代码如下: void runNonGui(String testFile, String logFile, boolean remoteStart, String remoteHostsString, boolean generateReportDashboard){ .... ResultCollector resultCollector = null; if (logFile != null) { resultCollector = new ResultCollector(summariser); resultCollector.setFilename(logFile); clonedTree.add(clonedTree.getArray()[0], resultCollector); }else { // only add Summariser if it can not be shared with the ResultCollectorif (summariser != null) { clonedTree.add(clonedTree.getArray()[0], summariser); } }.... }2、加载流程增加完后果收集器后,执行脚本过程中,JMeter会依据jmx的编排,依照如下的执行程序进行调用: 每一个线程都是依照以上的程序循环反复执行,直到压测进行。具体代码如下(相应的关键点已减少正文):private void executeSamplePackage(Sampler current, TransactionSampler transactionSampler, SamplePackage transactionPack, JMeterContext threadContext) {threadContext.setCurrentSampler(current); // Get the sampler ready to sample SamplePackage pack = compiler.configureSampler(current); runPreProcessors(pack.getPreProcessors());//运行前置处理器 // Hack: save the package for any transaction controllers threadVars.putObject(PACKAGE_OBJECT, pack); delay(pack.getTimers());//定时器timer SampleResult result = null; if (running) { ...

February 27, 2023 · 3 min · jiezi

关于性能测试:优分享PC性能测试方法介绍及实现

作者:优测团队测试专家杨余超 背景介绍 近日优测测试服务团队在进行某客户PC端产品整体测试的过程中,也波及到PC性能测试局部。本文将联合该我的项目理论教训,总结如何利用本地监控性能的计划进行PC性能测试。本文内容次要为监控CPU、内存、网络以及GPU的性能应用情况等,重点介绍监控我的项目的定义及相干后果断定的准则。对于性能监控的实现办法也注明了实现步骤,不便测试同仁进行参照。 CPU 内存 网络1、Windows开始菜单→Windows管理工具→性能监视器。 2、点击性能监视器,进入性能监视器页面。3、点击+,进入增加计数器页面。 4、计数器页面,抉择Processor → % Precessor Time,点击增加,再点击确定(用于监督CPU占有率)。 5、计数器页面,抉择Memory → Available MBytes,点击增加,再点击确定(用于监督内存可用大小)。6、 计数器页面,抉择Memory → Pages/sec,点击增加,再点击确定(用于监督内存页面替换数)。7、计数器页面,抉择Network Interface → Bytes Received/sec,抉择对应的网卡,点击增加,再点击确定(用于监督每秒接管的数据量)。※ PC如果存在多网卡,在选择对象的实例中会显示所有的网卡,这部分肯定要抉择目前连贯网络的网卡。 8、计数器页面,抉择Network Interface → Bytes sent/sec,抉择对应的网卡,点击增加,再点击确定(用于监督每秒发送的数据量)。※ PC如果存在多网卡,在选择对象的实例中会显示所有的网卡,这部分肯定要抉择目前连贯网络的网卡。 9、计数器页面,抉择Network Interface → Bytes Total/sec,抉择对应的网卡,点击增加,再点击确定(用于监督每秒接管和发送的总数据量)。※ PC如果存在多网卡,在选择对象的实例中会显示所有的网卡,这部分肯定要抉择目前连贯网络的网卡。 10、性能监视器页面,在性能监视器处点击鼠标右键,抉择属性,进入性能监视器属性设置页面。将图形元素下的采样距离设置为100秒,持续时间设置为40000秒,设置实现后点击确定。 11、性能监视器页面确认工夫距离和计数器显示是否与设置统一,具体参照下图。工夫上显示到12小时,计数器个数为6个。 GPU1、装置MSI Afterburner,装置后关上软件,点击左侧的设定按钮,进入设定页面。 2、设定页面,惯例选项卡抉择须要监测的显卡(如果机器有独显,抉择独显)。 3、设定页面,监控选项卡抉择须要监控的性能选项,本次监控GPU显存使用率及帧率。点击【GPU1显存使用率】(留神和惯例选项卡中抉择的适配器要匹配,惯例中如果是GPU1,这里也肯定要抉择GPU1,如果是单显卡,应该只显示【显存使用率】)以及对应的页面下部的【在OSD上显示】的CheckBox,确认选项显示【在OSD】。点击【帧率】以及对应的页面下部的【在OSD上显示】的CheckBox,确认选项显示【在OSD】抉择实现后点击确定。 4、关上RivaTuner Statistics Server 设定页面,点击Add,抉择须要监测的软件装置门路,增加到监测列表中。被测利用的默认的装置门路:C:\xxx\xxx。(此处因须要做脱敏解决,理论测试中填写被测利用的装置门路即可) 5、关上测试的软件,确认左上角是否显示GPU显存使用率和帧率。 *版权申明:本文作者 优测团队测试专家 杨余超。 对于文章内容或PC端测试,如果想跟作者深刻探讨,可扫下方二维进群交换。 分割咱们热线:0755-86013388-843186官网:https://utest.21kunpeng.com/h...企业微信:

February 13, 2023 · 1 min · jiezi

关于性能测试:LR性能测试常见问题及处理方法六

在 《LR性能测试常见问题及解决办法(五)》的根底上追加。@TOC 21、错误码:Error -2662721.1、谬误景象录制的脚本,可运行时,提醒 Action.c(112): 谬误 -26627: 对于“http://192.168.1.105:8080/T3/...”,HTTP 状态代码=404 (Not Found)21.2、解决办法1.手动失常未必就真正常,LR加压的时候可能连接数占满了,所以出4042.还有一种状况,脚本里有查看语句,叫什么lr_check还是什么的,就是一个脚本外部查看是否有该资源用的,不见着他我拼不进去,如果有,正文掉看看22、错误码:Error -2749222.1、谬误景象Action.c(38): Error -27492: "HttpSendRequest" failed, Windows error code=12002 and retry limit (0) exceeded for URL22.2、解决办法在runtime setting中的preferences- ->options-->http-request connect timeout(sec)的值设为999 Runtime Setting>Preferences>Advanced区域中设置一个winlnet replay instead of sockets选项(不勾选此项报 Error -27727)23、错误码:Error -2727923.1、谬误景象谬误 -27279:外部谬误(呼叫客户服务):Report initialization failed , error code = -2147467259 [MsgId : MERR-27279 ] 正告: 扩大 LrXml.dll 报告在调用函数 ExtPerThreadInitialize 时呈现谬误 -1谬误: Vuser 初始化扩大 LrXml.dll 失败。23.2、解决办法Vuser Terminated.倡议你重装一下LR.这种问题有可能和你装置无关.dll文件出错不是说写的程序就能批改的.24、谬误提醒:missing newline in XXX.dat24.1、解决办法脚本参数化类型为FILE,后果运行在controller外面的时候,报了个missing newline的谬误,查了一下,将参数化的dat文件中的最初一行补上一个空行就解决啦!!如果遇到此谬误,需查看2个中央:1. dat文件中有没有空白行;2. 文档最初一行是否为空行

January 10, 2023 · 1 min · jiezi

关于性能测试:LR性能测试常见问题及处理方法四

在 《LR性能测试常见问题及解决办法(三)》的根底上追加。@TOC 13、错误码:1006013.1、谬误记录Error:Failed to connect to server“192.168.2.192”:[10060]ConnectionError:timed out Error:Server“192.168.2.192”has shut down the connection prematurely13.2、解决办法1> 利用拜访死掉小用户时:程序上的问题。程序上存在数据库的问题2> 应用服务没有死应用服务参数设置问题例如:在许多客户端连贯Weblogic应用服务器被回绝,而在服务器端没有谬误显示,则有可能是Weblogic中的server元素的AcceptBacklog属性值设得过低。如果连贯时收到connection refused音讯,阐明应进步该值,每次减少25%Java连接池的大小设置,或JVM的设置等3> 数据库的连贯在应用服务的性能参数可能太小了数据库启动的最大连接数(跟硬件的内存无关)14、谬误提醒:Page download timeou14.1、谬误记录Error:Page download timeout(120seconds)has expired14.2、解决办法应用服务参数设置太大导致服务器的瓶颈页面中图片太多在程序处理表的时候查看字段太多15、谬误提醒:脚本中呈现乱码15.1、谬误景象某个链接或者图片名称为中文乱码,脚本运行无奈通过。15.2、谬误剖析脚本录制可能采纳的是URL-based script形式,如果程序定义的字符汇合采纳的是国际标准,脚本就会呈现乱码景象。15.3、解决办法从新录制脚本,在录制脚本前,关上录制选项配置对话框进行设置,在"Recording Options"的"Advanced"选项里先将"Surport Charset"选中,而后选中反对"UTF-8"的选项。16、谬误状态码:-40416.1、谬误景象-404 Not Found服务器没有找到与申请URI相符的资源,但还能够持续运行直到完结。16.2、谬误剖析此处与申请URI相符的资源在录制脚本时曾经被提交过一次,回放时不可再反复提交同样的资源,而须要更改提交资源的内容,每次回放一次脚本都要扭转提交的数据,保障模仿理论环境,造成肯定的负载压力。16.3、解决办法在呈现谬误的地位进行脚本关联,在必要时插入相应的函数。

January 10, 2023 · 1 min · jiezi

关于性能测试:LR性能测试常见问题及处理方法三

在 《LR性能测试常见问题及解决办法(二)》的根底上追加。@TOC 9、错误码:Error -272799.1、谬误记录谬误 -27279:外部谬误(呼叫客户服务):Report initialization failed , error code = -2147467259 [MsgId : MERR-27279 ]9.2、解决办法倡议重装一下LR.这种问题有可能和你装置无关.dll文件出错不是说写的程序就能批改的.10、错误码:Error -2779610.1、谬误记录设置了持续时间,呈现谬误为:27796, Failed to connect to server 'hostname';port_ld': 'reason'.10048.(凭记忆写的,不晓得写错了没有)10.2、解决办法在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters里,有如下两个键值:TcpTimedWaitDelayMaxUserPort1,这里的TcpTimedWaitDelay默认值应该中是30s,所以这里,把这个值调小为5s(按须要调整)。2,也能够把MaxUserPort调大(如果这个值不是最大值的话)。11、错误码:Error -1048911.1、谬误记录Error -10489 : Exception was raised when calling per-thread-terminate function11.2、谬误剖析在用Loadrunner施行性能测试时,采纳Goal模式加压,存在如果继续长时加压时LoadRunner的Controller会报 Error -10489 : Exception was raised when calling per-thread-terminate function谬误; 问题产生起因: Unlike the earlier Windows versions, Windows 2000 and Windows XP have the default environment set to C:\Document and Settings\<user-name>\Local Settings\Temp instead of C:\Windows\temp. This long path with a space can cause several problems for LoadRunner. To resolve the issue, change to a directory without empty spaces. 11.3、解决办法在C盘(或是其它盘均能够)新建TEMP文件夹(为了后续设置临时文件筹备) 右键"我的电脑"->高级->环境变量->编辑批改TEMP变量目录,指身上面新建的目录,如我的指向C:\TEMP->保留即可12、错误码:Error -1005412.1、谬误记录Connection reset by peer. Error code : 1005412.2、谬误剖析设置下载等的超时用VuGen录制脚本后,回放或者加压的时候,可能会呈现错误信息“Action.c(65): Error : socket6 - Connection reset by peer. Error code : 10054”这是因为,下载的速度慢,导致超时,所以,须要调整一下超时工夫,12.3、解决办法在Run-time setting窗口中的‘Internet Protocol’-‘Preferences’设置set advanced options(设置高级选项),,从新设置一下“HTTP-request connect timeout(sec)”

January 10, 2023 · 1 min · jiezi

关于性能测试:LR性能测试常见问题及处理方法二

在 《LR性能测试常见问题及解决办法(一)》的根底上追加。@TOC 5、错误码:Error -274985.1、谬误记录Action.c(81):Continuing after Error -27498: Timed out while processing URL=http://172.18.20.70:7001/work... querystat/ subOrderQuery.do5.2、谬误剖析这种谬误经常是因为并发压力过大,服务器端太忙碌,无奈及时响应客户端的申请而造成的,所以这个谬误是失常景象,是压力过大造成的。如果压力很小就呈现这个问题,可能是脚本某个中央有谬误,要认真查看脚本,提醒的错误信息会定位某个具体问题产生的地位。5.3、解决办法例如下面的谬误景象问题定位在某个URL上,须要再次运行一下场景,同时在其余机器上拜访此URL。如果不能拜访或工夫过长,可能是服务器或者此利用不能撑持如此之大的负载。剖析一下服务器,最好对其性能进行优化。如果再次运行场景后还有超时景象,就要在各种图形中剖析一下起因,例如能够查看是否服务器、DNS、网络等方面存在问题。最初,减少一下运行时的超时设置,在"Run-Time Settings">"Internet Protocol:Preferences"中,单击"options",减少"HTTP-request connect timeout" 或者"HTTP-request receive"的值。6、错误码:Error -266126.1、谬误记录Action.c(6): Error -26612: HTTP Status-Code=500 (Internal Server Error) for http://192.168.0.8:10001/logo...;jsessionid={JSESSIONID2}6.2、解决办法造成HTTP-500谬误,有敌人通知我如下几个可能:1、运行的用户数过多,对服务器造成的压力过大,服务器无奈响应,则报HTTP500谬误。减小用户数或者场景持续时间,问题失去解决。2、该做关联的中央没有去做关联,则报HTTP500谬误。进行手工或者主动关联,问题失去解决。3、录制时申请的页面、图片等,在回放的时候服务器找不到,则报HTTP500谬误,若该页面无关紧要,则能够在脚本中正文掉,问题将会失去解决。例如:有验证码的状况下,只管测试时曾经屏蔽了,然而录制的时候提交了申请,但回放的时候不存在响应。4、参数化时的取值有问题,则报HTTP500谬误。可将参数化列表中的数值,拿到理论利用零碎中进行测试,可排除问题。5、更换了应用服务器(中间件的更换,如tomcat、websphere、jboss等),还是利用原先录制的脚本去运行,则很可能报HTTP500谬误。因为各种应用服务器解决的机制不一样,所录制的脚本也不一样,解决办法只有从新录制脚本。6、Windows xp2 与ISS组件不兼容,则有可能导致HTTP500谬误。对ISS组件进行调整后问题解决。7、零碎开发程序写的有问题,则报HTTP500谬误。例如有些指针问题没有解决好的,有空指针状况的存在。批改程序后问题解决。查找后盾日志发现报了很多0ra-01000谬误,这是oracle达到最大游标参数值,google了下,最大起因可能是JDBC连贯没敞开。最初查找weblogic连接池出了问题,很多连贯没敞开。7、错误码:Error -274967.1、谬误记录Action.c(15): 谬误 -27496: 外部谬误(呼叫客户服务): _eStat (7) != LRW_ITEM_STAT_ENUM_UNHANDLED for HandledTask at 048E180C7.2、解决办法整顿中8、错误码:Error -279958.1、谬误记录Action.c(56): Error -27995: Requested link ("Text=打算治理") not found [MsgId: MERR-27995]8.2、解决办法在IE中的工具—>Internet选项—>高级—>HTML设置中抉择第二个脚本类型.

January 10, 2023 · 1 min · jiezi

关于性能测试:LR性能测试常见问题及处理方法一

1、错误码:Error -277271.1、谬误记录Error -27727: Step download timeout (120 seconds)has expired whendownloading resource(s). Set the “Resource Page Timeout is a Warning” Run-Time Setting to Yes/No to have this message as a warning/error, respectively1.2、解决办法Run-Time Setting ------ Internet Protocol ------ Preferences ------Option ------ Step download timeout(sec)改为32000A、应用服务参数设置太大导致服务器的瓶颈B、页面中图片太多C、在程序处理表的时候查看字段太大或多2、错误码:Error -277282.1、谬误记录Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。2.2、谬误剖析对于HTTP协定,默认的超时工夫是120秒(能够在LoadRunner中批改),客户端发送一个申请到服务器端,如果超过120秒服务器端还没有返回后果,则呈现超时谬误。2.3、解决办法首先在运行环境中对超时进行设置,默认的超时工夫能够设置长一些,再设置屡次迭代运行,如果还有超时景象,须要在"Runtime Setting">"Internet Protocol:Preferences">"Advanced"区域中设置一个"winlnet replay instead of sockets"选项,再回放是否胜利。3、错误码:Error -277913.1、谬误记录Action.c(7): Error -27791: Server “192.168.1.111″ has shut down the connection prematurely3.2、解决办法1、应用服务器死掉。小用户时程序上的问题,程序上解决数据库的问题2、应用服务没有死。应用服务参数设置问题。例如:在许多客户端weblogic应用服务器被回绝,而在服 务器端没有谬误显示,则有可能是weblogic中的server元素的acceptbacklog属性值设得过低。如果连贯时收到onnection refused音讯,阐明应进步该值,每次减少25%。3、数据库的连贯在应用服务的性能参数可能太小了,数据库启动的最大连接数(跟硬件的内存无关)4、有时敞开卡巴斯基也会解决如上问题 1)察看response time 是否 超出默认的120秒 2)查看服务器日志是否有异样以及负载是否过高 3) web_set_timeout 设置更长的超时超时下限,如: web.set_timeout(”CONNECT”, “360″); web.set_timeout(”RECEIVE”, “360″); web.set_timeout(”STEP”, “360″))察看response time 是否超默认的120秒这个问题,要详细分析了。应该不会是LR本身造成的问题。把工夫调长,就是为了,定位问题在什么中央,而不是为了绕过这个谬误的呈现。4、错误码:Error -274924.1、谬误记录Action.c(38): Error -27492: "HttpSendRequest" failed, Windows error code=12002 and retry limit (0) exceeded for URL4.2、解决办法在runtime setting中的preferences- ->options-->http-request connect timeout(sec)的值设为999。

January 10, 2023 · 1 min · jiezi

关于性能测试:零基础性能自动化测试技能自学提升方案

一 目标成为性能和自动化行业领域专家,做有魅力,有影响力的人。 二 晋升计划2.1 自我学习通过自我克服,自我学习的模式,把根底搭建好。在平时的工作中,很难腾出无效的,短缺的工夫去学习。所以自我学习阶段,我给本人定的工夫点是早晨上班后。这样在不影响失常工作的前提下,自我晋升。从目前的状况来看,在理论工作中,次要是不足对根底概念的了解,根本工具细节的应用,所以自我学习的重点在夯实根底。 2.1.1自学过程分类借助经典书籍:《软件性能测试与LoadRunner实战教程》,《Selenium Webdriver 实战宝典》,《Selenium2自动化测试实战 基于Python语言》,《Python经典教程》逛各大技术论坛:51test论坛,CSDN,黑吧安全网,开源中国观看经典视频教程:《Python入门和进阶视频》,《LR实战视频》,《web自动化实战视频》和有教训共事探讨:利用内部资源,比方在其它大公司做过对应我的项目,有实战经验的共事,同学寻求技术支持和帮忙。这一资源能够说最理论,功效最大的自学过程总结:在自学的过程中,把要点,难点分类总结,做好笔记。自学过程中重视实践和工夫联合。如果只是一味的看书,功效必然不大。目前打算是辅助嵌入式设施,比方增强型51开发板,ARM11开发板进行嵌入式开发和嵌入式测试,这样对学到的常识就有了明确的意识。尽早及时查漏补缺。2.1.2自学过程输入自学只是模式的体现,然而最终要有功效展现,那么必须规定或者自我严格要求自学过程的输入,自定输入以下内容: 自学笔记:尽量应用空白无隔线的笔记本,这样很简单明了看出笔记的重点。对于重点技术难度,技术技巧点进行色彩批注,加黑,加大。笔记只体现思路和过程,不体现具体的概念论述。以邮件模式每周输入一次。博客园日志记录:在各大论坛上传本人的学习体验,分享学习心得。把技术型的常识演绎整顿。这样便于后续学习和查找。目前暂定论坛为开源中国和51test论坛。理论教训分享:和小组成员进行技术分享交换。通过本人的分享,要求小组成员给出评估并进行打分,说出他们的感触,这样本人能够明确到底是在提高还是退化。同时也能够帮忙其他人成长。2.2 技术分享2.2.1 分享模式网站博客记录:次要是为了当前还能有所回顾。在须要的时候能够回头去查找,不至于慌手慌脚。想要的货色找不到。组织团队学习交换:这个是重点,把本人学到的,晓得的,通过团队交换的形式进行回溯和晋升。这个是重点,打算再后续的工作中,不定时举办技术交换会议。这样大家都能够进行晋升,同时对本人的晋升也有很大帮忙。通过他人的反馈晋升,是最有目标的,有功效的。2.2.2 分享模式输入分享后果打分:制订打分模板,要求加入交换会议的共事进行打分,对本人的技术分享打分,并提出建设性倡议和意见。一方面是促成大家积极思考和学习,另一方面是为了从大家的角度理解到本人到底是那块还存在纰漏,或者须要晋升。分享后果总结:对分享过程中的文档进行整顿,对于本人要上传网盘保留,这样便于随时调用学习,对于团队来说,本人会把学习文档上传到RDM或群里共享,不便大家交换和学习。2.3 过程总结这个的重点在于阶段性总结。学习或者交换后,进行阶段性的总结。输入总结后果。自我倡议如下: 输入阶段性总结报告:监督人为各小组组长,这样让大家看着监督着,督促本人一直学习和总结。小组组长能够提出本人的建设性意见和倡议。输入阶段性技术详情:包含学习的技术点是什么,什么进度,问题是啥,怎么解决的。同样输入文档。监督人为部门经理。2.4 外派学习这个是集体冀望点,心愿公司有外派学习的机会,目前理解到对于测试畛域培训的机构很多,驰名的有尚观科技,达内等。学习点:倡议为有技术难度,和公司我的项目有关联。比方性能测试,倡议为服务层面,服务框架性能剖析,调优。至于工具应用属于本身层面,是能够通过本人学习的。然而服务层面的一些常识,是须要有教训的人进行指导。 三 计划细化3.1 自我学习工夫:1个半月,每天晚上19:00-22:00(1到2两个小时即可)内容:性能测试和web自动化细节: 3.2 技术分享工夫:2个月,每周举办一次,后者两周一次,定在早晨17:00-18:00内容:内容依据理论学习和把握的状况而定细节: 3.3 过程总结工夫:两周一次,定在每周五,邮件发送部门经理内容:输入阶段性总结报告和技术详情细节:报告输入按以下思路开展 3.4 外派学习心愿有外派学习的机会四 总结做有影响力的人

January 9, 2023 · 1 min · jiezi

关于性能测试:Databend-性能剖析方法与工具

Databend 整合了一些性能分析工具,能够不便进行深入分析。本文将会介绍如何进行 CPU / Memory Profiling。CPU Profiling CPU ProfilingCPU 剖析,依照肯定的频率采集所监听的应用程序 CPU(含寄存器)的应用状况,可确定应用程序在被动耗费 CPU 周期时破费工夫的地位。 pprof 是 Google 开源的代码性能剖析工具,能够间接生成代码剖析报告,不仅反对通过命令式交互查看,也便于可视化展现。Databend 应用 pprof-rs1 实现对 pprof 工具的反对。 必备工作CPU 剖析属于 Databend 的内置能力,部署一个 Databend 实例即可开始应用。 命令行交互go tool pprof http://localhost:<your-databend-port>/debug/pprof/profile?seconds=<your-profile-second>若 http 端口为 8080 ,采样工夫为 20 秒,后果示例如下: $ go tool pprof http://localhost:8080/debug/pprof/profile?seconds=20Fetching profile over HTTP from http://localhost:8080/debug/pprof/profile?seconds=20Saved profile in ~/pprof/pprof.samples.cpu.001.pb.gzType: cpuTime: Jul 15, 2022 at 9:45am (CST)Duration: 20s, Total samples = 141.41ms ( 0.71%)Entering interactive mode (type "help" for commands, "o" for options)(pprof) topShowing nodes accounting for 141.41ms, 100% of 141.41ms totalShowing top 10 nodes out of 218      flat  flat%   sum%        cum   cum%  141.41ms   100%   100%   141.41ms   100%  backtrace::backtrace::libunwind::trace         0     0%   100%    10.10ms  7.14%  <&mut regex_syntax::utf8::Utf8Sequences as core::iter::traits::iterator::Iterator>::next         0     0%   100%    10.10ms  7.14%  <<std::thread::Builder>::spawn_unchecked_<sled::threadpool::queue::spawn_to<sled::pagecache::iterator::scan_segment_headers_and_tail::{closure#0}::{closure#0}, core::option::Option<(u64, sled::pagecache::logger::SegmentHeader)>>::{closure#0}::{closure#0}, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}         0     0%   100%    10.10ms  7.14%  <<std::thread::Builder>::spawn_unchecked_<sled::threadpool::queue::spawn_to<sled::pagecache::iterator::scan_segment_headers_and_tail::{closure#0}::{closure#0}, core::option::Option<(u64, sled::pagecache::logger::SegmentHeader)>>::{closure#0}::{closure#1}, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}         0     0%   100%    10.10ms  7.14%  <<std::thread::Builder>::spawn_unchecked_<sled::threadpool::queue::spawn_to<sled::pagecache::iterator::scan_segment_headers_and_tail::{closure#0}::{closure#0}, core::option::Option<(u64, sled::pagecache::logger::SegmentHeader)>>::{closure#0}::{closure#2}, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}         0     0%   100%    10.10ms  7.14%  <<std::thread::Builder>::spawn_unchecked_<sled::threadpool::queue::spawn_to<sled::pagecache::iterator::scan_segment_headers_and_tail::{closure#0}::{closure#0}, core::option::Option<(u64, sled::pagecache::logger::SegmentHeader)>>::{closure#0}::{closure#3}, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}         0     0%   100%    10.10ms  7.14%  <[&str]>::iter         0     0%   100%    10.10ms  7.14%  <[(char, &[char])]>::binary_search_by::<<[(char, &[char])]>::binary_search_by_key<char, regex_syntax::unicode::simple_fold::imp::{closure#0}>::{closure#0}>         0     0%   100%    10.10ms  7.14%  <[(char, &[char])]>::binary_search_by_key::<char, regex_syntax::unicode::simple_fold::imp::{closure#0}>         0     0%   100%    10.10ms  7.14%  <[(char, &[char])]>::binary_search_by_key::<char, regex_syntax::unicode::simple_fold::imp::{closure#0}>::{closure#0}可视化执行下述命令能够进行可视化: go tool pprof -http=0.0.0.0:<your-profile-port> <your profile data>例如,执行下述语句能够在 8088 端口开启 WEB UI 。 go tool pprof -http=0.0.0.0:8088 ~/pprof/pprof.samples.cpu.001.pb.gz 拜访 http://0.0.0.0:8088/ui/flameg... 即可失去火焰图。 注意事项Databend 临时不反对在 musl 平台上运行 pprof 。 Memory Profiling内存剖析,在应用程序进行堆调配时记录堆栈追踪,用于监督以后和历史内存应用状况,以及查看内存透露。通过与 jemalloc 的集成,Databend 得以整合多种内存剖析能力。这里应用 jeprof 进行内存剖析。 必备工作装置 Jemalloc,并启用其分析能力 ./configure --enable-prof在构建二进制文件时启用 memory-profiling 个性:cargo build --features memory-profiling在创立 Databend 实例时,设置环境变量 MALLOC_CONF=prof:true 以启用内存剖析。示例: MALLOC_CONF=prof:true ./target/debug/databend-query堆快照转储jeprof <your-profile-target> http://localhost:<your-databend-port>/debug/mem上面的例子选用 debug 模式下编译的 databend-query 作为 target,端口为 8080,后果如下所示: ...

July 21, 2022 · 1 min · jiezi

关于性能测试:用户界面执行器设计场景PR性能测试工具压力测试工具Alltesting泽众云测试

要应用 PerformanceRunner性能测试工具/压力测试工具测试您的零碎,必须创立负载测试场景。场景定义每次测试期间产生的事件。场景定义并管制要模仿的用户数、这些用户执行的操作以及用于运行模仿场景的计算机。执行器负责设计场景、运行场景、管制场景、各种波形图生成等。执行器分为设计局部和运行局部两块,以及IP坑骗设置与监控近程服务器设置每一块的根本介绍如下: 首先咱们须要创立一个场景: 点击【文件】-【新建】创立场景 输出场景名称,点击【确定】实现创立 创立胜利后,进入场景设计,场景设计视图中蕴含了两个局部,别离是场景组和场景打算 场景组:在这里治理所有创立好的我的项目场景,能够增加新我的项目的场景到场景组,也能够从场景组中删除已有场景。入选中某一场景后(名称前被勾选),场景打算会有相应的变动,以显示以后场景的相干信息。具体操作如下: 增加我的项目: 点击增加我的项目按钮,弹出增加项目选择对话框; 抉择须要运行的项目名称,点击确定按钮,实现我的项目的增加 阐明:可反复上述操作,增加多个我的项目进入场景内 删除我的项目: 抉择我的项目后,点击“删除我的项目”按钮即可删除我的项目,仅删除场景内的我的项目,之后仍能够从新增加该我的项目 阐明:按住“ctrl”键抉择多个我的项目,点击“删除我的项目”按钮,其余步骤和删除单个我的项目一样 场景打算 在这里治理单个场景的运行模式。双击一个选项能够关上该选项的设计窗口。 启动组:设定了场景何时启动,能够抉择立刻启动,也能够抉择在期待一段时间后再启动。 启动虚构用户:该项设定了所有虚构用户的启动形式,能够抉择所有虚构用户同时启动,也能够抉择每个指定工夫内启动指定数目的虚构用户。 阐明:虚构用户数目会间接影响到压力的大小。在个别状况下,采纳递增虚构用户的形式来寻找零碎可能接受的正当压力。比方,预估总虚构用户数为20个,能够设置初始为2个,每5分钟减少1或2个用户。界面能够配置虚构用户启动形式,可抉择全副启动或者依照某一时间距离启动指定个虚构用户形式启动。 持续时间:该项设定了所有虚构用户在启动之后运行的工夫,能够抉择执行完测试脚本后立刻进行,也可抉择继续运行一段时间后进行。 进行虚构用户:该项设定了所有虚构用户的进行形式,能够抉择所有虚构用户同时进行,也能够抉择一段时间内进行指定数目的虚构用户。 场景打算图 以视图的模式显示出以后场景的设置信息。当场景设置信息产生改变时,场景视图也会相应的产生更改。

June 16, 2022 · 1 min · jiezi

关于性能测试:PR性能测试工具压力测试工具之工作区教程Alltesting泽众云测试

项目管理区:创立我的项目,创立测试用例,进行我的项目浏览,切换对象浏览,在PerformanceRunner性能测试工具/压力测试工具中位于垂直拆分条的右边;脚本编辑区:对测试脚本编辑,在PerformanceRunner中位于程度拆分条的上部;后果输入及参数表编辑:测试脚本规范输入,查看测试信息,编辑参数表,在PerformanceRunner性能测试工具/压力测试工具中位于程度拆分条的下部。 【我的项目管理器】 我的项目管理器用来显示以后 IDE 中所有的我的项目,并且显示我的项目中的脚本。 我的项目管理器中的我的项目及脚本组织成一个树状构造,每一个项目名称是一个文件夹,其下的脚本都位于此文件夹下。 对于每一个节点,如果是项目名称,双击能够关上;如果是脚本,则双击能够把这个脚本在编辑器中关上。 树反对鼠标右键菜单,反对删除、减少等操作。 【脚本编辑器】 双击我的项目管理器中要编辑的脚本可关上脚本编辑器。 编辑器可实现关键字着色,反对多行正文(/**/)及单行正文符(//),反对脚本命令主动补全(快捷键Alt+/)。 如果脚本已被编辑过但还没有保留,在脚本表单中相应的脚本名称后会有一个星号提示符,提醒你保留脚本,点击工具栏的保留按钮或是快捷键Ctrl+S保留后星号隐没。 在编辑器中右击鼠标能够弹出如下快捷菜单,蕴含了一些罕用的快捷操作菜单项: 【运行时刻的谬误和输入】 在脚本执行时候显示谬误和输入,能够显示脚本中所要求打印输出的语句,能够显示校验后果。 若运行报错,则会显示脚本中的报错语句,不便用户找出不能正确执行起因。 【数据参数表】 参数表用在参数化脚本过程中,能够用参数表工具栏对参数表进行各种编辑,编辑后的数据以xls文件模式被保留,每一列是一次循环。 【参数表工具栏】 参数表工具栏用来编辑参数表,如上图所示,每一个按钮性能如下: 在表头插入一列数据; 在表尾插入一列数据; 删除表头的一列数据; 删除表尾的一列数据; 在表头插入一行数据; 在表尾插入一行数据; 删除表头的一行数据; 删除表尾的一行数据; 将所有的行按名称的升序排列 将所有的行按名称的降序排列 从脚本对应的xls表中从新载入数据(参数表数据都被保留在与脚本同级同名的xls表中); 【对象库】 对象库中保留了所有申请和响应的详细信息数据,不同协定的信息都不完全相同,在回放时是依据这些属性数据来模仿实在的数据发送,让服务器响应相应的动作,并让服务器产生压力。对于http协定来说申请数据格式如下。 右边每一项代表一条url链接,左边别离代表此链接申请时的发送数据和返回的响应数据。 SOCKET协定申请数据格式如下:

June 15, 2022 · 1 min · jiezi

关于性能测试:性能测试工具PR即将升级到全链路性能测试工具与分析平台

从性能测试工具到全链路性能测试与剖析平台 PerformanceRunner性能测试工具行将降级为PerformanceOne产品。本次大规模降级,次要围绕几个重大性能来进行:全链路压测剖析PerformanceRunner性能测试工具(以下简称PR),次要是可能针对不同的网络协议,模仿上百万虚构用户(VU),产生海量的压力,测试利用零碎的响应能力。随着利用零碎越来越简单,比方从单节点到集群,从单个档次到多层次、微服务,咱们就须要晓得压力的链路是如何传导的,压力负载在每个节点时多少,哪个压力节点无奈接受压力。这就是全链路压测。PerformanceOne(以下简称PO),会反对多不同利用、不同节点的全链路压测,发现压力传导,找到性能瓶颈。PO反对包含ngix、mysql、oralce、tomcat、redis等各种罕用利用平台和架构,以及针对每个架构的几十种计数器。咱们依据本人的关注点,对计数器进行筛选,在压测过程中检测各个计数器,发现瓶颈。从压测工具到压测平台PR与LR、jmeter等压测工具一样,次要是单机部署应用。在肯定水平上,无奈实现:性能测试团队共享和继承性能测试脚本,造成大量的反复工作。另一个方面,纯正工具化的产品,无奈积攒常识,也无奈布局一个残缺的性能测试过程。因而,性能测试的平台化、用户的角色化、脚本的重用、性能测试过程治理,就成为性能测试的一个重大趋势。在PO平台上,咱们应用B/S架构来代替传统的客户端架构,把性能测试团队集成治理到一个平台上。所有的测试脚本、性能场景被治理。性能测试过程能够被布局和治理。此外,因为性能测试的常态化,因而,性能测试环境,包含被压测的应用环境和压力机,都须要统一规划和治理。PO性能测试平台提供针对性能测试环境和压测机器的对立治理,也通过对测试环境进行资源排班,晋升了压测机器的利用率。从脚本到低代码性能测试的一个问题是,须要了解协定和脚本,于是性能测试有一些“曲高和寡”。在PO的版本,咱们基本上勾销了性能测试脚本,而应用配置化的界面来代替性能测试脚本,升高了性能测试工具的应用门槛。PO针对每个协定,设置了一组模板,性能测试工程师只须要依据这些模板来填写,就可能生成加压的底层代码。应用一组有序的模板,就能够实现性能测试过程。 大概在六月中下旬,咱们行将公布PO的第一个版本,让咱们期待吧!

June 13, 2022 · 1 min · jiezi

关于性能测试:PerformanceRunner性能测试软件有哪些特点

PerformanceRunner性能测试软件简介 PerformanceRunner性能测试软件是一款自动化压力测试工具,通过加载不同的测试组件,实现面向不同协定的测试,通过模仿多种失常、峰值以及异样负载条件来对系统的各项性能指标,找出性能方面的问题,发现性能瓶颈,优化设计。 PerformanceRunner性能测试软件实用于那些测试 PerformanceRunner主动测试工具实用于惯例压力测试、极限压力测试、负载测试、可靠性测试等,能够进步测试效率,升高测试人工成本,帮忙用户找被测对象的缺点,特地是对于一些通过手工测试很难发现的缺点。 PerformanceRunner性能测试软件能够进行哪些类型的性能测试? 基于HTTP协定的性能测试,个别为B/S架构的Web程序。 基于SOKCET协定的性能测试,个别为C/S架构的桌面程序。 PerformanceRunner性能测试软件有哪些特点? 1,应用BeanShell语言作为脚本语言,使脚本更少,更易于了解。BeanShell语法本身也兼容Java语法。 2,采纳关键字揭示、关键字高亮的技术,进步脚本编写的效率。 3,提供了弱小的脚本编辑性能。 4,具备的录制性能,可能一次录制十分欠缺的脚本和资源,升高了测试人员批改脚本的工作量。对于不相熟编程的测试人员来说,是十分有价值的。 5,反对各种需要的校验。包含对如header字段的各项属性,服务器返回的内容、数据库、Excel表格、正则表达式等的校验。 6,反对参数化,同时反对数据驱动的参数化。 7,反对测试过程的谬误提醒性能。 8,丰盛的命令函数,有利于测试人员进行各种功能测试,熟练掌握这些命令函数,可能让测试人员编写出更简练、更高效的测试脚本。

June 13, 2022 · 1 min · jiezi

关于性能测试:性能测试理论

一、概述应用自动化测试工具,模仿用户理论应用的不同场景,对系统的性能指标进行测试 和 评估1.1、测什么后盾代码中间件(tomcat、apache、nginx)数据库、架构设计是否存在瓶颈资源(cpu、内存、磁盘、网络)利用率1.2、目标评估以后零碎能力找出零碎性能(硬件、软件)瓶颈,优化性能评估软件是否能满足将来 2~3年 性能需求1.3、性能测试和接口测试比照焦点 接口性能:验证软件的性能是否合乎产品需要。性能的正向和反向接口性能:验证软件是否满足 业务场景 需要。侧重点在 工夫 和 资源关系 二者相辅相成,缺一不可!先测性能,再测性能二、性能测试策略阐明: 基准测试、负载测试、稳定性测试。不是测试的 3种 分类。 基准测试 是 负载、稳定性测试的前提! 个别依照 先基准,再负载,最初稳定性的程序开展性能测试2.1、基准测试单用户跑业务场景,开展性能测试,关注的指标数据。给后续多用户测试,提供参考数据2.2、负载测试向服务器逐渐加压发送申请,查看零碎在满足指标的状况下,最多反对多少申请2.3、稳定性测试零碎维持在 肯定的负载(如:cpu占用率 60% ~ 80% )下,长时间运行,测试零碎工作的稳定性。个别测 `1*24 3*24 7*242.4、并发测试同一时刻(极短时间内)向服务器发送同一申请。如:秒杀、抢注、抢红包!2.5、压力测试采纳逐渐加压的形式,向服务器发送申请,测试出零碎性能的极限临界值三、性能测试指标阐明:--性能指标:掂量 一次性能测试 具体某项后果的统称性能测试 次要参考的 6 大指标: 1. 响应工夫 2. 并发数 3. 吞吐量 4. 点击数 5. 错误率 6. 系统资源利用率3.1、响应工夫指用户从客户端发动一个申请开始,到客户端接管到从服务器端返回的后果,整个过程所消耗的工夫响应工夫公示: 响应工夫 = 网络工夫 + 利用程序处理工夫 (应用服务器解析工夫、数据库服务器解析工夫) 3.2、并发数指同一时刻,同时拜访零碎发送申请的用户数据量3.3、吞吐量单位工夫内,解决客户端申请的 数量。 能够间接体现零碎的负载能力TPS (Transactions Per Second): 每秒事务数 一个事务对应一个业务场景,能够蕴含多个 申请QPS (Query Per Second): 每秒查问数 指服务器解决的 申请数留神:如果没有加非凡阐明( 默认 一个业务中,就只有一个申请 ),通常 TPS 与 QPS 雷同 ...

May 13, 2022 · 1 min · jiezi

关于性能测试:浅谈性能测试分析

1、测试环境的零碎性能剖析 依据咱们之前记录失去的测试后果,图表、曲线等,通过计算,与预约的性能指标进行比照,确定是否达到了咱们须要的后果;如未达到,查看具体的瓶颈点,而后依据瓶颈点的具体数据, 进行具体情况具体分析,影响性能的因素很多,这一点,能够依据教训和数据体现来判断剖析。 2、硬件设施对系统性能体现的影响剖析 因为之前设计了几个不同的测试环境,故能够依据不同测试环境的硬件资源应用情况图进行剖析,确定瓶颈是再数据库服务器、应用服务器抑或其余方面,而后针对性的进行优化等操作。 3、其余影响因素剖析 影响零碎性能的因素很多,能够从用户能感触到的场景剖析,哪里比较慢,哪里速度尚可,这里能够依据准则对其进行剖析; 至于其余诸如网络带宽、操作动作、存储池、线程实现、服务器解决机制等一系列的影响因素,具体问题具体分析,这里就不一一表述了。 4、测试中发现的问题 在性能测试执行过程中,可能会发现某些性能上的有余或存在的缺点,以及须要优化的中央,这也是执行屡次测试的长处。 举荐浏览: app性能测试工具有哪些 app压力测试怎么做 常见的APP性能测试指标 哪些性能须要进行性能测试?

May 13, 2022 · 1 min · jiezi

关于性能测试:哪些功能需要进行性能测试

 哪些性能须要进行性能测试? 每位用户都心愿本人公司利用的零碎有良好的性能。从客户的角度讲,必定都心愿所有的零碎利用有好的零碎性能体现,那么是不是所有的功能测试都要通过性能测试呢?答案当然是否定的,通常性能测试周期较长。首先,对全副功能模块都进行性能测试须要有十分长的工夫。其次,依据80-20准则,零碎用户常常应用的功能模块大略占零碎整个功能模块数目的20%,像“参数设置”等功能模块仅须要在利用零碎时由管理员进行一次性设置,因而针对这类设置进行性能测试是没有任何意义的。通常,性能测试是由客户提出需要,性能测试人员针对客户的需要进行零碎和业余的剖析后,提出相应的性能测试计划、解决方案、性能测试用例等,而后与用户独特剖析确定较终的性能测试计划、测试解决方案、性能测试用例等。性能测试的较终测试内容通常会联合客户实在的利用场景,以及客户利用较多和应用较频繁的性能。所以,“对所有的性能进行性能测试”是不切实际、不迷信的做法,性能测试人员必须分明这一点。 举荐浏览: 性能测试工作流程浅谈 常见的APP性能测试指标 挪动APP性能测试包含哪些方面? 性能测试、负载测试、压力测试有什么区别?

May 12, 2022 · 1 min · jiezi

关于性能测试:性能测试工作流程浅谈

性能测试工作流程浅谈: 1.剖析性能需求。筛选用户应用频繁的场景来测试,比方:登陆,搜寻,下单等等。确定性能指标,比方:事务通过率为99.99%,TOP99.99%是5秒,大并发用户为1000人,CPU和内存的使用率在70%以下。 2.制订性能测试计划,明确测试工夫,通常在性能稳固后,如第一轮测试后进行,和测试环境和测试工具。 3.编写测试用例。 4.搭建测试环境,筹备好测试数据。 5.编写性能测试脚本。 6.性能测试脚本调优。设置检查点、参数化、关联、集合点、事务,调整思考工夫,删除冗余脚本。 7.设计测试场景,运行测试脚本,监控服务器。 8.分析测试后果,收集相干的日志提单给开发。 9.回归性能测试。 10.编写测试报告。 举荐浏览: app压力测试怎么做 app性能测试工具有哪些

May 12, 2022 · 1 min · jiezi

关于性能测试:想要购买性能测试工具如何计算自己需要多少并发用户

如果咱们须要洽购一款性能测试工具,咱们想要晓得,到底须要多少并发用户数适合?买的太多,须要很高的估算;买的太少,又达不到成果。 目前大多数的软件架构,大多采纳先并发,后排队的机制。先并发,就是软件系统有个并发个数,就是同时能够解决多少个申请。例如,一个软件能够有15个并发,就是可能满足同时解决15个申请。如果每个申请解决的工夫是200ms,那么每秒钟,能够解决的申请个数是:15*(1000/200)=75个。 排队,就是如果曾经有15个申请正在被解决,起初的申请就必须排队期待。这就有个等待时间的问题。比方,一下来了750个申请,依据每秒解决75个计算,就须要10秒能力解决实现。如果零碎实时性很强,要求5秒内必须实现,如果没有实现,交易就会被勾销,那么咱们能够发现,750个申请,其中375个胜利了,其余的都失败了(超时)。 原则上来看,个别软件的并发个数都不是很高,除非部署了一个大的集群。如果只思考tps(每秒通过的交易/申请个数),咱们依据每个交易距离就能够计算出来。比方下面的场景,咱们能够要求不能一下来750个,能够在每个申请之间距离1秒,或者每个交易(包含距离)为1秒。这样,在上文钟,如果tps是75,那么并发用户数75个就能够了。 当然,如果咱们想要模仿更实在的用户场景,咱们能够依据数据来计算交易的间隔时间(这个局部,能够去搜寻相干的文章)。有了间隔时间,有了对tps的要求,就能够很容易的计算。比方,间隔时间是T,并发个数=tpsT。比方依照上文的例子,如果间隔时间为0.5秒,那么并发个数为750.5=37.5个。 间隔时间,就是作为实在的用户,均匀多长时间会发动一次申请。这个大略用在一段时间内产生的申请总数,除以所应用的工夫,就能够计算出来。 上面,咱们举一个理论的例子。 咱们冀望零碎的tps,可能达到2000,间隔时间为3秒,那么并发个数(VU)=2000*3=6000并发。这样做比拟实在。 如果放心估算过高,那么如果实在的交易解决工夫不超过1秒,那么咱们也能够购买VU=2000*1=2000个。这样咱们也能够失去比拟靠近的成果。 如果交易解决工夫,在tps比拟高的时候,会变的更长,假如较长是5秒。咱们能够让VU=2000*5=10000即可。 依据下面的阐明,咱们就能够来估算,大略你须要购买多少个VU了。大略个数跟被测试零碎可能容忍的较大等待时间,以及须要达到的tps个数相干。 举荐浏览: 接口测试和性能测试的区别 挪动APP性能测试包含哪些方面? 性能测试、负载测试、压力测试有什么区别? 性能测试须要做些什么? APM全链路压测怎么做?

May 10, 2022 · 1 min · jiezi

关于性能测试:性能测试有哪些指标需要测试

1、并发用户:并发个别分两种状况。一种是严格意义的并发,即所有的用户在同一时刻做同一件事件或者操作,这种操作个别指做同一类型的业务。另外一种并发是狭义范畴的并发,这种并发与前一种并发的区别是,只管多个用户对系统产生了申请或者进行了操作,然而这些申请或者操作能够是雷同的,也能够是不同的。 2、并发用户数量:在同一时刻与服务器进行交互的在线用户数量。 3、申请响应工夫:指的是客户端发出请求到失去响应的整个过程的工夫。 4、 吞吐量:指的是在一次性能测试过程中网络上传输的数据量的总和。吞吐量/传输工夫,就是吞吐率。 5、吞吐率:单位工夫内网络上传输的数据量,也能够指单位工夫内解决的客户端申请数量。它是掂量网络性能的重要指标。通常状况下,吞吐率用“申请数/秒”。 6、TPS:每秒钟零碎可能解决的交易或者事物的数量。它是掂量零碎解决能力的重要指标。 7、点击率:每秒钟用户向Web服务器提交的HTTP申请数。这个指标是Web利用特有的一个指标:Web利用是“申请-响应”模式,用户收回一次申请,服务器就要解决一次,所以点击是Web利用可能解决的交易的最小单位,如果把每次点击定义为一个交易,点击率和TPS就是一个概念。容易看出,点击率越大,对服务器的压力也越大。点击率只是一个性能参考指标,重要的是剖析点击是产生的影响。 8、资源利用率:指的是对不同系统资源的应用水平,例如服务器的CPU利用率,磁盘利用率等。资源利用率是剖析零碎性能指标进而改善性能的次要根据。 举荐浏览: 挪动APP性能测试包含哪些方面? 性能测试、负载测试、压力测试有什么区别? APM全链路压测怎么做? 性能测试计划阶段须要思考些什么?

May 6, 2022 · 1 min · jiezi

关于性能测试:第49问如何快速判断-IO-延迟对-MySQL-性能的影响

问有没有简略的办法,判断 IO 提早对 MySQL 性能的影响大小 试验咱们找一台 IO 比拟差的虚拟机,如果找不到,那么你的确很有钱。 仍旧宽油起一个 MySQL 实例: 先用 sysbench 筹备一张表: 而后测一下性能 记得多跑几次预热,此处只取最初一次的后果 运行压力时,同时取一下 iostat: 咱们发现磁盘 IO 并没有饱和,那么磁盘 IO 的失常提早, 会对这组 MySQL 的性能造成多大影响呢? 咱们来用内存模仿一下磁盘,应用以下命令: 咱们停下数据库,将数据目录移到模仿磁盘里 再来跑一下性能测试,应用的 sysbench 命令与方才雷同, 看一下后果: 咱们看到性能进步了四倍,咱们能够拿着这组数据申请更换磁盘了 咱们再来比一下 select 压力: 应用物理磁盘的 select : 应用内存模仿磁盘的 select : 能够看到,对于这组 select 压力,更换磁盘是没有太大用处的,须要应用其余的优化伎俩 对于 MySQL 的技术内容,你们还有什么想晓得的吗?连忙留言通知小编吧!

February 14, 2022 · 1 min · jiezi

关于性能测试:终于把性能测试这事儿讲清楚了

性能测试顾名思义指的是应用软件中各项指标的负载状况。 依据百度百科的释义,性能测试是通过自动化的测试工具模仿多种失常、峰值以及异样负载条件来对系统的各项性能指标进行测试。 性能测试在软件的质量保证中起着重要的作用,它包含的测试内容丰盛多样。中国软件评测核心将性能测试概括为三个方面:利用在客户端性能的测试、利用在网络上性能的测试和利用在服务器端性能的测试。通常状况下,三方面无效、正当的联合,能够达到对系统性能全面的剖析和瓶颈的预测。 简而言之,性能测试指标就是为了辨认并打消应用程序中的性能瓶颈。 明天,咱们就以博睿数据的个别产品为例,讲讲性能测试的那些事儿。 性能测试的基本常识 首先,要想全面的意识性能测试,就要对性能测试的基本常识、术语以及性能测试的根本方法论有根本的意识。 性能测试的概念前文曾经陈说,在这里咱们就不再赘述。 咱们来看下什么是软件性能。 软件测试是软件的一种非性能个性,它关注的不是软件是否可能实现特定的性能,而是在实现该性能时展现进去的及时性。 一般而言,性能测试次要蕴含以下5个术语: ² 响应工夫:对申请做出响应须要的工夫。 ² 并发用户数:在同一时间段内拜访零碎的用户数量。 ² 吞吐量:单位工夫内零碎解决的客户申请的数量。 ² 性能计数器:形容服务器或操作系统性能的一些数据指标。 ² 思考工夫:休眠工夫。 依照类型来划分,性能测试又分为六大类型: l 负载测试:负载测试用于测试应用程序在失常和峰值状况下的性能。在负载测试中,咱们对应用程序性能好坏的断定根据次要源于该应用程序对用户申请的响应状况,以及它在不同负载变动下(可承受的水平内)统一响应的能力来检测的。 负载测试中的外围关注点: 在应用程序出现异常状况前,该应用程序所能包容的最大负载量是多少? 在零碎变慢或呈现解体之前,数据库所能解决的数据量有多少? 是否有任何与网络相干的问题须要解决? l 验收性能测试:通过模仿生产运行的业务压力量和应用场景组合,测试零碎性能是否满足生产性能要求。 l 压力测试:压力测试旨在寻找毁坏零碎的办法。该测试同时还能为咱们找到零碎能够接受的最大负载范畴。 通常,压力测试采纳增量办法,通过逐渐减少负载来察看零碎各项性能指标的变动状况。 首先,咱们能够从应用程序曾经测试过的负载开始(例如以后用户数 100 个);而后缓缓地减少更多的负载来给零碎减少压力(例如从 100 个用户数逐渐减少到 10000)。 当咱们发现服务器没有响应申请的那个点开始,这个点就被认为是断点(在一些性能测试报告图表中,往往也视为性能拐点)。 在压力测试过程中,咱们须要关注的问题有: 零碎在解体前能接受的最大负载是多少? 在施行压力测试过程中,零碎是如何解体的?零碎是否在解体后自行复原? 被测系统/应用程序在解决异样负载时,有哪几种中断形式? l 配置测试:通过对被测系统软硬件环境的调整,理解各种不同环境对系统性能的影响水平,从而找到零碎各项资源的最优分配原则。 l 可靠性/可复原测试:可靠性测试或复原测试用于验证应用程序在呈现故障或异样行为后,是否可能复原到失常状态,以及复原阶段须要通过多长时间。 例如在某线交易站点呈现故障,以致用户不能在一天的某个点(顶峰工夫)交易股票,但在一两个小时后用户可能进行在线股票交易,咱们就能够说该应用程序是牢靠的,即有能力从异样行为中自行复原。 l 并发测试:模仿用户的并发拜访,测试多用户并发拜访同一个利用、同一个模块或者数据记录时,是否存在死锁或者其余性能问题。 理解了这些根本信息后,一个很重要的问题是如何测试性能? 博睿数据为大家整顿了7个方法论: ü SEI负载测试计划过程:关注负载测试计划的办法,包含6个关注区域:指标、用户、用例、生成环境、测试环境、测试场景。 ü RBI办法:是Empirix公司提出的一种用于疾速识别系统性能瓶颈的办法。 RBI办法基于以下事实: 1、发现的80%零碎的性能瓶颈都由吞吐量制约; 2、并发用户数和吞吐量瓶颈之间存在肯定的关联; 3、采纳吞吐量测试能够更疾速的定位问题。 须要留神的是RBI的分析方法是自上而下的:即首先确定是由并发还是吞吐量引发的性能体现限度;而后从网络、数据库、应用服务器和代码4个环节确定零碎性能具体瓶颈。 ü 性能降落曲线剖析:形容的是性能随用户数减少而呈现降落趋势的曲线。 性能降落曲线能够分为以下几个局部: 单用户区域——对系统的单用户响应工夫;对建设性能的参考值有帮忙; 性能平坦区域——在不进行更多性能调优的状况下所能冀望达到的最佳性能;该区域可被用作基线。 压力区域——利用轻微降落的区域;典型的、最大的倡议用户负载,是压力区域的开始。 拐点——性能开始急剧下降的点。 ...

November 23, 2021 · 1 min · jiezi

关于性能测试:0810-性能瓶颈证据链

内存磁盘空间[root@ZT-TEST ~]# df -h文件系统 容量 已用 可用 已用% 挂载点devtmpfs 3.9G 0 3.9G 0% /devtmpfs 3.9G 0 3.9G 0% /dev/shmtmpfs 3.9G 402M 3.6G 11% /runtmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup/dev/mapper/centos-root 95G 10G 86G 11% //dev/sda1 1014M 207M 808M 21% /boottmpfs 799M 16K 799M 1% /run/user/42tmpfs 799M 0 799M 0% /run/user/0运行内存[root@ZT-TEST ~]# free -g total used free shared buff/cache availableMem: 7 0 2 0 4 6Swap: 3 0 3[root@ZT-TEST ~]# free -m total used free shared buff/cache availableMem: 7982 880 2851 408 4250 6394Swap: 4095 3 4092[root@ZT-TEST ~]# free -k total used free shared buff/cache availableMem: 8174056 902304 2919436 417952 4352316 6547824Swap: 4194300 3368 4190932虚拟内存(swap)[root@ZT-TEST ~]# vmstat 1 10procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 3368 2919400 4204 4348128 0 0 0 1 0 0 0 0 100 0 0 0 0 3368 2919252 4204 4348128 0 0 0 0 173 240 1 0 99 0 0 0 0 3368 2919220 4204 4348128 0 0 0 0 139 219 1 0 99 0 0 0 0 3368 2919220 4204 4348128 0 0 0 0 121 208 1 0 99 0 0内存替换设置: ...

October 6, 2021 · 3 min · jiezi

关于性能测试:0809-性能测试CPU分析

Linux 监控工具top:展现所有过程信息 vmstat:展现系统活动,硬件和零碎信息 vmstat pid 10ps: ps aux | sort -k3nr | head -n 10:展现 CPU / 内存排名free:展现内存占用 free -giostat:展现 IO 信息 iostat -x -k -dpidstat:展现过程的 CPU 应用状况 pidstat -u -p ALL[root@ZT-TEST ~]# pidstat -p 8938 -w 1 10Linux 3.10.0-957.el7.x86_64 (ZT-TEST) 2021年10月03日 _x86_64_ (4 CPU)10时13分44秒 UID PID cswch/s nvcswch/s Command10时13分45秒 42 8938 1.00 1.00 gsd-color10时13分46秒 42 8938 1.00 0.00 gsd-color10时13分47秒 42 8938 1.00 0.00 gsd-colorcswch/s:被动切换;值过高,阐明内存 IO 资源有余 nvcswch/s:被动切换;值过高,阐明工夫片有余 mpstat:展现 CPU 所有内核的应用状况 ...

October 6, 2021 · 4 min · jiezi

关于性能测试:K6-在-Nebula-Graph-上的压测实践

背景对于数据库来说,性能测试是一个十分频繁的事件。优化查问引擎的规定,调整存储引擎的参数等,都须要通过性能测试,查看零碎在不同场景下的影响。 即使是同样的代码,同样的参数配置,在不同的机器资源配置,不同的业务场景下也有较大的区别,记录一下外部的压测实际过程,有一个参考。 本文中操作系统为 x86 架构 CentOS 7.8。 部署 nebula 的机器配置为 4C 16G 内存,SSD 磁盘,万兆网络。 工具nebula-ansible 用于部署 nebula 服务nebula-importer 用于导入数据到 nebula 集群中k6-plugin k6 压测工具,外面应用 go 客户端向 nebula 集群发动申请nebula-bench 整合了生成 LDBC 数据集,数据导入和压测。ldbc_snb_datagen_hadoop LDBC 数据生成工具概述数据应用 ldbc_snb_datagen 主动生成的 LDBC 数据集,整体流程如下图。 部署拓扑,应用 1 台机器作为压测负载机,3 台机器组成一个 nebula 集群 为了不便监控,压测负载机还部署了: PromethuesInfluxdbGrafananode-exporternebula 机器上还部署了: node-exporterprocess-exporter具体步骤应用 nebula-ansible 部署 nebula先初始化用户,买通 ssh 别离登录 192.168.8.60,192.168.8.61,192.168.8.62,192.168.8.63,创立 vesoft 用户,退出 sudoer 中,并设置 NOPASSWD。登录 192.168.8.60,买通 sshssh-keygenssh-copy-id vesoft@192.168.8.61ssh-copy-id vesoft@192.168.8.62ssh-copy-id vesoft@192.168.8.63下载 nebula-ansible,装置 ansible,批改 ansible 配置 ...

September 24, 2021 · 6 min · jiezi

关于性能测试:Takin使用日记记一次TransmittableThreadLocal引起的业务异常

对于常见的WEB容器,Takin通过加强org.apache.catalina.core.StandardHostValve#invoke办法,拦挡并解析办法入参的Request对象中的header数据,判断压测标的信息并将压测标以及链路信息设置到上下文对象,并通过ThreadLocal保留该上下文对象,以此来保障以后线程解决的过程中都能获取到压测标以及链路信息。 然而不论是WEB容器还是业务代码常常会应用线程池运行代码,这时候ThreadLocal就有局限性了,如何做到跨线程池传递咱们的上下文对象就显得异样重要了,好在Alibaba的https://github.com/alibaba/tr...解决了这个问题,具体transmittable-thread-local的具体内容大家能够通过git地址查看,这里咱们次要以git上的demo看看transmittable-thread-local如何实现跨线程传递的,次要通过将线程池运行的Runnable对象包装成TtlRunnable对象并保留以后的上下文信息。这样就实现了对线程池运行工作的压测标以及链路数据信息的透传,至此仿佛所有都很完满。 直到某次呈现了一个诡异的景象,在应用Takin的过程中,有一利用接入Takin之后,某个性能无奈失常应用,然而无论是利用的日志还是Takin的日志都未显示任何异样信息,再诘问了无奈应用的性能是一个线程池执行工作,过后扩大了ThreadPoolExecutor的beforeExecute办法和afterExecute办法,用以记录工作执行的耗时,并且会打印工作的taskId等信息,通过截图的Debug信息便能够看到问题呈现了,因为应用了transmittable-thread-local导致原始的Runnable被包装成了TtlRunnable对象,在这个过程中如果业务想要再获取Runnable对象强转获取一些工作信息,就会呈现类无奈转换的异样。 解决方案的话目前能够通过加强beforeExecute和afterExecute办法,对Runnable对象进行判断,如果是TtlRunnable对象,则通过TtlRunnable.getRunnable()办法返回原是的Runnable对象 Takin开源详情https://news.shulie.io/?p=3024立刻扫码,入群技术交换~

August 13, 2021 · 1 min · jiezi

关于性能测试:了解性能测试

什么是性能测试?工作多年总结的一句话就是(站在用户角度):就是用的爽不爽压力测试:是否能满足我频繁,多用户、并发应用,用的爽不爽稳定性:为什么老出问题,用的爽不爽可靠性:出问题了能不能复原,能不很快复原,用的爽不爽响应速度、晦涩度:用的爽不爽.........这些都是跟用户无关,所以咱们测试这些事为了用户用的爽不爽,个别用户不爽都是那些方面,这就是你要做的性能测试。站在研发角度:代码是不是还能优化,所有的是不是还能调优。。。。这就是产品最佳状态,考验研发的代码能力,逻辑,优化等水平,测试工程师就是查看这些,找出潜在缺点,这就是性能测试; 具体咱们要理解基本概念,上面给大家总结了下(基于安卓、APP端教训方向,传奇游戏):如有脱漏,请大家补充

July 26, 2021 · 1 min · jiezi

关于性能测试:控制台提升性能测试

调试 JavaScript 代码的最简略路径就是简略地通过 console.log 办法输入后果。尽管它能用,但这并不是最现实的解决形式。如果有更好的办法,何不摸索一番呢? 巧用控制台,晋升 JavaScript 调试性能,晋升页游体验 “来自控制台的 Hello” console 对象提供对浏览器调试控制台的拜访。仅当在浏览器上运行 JavaScript 代码(即客户端代码而非服务端代码)时,才能够应用 console 对象。不同浏览器的工作形式各不相同,然而通常都会提供一组惯例性能。调试语句最棒的一点是它们兼容所有库和框架,因为它们是在外围语言中编写的。 console.log 的最根本应用场景是显示代码的输入。思考以下代码: function sayHello(name) { console.log(name)}sayHello('Indrek')它记录传递给 sayHello 函数的名称。 巧用控制台,晋升 JavaScript 调试性能 “输入传递给函数的名称” 如果咱们想晓得必须调用 sayHello 函数多少次,该怎么办?有一个简略的办法,称为 console.count()。 console.countcount() 会输入应用该标签调用它的次数。如果没有参数,则 count() 的行为就像应用默认标签调用一样。 function sayHello(name) { console.count() console.log(name)}sayHello("Indrek")sayHello("William")sayHello("Kelly") 下面的代码记录以下内容: 巧用控制台,晋升 JavaScript 调试性能统计咱们调用 sayHello 函数的次数 这样能够统计出调用函数的次数,但如果要统计调用雷同名称函数的次数怎么办?一种办法是简略地将 name 参数传递给 count 办法。 function sayHello(name) { console.count(name)}sayHello("Indrek")sayHello("William")sayHello("Kelly")sayHello("Indrek")搞定!该函数跟踪咱们用每个名称调用这个函数的次数。 巧用控制台,晋升 JavaScript 调试性能统计咱们说每个名字的次数 console.warn 以下办法将正告音讯输入到控制台,在应用开发人员工具或 API 时十分有用。console.warn 是一种现实抉择,用来让用户晓得某些事件不对劲,例如省略参数或让开发人员晓得 API/ 软件包版本已过期。 function sayHello(name) { if(!name) { console.warn("No name given") }}sayHello()下面的代码查看 name 参数是否传递给函数。如果未输出任何名称,则会记录一条正告音讯,提醒其思考某些事项。 ...

July 22, 2021 · 2 min · jiezi

官宣腾讯WeTest明星工具PerfDog面向全球发布

作者:wetst小编商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。原文链接:https://wetest.qq.com/lab/view/475.html 导读 PerfDog(官网:perfdog.qq.com)作为移动全平台性能测试分析专业工具,在腾讯内部研发测试工具商店-WeTest Store上线后服务了近2000+名开发者,其中《王者荣耀》、《QQ飞车》、《天涯明月刀》、《和平精英》、《使命召唤手游》(CODM)等知名游戏以及QQ浏览器、腾讯微视、微信及小程序小游戏等优秀应用均在使用PerfDog。在经历过腾讯内部性能测试实践后,PerfDog将于2019年11月正式对外发布,开放给全球开发者使用。 洞穿性能测试痛点,铸就性能测试精品工具 一年前,PerfDog研发团队在项目研发支持的过程中,频频遇到移动游戏和应用的性能测试问题。例如现有性能测试工具准确性低,带来的大量交叉复测验证、误导分析等额外工作量;又有因为工具局限性和功能空白,不得不同时开启N个工具、进行各式XCode源码编译的困难;再加上iOS系统无法高效进行性能测试和性能分析、以及越狱带来的安全和障碍,移动端性能测试的工作推进变得愈加艰难。 在这样的背景下,PerfDog团队决定构建一个不受APP版本、系统版本、系统平台影响,完全独立并且使用简单的性能测试工具。2018年7月,PerfDogv1.0版本开始面向腾讯内部所有团队开放使用。2019年6月,PerfDog上架腾讯WeTest Store面向全公司所有测试及开发者,在腾讯内部收获了超高的口碑,也成为了腾讯WeTest Store 2019年度的明星工具。 用户需求为本,致力提升全球移动应用&游戏的性能和品质 “酒香不怕巷子深”,随着内部使用规模的不断扩大,PerfDog也不断地收到由外部用户提交的使用申请。为了更好的满足外部开发者们对优秀性能测试工具的强烈需求,本着“致力于游戏和应用品质提升”的初衷, 研发团队决定于2019年11月面向全球开放PerfDog的下载和使用。 移动全平台覆盖,跨越ROOT/越狱困难 PerfDog作为一款性能测试和分析工具,支持全平台的应用形态测试,包括Android、iOS、小游戏、小程序、H5等。且Android设备无需ROOT,iOS设备也无需越狱,能非常高效地解决两大系统测试分析的难题,提高测试工作的效率。 在手机机型和移动应用随科技发展飞速增加的互联网时代,不同厂商、不同版本系统、参数API及形式不详给性能测试带来了许多极难突破的关点,尤其还有iOS封闭性这座大山。但基于腾讯大数据和行业测试标准,PerfDog目前已经做到了适配超过95%以上的Android机型和100%的iOS机型,并且几乎可以覆盖所有APP应用、游戏、小程序、小游戏、H5、web等。PerfDog还同时支持Android平台多进程测试及iOS扩展进程APP Extension测试,跨越了开发者们一直攻坚的ROOT/越狱、单项目多工具使用等困难,成为了一款为数不多的可以支持复合应用测试需求的性能测试工具。 极简流程即插即用,轻松获得专业性能报告 在解决全平台覆盖和工具局限性的问题后,为了使开发者能更高效的进行性能测试,PerfDog在操作上也做了极简化设计。PerfDog同时支持Windows和Mac两大PC端操作系统,且拥有即插即用,无需在手机上安装APP的特点。只需要在Windows PC/苹果MAC机器上安装并运行PerfDog客户端,就可以直接通过USB连接手机,并自动检测手机添加其到应用列表中,极大的减少了多设备繁琐的测试前置步骤。与此同时,作为一款部署于客户端而不是Web的性能测试工具,PerfDog在界面上提供了丰富且操作简单的功能,以提高开发者进行性能测试的便利性。例如回放功能、批注与标定、场景Label、多进程数据展示、Log采集等。 为了提高测试数据的准确性,PerfDog目前已经做到了解决系统强制Kill机制,双重获取权限机制,可以保证长时间极限稳定测试。并且通过与各类现有工具的测试对比,工具本身性能影响小于1%,参数统一准确。在此基础上,PerfDog性能测试经验丰富的开发团队对PerfDog报告产出的专业性也有着极高的要求。无论是移动硬件特性、系统性能参数理解、游戏性能特性、引擎渲染机制的专业知识,还是SysTrace/ADB命令、Xcode/Instrument等专业工具方法,PerfDog的测试报告都能完整体现,旨在提高报告的专业度和可靠度。加上一年来丰富的案例沉淀,PerfDog已经成为了腾讯内部最优秀的性能测试工具。现在,全球的开发者将有机会亲自感受PerfDog带来的简单、高效、专业的工作体验。 构建云化管理,增强团队协作 PerfDog作为一款服务于测试及开发者的测试工具,在功能交互与团队协作的技术设计上也保持着不断学习积极优化的态度。从构建云化管理,推出版本对比、数据传递分享、展示编辑查看、任务管理等功能,到支持随时随地创建任务、成员邀请/管理/测试、数据共享,PerfDog希望能简化项目组开发测试团队之间的沟通成本,通过工具提高在性能测试中的团队协作能力。 扬帆起航新征程,PerfDog面向全球开发者正式发布 PerfDog研发团队在一年多的时间里不断打磨工具的易用性、全面性和专业性,并紧跟用户需求的变化方向,努力钻研每个功能模块的优化升级。本次发布的PerfDog全新版本的所有功能和特性,包括客户端操作、测试任务管理、云端数据管理以及测试报告等,均支持中英文双语版本,能更好的满足全球开发者的需求。 在经历过数次版本升级与功能优化迭代,接受了腾讯数千名游戏应用开发者的检阅与认可后,PerfDog以领先的性能测试分析能力和表现,以解决您最终问题为依归,以致力提升移动应用和游戏的性能和品质为初衷,面向全球开放! 详细信息请访问:PerfDog官网 perfdog.qq.com 更多优质研发测试工具请访问:腾讯WeTest官网 wetest.qq.com PerfDog交流群:878223234 关于腾讯WeTest腾讯WeTest是由腾讯官方推出的一站式品质开放平台。十余年品质管理经验,致力于质量标准建设、产品质量提升。腾讯WeTest为移动开发者提供兼容性测试、云真机、性能测试、安全防护、企鹅风讯(舆情分析)等优秀研发工具,为百余行业提供解决方案,覆盖产品在研发、运营各阶段的测试需求,历经千款产品磨砺。金牌专家团队,通过5大维度,41项指标,360度保障您的产品质量。

November 3, 2019 · 1 min · jiezi

ApacheBench-压测

一、工具介绍1、简介Apache httpd本身是一个提供http服务工具.其内含一个 ApacheBench(ab) 命令,可用于模拟并发HTTP请求.ab命令使用说明,见官网 2、适用场景1、只适用 http / https 协议2、请求参数只能写死,不能随机产生,合适像查询这种幂等接口压测3、产出简单报告(txt/html),不支持图二、下载安装1、Window下载安装国内推荐下载地址 下载后解压即可使用,推荐配置解压路径到系统环境变量,这样以后命令窗口就能识别到ab命令. 懒人一键下载: httpd-2.4.41-win64-VS16.zip、httpd-2.4.41-win32-VS16.zip 2、Linux安装安装命令 sudo apt install apache2如果需要最小安装,不需要apache提供的http功能,则使用下面命令安装 sudo apt install apache2-utils3、验证在命令窗口输入 ab -h 命令后,能显示ab命令使用提示,即安装完成,如下。 ~ » ab linbo@LinBoab: wrong number of argumentsUsage: ab [options] [http[s]://]hostname[:port]/pathOptions are: -n requests Number of requests to perform -c concurrency Number of multiple requests to make at a time -t timelimit Seconds to max. to spend on benchmarking This implies -n 50000 -s timeout Seconds to max. wait for each response Default is 30 seconds -b windowsize Size of TCP send/receive buffer, in bytes -B address Address to bind to when making outgoing connections -p postfile File containing data to POST. Remember also to set -T -u putfile File containing data to PUT. Remember also to set -T -T content-type Content-type header to use for POST/PUT data, eg. 'application/x-www-form-urlencoded' Default is 'text/plain' -v verbosity How much troubleshooting info to print -w Print out results in HTML tables -i Use HEAD instead of GET -x attributes String to insert as table attributes -y attributes String to insert as tr attributes -z attributes String to insert as td or th attributes -C attribute Add cookie, eg. 'Apache=1234'. (repeatable) -H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip' Inserted after all normal header lines. (repeatable) -A attribute Add Basic WWW Authentication, the attributes are a colon separated username and password. -P attribute Add Basic Proxy Authentication, the attributes are a colon separated username and password. -X proxy:port Proxyserver and port number to use -V Print version number and exit -k Use HTTP KeepAlive feature -d Do not show percentiles served table. -S Do not show confidence estimators and warnings. -q Do not show progress when doing more than 150 requests -l Accept variable document length (use this for dynamic pages) -g filename Output collected data to gnuplot format file. -e filename Output CSV file with percentages served -r Don't exit on socket receive errors. -m method Method name -h Display usage information (this message) -I Disable TLS Server Name Indication (SNI) extension -Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers) -f protocol Specify SSL/TLS protocol (SSL2, TLS1, TLS1.1, TLS1.2 or ALL) -E certfile Specify optional client certificate chain and private key三、测试使用1、命令格式ab [选项/参数] [URL地址]2、常用选项参数说明-c并发请求数量,默认1个-n总请求数量-T设置POST/PUT请求方式的Content-type请求头参数,如:<p>-T "application/x-www-form-urlencoded"</p>-pPOST请求发送的请求数据,需要和-T参数一起配合使用-uPUT请求发送的请求数据,需要和-T参数一起配合使用-m自定义HTTP请求方法,如DELETE/HEAD-H添加自定义请求头参数,使用冒号分离请求头的key和value,格式如:<p>-H "Accept-Encoding: zip/zop;8bit"</p>3、使用例子可以使用网上一些开发的服务.这里使用到一个Java Web服务,只需要本地安装JDK8或JDK8以上版本,即可直接运行. ...

October 5, 2019 · 5 min · jiezi

如何对消息队列做性能测试

本人在负责服务压测的实践中,遇到了一个需求,就是对消息队列的dubbo接口性能进行压测,主要分两类:一类是往队列里面添加,一类是从队列中取值(等同删除)。是一个server的两个不同方法。同组其他人用的jmeter进行的dubbo接口压测。队列的添加规则比较简单,主要有一个标志msg,由事件类型+用户标识符+消息体构成。做此类此类测试的时候遇到的问题就是如果构建消息体,每次都构建不同的消息体,这里我才用了纳秒+随机数的方式,后来发现直接用纳秒就行。(这里相信jmeter也应该有响应的方法) 在添加队列的测试不太清楚jmeter如何实现,因为他们直接放弃掉了,我才用的方案是,先构建足够多数量的消息,然后将消息数据拿出来放到一个线程安全的集合中,多线程去拿,使用的是java的LinkedBlockingQueue<String>消息队列。没做完一次测试,重置一次测试数据,防止中途有失败的情况。 public int createQ() { String absolutePath = new File("").getAbsolutePath(); List<String> strings = WriteRead.readTxtFileByLine(absolutePath + "/dubbo"); new Concurrent(new ThreadBase(SourceCode.changeStringToInt(strings.get(0))) { @Override protected void before() { } @Override protected void doing() throws Exception { CreateQueueRequest createQueueRequest = new CreateQueueRequest(); createQueueRequest.setReqId(TraceKeyHolder.getTraceKey()); createQueueRequest.setDelayTime(System.currentTimeMillis() + 3600 * 1000); String msg = "wait_for_publish:8888" + "@" + System.nanoTime() + PublishType.ZUOYE; createQueueRequest.setMsg(msg); createQueueRequest.setTaskTypeEnum(TaskTypeEnum.PUBLISH_PROMU); createQueueRequest.setTtl(0L); CommonResponse<CreateQueueResultVo> queue = commonDelayQueueService.createQueue(createQueueRequest); logger.info("createQueue0 {}", JsonUtil.obj2Json(queue)); } @Override protected void after() { } }, SourceCode.changeStringToInt(strings.get(1))).start(); return 0; } 删除队列: ...

July 16, 2019 · 1 min · jiezi

一个时间计数器timewatch辅助性能测试

在做性能测试的时候,经常需要去记录一些方法的执行时间,这期间用到了stopwatch的类,但是有些功能自定义起来不太好,比如自定义标记的名称一类,而且split方法也有点不顺手,所以产生了自己写一个简单的时间计数器。 语言使用groovy写的,java框架可以使用。 v1.0已经完成,目前只有一些简单的功能,下一步打算弄一下多线程使用兼容问题。 package com.fun.utilsimport com.fun.frame.SourceCodeimport org.slf4j.LoggerFactoryimport java.text.DecimalFormat/** * 时间观察者类,用于简单记录执行时间 */class TimeWatch extends SourceCode { static def logger = LoggerFactory.getLogger(TimeWatch.class)/** * 默认的名称 */ def name = "default"/** * 纳秒 */ def startTime /** * 标记集合 */ def marks = new HashMap<String, Mark>() /** * 毫秒 */ def startTimeMillis/** * 无参创建方法,默认名称 * @return */ public static TimeWatch create() { final TimeWatch timeWatch = new TimeWatch() timeWatch.start() return timeWatch }/** * 创建方法 * @param name * @return */ public static TimeWatch create(def name) { final TimeWatch timeWatch = new TimeWatch() timeWatch.start() return timeWatch } private TimeWatch() { }/** * 开始记录 * @return */ def start() { reset() }/** * 重置 */ def reset() { startTime = getNanoMark() startTimeMillis = Time.getTimeStamp() }/** * 标记 * @param name * @return */ def mark(def name) { marks.put(name, new Mark(name)) }/** * 标记 * @return */ def mark() { marks.put(name, new Mark(name)) }/** * 获取标记时间 * @return */ def getMarkTime() { if (marks.containsKey(name)) { def diff = Time.getTimeStamp() - marks.get(name).getStartTimeMillis() logger.info(LINE + "观察者:{}的标记:{}记录时间:{} ms", name, name, diff) } else { logger.warn("没有默认标记!") } }/** * 获取标记时间 * @return */ def getMarkNanoTime() { if (marks.containsKey(name)) { def diff = getNanoMark() - marks.get(name).getStartTime() logger.info(LINE + "观察者:{}的标记:{}记录时间:{} ns", name, name, diff) } else { logger.warn("没有默认标记!") } }/** * 获取某个标记的记录时间 * @param name * @return */ def getMarkTime(String name) { if (marks.containsKey(name)) { def diff = Time.getTimeStamp() - marks.get(name).getStartTimeMillis() logger.info(LINE + "观察者:{}的标记:{}记录时间:{} ms", name, name, diff) } else { logger.warn("没有{}标记!", name) } }/** * 获取某个标记的记录时间 * @param name * @return */ def getMarkNanoTime(String name) { if (marks.containsKey(name)) { def diff = getNanoMark() - marks.get(name).getStartTime() logger.info(LINE + "观察者:{}的标记:{}记录时间:{} ns", name, name, diff) } else { logger.warn("没有{}标记!", name) } }/** * 获取记录时间 * @return */ def getTime() { def diff = Time.getTimeStamp() - startTimeMillis logger.info(LINE + "观察者:{},记录时间:{} ms", getName(), diff) return diff }/** * 获取记录时间纳秒 * @return */ def getNanoTime() { long diff = getNanoMark() - startTime DecimalFormat format = new DecimalFormat("#,###") logger.info(LINE + "观察者:{},记录时间:{} ns", getName(), format.format(diff)) return diff } @Override public String toString() { return "时间观察者:" + this.name } @Override public TimeWatch clone() { def watch = new TimeWatch() watch.name = getName() + "_c" watch.startTime = getStartTime() watch.startTimeMillis = getStartTimeMillis() return watch }/** * 标记类 */ class Mark { public Mark(def name) { this.name = name reset() } def name def startTime def startTimeMillis def lastTime def l def reset() { this.startTime = getNanoMark() this.startTimeMillis = Time.getTimeStamp() } }}groovy是一种基于JVM的动态语言,我觉得最大的优势有两点,第一:于java兼容性非常好,大部分时候吧groovy的文件后缀改成java直接可以用,反之亦然。java的绝大部分库,groovy都是可以直接拿来就用的。这还带来了另外一个有点,学习成本低,非常低,直接上手没问题,可以慢慢学习groovy不同于Java的语法;第二:编译器支持变得更好,现在用的intellij的ide,总体来说已经比较好的支持groovy语言了,写起代码来也是比较顺滑了,各种基于groovy的框架工具也比较溜,特别是Gradle构建工具,比Maven爽很多。----此段文字为了撑字数强加的,与内容无关。欢迎有兴趣的童鞋一起交流 ...

July 14, 2019 · 2 min · jiezi

Solo支付宝开源的Android专项测试工具

1.前言近年来,随着移动互联网的蓬勃发展,移动测试技术也取得了长足的进步,从早期基于测试脚本的单机自动化,到录制回放、图像识别、云测平台等测试技术贴合实际业务需求深度应用和创新,测试效率从而一次又一次被提升。 本文主要介绍支付宝在移动端上实现的一套无线化、非侵入、免 Root 的 Android 专项测试方案 Solo。直接操控手机,即可实现自动化的功能、性能、兼容性、以及稳定性测试等工作。 1.1 移动测试 1.0 时代 移动测试 1.0 时代,也可以称之为探索期。由于厌倦了日复一日的手工操作,如何提升测试效率成为了移动测试领域最重要的课题,在此期间,除了 Monkey、UiAutomator、Instruments 等官方提供的工具,业界还涌现了一批优秀的开源自动化测试工具/框架,在自动化驱动能力的基础之上,不仅可以实现基本功能的验证,还可以结合性能采集方案、遍历算法等实现各类专项测试的自动化。在这个阶段,自动化测试的常见形态是在单机或本地少数几台 PC 上部署测试环境,再利用 Jenkins 等工具实现持续集成。 1.2 移动测试 2.0 时代 伴随着测试技术的持续发展、又得益于 STF 的开源,业界开始出现了云测平台的概念,将真机设备、任务管理、自动化框架以及专项测试方案打包在平台中作为服务提供出去,给用户带来了一站式的测试体验。另一方面,远程调试、设备调度等技术的引入极大的提升了设备的利用率,测试人员不再需要为缺少测试设备或测试任务排队耗时而担心。对于云测平台用户而言,在此阶段常见的测试形态是:在本地 PC 上开发测试脚本,再上传至云测平台执行,最后可在平台中查看测试报告,测试流程简单且清晰。 1.3 移动测试 2.0+ 在保留了上述“云测”的玩法之外,移动测试 2.0+ 时代下的测试技术提供的往往不再是某一个独立的小工具,更多的是带来一套完整的解决方案,例如为用户提供一套定制化的 IDE 环境,结合录制回放、图像识别等技术,用户可能只需要做一些简单的框选、拖拽就能完成测试脚本的开发。另一方面,由于办公环境、硬件条件等因素的限制,越来越多的测试人员希望可以在移动端上直接发起测试,做到移动测试“移动测”。当然,无论是云端、IDE 端、还是移动端,都应该做到能力互通,即“多端多通”,这样才能让测试方案更加灵活、适用于更多场景。 2.无线驱动的Android专项测试方案:Solo“多端多通”的概念比较广,仅凭一篇文章可能无法阐述清楚,所以下面将会重点介绍为了迎接“移动 2.0+”时代,我们在移动端上实现的一套无线化、非侵入、免 Root 的 Android 专项测试方案 Solo。直接操控手机,即可实现自动化的功能、性能、兼容性、以及稳定性测试等工作。 2.1 整体架构 这套方案中,底层依赖主要是“无线 ADB、系统辅助功能、Chrome 调试以及图像识别技术”,后文将会介绍它们具体的应用场景。同时,在底层依赖的基础上,我们封装了一套核心能力,由“控件定位、事件驱动、性能采集以及依赖注入”组成,并在服务层实现了录制、回放、数据处理等公共服务能力。在架构的最顶端,结合界面交互逻辑包装出了各个功能的入口。 2.2 无线 ADB 大家都知道,对于 Android 自动化,ADB shell 的执行能力是一切的基础。 在 PC 上,通过 Android SDK 提供的ADB client 与同样运行于 PC 中的 ADB server 通信,再由 ADB server 通过 USB 与位于设备中的 Adbd 通信。要实现一套无线化的方案,必须要摆脱对 USB 线的依赖。好在 Android 系统还提供了一种基于 Socket 的 ADB 连接模式,既然是这样,那么只需要按照 ADB 通信协议在端上与本机的 5555 端口进行通信即可获得 ADB shell 的执行能力。 ...

July 12, 2019 · 2 min · jiezi

OceanBase数据库实践入门性能测试建议

概述本文主要分享针对想压测OceanBase时需要了解的一些技术原理。这些建议可以帮助用户对OceanBase做一些调优,再结合测试程序快速找到适合业务的最佳性能。由于OceanBase自身参数很多、部署形态也比较灵活,这里并没有给出具体步骤。 数据库读写特点压测的本质就是对一个会话的逻辑设计很高的并发。首先需要了解单个会话在数据库内部的读写逻辑。比如说,业务会话1对数据库发起一个DML SQL,第一次修改某笔记录,数据库会怎么做呢? 为了便于理解OB的行为,我们先看看ORACLE是怎么做的。后面有对比才可以加深理解。 ORACLE 读写特点ORACLE会话第一次修改一行记录,如果该记录所在块(8K大小)不在内存(Buffer Cache)里时会先从磁盘文件里读入到内存里。这个称为一次物理读,为了性能考虑,ORACLE一次会连续读取相邻的多个块。然后就直接在该块上修改,修改之前会先记录REDO和UNDO(包括UNDO的REDO)。然后这个数据块就是脏块(Dirty Block)。假设事务没有提交,其他会话又来读取这个记录,由于隔离级别是读已提交(READ COMMITTED),ORACLE会在内存里克隆当前数据块到新的位置,新块包含了最新的未提交数据。然后ORACLE在新块上逆向应用UNDO链表中的记录,将数据块回滚到读需要的那个版本(SCN),然后才能读。这个也称为一次一致性读(Consistency Read),这个新块也称为CR块。 即使是修改一条记录一个字段的几个字节,整个块(8K大小)都会是脏块。随着业务持续写入,大量脏块会消耗数据库内存。所以ORACLE会有多重机制刷脏块到磁盘数据文件上。在事务日志切换的时候也会触发刷脏块操作。如果业务压力测试ORACLE,大量的写导致事务日志切换很频繁,对应的刷脏操作可能相对慢了,就会阻塞日志切换,也就阻塞了业务写入。这就是ORACLE的特点。解决办法就是加大事务日志文件,增加事务日志成员或者用更快的磁盘存放事务日志和数据文件。 ORACLE里一个表就是一个Segment(如果有大对象列还会有独立的Segment,这个先忽略),Segment由多个不一定连续的extent组成,extent由连续的Block(每个大小默认8K)组成,extent缺点是可能会在后期由于频繁删除和插入产生空间碎片。 OceanBase 读写特点OceanBase会话第一次修改一行记录,如果该记录所在块(64K大小)不在内存(Block Cache)里时也会先从磁盘文件里读入到内存里。这个称为一次物理读。然后要修改时跟ORACLE做法不同的是,OceanBase会新申请一小块内存用于存放修改的内容,并且链接到前面Block Cache里该行记录所在块的那笔记录下。如果修改多次,每次修改都跟前面修改以链表形式关联。同样在修改之前也要先在内存里记录REDO。每次修改都会记录一个内部版本号,记录的每个版本就是一个增量。其他会话读取的时候会先从Block Cache中该记录最早读入的那个版本(称为基线版本)开始读,然后叠加应用后面的增量版本直到合适的版本(类似ORACLE中SCN概念)。(随着版本演进,这里细节逻辑可能会有变化。) OB的这个读方式简单说就是从最早的版本读起,逐步应用增量(类似REDO,但跟REDO日志无关)。而ORACLE一致性读是从最新的版本读起,逐步回滚(应用UNDO)。在OB里,没有UNDO。当版本链路很长时,OB的读性能会略下降,所以OB也有个checkpoint线程定时将记录的多个版本合并为少数几个版本。这个合并称为小合并(minor compaction)。此外,OB在内存里针对行记录还有缓存, 从上面过程还可以看出,每次修改几个字节,在内存里的变脏的块只有增量版本所在的块(默认写满才会重新申请内存),基线数据块是一直不变化。所以OB里脏块产生的速度非常小,脏块就可以在内存里保存更久的时间。实际上OB的设计就是脏块默认不刷盘。那如果机器挂了,会不会丢数据呢? OB跟ORACLE一样,修改数据块之前会先记录REDO,在事务提交的时候,REDO要先写到磁盘上(REDO同时还会发送往其他两个副本节点,这个先忽略)。有REDO在,就不怕丢数据。此外,增量部分每天还是会落盘一次。在落盘之前,内存中的基线数据和相关的增量数据会在内存里进行一次合并(称Merge),最终以SSTable的格式写回到磁盘。如果说内存里块内部产生碎片,在合并的那一刻,这个碎片空间基本被消弭掉了。所以说OB的数据文件空间碎片很小,不需要做碎片整理。同时OB的这个设计也极大降低了LSM的写放大问题。 当业务压测写OB时,脏块的量也会增长,最终达到增量内存限制,这时候业务就无法写入,需要OB做合并释放内存。OB的合并比较耗IO、CPU(有参数可以控制合并力度),并且也不会等到内存用尽才合并,实际会设置一个阈值。同时为了规避合并,设计了一个转储机制。当增量内存使用率超过阈值后,就开启转储。转储就是直接把增量内存写到磁盘上(不合并)。转储对性能的影响很小,可以高峰期发生,并且可以转储多次(参数配置)。 OB增量内存就类似一个水池,业务写是进水管在放水, 转储和大合并是出水管。水位就是当前增量内存使用率。当进水的速度快于出水,池子可能就会满。这时候业务写入就会报内存不足的错误。这就是OB读写的特点,解决方法就是加大OB内存、或者允许OB自动对业务写入速度限流。 OceanBase部署建议OB 在commit的时候redo落盘会写磁盘。读数据的时候内存未命中的时候会有物理读,转储和大合并的时候落盘会有密集型写IO。这些都依赖磁盘读写性能。所以建议磁盘都是SSD盘,并且建议日志盘和数据盘使用独立的文件系统。如果是NVME接口的闪存卡或者大容量SSD盘,那日志盘和数据盘放在一起也可以。不要使用LVM对NVME接口的大容量SSD做划分,那样瓶颈可能会在LVM自身。 OB的增量通常都在内存里,内存不足的时候会有转储,可以转储多次。尽管如此,建议测试机器的内存不要太小,防止频繁的增量转储。通常建议192G内存以上。 OB集群的节点数至少要有三个。如果是功能了解,在单机上起3个OB进程模拟三节点是可以的,但是如果是性能测试,那建议还是使用三台同等规格的物理机比较合适。机器规格不一致时,最小能力的机器可能会制约整个集群的性能。 OceanBase集群的手动部署请参考《OceanBase数据库实践入门——手动搭建OceanBase集群》。在部署好OceanBase之后,建议先简单了解一下OceanBase的使用方法,详情请参考文章《OceanBase数据库实践入门——常用操作SQL》。 如果要验证OB的弹性缩容、水平扩展能力,建议至少要6节点(部署形态2-2-2)。并且测试租户(实例)的每个Zone里的资源单元数量至少也要为2个,才可以发挥多机能力。这是因为OB是多租户设计,对资源的管理比较类似云数据库思想,所以里面设计有点精妙,详情请参见《揭秘OceanBase的弹性伸缩和负载均衡原理》。 下面是一个租户的测试租户资源初始化建议 登录sys租户create resource unit S1, max_cpu=2, max_memory='10G', min_memory='10G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size=536870912;create resource unit S2, max_cpu=4, max_memory='20G', min_memory='20G', max_iops=20000, min_iops=5000, max_session_num=1000000, max_disk_size=1073741824;create resource unit S3, max_cpu=8, max_memory='40G', min_memory='40G', max_iops=50000, min_iops=10000, max_session_num=1000000, max_disk_size=2147483648;select * from __all_unit_config;create resource pool pool_demo unit = 'S2', unit_num = 2;select * from __all_resource_pool order by resource_pool_id desc ;create tenant t_obdemo resource_pool_list=('pool_demo');alter tenant t_obdemo set variables ob_tcp_invited_nodes='%';请注意上面的unit_num=2这个很关键。如果unit_num=1,OB会认为这个租户是个小租户,后面负载均衡处理时会有个默认规则。 ...

June 19, 2019 · 2 min · jiezi

性能测试解读

背景介绍项目越做越大,用户量和请数量可能随时发生井喷,如果等到系统崩溃时再补救,损失可就大了,所以得想个办法提前预防。 想要预防,就得知道系统的哪个环比较节薄弱,顶不住压力,还要对系统的承受能力有个全面的评估,心里有底,好提前预防,这种评估分析预防优化等一系列手段全被性能测试涵盖在内。 性能的指标不同角色对性能的理解不尽相同,对于用户来说,操作流不流畅就是性能,对于研发人员来说,接口慢不慢和顶不顶得住并发就是性能,对于运维人员来说,网络带宽大小和资源占用高低就是性能。 那就必要统一性能指标了,首先,用户与研发人员都关注速度,实际上是接口的处理速度,再细一些是客户端发起请求到收到服务端返回的时间,那就把这个指标定为响应时间吧。 我们做一款产品最需要的就是用户,用户越多越好,但随着用户量地增加,同时发起操作的用户也越来越多,一时之间服务器可能要处理上万的请求,在这同一时刻处理的请求数就叫做并发数,不知何时起,处理过高并发的人成为了大家眼中的瑰宝,而并发数也成为了产品做大做强的标志,所以并发数也要列入性能的指标。 并发数只能代表同时请求的数量很多,但并没有赋予太多含义,与他人谈论时也无法让人整体把握系统的概况,所以需要将并发数进行变种以应对不同业务不同场景的描述,比如一天有多少人访问,一个小时能处理多少业务,每秒处理的事务数(TPS),每秒HTTP的请求数(HPS),每秒查询数(QPS)等等,这个指标我们为其命名为吞吐量。 除此之外,还要满足运维人员的要求,他们需要根据系统负载、内存占用、CPU占用、网络磁盘I/O等各项指标进行分析,以便于为扩容做准备,这种一系列的硬件指标我们统称为性能计数器。 简单说明一下系统负载,它是指CPU当前正在执行的与等待执行的进程数总和,该数量可以体现出系统是否繁忙,我们最希望看到的是没有进程排队等候,所以最理想的负载数量就是CPU的数量。 四种测试类型我们在开发时会对系统的性能有个初步的预期,然后通过模拟请求程序逐步加大请求压力,直到你认为服务器资源的消耗已经无法接受了,此时再观察系统性能是否达到了预期,这种方式就是性能测试。注意,名称虽与上述重复但不是一个概念。 我们继续加大请求压力,直到服务器的某个资源已经达到饱和了,或者性能计数器中的某个指标达到了安全临界值,简单地说,再请求下去,系统的处理能力不但不能提高,反而会下降了。这种测试方式叫做负载测试。 还可以继续加大压力,不去管资源和性能指标如何,就疯狂请求,不停地请求,直到服务器崩溃,不能再继续工作了,这个时候就测出了系统最大承受能力测试。 ![图片上传中...] 没办法再继续施压了,因为服务器已经没有响应,那就模拟一些比较真实的场景吧,因为真实场景下的请求压力是不均匀的,我们可以在特定环境、硬件和时间下给系统一定压力,看看业务是否能稳定性测试。 ![图片上传中...] 优化手段因为一个完整的WEB请求包含前端和后端两个部分,优化手段也从这两部分出发。 WEB前端优化减少请求。现在大部分请求使用的是HTTP1,每个图片、脚本以及样式等资源的获取都要客户端单独跑线程建立连接,资源过多时消耗会很大,可以将不同类型的资源各整合至一个文件,这样少量的请求就能拿到需要的数据。 浏览器缓存。因为图片、脚本、样式等资源使用频率很低,没有必要每次请求都重新下载,可以通过设置HTTP的头部信息将资源缓存起来,这样可以有效降低加载速度,被缓存的资源需要更新时,可以通过修改资源文件名称的方式让浏览器重新下载。 压缩。图片、脚本、样式等静态资源一般都比较大,服务端可以将资源文件进行压缩,压缩后的文件较小,下载速度也会变快,但是前后解压缩文件会造成一定的压力,所以压缩手段要视业务情况而定。 CSS与JS顺序。因为浏览器会加载完所有的CSS后才去渲染页面,所以应该将样式文件放在上面加载。而JS刚好相反,浏览器刚加载完JS就会执行,如果放在前面会出现页面卡顿的现象,所以脚本文件应该放到页面最后加载。 CDN加速。原理与浏览器缓存类似,可以通过运营商将样式、脚本、图片等资源文件缓存到离用户最近的节点上,这样用户在发起请求时就能直接在最近的节点上找到需要的静态资源。 反向代理。在客户端与要交互的那台真实服务器中间再加一台服务器,所有的请求都由这台机器转发,当客户端第一次请求资源时将资源缓存到反向代理服务器,其他客户端就可以直接在反向代理服务器拿到资源,节省了转发的时间。 服务端优化缓存。与前端一样,缓存是性能优化考虑的第一要素,目前流行的NoSQL数据库都是在内存读取的,速度会快,可以将读写频率很高但很少发生变化的数据放入缓存,可以有效提升系统吞吐量。 异步。像日志记录这种一定要去做但不需要等它做完的逻辑,应该把它放到消息队列当中,再由消费者进程逐条读取消息队列中的数据,慢慢执行,就像医院的排队取号,可以有效解决瞬时并发较大的业务场景。 集群。因为单台机器的处理能力有限,如果并发请求量过大,可能无法承受,可以加一些机器分担其压力,使得请求平均分配到每台机器上,这些由相同功能组成的机器群就是集群。 优化代码。不能秉着技术不够机器来凑的原则,回到实际代码当中来,多数性能问题还是代码写的不够优秀,比如三条语句能搞定的数据,查了十多条,几十行代码算出的变量,却没有地方使用,用不到的数据表联了又联等。 本文主要从概念和方法方面着手,意在科普知识,并没有实践案例,如果本文对你有帮助欢迎关注我们后续的文章。

June 15, 2019 · 1 min · jiezi

测试工程师必备这7个手机测试技能

移动应用安全近几年越来越被重视,目前针对移动端的应用也越来越多,每天有大量的数据从移动端发出,部分数据在移动端进行处理,移动应用安全在今天显得尤为重要,那么如何能及时发掘移动APP的潜在漏洞,以免被攻击者利用造成破坏呢,渗透测试是目前发掘漏洞的有效方法。一、交叉测试 又叫事件或冲突测试,是指一个功能正在执行过程中,同时另外一个事件或操作对该过程进行干扰的测试。 例如通话过程中接收到短信或闹铃触发,应用软件运行过程中插拔充电器等。执行干扰的冲突事件不能导致应用软件异常、手机死机或花屏等严重问题。另外,还需要注意各交叉事件的优先级别,检验系统是否能依据各事件的优先级别依次进行处理。不能因执行优先级别高的事件而导致优先级较低的事件吊死。 交叉事件测试非常重要,一般能发现应用软件中一些潜在的问题。另外有中英文模式切换的手机要注意中英文模式切换后的功能实现存在的问题(这个主要针对手机应用软件支持语言自适应功能),这一点通常会被测试人员忽略。 二、易用性/用户体验测试 易用性(Useability)/用户体验是指在指定条件下使用时,软件产品被理解、学习、使用和吸引用户的能力,是交互的适应性、功能性和有效性的集中体现。 手机操作主要依赖拇指,所以交互过程中不能设计的太复杂,交互步骤不能太多,应该尽量设计多点快捷方式,易用是对终端软件(推而广之是交互类软件)最基本、最重要的要求。 不好用的软件很难吸引用户,更别提提升用户对软件的忠诚度了。 易用性体现在:所见即所得、一用便知、一学就会,方便快捷的完成预期功能。易用的软件能让一个新用户快速学习、使用我们的软件,并在使用软件过程中体现我们的贴心服务,超出用户预期的体现是我们追求的目标。 三、功能测试 首先应分析功能模块的功能项,测试每个功能项是否能够实现对应的功能。一般根据测试用例(Test Case)或软件本身的流程就可以完成基本功能测试(相对简单,故障也较容易发现、解决)。 **获取最新测试相关资料,视频,工具等你来领百度云获取资料点他????链接: 提取码: esyd** 四 、压力测试又叫边界值容错测试或极限负载测试。即测试过程中,已经达到某一软件功能的最大容量、边界值或最大的承载极限,仍然对其进行相关操作。例如连续进行短信的接收和发送,超过收件箱和SIM卡所能存储的最大条数,仍然进行短消息的接收或发送,以此来检测软件在超常态条件下的表现,进而评估用户能否接受。 对手机可以施加的压力测试类型主要有: 1)存储压力由于手机采用的是栈式存储,所以当一个存储块满了之后,如果程序员不做相应处理或者处理不好的话,很容易造成其他存储区被擦除,从而在UI上出现问题(比如其他功能无法正常使用,出现异常)。 2)边界压力边界处理一直是程序员最容易忽略的地方。 3)响应能力压力有时候某个操作可能处理的时间很长,在处理期间如果测试者再不断地进行其他操作的话,很容易出现问题。 4)网络流量压力执行较大数据流量的功能的同时,再进行其他功能操作,使得网络流量始终处于很高的状态(如视频通话时再进行短信等其他功能操作),验证各功能是否依然能正常工作,是否存在因网络流量瓶颈而引起某功能异常。 压力测试用手工测试可能很繁锁,可以考虑自动化测试。遗憾的是,目前还没有较为大量使用的工具,一般都是由开发人员配合开发出的工具,或者高级的测试人员编写出的脚本。 五、兼容性测试也就是不同品牌、款型的手机(针对目前我们产品来说,主要是针对不同品牌、款型的手机上的测试),不同网络,不同品牌和不同容量大小的SIM卡之间的互相兼容的测试。不同型号的手机支持的图片格式、声音格式、动画格式不一样,需要选择尽可能通用的格式,或者针对不同的型号进行配置选择。以短消息为例:中国电信的小灵通接收到从中国移动或中国联通GSM发来的短消息,需要验证显示和回复功能是否正常等。再比如,应用软件分别在OPPO R7、OPPO A3手机上运行,各功能是否均能正常使用,界面是否均显示正常等。**获取最新测试相关资料,视频,工具等你来领百度云获取资料点他????链接: 提取码: esyd** 六、暴力测试断电,重启,断网等意外情况发生时,处理是否正确 七、容量测试即存储空间已满时的测试,包括手机用户可用内存和SIM卡的所有空间被完全使用的测试。此时再对可编辑的模块进行和存储空间有关的任何操作测试,如果软件在极限容量状态下处理不好,有可能导致死机或严重的花屏等问题的出现。 以上建议仅供参考!【乐搏软件测试】【乐搏学院】如有侵权请联系,立即删除

April 28, 2019 · 1 min · jiezi

优秀自动化测试工程师的学习方法和逻辑经历分享

结合了工作经验,写出了这篇文章,是从功能测试转向自动化测试的学习过程。用您5分钟时间阅读完,希望能对您有帮助! 什么是自动化测试? 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。 为什么做测试自动化? 1)对个人来说随着时代科技的进步,越来越多的工作偏向于了自动化,软件测试当然也不例外。从发展的趋势来说,只有不断的提升自己,面对各种变化,才可以追上科技的进步。手动测试虽然是基础,但是企业不会在乎你的过程。只有高效率的工作才会让企业觉得你更有价值。自动化测试是软件测试的主流,也是软件测试的高薪专场! 2)对企业来说为什么企业做自动化测试,从现在的情况来看,互联网需求迭代非常快,人员流动性非常大,所以工作时间比较紧迫,要在规定时间内提高工作效率,所以一个需求从提出到上线时间比较紧急,同时对于其影响的范围也可能不太清楚,在上线之前必须对原有功能进行回归测试。不管是接口还是从客户端,都需要大量的测试工作,而且在大数据时代,测试用例量也是非常庞大的,如此繁复单调的工作让人工来测试的话,根本不能保证效率和质量,所以必须要借助于非人工手段来实现。 怎么才能算合格的测试工程师呢? 自动化测试工程师细分可以有UI自动化测试工程师,APP自动化测试工程师、接口自动化测试工程师等等。 首先,掌握一门编程语言,应该以Java或者python为主,虽然什么语言都可以用来做自动化测试,但毕竟这个两个是最流行的,如果想成为自动化测试工程师里,最主流的测试工程师,还是强烈推荐大家选择这两门语言。 然后,掌握主流的框架,如:selenium,appium,monkey,monkeyrunner之类的,基本上掌握了这个几个APP和UI自动化都可以玩的转了。 自动化测试工具有好多种,分享给大家这些,希望对你能有帮助! **获取最新测试相关资料,视频,工具等你来领百度云获取工具点他????链接: 提取码: esyd** 1、SoapUI-接口测试 SoapUI是一个非常流行的用于SOAP和REST的开源API测试自动化框架。它还支持功能测试、性能测试、数据驱动测试和测试报告。 2、QTP-WebUI自动化测试 QTP是一种自动测试工具。使用 QTP 的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等。QTP针对的是GUI应用程序,包括传统的Windows应用程序,以及现在越来越流行的Web应用。它可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。其中包括:创建测试、插入检查点、检验数据、增强测试、运行测试、分析结果和维护测试等方面。 3、Postman-接口测试 Postman 提供功能强大的Web API和HTTP请求的调试,它能够发送任何类型的HTTP请求 (GET, POST, PUT, DELETE…),并且能附带任何数量的参数和Headers。不仅如此,它还提供测试数据和环境配置数据的导入导出,付费的Post Cloud用户还能够创建自己的 Team Library用来团队协作式的测试,并能够将自己的测试收藏夹和用例数据分享给团队。**获取最新测试相关资料,视频,工具等你来领百度云获取工具点他????链接: 提取码: esyd** 4、Monkey-稳定性测试 软件附带在sdk中,适用于android和ios,通过adb shell,生成用户或系统的伪随机事件。压力测试结果:崩溃crash,无响应anr,基本命令:adb shell monkey 1000。 5、Jmeter-接口测试,性能测试 Apache JMeter是一个开源的Java桌面应用程序,主要用于web应用程序的负载测试。它还支持单元测试和有限的功能测试。它有很多好的特性,比如动态报告、可移植性、强大的测试IDE等,并且支持不同类型的应用程序、协议、shell脚本、Java对象和数据库。 6、Robot Framework-WebUI自动化测试,接口测试 Robot Framework是一个开源自动化框架,它实现了用于验收测试和验收测试驱动开发(ATDD)的关键字驱动方法。Robot Framework为不同的测试自动化需求提供框架。但是,通过使用Python和Java实现其他测试库,可以进一步扩展其测试功能。Selenium WebDriver是Robot Framework中常用的外部库。测试工程师可以利用Robot Framework作为自动化框架,不仅可以进行Web测试,还可以用于Android和iOS测试自动化。对于熟悉关键字驱动测试的测试人员,可以轻松学习Robot Framework。 7、LoadRunner-性能测试 LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。LoadRunner可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。 以上建议仅供参考!【乐搏软件测试】【乐搏学院】如有侵权请联系删除

April 26, 2019 · 1 min · jiezi

web测试流程及注意事项经验干货整理分享

结合了工作经验,写出了这篇文章,全是干货和经验分享。用您5分钟时间阅读完,希望能对您有帮助!相信很多人都喜欢用浏览器看网页,虽然网民不是专业人员,但是对界面效果的印象是很重要的。如果你注重这方面的测试,那么验证应用程序是否易于使用就非常重要了。很多人认为这是测试中最不重要的部分,但是恰恰相反界面对不懂技术的客户来说那相当关键,慢慢体会就会明白的。 Web界面设计中,对各种元素(如按钮、单选框、复选框、列表框、超连接、输入框等等)的设计是非常重要的。一、搜索功能 若查询条件为输入框,则参考输入框对应类型的测试方法 1、功能实现: (1)如果支持模糊查询,搜索名称中任意一个字符是否能搜索到 (2)比较长的名称是否能查到 (3)输入系统中不存在的与之匹配的条件 (4)用户进行查询操作时,一般情况是不进行查询条件的清空,除非需求特殊说明。 2、组合测试: (1)不同查询条件之间来回选择,是否出现页面错误(单选框和多选框最容易出错) (2)测试多个查询条件时,要注意查询条件的组合测试,可能不同组合的测试会报错。 二、添加、修改功能 1、特殊键:(1)是否支持Tab键 (2)是否支持回车键 2、提示信息: 不符合要求的地方是否有错误提示 3、唯一性: 字段唯一的,是否可以重复添加,添加后是否能修改为已存在的字段(字段包括区分大小写以及在输入的内容前后输入空格,保存后,数据是否真的插入到数据库中,注意保存后数据的正确性) 4、数据 正确性: (1)对编辑页的每个编辑项进行修改,点击保存,是否可以保存成功,检查想关联的数据是否得到更新。 (2)进行必填项检查(即是否给出提示以及提示后是否依然把数据存到数据库中;是否提示后出现页码错乱等) (3)是否能够连续添加(针对特殊情况) (4)在编辑的时候,注意编辑项的长度限制,有时在添加的时候有,在编辑的时候却没(注意要添加和修改规则是否一致) (5)对于有图片上传功能的编辑框,若不上传图片,查看编辑页面时是否显示有默认的图片,若上传图片,查看是否显示为上传图片 (6)修改后增加数据后,特别要注意查询页面的数据是否及时更新,特别是在首页时要注意数据的更新。 (7)提交数据时,连续多次点击,查看系统会不会连续增加几条相同的数据或报错。 (8)若结果列表中没有记录或者没选择某条记录,点击修改按钮,系统会抛异常。 三、删除功能 1、特殊键:(1)是否支持Tab键 (2)是否支持回车键2、提示信息:(1)不选择任何信息,直接点击删除按钮,是否有提示(2)删除某条信息时,应该有确认提示3、数据 实现:(1)是否能连续删除多个产品(2)当只有一条数据时,是否可以删除成功 (3)删除一条数据后,是否可以添加相同的数据(4)如系统支持批量删除,注意删除的信息是否正确 (5)如有全选,注意是否把所有的数据删除(6)删除数据时,要注意相应查询页面的数据是否及时更新 (7)如删除的数据与其他业务数据关联,要注意其关联性(如删除部门信息时,部门下游员工,则应该给出提示)(8)如果结果列表中没有记录或没有选择任何一条记录,点击删除按钮系统会报错。 四、输入框 1、字符型输入框 (1)字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,使用“粘贴、拷贝”功能尝试输入。 (2)长度检查:最小长度、最大长度、最小长度-1、最大长度+1、输入超工字符比如把整个文章拷贝过去。 (3)空格检查:输入的字符间有空格、字符前有空格、字符后有空格、字符前后有空格 (4)多行文本框输入:允许回车换行、保存后再显示能够保存输入的格式、仅输入回车换行,检查能否正确保存(若能,检查保存结果,若不能,查看是否有正常提示) (5)安全性检查:输入特殊字符串(null,NULL, ,javascript,<script>,</script>,<title>,<html>,<td>)输入脚本函数(<script>alert("abc")</script>)、doucment.write("abc")、hello) 2、数值型输入框 (1)边界值:最大值、最小值、最大值+1、最小值-1 (2)位数:最小位数、最大位数、最小位数-1最大位数+1、输入超长值、输入整数 (3)异常值、特殊字符:输入空白(NULL)、空格或"~!@#$%^&*()_+{}|[]:"<>?;',./?;:'-=等可能导致系统错误的字符、禁止直接输入特殊字符时,尝试使用粘贴拷贝查看是否能正常提交、word中的特殊功能,通过剪贴板拷贝到输入框,分页符,分节符类似公式的上下标等、数值的特殊符号如∑,㏒,㏑,∏,+,-等。输入负整数、负小数、分数、输入字母或汉字、小数(小数前0点舍去的情况,多个小数点的情况)、首位为0的数字如01、02、科学计数法是否支持1.0E2、全角数字与半角数字,数字与字母混合、16进制,8进制数值、货币型输入(允许小数点后面几位)。 (4)安全性检查:不能直接输入就copy 3、日期型输入框: (1)合法性检查:(输入0日、1日、32日)、月输入[1、3、5、7、8、10、12]、日输入[31]、月输入[4、6、9、11]、日输入30、输入非闰年,月输入[2],日期输入[28、29]、输入闰年,月输入[2]、日期输入[29、30]、月输入[0、1、12、13] (2)异常值、特殊字符:输入空白或NULL、输入~!@#¥%……&*(){}[]等可能导致系统错误的字符 (3)安全性检查:不能直接输入,就copy,是否数据检验出错? 4、信息重复在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理. 10G海量软件测试相关资料,视频,工具等你来领 百度云点他????链接 提取码: esyd 五、Web测试注意事项都有哪些!1.页面提示信息 主要是对页面操作结果成功或失败的提示信息,还有用户在做一些关键操作或者是涉及敏感操作时系统是否会有提醒。 2.页面功能部分 (1)页面初始数据是否显示正确 (2)页面数据处理功能是否被正确执行并返回正确结果 (3)对模块的功能测试时可以列出该模块的所有实现功能进行排列组合,比如页面基本的增删改查功能: 增加-->增加-->增加(连续增加测试);增加-->删除-->增加(之前删除内容);修改-->增加(修改之前内容) 3.页面中元素显示 ...

April 23, 2019 · 1 min · jiezi

手把手教你测微信小程序

作者:WeTest小编商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。原文链接:https://wetest.qq.com/lab/vie…WeTest 导读在小程序持续大量爆发的形势下,现在已经成为了各平台竞争的战略布局重点。至今年2月,月活超500万的微信小程序已经达到237个,其中个人开发占比高达2成。因小程序的开发门槛低、传播快、收益高,越来越多的开发者投入了小程序这一领域,由于整体开发水平层次不齐,会碰到越来越多的小程序质量问题。特别是面对电商、零售、旅游、直播等容易有高并发量的行业,会出现“服务器崩溃”、“访问响应缓慢”、“页面操作卡死”、“支付提交失败”等性能问题。那么,应该如何做小程序服务器压测呢?接下来,我们将以电商行业为例,为您介绍如何使用WeTest的压测大师来做微信小程序的压测。首先新建一个测试用例,添加客户端请求,然后根据自身业务需求设计测试模型,最后对微信小程序发起压测。一、场景的需求分析某电商类微信小程序需要压测商品详情和加入购物车页面,根据业务逻辑,首先进入商品详情页,再将商品加入购物车。1、进入商品详情页 1)通过商品id,可以打开不同商品详情页2、加入购物车 1)选择不同商品详情页,将不同商品加入购物车中测试模型如下:二、场景配置的操作步骤接下来为了实现前面的测试需求,我们来介绍下具体步骤:1、登录WeTest平台(wetest.qq.com),在导航栏选择产品>性能测试>服务器性能>进入项目>创建项目(注:创建团队项目可与团队成员共同管理和完成项目)2、在项目首页点击创建测试按钮,选择URL测试来创建用例,示例如下:3、 在客户端请求栏,填写URL地址、选择请求方法。示例如下:压测URL地址:https://top.domain.com/goods/…请求方法:POST说明:该示例中,使用的域名“top.domain.com”,为示例地址,您可以根据真实业务场景填写压测URL。4、在客户端请求栏,填写Header、Body请求参数。1)选择Header页签,填写商品详情接口请求header信息。 2)选择Body页签,填写商品详情接口请求body信息,Header中Content-Typ字段为application/json,故Body是 JSON格式,body上传方法选择raw。5、单击 添加客户端请求 ,填写第二个客户端请求信息。6、为判断“商品加入购物车”是否成功,可设置检查点,选择检查点页签,填写检点信息。1)变量名:填写自定义的变量名称;2)来源:根据变量的返回路径选择Response Header或Response Body,这里我们选择Response Body;3)提取方式:可根据需要自主选择变量的提取方式,这里我们选择 JSON;4)Header名称:当来源为Response Header时需要填写相应的header名称;5)检查规则:根据选择的提取方式填写对应的规则;6)预期值:填写预期服务器返回值;示例如下:商品加入购物车接口成功的返回信息为:{“code”:“100”,“message”:"",“result”:{#加入购物车的对应商品信息},“ver”:“1”},来自Response Body,这里我们自定义变量名为code,提取方式选择 JSON,检查规则为[“code”],预期值为100设置检查点。如图所示:三、场景调试操作步骤1、 定义场景名1)自定义一个场景的名称,平台默认场景名为:默认场景1/2/3……2、上下文/单场景模式选择1)单场景是单独执行这一条URL,设置多个单场景时,多条URL将会并行执行;2)上下文是构建链路性场景,从A到B顺序执行,B的某个值从A的返回内容中提取等。3、设置压力百分比1)设置该场景的压力百分比,当测试模型中有多个场景时,可根据自身业务比例进行分配压力百分比4、点击“调试”按钮进行调试。一般调试时间在5秒至20秒。1)调试结束后,可查看客户端请求的调试详情。四、压力设置步骤场景调试完成后,需要设置并发人数和场景配置等。1、填写并发设置,如图所示:1)起始人数:初始并发10;2)每阶段增加人数:每阶段增加并发为0;3)每阶段持续时间:代表压测时长为1分钟;4)最大人数:最大人数需要大于或等于初始并发;5)发包间隔时间:每次请求收到回包后等待0s,再次发送请求6)超出时间:事务响应时间超过10000ms,记为超时请求7)发包模式:客户端建链后不切换端口,始终在长链接上不断发包2、报告标准阈值设置可以根据项目需求设置阈值,如成功率、响应时间和TPS,最终压测数据与阈值进行比对,若满足条件即测试通过。五、启动压测单击立即执行,即可发起压测(腾讯云用户需在VUM消费确认栏点击确认)WeTest平台针对于服务器性能测试中常出现的技术门槛、配置冗杂、成本高昂等开发者亟待解决的问题,推出“压测大师”服务,包含了“服务器自助压测服务”与“深度性能测试服务”两大功能模块,通过专业级别测试与健全修正方案,协助开发者逐一击破切实难关。点击传送门获取更多压测信息:传送门:https://wetest.qq.com/product…

April 20, 2019 · 1 min · jiezi

“肉瘾”女孩从软件测试工程师到主管的成长感悟

大学是学经济贸易的,由于对测试行业的强烈兴趣,毕业后选择了一家线上教育机构培训软件测试技能。在工作不到两年的时间里,已经从测试员升职到测试主管了。这两年也戒掉了对烤肉类食物的痴迷,从小胖胖锻炼成马甲线女神,这段经历很充实也让我觉得很有成就感。对于学习、工作,积累了许多点点滴滴的自己的经验,希望能帮助到大家走入测试行业:兴趣、知识说实话,我做测试工作的时间不是很长,学完软件测试工程师的课程后,到现在也就是两年多的时间吧,不过,我愿意自己学习和工作中积累起的这些点滴与大家分享。我走入测试行业完全是因为兴趣,兴趣产生学习和工作的热情,真的是一点都不假。从我选择走入这个行业,学习、工作,从测试员到测试主管,我都是快乐的,也很充实,很有成就感。我觉得,在决定走入测试行业后,就要在这方面多做准备和积累,首先要有坚实的测试理论基础,这些知识不仅是学习的时候要学的扎实,在以后的工作中还要继续不断的完善。其次,要有一定的行业知识。毕业后找工作时,有做手机测试的,也有做外包测试的。我做的是ERP产品。大家都知道,ERP (Enterprise ResourcePlanning)就是企业资源计划系统,是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。我在学习测试专业前曾接触到ERP,所以,在毕业的找工作的时候就往这方面发展了。说到找工作,我觉得精心制作简历是一方面,同时还要有灵活的面试技巧。有时还要把在生活中学到的东西应用到面试中去。我记得我第一次去面试的时候比较凑巧,面试前的头天晚上我在电视里刚好看到一个和面试有关的节目,结果,第二天在我自己去面试的时候就被我用到了。当时是在问到薪金待遇时。我觉得这是很多人包括我自己在面试时都会觉得是比较头疼的问题,因为,说的多了,不行;说的少了,也不行。这时,你就要用一些技巧了。这时你可以先试探性的询问对方公司在招聘这个职位的时候是怎么规定的?等你了解了这些后,你再就自己的技术能力来衡量相应薪金的比价,另外就是看这个公司的实力,还有一点就是行业内这个职位的大致待遇情况。这样的话,在你说出你对薪金的要求的时候,如果,应聘的公司较小,但是还是存在一定发展空间而且你也想试试的情况下,你要得工资低,对方会考虑到可能是你已大致了解了公司的实力所以才开出这样的条件,而不是你自己的技术不行;如果你看到这个公司的状况还是比较好的,是家有一定实力的公司,这时,你可以适当抬高自己的身价。我的应聘还是比较顺利的,第一天应聘,第二天就上班了。我记得当时面试的时候大约谈了两个半小时,就一次性面试过关。另外我自己也比较引以自豪的是我是我们公司唯一一个在两个月之内转正的。初来乍到:熟悉环境,尽快融入开始进入公司的时候首先要熟悉公司的环境。在一些大的公司可能会给大家熟悉环境的时间,还会安排一些相应的培训什么的。我当时进的那家公司比较小,没有什么相关的培训,当初只是我们部门经理拿来一些相关的资料,文档,让网管给配置工作环境。不过小公司有小公司的好处,他会很快让你介入到工作当中,给你分配任务。所以,你必须尽快的在一到两周之内熟悉公司各个方面的环境,尤其是人员环境。我觉得人际关系在整个公司里面也是很重要的一方面,夸张一点说甚至是比你的本职工作还要重要的。因为,掌握技术是你智商方面的问题,而与人交往就不是那么简单,因为我们的兴趣、爱好可能差别很大,性格也有内向和外向的,所以在进入社会步入工作岗位后与人交往真的是很考验一个人。如果你在公司人际关系搞得好的话,工作各方面的协调顺利,工作的进展也会很顺利。还有就是要尽快的熟悉公司的测试环境,操作系统、开发语言、平台,接着就是要了解公司的产品,掌握产品相关的知识。像我们公司是自己研发的经销群、财务这样的一个系统。你要了解公司产品的时候,可以向产品研发部,或设计部要些相关的说明文档,尽快的介入这个行业,熟悉自己要做的测试项目。说实话,我是学习经贸专业的,不是学计算机的,所以我当初的时候有点晕,我就直接拿着产品自己在那儿摸索,自己写出一个产品使用说明。向这样的事情,可能在大的公司会有专门的配选,在小公司可能就要自己学习产品了。不过,我觉得这样是挺锻炼人的,又发掘了你另一方面的潜能呢。尽可能多的参加研发部的会议员工间的技术交流。在我们公司像这样的会一周大概要有一到两次,大家相互交流工作进展情况,或者是一些相关的技术方面的交流。不一定是非常正式的,但我感觉这样的会议是非常有必要的。还有就是公司研发部召开的会议,你也要一定要也应该的介入、参加。我当初介入最早的是他们的研发意向,然后他的一些需求调研啊,还有其他的一些设计啊等等一些会议。像这样的会议我觉得是一定要抽出时间来参加的,因为这确实是对你的工作有很大的帮助的。因为在立项会议上,你可以了解项目的可操作性,以及项目的特点;在调研会议上,了解需求,市场需求是开发的依据,也是测试的依据。同时一定要参加需求更改会议,以便你更好的进行测试工作。在这些都做到位后,我们就开始写测试计划了。测试计划写测试计划就像我们在课堂上学到的那些,测试计划、测试用例,开始我们的测试流程。这时就是具体应用的时候。写测试计划的时候要跟研发部要详细设计文档、产品规格说明书和需求调研的说明(产品使用说明)这样的相关文档。如果在大公司的话,他的设计部会写产品使用说明或者是一些测试规约。还有就是一定要他的开发计划,因为你做每一步测试是根据开发进度来进行的,开发计划是必不可少的。最后根据上述的文档,从时间、内容、资源、所用工具,还有人力安排,这样一份简单的测试计划已经成形。像一般小的公司,他会对哪个人在哪天完成那项工作是很关注的,像我们原来学的那种比较完整的文档,在这样小的公司是需要变通的,因为他们也没有很多的人力物力没有很多的时间去看那样的文档。编写测试用例首先要根据产品的特点编写。你的产品的特点在产品没有成型之前,你肯定不是特别了解也不是特别清楚,但是你可以根据它的框架大概的给搭出来,你能想到的尽量给细化写到文档里面,然后在测试过程中不断的完善。如果在测试执行的过程中突然间发现一个比较好的测试用例,一定要及时给补充进去,你不给它补充上去是你的一大损失,因为你以后的工作中可能还会需要这样的文档,或者以后接手你工作的人,他可能会看到这个文档,这对他以后的工作也会有很大的帮助。在大的公司有专门的测试设计人员来编写这些东西,在小公司就是测试主管或者测试员编写。像我们公司从测试用例、测试计划、测试执行什么的都是我来做的。当初是因为公司比较小,我自己做,本来是给我招了一个助手,也就用了大概一两个月吧。我个人的感觉是除非你招特别熟练的,对行业,对测试技术各方面都比较熟悉的,一来就能上手工作的还行。如果不这样,招一个刚毕业的应届生,他对测试行业不是很了解,而小公司人手本身就少,你根本就没有时间给他做培训,而你还要工作,也没有那么大的精力去手把手的教人家。在设计测试用例的时候要考虑周到,不要重复。就我的工作来说做ERP产品就是注意各个模块的借口以及数据测试。有好多的接口,比如说销售模块是和财务模块在测试时是会发生重复的部分,这个要自己注意。行业性比较强。接下来说执行测试。要按照测试用例来执行。你不能说做了测试用例而在工作的时候根本就不看,这样对你的工作是没有帮助的。因为你按照测试用例来执行的话基本就是按照自己的思路来做,这样你走到哪一步心里都非常的清楚。这样最大的好处就是减少重复的工作,可以提高工作效率。我想这点无论是在小公司还是大公司,还是就我们工作的本身都是很重要的。然后,最好是做测试日记录,目的就是明确自己测试到哪里,以免重复工作。就我自己来说,我在做测试的时候每天都会做测试日记,一个是记录我今天发现了多少个bug,工作到哪一步了?做了哪些工作。我发现这个做测试日记录是很有意思的。每天测出了多少各bug,我虽然在那个bag管理工具上录了一遍,但是我还是要把它记录下来。我当初第一天去上班的时候,第一次接触到这个执行测试的时候,我记得特别清楚,我是找出了65个bug。我觉得这说明两个问题,一个是我工作特别认真,一个是研发部有问题确实是有问题。所以,你不要觉得搞研发的都很厉害,很牛啊,你会有点怵。当初我们公司也是联想、方正、惠普的这三个主力支柱,但是我没有觉得怵,虽然他们很自负。基本上很小的错误都能提出来,他们认为那根本不是bug。但是你到了讨论会或技术交流会、评估会的时候可以提出来,因为这是你作为一个测试员最基础的必须的工作,也是你对工作认真负责的态度。和开发人员的沟通。这个是对测试人员很重要的。这个我在前面提到过,每个人不是独立的在做事情,工作中都是需要相互的配合,特别是测试工作,有问题,你需要及时的和研发人员沟通。如果你连沟通都做不好,那么,你的测试工作根本就没有办法进行。在这当中,你要坚持自己的原则,就是对事不对人,因为,这个产品有问题,它就是存在bug,那么,就要有人负责去修改。你不能说,对方是部门领导你就不敢坚持自己提出的问题。第二,就是要坚守其他的测试原则,这就是我们在学习理论的时候所掌握的一些知识。因为,我们学习时的课程设计就是根据项目来设置的,很多东西基本和实际工作中相吻合。作为测试负责人,在测试工作中我给自己订了一个基本的工作流程,现在也就当作是部门的规章制度在执行。就是录入bug以后,我会在下面做bug描述,开发人员是否要修改,为什么要修改,大概时间是多少,这样督促对方的话,会有利于工作的进度。不然,如果工作没有完成,就会出现相互推诿的现象。查出bug后就是督促开发人员修改bug。同时也要注意bug管理工具。自己要用好bug管理工具,也要督促开发人员用好bug管理工具。因为,有很多开发人员还都是比较懒的,他当时会跟你说,都有什么bug,你到我的机器上演示给我看不就行了吗?这是一个不好的习惯,也很费时间。所以,你一定要督促他们使用bug管理工具。这是我深有体会的,而且,还在两次较大的公司会议上提出,最终是被大家所接受认同。大家都知道,一般开发的男同事较多,做测试的女孩子较多,你在提出问题的时候态度不要太强硬,在日常的工作中委婉的提醒他,大家一般都不会太为难你的。不但工作解决了,同事间的关系也很融洽。接着就是测试报告的编写。这些我们在就业班的时候都学过,就是测试背景、内容、测试通过率。以及产品的优点、缺陷,还有你对项目的建议。这一切都做好了就是开测试评估会了。关于自动化测试我的个人意见现在是自动化热门期,现在的很多公司,无论大小,无论是否正经接触或运行自动化测试,都会在面试的时候问你是否接触过自动化,用过哪些测试工具等。我当时去面试的时候,也遇到这个问题,当时我首先问他的是,咱们公司做过除手工以外的其他测试么?他们回答说没有。那只需要手工测试的公司,为什么还要询问自动化测试相关内容呢?如果手工测试都做不好,是坚决不能使用自动化去替代的。他们却告诉我,公司在手工测试部分,现在已经进入非常成熟的阶段了,为了提升公司的工作效率和降低工作成本,自动化手段是公司现阶段考虑的首要方案,即便初期所做的依旧还是手工测试,但是公司规划会在一定时间内推行自动化测试技术,如果等到开始推行的时候再招聘,是非常不现实的。而且我们也希望招聘到掌握自动化测试技术的人才为公司的自动化测试提出合理的建议,避免公司在接触新的技术领域时进入太多弯路。由此我才对自动化技术为何如此热门有了认知。很多公司可能在现阶段还是延续相对传统的手工测试能力在进行着功能测试,测试人员还是用延长工作时间来确保工作任务的完成,可这也只会是短时间内的现象了,随着行业技术的提升和公司的发展速度加快,大家所关注的永远都是如何更为高效而又低成本地达到目标,以往的加班保障进度的模式已经不再是新兴企业的观念了,同等时间内,往往自动化可以实现更高的价值产出,这是手工测试完全不可比拟的。所以可以明显预见往后的软件测试行业中,自动化测试技术的核心占比只会越来越高,无论企业现在是否在做自动化,在极短的时间后是一定会进入到自动化的。所以现在的企业在招聘人员时提出自动化的需求,我也不会再感到惊讶了,毕竟这是行业在发展的最直观证明。虽然我们总说自动化测试永远替代不了手工测试,但手工测试永远也达不到自动化测试的效率,这也是毋庸置疑的。一不小心就整理了这么多点滴出来,还真没想到自己还是很能写的嘛。估计这和我在公司除了做测试工作,还做些其他工作有关。我说过,因为我们是小公司,所以,一些产品的使用说明、产品的安装说明,包括客服培训,都是由我来写的。在测试之余,一些和测试无关的工作我也会去做,比如测试制度的编写,OA 产品管理员,售前咨询顾问这样的工作。我想我就是这么锻炼出来的。有什么问题可以加群交流,希望对大家有所帮助。如果对软件测试、接口测试、自动化测试、性能测试、LR脚本开发、面试经验交流。感兴趣可以273462828,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。扩展阅读学软件测试最好的几本书,这8本书能帮你很多软件测试7年的工程师,讲述当初是怎么突破的瓶颈?少走弯路

April 11, 2019 · 1 min · jiezi

Jenkins performance插件生成性能测试报告

昨天把Jenkins部署好了,但是用了之后发现performance插件有问题,如果按下面这样设置统计所有的jtl文件,会导致文件夹过于臃肿,于是,而且生成的Performance Trend 比较混乱,不是很直观,于是思考修改一下试验了一下发现如果多次构建后生成在同一个jtl文件里,解析出的Performance Trend是正确的,但是我原本的设置中,jtl文件名是精确到分钟的,需要修改成精确到天的,这样正好一天的结果能看的很直观。 修改不是很难,总共修改3个地方即可 1.build.xml文件中的时间戳精度 原来是这样的,,jtl和html用的是同一个时间变量,咱们需要把这两个分开来修改后如下,也就是多建立一个精确到天的时间变量2.在Jenkins系统设置中建立一个精确到天的时间变量,TimeStamp插件提供了新建时间变量的功能,咱们只要把时差设置为0即可,注意,负号和0之间有空格3.修改任务中performance插件的jtl路径,使用新的时间变量设置好了,运行看一下

March 25, 2019 · 1 min · jiezi

如何测试小程序? 腾讯智慧零售保障优衣库小程序体验优化

作者:WeTest小编商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。原文链接:https://wetest.qq.com/lab/view/445.html如何测试小程序? 腾讯智慧零售保障优衣库小程序体验优化又是一年315,传统零售行业引起的消费者投诉不容小视。那在传统零售转型智慧零售的消费变革下,身为鹅厂的质量部门,我们又能为他们提供些什么帮助呢?_持续创新,优衣库尝试小程序作为全球知名服装品牌之一,优衣库通过与腾讯智慧零售团队合作,整合腾讯生态与自有流量,融合了线上线下的多个场景,消费者可以第一时间了解新品资讯,优惠信息,库存信息并通过多种形式快速下单,为消费者提供便捷、可信赖的消费服务。无论是在线下还是线上,优衣库都非常重视用户体验,因此优衣库对自身小程序的质量要求极高,确保每位顾客都能有流畅无碍的购物体验。智慧零售团队提供“个性化、全面、详细、专业”的功能测试服务为了验证优衣库小程序的功能问题,选择了智慧零售团队功能用例测试服务,测试团队由测试经验丰富的专家团队带领,根据行业特性,在用例设计上覆盖产品的特定业务流程,为优衣库的产品定制专属功能测试服务用例。1)结合客户需求,设计针对性用例根据需求,智慧零售团队设计用例覆盖了200多个测试项。涵盖了优衣库官方商城、购买商品流程等最为核心的场景功能。2)基于小程序特性,调整测试重点在测试过程中,针对小程序的测试特点,智慧零售团队调整了测试重点,增加小程序首屏加载,小程序登录等测试内容;同时针对微信授权,如读取个人信息,读取位置等测试项也逐一进行验证。3)高效执行,快速定位问题智慧零售团队在2个工作日内即输出一份详细的测试报告,帮助产品了解测试的整体情况,包括执行情况、测试设备列表、问题分布,问题列表。直观了解本次测试检测出的产品缺陷,并划分重要等级。测试用例里会列举每个测试步骤及测试结果,帮助开发商更精准定位问题。此次测试帮助优衣库小程序发现5个功能问题,保证优衣库小程序在“商品搜索”“下单流程”等核心场景在双十一期间稳定运行。优衣库的相关负责人表示此次合作保障了优衣库在 “双十一狂欢购” 等大型活动中用户的良好购物体验,特别是在搜索商品、购买商品流程上的体验畅通无阻,维护优衣库的品牌影响力。测试场景截图精细测试 铸就品质智慧零售团队联合WeTest团队,在测试领域提供为用户提供更高效、可靠的专业测试服务。腾讯WeTest (wetest.qq.com)是由腾讯官方推出的一站式品质开放平台。十余年品质管理经验,致力于质量标准建设、产品质量提升。腾讯WeTest为移动开发者提供兼容性测试、云真机、性能测试、安全防护、企鹅风讯(舆情分析)等优秀研发测试工具,为百余行业提供解决方案,覆盖产品在研发、运营各阶段的测试需求,历经千款产品磨砺。金牌专家团队,通过5大维度,41项指标,360度保障您的产品质量。

March 16, 2019 · 1 min · jiezi

《测试路上你问我答》性能测试是不是很难做?

前言:希望你能喜欢,不为别的,只为这份坚持。【背景】最近有些同学因为工作需要,看了我之前的学习笔记,然后跑来问我,说领导让他负责产品的性能测试,但他买了几本书,也安装了相关的工具,看来看去觉得太复杂了,觉得无从下手,就跑来问我:“性能测试是不是很难做?”【你问】性能测试是不是很难做?【我答】我从零距离接触性能测试到今天,也才一年多的时间,在这上面走过的路崎岖蜿蜒,个中滋味只可意会,不可言传。虽然我已经从入门到“放弃”了,但是我一直在思考和寻找,怎么样才能让性能测试不再看上去那么难,不再那么看着“高不可攀”。性能测试其实就是测试的一种类别,那么相应的,它也是有一套标准流程的,无外乎就是需求分析、测试计划制定、测试执行、结果分析等几个环节。所以,针对性能测试流程里的几个环节,我把自己换位到当初的小白,去思考自己当时最希望得到什么样的支持和帮助,再结合产品化的思维,思考出下面这样一个可以被拿来主义“的性能测试框架或指导性体系。1、是什么?性能测试里的常用基本概念、测试方法和标准流程的定义和解释;2、做什么?性能测试需求的分析方法,可以采用 checklist 的问题形式来帮助使用者得出对应需求所需要采用的性能测试种类,是压力测试,是稳定性测试,还是健壮性测试等等;3、怎么做?3.1 对应着上述第2步,得出来的具体的测试种类,每一种都有相应的测试方法说明,包括需要准备什么样的数据、步骤和如何选取相应的脚本进行修改或组装;3.2 有一套对应的样例库,包含脚本(.usr)、参数化文件(.dat)、场景(.lrs),虽然说不可能百分之百通用或者套用,但至少在同类产品的性能测试中都能套用,它们都是相对独立、结构清晰的一个一个的数据包,便于更新和管理;4、怎么样?性能测试完成后,系统都会生成一个报告。针对常用的单分析图和组合分析图,有样图与我实际的图做对比,并告诉我这些数据图,分别代表着性能的哪些指标,这些指标的值,又分别代表着性能是好还是坏;5、怎么办?对于常见的性能问题,罗列出通用的解决方案,比如是应该检查并优化 SQL,还是应该修改服务端 Tomcat 的连接数大小等等。如果你想学习软件测试的,我给你推荐个群:903217991,里面有从基础开始学习的软件测试学习视频讲解,还有大牛帮你解决疑惑。如果能有这样一套产品化的性能测试框架,那么我想,性能测试这种大山对于大多数测试工程师来说,也就不那么”高不可攀“了,对吧?具有指导性的作业文件、测试计划模板、独立的测试数据和测试脚本、分布式测试环境搭建脚本或手册、测试报告和相应的分析模板,能支撑一套完整的性能测试框架迅速落地,快速适应不同的项目,并且能让测试工程师以最小的学习代价完成性能测试任务。不过,这么一套框架不是一朝一夕就能建立起来的,它必须是在性能测试工程师对理论有了很深入地理解,并通过多个项目的实战,从中总结、归纳而形成的一套方法论体系,再辅以相对独立的数据和脚本、计划模板、分析步骤和模板等相关工具。不断地打磨、优化和改进,才能形成一套不论是入门级的小白,还是进行中的老鸟,都可以轻松利用它登上高峰的这样一个产品。

December 18, 2018 · 1 min · jiezi

Flink SQL 核心解密 —— 提升吞吐的利器 MicroBatch

之前我们在 Flink SQL 中支持了 MiniBatch, 在支持高吞吐场景发挥了重要作用。今年我们在 Flink SQL 性能优化中一项重要的改进就是升级了微批模型,我们称之为 MicroBatch,也叫 MiniBatch2.0。在设计和实现 Flink 的流计算算子时,我们一般会把“面向状态编程”作为第一准则。因为在流计算中,为了保证状态(State)的一致性,需要将状态数据存储在状态后端(StateBackend),由框架来做分布式快照。而目前主要使用的RocksDB,Niagara状态后端都会在每次read和write操作时发生序列化和反序列化操作,甚至是磁盘的 I/O 操作。因此状态的相关操作通常都会成为整个任务的性能瓶颈,状态的数据结构设计以及对状态的每一次访问都需要特别注意。微批的核心思想就是缓存一小批数据,在访问状态状态时,多个同 key 的数据就只需要发生一次状态的操作。当批次内数据的 key 重复率较大时,能显著降低对状态的访问频次,从而大幅提高吞吐。MicroBatch 和 MiniBatch 的核心机制是一样的,就是攒批,然后触发计算。只是攒批策略不太一样。我们先讲解触发计算时是如何节省状态访问频次的。微批计算MicroBatch 的一个典型应用场景就是 Group Aggregate。例如简单的求和例子:SELECT key, SUM(value) FROM T GROUP BY key如上图所示,当未开启 MicroBatch 时,Aggregate 的处理模式是每来一条数据,查询一次状态,进行聚合计算,然后写入一次状态。当有 N 条数据时,需要操作 2*N 次状态。当开启 MicroBatch 时,对于缓存下来的 N 条数据一起触发,同 key 的数据只会读写状态一次。例如上图缓存的 4 条 A 的记录,只会对状态读写各一次。所以当数据的 key 的重复率越大,攒批的大小越大,那么对状态的访问会越少,得到的吞吐量越高。攒批策略攒批策略一般分成两个维度,一个是延时,一个是内存。延时即控制多久攒一次批,这也是用来权衡吞吐和延迟的重要参数。内存即为了避免瞬间 TPS 太大导致内存无法存下缓存的数据,避免造成 Full GC 和 OOM。下面会分别介绍旧版 MiniBatch 和 新版 MicroBatch 在这两个维度上的区别。MiniBatch 攒批策略MiniBatch 攒批策略的延时维度是通过在每个聚合节点注册单独的定时器来实现,时间分配策略采用简单的均分。比如有4个 aggregate 节点,用户配置 10s 的 MiniBatch,那么每个节点会分配2.5s,例如下图所示:但是这种策略有以下几个问题:用户能容忍 10s 的延时,但是真正用来攒批的只有2.5秒,攒批效率低。拓扑越复杂,差异越明显。由于上下游的定时器的触发是纯异步的,可能导致上游触发微批的时候,下游也正好触发微批,而处理微批时会一段时间不消费网络数据,导致上游很容易被反压。计时器会引入额外的线程,增加了线程调度和抢锁上的开销。MiniBatch 攒批策略在内存维度是通过统计输入条数,当输入的条数超过用户配置的 blink.miniBatch.size 时,就会触发批次以防止 OOM。但是 size 参数并不是很好评估,一方面当 size 配的过大,可能会失去保护内存的作用;而当 size 配的太小,又会导致攒批效率降低。MicroBatch 攒批策略MicroBatch 的提出就是为了解决 MiniBatch 遇到的上述问题。MicroBatch 引入了 watermark 来控制聚合节点的定时触发功能,用 watermark 作为特殊事件插入数据流中将数据流切分成相等时间间隔的一个个批次。实现原理如下所示:MicroBatch 会在数据源之后插入一个 MicroBatchAssigner 的节点,用来定时发送 watermark,其间隔是用户配置的延时参数,如10s。那么每隔10s,不管数据源有没有数据,都会发一个当前系统时间戳的 watermark 下去。一个节点的当前 watermark 取自所有 channel 的最小 watermark 值,所以当聚合节点的 watermark 值前进时,也就意味着攒齐了上游的一个批次,我们就可以触发这个批次了。处理完这个批次后,需要将当前 watermark 广播给下游所有 task。当下游 task 收齐上游 watermark 时,也会触发批次。这样批次的触发会从上游到下游逐级触发。这里将 watermark 作为划分批次的特殊事件是很有意思的一点。Watermark 是一个非常强大的工具,一般我们用来衡量业务时间的进度,解决业务时间乱序的问题。但其实换一个维度,它也可以用来衡量全局系统时间的进度,从而非常巧妙地解决数据划批的问题。因此与 MiniBatch 策略相比,MicroBatch 具有以下优点:相同延时下,MicroBatch 的攒批效率更高,能攒更多的数据。由于 MicroBatch 的批次触发是靠事件的,当上游触发时,下游不会同时触发,所以不像 MiniBatch 那么容易引起反压。解决数据抖动问题(下一小节分析)我们利用一个 DAU 作业进行了性能测试对比,在相同的 allowLatency(6秒)配置的情况下,MicroBatch 能得到更高的吞吐,而且还能得到与 MiniBatch 相同的端到端延迟!另外,仍然是上述的性能测试对比,可以发现运行稳定后 MicroBatch 的队列使用率平均值在 50% 以下,而 MiniBatch 基本是一直处于队列满载下。说明 MicroBatch 比 MiniBatch 更加稳定,更不容易引起反压。MicroBatch 在内存维度目前仍然与 MiniBatch 一样,使用 size 参数来控制条数。但是将来会基于内存管理,将缓存的数据存于管理好的内存块中(BytesHashMap),从而减少 Java 对象的空间成本,减少 GC 的压力和防止 OOM。防止数据抖动所谓数据抖动问题是指,两层 AGG 时,第一层 AGG 发出的更新消息会拆成两条独立的消息被下游消费,分别是retract 消息和 accumulate 消息。而当第二层 AGG 消费这两条消息时也会发出两条消息。从前端看到就是数据会有抖动的现象。例如下面的例子,统计买家数,这里做了两层打散,第一层先做 UV 统计,第二级做SUM。SELECT day, SUM(cnt) totalFROM ( SELECT day, MOD(buy_id, 1024), COUNT(DISTINCT buy_id) as cnt FROM T GROUP BY day, MOD(buy_id, 1024))GROUP BY day当第一层count distinct的结果从100上升到101时,它会发出 -100, +101 的两条消息。当第二层的 SUM 会依次收到这两条消息并处理,假设此时 SUM 值是 900,那么在处理 -100 时,会先发出 800 的结果值,然后处理 +101 时,再发出 901 的结果值。从用户端的感受就是买家数从 900 降到了 800 又上升到了 901,我们称之为数据抖动。而理论上买家数只应该只增不减的,所以我们也一直在思考如何解决这个问题。数据抖动的本质原因是 retract 和 accumulate 消息是一个事务中的两个操作,但是这两个操作的中间结果被用户看到了,也就是传统数据库 ACID 中的隔离性(I) 中最弱的 READ UNCOMMITTED 的事务保障。要从根本上解决这个问题的思路是,如何原子地处理 retract & accumulate 的消息。如上文所述的 MicroBatch 策略,借助 watermark 划批,watermark 不会插在 retract & accumulate 中间,那么 watermark 就是事务的天然分界。按照 watermark 来处理批次可以达到原子处理 retract & accumulate 的目的。从而解决抖动问题。适用场景与使用方式MicroBatch 是使用一定的延迟来换取大量吞吐的策略,如果用户有超低延迟的要求的话,不建议开启微批处理。MicroBatch 目前对于无限流的聚合、Join 都有显著的性能提升,所以建议开启。如果遇到了上述的数据抖动问题,也建议开启。MicroBatch默认关闭,开启方式:# 攒批的间隔时间,使用 microbatch 策略时需要加上该配置,且建议和 blink.miniBatch.allowLatencyMs 保持一致blink.microBatch.allowLatencyMs=5000# 使用 microbatch 时需要保留以下两个 minibatch 配置blink.miniBatch.allowLatencyMs=5000# 防止OOM,每个批次最多缓存多少条数据blink.miniBatch.size=20000后续优化MicroBatch 目前只支持无限流的聚合和 Join,暂不支持 Window Aggregate。所以后续 Window Aggregate 会重点支持 MicroBatch 策略,以提升吞吐性能。另一方面,MicroBatch 的内存会考虑使用二进制的数据结构管理起来,提升内存的利用率和减轻 GC 的影响。本文作者:jark阅读原文本文为云栖社区原创内容,未经允许不得转载。 ...

December 7, 2018 · 2 min · jiezi