性能测试之如何构造海量测试数据

作者&投稿:屈巧 (若有异议请与网页底部的电邮联系)
~

Jforum论坛部署完之后,用来做性能测试练习使用,接下来需要对它的主要业务进行熟悉,业务建模之前,对它的业务流程、数据库表结构也应当有所了解。

一、主流程

不论是公司的系统还是开源的项目,在做测试之前,都应该要熟悉它的主流程(主业务),才能更有利的设计测试用例。

用户注册

登录发帖

登录回帖

浏览

搜索

在页面能看到还有热门主题、最新主题等功能

1.1、独立场景

根据监控业务数据分析,假设发帖、回帖、浏览三个业务最为频繁,其中发帖和回帖都需要登录,那么分别设立:登录、发帖、回帖、浏览四个独立业务场景;分别占比:30%、10%、15%、45%;其中发帖/回帖需要登录场景。

1.2、组合场景

用户登录之后分别发帖、回帖、浏览。

如何保证发帖、回帖的用户登录唯一?

如何设置脚本按业务不同比例分配执行?

1.3、关于脚本设计

是将多个场景使用一个线程组来控制呢,还是不同场景使用多个线程组来控制?

建议是多场景使用不同线程组来控制,而不建议所有业务场景使用一个线程组控制原因有二:其一按业务占比不同业务场景并发用户数不一样,也不方便维护脚本;其二线程组内的元件是顺序执行的,相互之间影响(参数),复杂度高。

而不同线程组之间,可以独立开,他们确是并行的,没有顺序可言,唯一的缺点是关于用户参数化,同1个用户不要出现在不同的场景里,按照系统鉴权方式,可能会出现第1个场景刚登录还没发帖,第二个场景就登录了,会导致第一个场景发帖失败,所以脚本组合如下:

登录+发帖

登录+回帖

只管浏览

二、性能指标

业务建模除了要理清楚流程之外,就需要对业务数据进行分析得到性能需求(指标);在不同的并发用户得到不同的RT、TPS等业务指标。

在前期是可以估算的,假设设置1个用户(线程),按业务比例执行业务场景,持续5分钟,得到一个基准值,或统计整个场景得到总TPS,再按比例分配;

如100线程并发,其中有30%的用户登录,10%去发帖,15%去回帖,45%浏览帖子,持续运行5分钟,假设总tps为55;预估各业务tps为:16.5、5.5、8.25、24.75;

实际按照上面的场景设计会发现只有25%的用户登录去发帖,那么30%的用户登录还有5%去浏览帖子了。比例为25%登录、10%发帖、15%回帖、50%浏览。

业务占比登录25%发帖10%回帖15%浏览50%tps13.755.58.2527.5三、数据构造

前面已知业务模型并估算性能指标,那么它一定不是发生在空服务器上,什么叫空服务器?我把业务数据量的多少来评估系统支撑的业务能力;

1000条数据和10万条数据所产生的压力肯定是不一样的,性能测试环境的部署应该还包括业务数据的准备。

3.1、数据来源

这时候需要做两件事,第一前面说过了,要熟悉业务流程,第二就对数据表结构有清晰的认识(业务意义)。

Jforum_users、jforum_user_groups这两张表是对用户及用户用户权限有关

jforum_forums、jforum_topics、jforum_posts、jforum_posts_text分别是论坛版块、主题、记录发帖回帖状态、记录发帖回帖内容

除此之外,其他数据表所覆盖的业务有限。

注册用户

发帖数据

回帖数据

3.2、如何构造

一般思维,在不确定数据表业务含义的时候,保险的做法就是模拟客户端请求构造数据,参数化请求脚本;速度较慢且也容易错;

比较高效一点的呢,就是写存储过程,速度快;因为要多懂一点数据库知识,并且需要知道表业务结构,sql从哪里来?且往下看:

中庸的做法:先模拟客户端注册,然后观察得到后台的sql操作,然后提取出来,直接写成操作sql脚本;更简单;或写存储过程。

