JMeter实现多用户并发功能测试——抽奖系统实战经验

上一篇 / 下一篇  2020-05-27 14:22:06

  抽奖活动系统是用户通过参与活动获得奖券,然后刮开奖券查询是否获奖。
  项目需求和技术方案:
  项目需求是测试抽奖活动的中奖概率:
  1、中奖率在定义的概率范围内
  2、中奖次数不得大于定义的次数
  3、所有奖券的状态显示正常
  自动化方案:
  1、中奖概率在千万级别不可能用人工进行,需要借助自动化。
  2、在自动化测试工具的选择上,用Java代码脚本的形式做到千万级别的次数运行时间太长,需要借助并发测试工具。
  3、考虑使用Jmeter接口测试功能,加上并发的功能和顺序执行的逻辑来实现。
  实施方案:
  考虑到项目的测试需求是测试中奖率,所以只需要选取主要的三个接口进行测试即可。产生奖券 – 刮奖
  每个用户经过这个流程,从产生奖券传入用户名参数,返回奖券ID,生成的ID用到刮奖接口中,返回奖券状态。多用户使用Jmeter的CVSRead方法来生成,刮奖使用的奖券ID参数用正则表达式提取器提取出来,作为刮奖接口的参数。通过多用户并发执行产生奖券和刮奖的接口,完成这个业务逻辑的功能测试
  JMeter实施过程
  设置3个全局变量,服务器地址,端口号和活动的ID号
  新建一个dat文件,供CVSRead函数调用。Dat文件内容为
  每行代表一个用户名和用户ID,在Jmeter的选项中调出函数对话框,选择_CVSRead,在第一行中输入dat文件的路径 c:\t.dat, 第二行输入0,然后生成函数${__CSVRead(c:\t.dat,0)}, 调用这个函数的时候,0表示调用第一列的值,1表示调用第二列的值,依此类推。
  (这里补充一下,如果涉及到性能测试的多用户并发,使用配置元件中的CSV Data config会好点,因为这里没有涉及到性能上的问题,所以采用这种方式)
  设置产生奖券接口
  正则表达式提取器
  1、在产生奖券的请求下面新建一个正则表达式提取器
  2、在测试计划下面新建一个查看结果树
  3、点击绿色三件按钮执行测试,查看结果树中影响数据:{“resultCode”:”0000”,”resultMsg”:”抽奖成功!”,”resultData”:{“id”:11566355,”userId”:9000,”userName”:”autotest0”,”activeId”:3,”status”:0,”catalog”:null,”prizeId”:null,”recipient”:null,”contact”:null,”address”:null,”province”:null,”city”:null,”area”:null,”orderNo”:null,”deviceType1”:”123456”,”deviceId1”:”123456”,”source”:”test”,”deviceType2”:null,”deviceId2”:null,”deviceType3”:null,”deviceId3”:null,”endTime”:1448935237000,”openTicketTime”:0,”createTime”:1447232320281,”prizeName”:null,”prizePrice”:0.0,”thumbnail”:null}}
  4、需要提取的是id后面的值:11566355, 正则表达式为{“id“(.+?), 匹配的是需要的值。
  设置刮奖接口
  刮奖接口调用产生奖券接口生成的ID,使用JMeter自带的函数表达式即可${ticketId},注意的是,使用通过正则表达式提取器得到的参数,只能是该请求下面的请求才能使用,逆向不可用。
  脚本配置完需要设置并发的线程数和执行的时间来进行测试,在线程组中设置,若测试的中奖概率比较小,比如五百万分之一,想要尽快完成测试,线程数需要设置大一点,这里推荐100(按CPU线程数来算,128个线程比较合理),循环次数勾选永远,即测试会不停执行。
  测试结果在项目中的效果

TAG: 性能测试工具 Jmeter

谯谯12345的个人空间 引用 删除 谯谯12345   /   2020-05-27 22:42:43
5
 

评分:0

我来说两句

日历

« 2024-04-17  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 54171
  • 日志数: 43
  • 建立时间: 2019-02-12
  • 更新时间: 2020-08-10

RSS订阅

Open Toolbar