51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1475|回复: 0

记录一次服务器端性能测试的通用脚本

[复制链接]

该用户从未签到

发表于 2018-6-5 17:26:34 | 显示全部楼层 |阅读模式
业务场景描述

5000个用户分批次登陆系统,但是要保证登陆的用户中,时刻有一定比例的用户做业务(6%),其他用
户登陆后等待;执行完业务的用户进入等待队列,然后从等待队列选取一人继续执行业务,但是要保证
时刻有6%的执行业务占比。可以控制总的性能测试执行时间!

如下编写的场景脚本:
  1. <p>
  2. </p><p>#include</p><p>
  3. </p><p>#include</p><p>
  4. </p><p>{</p><p>
  5. </p><p>string logger;</p><p>
  6. </p><p>//共享变量,控制业务的起止时间</p><p>
  7. </p><p>shared t_start,t_end;</p><p>
  8. </p><p>int t,t_zong;</p><p>
  9. </p><p>//用于第一组并发用户的判断,同时也把值赋予id_yw;</p><p>
  10. </p><p>shared num_yw,num_yw1;</p><p>
  11. </p><p>//业务组内,每个虚拟用户的id</p><p>
  12. </p><p>int id_yw;</p><p>
  13. </p><p>//下一个操作业务的用户id</p><p>
  14. </p><p>shared id_next,share;</p><p>
  15. </p><p>int num_zong, num_binf;</p><p>
  16. </p><p>//设定wait的等待时间</p><p>
  17. </p><p>int time_out;</p><p>
  18. </p><p>//根据业务所占比重计算,暂时用2,测试取整函数!</p><p>
  19. </p><p>num_zong = _nusers;</p><p>
  20. </p><p>num_binf = (_nusers*3)/10;</p><p>
  21. </p><p>//设定wait的等待时间,越长越好,假若一直没被激活,此时间可以设置为session的失效时间。</p><p>
  22. </p><p>time_out = (_nusers)*3000;</p><p>
  23. </p><p>//t_zong,业务运行时间,暂时根据并发用户计算,1200 60,60,1000</p><p>
  24. </p><p>t_zong = (_nusers)*3000;</p><p>
  25. </p><p>//登录系统,一秒两个用户</p><p>
  26. </p><p>//delay((_uid)*500);</p><p>
  27. </p><p>share = num_binf;</p><p>
  28. </p><p>//开始业务</p><p>
  29. </p><p>num_yw1++;</p><p>
  30. </p><p>id_yw = num_yw1;</p><p>
  31. </p><p>t_start = start_time["yw_time"];</p><p>
  32. </p><p>do{</p><p>
  33. </p><p>num_yw++;</p><p>
  34. </p><p>//第一次发起并发,发起id_yw比较小的(数量为该组需要并发的人数),大于id_yw的用户等待被激活</p><p>
  35. </p><p>if(num_yw > num_binf)</p><p>
  36. </p><p>{</p><p>
  37. </p><p>//此处用户一直在监听,是否被激活,即现有操作人员结束操作后,随机产生的id号是否与自己匹配。如果匹配则开始业务操作,否则继续等待。</p><p>
  38. </p><p>wait(&id_next,id_yw,id_yw,0,time_out);</p><p>
  39. </p><p>if(wait(&id_next,id_yw,id_yw,0,time_out) == 0)</p><p>
  40. </p><p>{</p><p>
  41. </p><p>//break;</p><p>
  42. </p><p>//script_exit("");</p><p>
  43. </p><p>user_exit(-1, "Fatal Error - Aborting");</p><p>
  44. </p><p>}</p>
复制代码


//说明:此处判断是否是被正常激活。0为等待超时(非正常激活)。当suite结束时,势必会造成大量的

//用户非正常激活,从而同时并发下面的业务。所以,此处设置适当延迟,使用户顺序推出。

  1. <p>//delay(id_yw*10000);</p><p>
  2. </p><p>}</p><p>
  3. </p><p>else</p><p>
  4. </p><p>{</p><p>
  5. </p><p>logger = "the yw is starting.....";</p><p>
  6. </p><p>writelog(logger);</p><p>
  7. </p><p>}</p><p>
  8. </p><p>//else直接往下走。</p><p>
  9. </p><p>//开始操作业务</p><p>
  10. </p><p>//使用delay(8000)模拟业务</p><p>
  11. </p><p>delay(8000);</p><p>
  12. </p><p>//结束操作业务</p><p>
  13. </p><p>t_end = stop_time["yw_time"];</p><p>
  14. </p><p>t = t_end - t_start;</p><p>
  15. </p><p>//业务结束后,在用户组内随机取一个用户id,赋给共享变量next_id</p><p>
  16. </p><p>//id_next = ((rand()) % num_zong )+1;</p><p>
  17. </p><p>share++;</p><p>
  18. </p><p>if(share<=num_zong)</p><p>
  19. </p><p>{</p><p>
  20. </p><p>id_next =share;</p><p>
  21. </p><p>}else{</p><p>
  22. </p><p>share = 1;</p><p>
  23. </p><p>id_next =share;</p><p>
  24. </p><p>}</p><p>
  25. </p><p>}while(t</p><p>
  26. </p><p>}</p><p></p>
复制代码



回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-3-29 16:21 , Processed in 0.064688 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表