3.3、介绍mysql存储过程样例:--mysql默认结束符为;分号delimiter$$--自定义结束符--PROCEDURE存储过程可以携带入参IN,out为出参,INOUT即为输入输出参数CREATEPROCEDUREaddUser(INuseridINTEGER,INmaxIDINTEGER)BEGINDECLAREaVARCHAR(20);DECLAREmVARCHAR(20);DECLAREiint;SETi=userid+1;loop1:WHILEi<=maxIDDOseta=CONCAT("test",i);setm=CONCAT(a,"@test.com");INSERTINTOjforum_usersVALUES(i,1,a,'70a9a7accbef6ceacae626cabe66723318be40cfc4d7abac0103340f0458230363677dd2ed96ae76f8a0493d27872eb093b55c1ddfcfb400bab9138cc42477',0,0,NULL,'2021-09-2717:58:05',NULL,88,'',NULL,'','%d/%M/%Y%H:%i',0,0,NULL,NULL,0,1,0,1,1,1,1,1,0,0,1,1,0,NULL,0,m,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);insertintojforum_user_groupsVALUES(1,i);SETi=i+1;ENDWHILEloop1;END$$--结束定义存储过程delimiter;--最后记得还原,否则下面需要执行sql带分号就不认识了。--通过参数调用,然存储过程变得活起来set@userId=(selectmax(user_id)fromjforum_users);set@maxId=@userId+5;calladdUser(@userId,@maxId);--存储过程调用

上面已经构造了用户数据,接下来就需要对发帖、回帖进行构造数据

delimiter$$CREATEPROCEDUREaddTopic()BEGINDECLAREtopicIdINT;DECLAREpostIdINT;DECLAREreplayCountINT;--回复数DECLAREuserIdINT;DECLAREforumIdINT;DECLAREcreateDateDatetime;DECLAREiint;SETi=1;SETreplayCount=2;--因为构造了2条回复数据loop1:WHILEi<=100000DO--CEIL返回最小整数setuserId=2+CEIL(rand()*1002);--构造时间setcreateDate=DATE_ADD(now(),INTERVAL-3DAY);setcreateDate=DATE_ADD(now(),INTERVAL-3HOUR);setforumId=CEIL(rand()*4);--主题INSERTINTOjforum_topicsVALUES(topicId,forumId,concat(i,"welcometoJforum!!!"),userId,createDate,1,replayCount,0,0,0,i,i+2,0,0);--增加主题新增浏览数据INSERTINTOjforum_topics_watchVALUES(topicId,userId,1);--帖子INSERTINTOjforum_postsVALUES((i-1)*3+1,topicId,forumId,userId,createDate,'192.168.2.188',1,0,1,0,NULL,0,1,0,0);INSERTINTOjforum_postsVALUES((i-1)*3+2,topicId,forumId,userId,createDate,'192.168.2.188',1,0,1,1,NULL,0,1,0,0);INSERTINTOjforum_postsVALUES((i-1)*3+3,topicId,forumId,userId,createDate,'192.168.2.188',1,0,1,1,NULL,0,1,0,0);--帖子内容INSERTINTOjforum_posts_textVALUES((i-1)*3+1,'[b][color=blue][size=18]Congratulations:!:[/size][/color][/b]
Youhavecompletedtheinstallation,andJForumisupandrunning.

Tostartadministeringtheboard,loginas[i]Admin/<thepasswordyousuppliedintheinstaller>[/i]andaccessthe[b][url=http://192.168.2.188:8080/jforum-2.7.0/admBase/login.page]AdminControlPanel[/url][/b]usingthelinkthatshowsupinthebottomofthepage.ThereyouwillbeabletocreateCategories,Forumsandmuchmore:D

Formoreinformationandsupport,pleaserefertothefollowingpages:

:arrow:Communityforum:http://jforum.andowson.com/
:arrow:Documentation:https://sourceforge.net/p/jforum2/wiki2/Home

ThankyouforchoosingJForum.

TheJForumTeam

','WelcometoJForum');INSERTINTOjforum_posts_textVALUES((i-1)*3+2,'一致好评',concat("回复","welcometoJforum!!!"));INSERTINTOjforum_posts_textVALUES((i-1)*3+3,'好评如潮',concat("回复","welcometoJforum!!!"));seti=i+1;ENDWHILEloop1;END$$delimiter;--调用存储过程calladdTopic();--因为调试使用,需要有这个快速删除结构TRUNCATEjforum_topics;TRUNCATEjforum_posts;TRUNCATEjforum_posts_text;DROPPROCEDUREifEXISTSaddTopic;--数据构造完成,需要重启服务,会发现每个栏目下没有翻页数据,因为jforum_forums有两个字段:forum_topics总数forum_last_post_id最后一次回帖idselectcount(topic_id),max(topic_id),forum_idfromjforum_topicsGROUPBYforum_id;--统计出来的数据替换jforum_forums表中的两个值forum_topics、forum_last_post_id;select*fromjforum_forums;

这10万条数据,比调用脚本产生要快得多。6万条数据造了差不多大半天。

四、总结

准备性能测试数据的方案有多种,只看你熟悉哪种,最终都会提前准备好。

作者:职说测试微信:oupoor




性能测试之如何构造海量测试数据
3.3、介绍mysql存储过程样例:--mysql默认结束符为;分号delimiter$$--自定义结束符--PROCEDURE存储过程可以携带入参IN,out为出参,INOUT即为输入输出参数CREATEPROCEDUREaddUser(INuseridINTEGER,INmaxIDINTEGER)BEGINDECLAREaVARCHAR(20);DECLAREmVARCHAR(20);DECLAREiint;SETi=userid+1;loop1:WHILEi<=maxIDDOseta=CO...

干货满满!测试的时候如何构造各种测试数据?
功能测试的测试数据,一般是 手工构造 。如果需要构造大量数据,要分析测试需求,准确清晰的分析之后,再对输入的测试数据进行分析。一方面,我们要求测试数据要尽可能的与生产环境的数据相一致,尽可能是有意义的数据,可以通过分析使用现有系统的数据或根据业务特点来构造数据。另一方面,我们要求测试数据输入...

如何构建大量的测试数据
一方面,我们要求测试数据要尽可能的与生产环境数据一致,尽可能是有意义的数据,可以通过分析使用现有系统的数据或根据业务特点构造数据。另一方面,我们要求测试数据输入要满足输入限制规则,尽可能覆盖到满足规则的不同类型的数据。我们遇到最多的还是在数据库中构造的测试数据,也包括磁盘文件(附件)。最后一...

女生用一个鱼缸做出海市蜃楼 是如何用鱼缸做出海市蜃楼的
海市蜃楼的原理很简单,光线在不同密度的空气里传播,最后将本不在一条直线上的景象送到你眼前。海市蜃楼通常出现在海上,这并非偶然,因为广阔的海面让光线有足够的距离和时间变“弯”。赵琦“妄想”在一只小小的鱼缸里复现一场蜃景——找到一种能让光线折射率变得更大的介质不就行了吗?道理很简单,...

手机怎么测海拔
1、通过桌面点击“应用市场App”,进入“应用市场”功能窗口。华为手机怎么样测海拔高度?很简单,只需这样操作2、在“应用市场”功能窗口,点击屏幕顶部的搜索框。华为手机怎么样测海拔高度?很简单,只需这样操作3、在搜索框中输入“GPS工具箱”,并在搜索结果中点击“GPS工具箱”标签右侧的“安装”,...

海洋探索其实比太空探索更困难:深海10000米究竟有多恐怖?
当下潜到10000米时海水的压强大约是 1000个大气压强 ,人体无法承受巨大的压强,就只能依靠外部的设施,前文提到核潜艇的下潜距离相对于10000米的目标非常有限,目前的探测器已经可以载人下潜到10000米的海底,但是可以容下的人非常少。这种探测器在实验当中测试是可以承受住海底压强的,但是如果真的发生意外,其中的人没有生...

...将声纳探测器与船体空间分离用以防止干扰提高测试精度是使用什么原...
1、测海的深度,是用声波的在船上往下放超声波遇到海底后返回(超声波的速度x时间)\/2=海的深度海洋的深度是用回声探测仪探测出来的。2、回声探测仪是利用声音在海底反射来测量海洋深度的,就好像我们在山谷中听到的回声一样。3、在探测某个海域海底深度的时候,首先要用回声探测仪向海底发出超声波,...

心理测试:你愿意做大海里的什么
海豚: 思维也较活跃,做事不求最好,做人世故圆滑,工作业绩可能不是最好,但是社交能力很强,能赢得多数人的赞同和喜爱,好事总爱轮到他的头上,就像一朵绽放的菊花,即普通,又不一般,人人喜欢。螃蟹: 没有创新精神,相对来说比较懒惰,领导让干什么就干什么,生活中喜欢独来独往,做事按部就班...

如何用手机测海平面高度?
1、首先,我们找到手机桌面上系统自带的【应用商店】功能并且点击进入主页面。2、打开【应用商店】我们在最上方搜索栏里面输入海拔,在结果里选择【GPS实时海拔】点击【安装】。3、从手机顶部下拉显示出功能栏,将里面的【定位服务】打开。4、打开已经下载完成的【GPS实时海拔】。5、即可看到软件自动为您...

世界最大“海底瀑布”
曾经有一个科学家在用水流计测试的时候,他就发现了这个瀑布,是一个非常神奇的存在,这个瀑布的水流量非常的惊人,据说每过一秒就会有50亿升的海水从海底的悬崖上,倾泻而下,这样的流量相当于25个亚马逊河的水流量,可以说是非常的壮观的。看到它的水流量,也足够能想象出这个瀑布是非常的大的,而且它还发挥着一个很大...

新乡县18961325474: MySQL如何快速创建大量随机数据进行性能测试 -
旁夏养血: 用loadrunner或者jmeter都是可以的,主要是根据实际情况和需求,编写合适的sql语句对数据库进行操作.

新乡县18961325474: 性能测试经验之如何编写性能测试用例
旁夏养血: 由于性能测试与功能测试有很大的区别,所以讨论出的结果可能与预先的设想有一定的区别. 性能测试的目的: 为了验证系统是否达到用户提出的性能指标,同时发现系统中存在的性能瓶颈,起到优化系统的目的. 性能测试指标的来源: 用户...

新乡县18961325474: 如何处理海量数据 -
旁夏养血: 在实际的工作环境下,许多人会遇到海量数据这个复杂而艰巨的问题,它的主要难点有以下几个方面: 一、数据量过大,数据中什么情况都可能存在. 如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考...

新乡县18961325474: 游戏后台怎么做性能测试 -
旁夏养血: 一、什么是游戏后台性能测试性能(performance):是系统实现其功能的能力.例如,响应时间、吞吐能力、事务处理数. 性能测试,是指在特定负载情况下,确定系统的响应速度和稳定性的表现.它也可以研究、测量、验证系统的其他特...

新乡县18961325474: 如何做性能测试报告 -
旁夏养血: .就当练习了..大家看了不要喷我..现在很多测试人员做移动端测试,可能主要还是关注功能和自动化测试.性能测试可能大多是按照每个人的体验来做报告,是不是比较快,或者比较慢.当然也不乏有很多的测试人员会回复我说,性能测...

新乡县18961325474: 软件测试中性能测试用例如何设计,求写好的用例 -
旁夏养血: 其实分为三个步骤去设计,就OK了:1、指标性测试 就是定义的最大性能值2、压力测试 指标的20%内,无任何错误.且在大压力下,系统不down,允许处理出错,无内存泄漏3、稳定性测试 72小时以上

新乡县18961325474: 本人为新手,想学习性能测试,如何快速提高 -
旁夏养血: 我在TestBird从事自动化测试等工作,对性能测试也有一些经验,性能测试流程其实网上和专业的书都有介绍,我把我现在性能测试流程简单描述一下: 1.制定测试计划和策略 可能很多人觉得这一步很琐碎,其实我觉得这一步很关键的,决定着之后测试的走向. 2.准备测试环境 包括硬件、网络、操作系统,中间件,数据库、测试数据,监控工具等. 3.录制脚本,优化,调试 录制、增强、优化脚本的目的是使模拟用户操作步骤更逼真. 4.根据场景执行脚本,分析测试结果 就根据你已经设计好的场景执行脚本,记录测试结果,并和开发人员,DBA等一起定位性能缺陷. 5.性能调优后,回归测试 如果有性能问题,开发人员,DBA性能调优后回归测试.

新乡县18961325474: 如何提高性能测试技术 -
旁夏养血: 随着软件测试行业的逐渐发展,性能测试也变得火热起来.从各大测试论坛和测试交流群的交流主题的热门程度来看,性能测试已经成为大家非常感兴趣的话题.先来分析一下一些关于性能测试入门级的常见问题:3、用IP欺骗能对外网进行测...

新乡县18961325474: 如何写软件测试性能测试用例和结果分析?
旁夏养血: 1. 测试目的.... 4 2. 测试地点.... 4 3. 测试环境.... 4 3.1. 服务器、客户端环境.... 4 3.2. 测试工具.... 4 4. 测试规模及限制.... 5 5. 测试过程说明.... 5 5.1. 测试模型.... 5 5.2. 测试案例.... 5 5.3. 测试场景.... 6 6. 测试结果.... 7 6.1. 平均响应时间.... 7 6.2. 差错率...

新乡县18961325474: 如何提高软件测试质量? -
旁夏养血: 作为评价产品性能的重要手段,性能测试在软件测试工作中占的比重一直很大,要最终提供一份准确,权威的测试报告,测试人员的努力工作自然不可或缺,但更重要的是测试人员清晰的工作思路,简洁的测试流程和良好的测 试方法. 目前性...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网