一种搭建分布式测试环境和批量性能测试的思路

发表于:2013-1-04 10:14

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:小亮    来源:51Testing软件测试网采编

分享:

  配置文件设计好了,下面我们来写我们的Python脚本了(这里仅仅给出一些主要代码,大致明白意思就可以了)

  1. import subprocess 
  2. from mako.template import Template 
  3. import yaml 
  4.  
  5. # 运行一个测试任务 
  6. def runTask(config, task): 
  7.     runAbench(config, task) 
  8.  
  9. def runAbench(config, task): 
  10.      # 得到完成的abench运行命令 
  11.      command = Template(config["abenchCommand"]).render( 
  12.          abenchPath=config["abenchPath"], 
  13.          parallelNum=task["parallelNum"], 
  14.          seconds=task["seconds"], 
  15.          targetHost=task["targetHost"], 
  16.          targetPort=task["targetPort"], 
  17.          queryFilePath=task["queryFilePath"], 
  18.          ) 
  19.      pipe = subprocess.Popen(command, 
  20.          stdin=subprocess.PIPE, 
  21.          stdout=subprocess.PIPE, 
  22.          stderr=subprocess.PIPE, 
  23.          shell=True 
  24.          ) 
  25.      # 读取abench的运行结果,因为可能得保存下来吧 
  26.      result = pipe.stdout.read() 
  27.      # 下面可能是保存结果什么的 
  28.  
  29. if __name__ == "__main__": 
  30.     config = yaml.load(file(configFile)) 
  31.     for task in config["tasks"]: 
  32.        runTask(config, task)

  自动更新测试环境

  在我实际测试过程中,因为要更新的环境其实相当复杂,最多的时侯需要去10几台机器上做更新环境、停止/启动进程的操作。但我这里主要介绍思路,多一些机器和进程其实都一样。

  接着刚才的配置文件,我们只是在每一个task中设计了加压任务,但在加压前需要更新哪些环境没有涉及,按照阿里巴巴的ISearch架构,我就启动一个一行两列的Searcher环境,2列Searcher上有一个Merger,然后再有一个clustermap来监控。

  1. abenchPath: /opt/usr/bin/abench  # abench在哪儿? 
  2. abenchCommand: "${abenchPath} -p ${parallelNum} -s ${seconds} -k --http -o /dev/null ${targetHost} ${targetPort} ${queryFilePath}" 
  3. # 关于Searcher的一些通用配置 
  4. searcher: 
  5.     templateConfigFile: /home/admin/access-log/searcher_server.cfg  # 因为启动时的监听端口等信息需要从下面的运行任务中读取,因此这个也设计成一个模版文件 
  6.     templateLogConfigFile: /home/admin/access-log/searcher_log.cfg 
  7.     # 在Search机器上操作的命令 
  8.     commands: 
  9.         - "${searchRoot}/bin/is_searcher_server -c ${configFile} -l ${logConfigFile} -k stop > /dev/null 2>&1" 
  10.         - "${searchRoot}/bin/is_searcher_server -c ${configFile} -l ${logConfigFile} -k start -d > /dev/null 2>&1" 
  11. # 关于Merger的一些通用配置,和Searcher差不多,就不写了 
  12.  
  13. tasks: 
  14.   # 第一个测试用例,我可能需要测试单线程的情况 
  15.   - 
  16.     id: 1 # ID的作用是你在脚本中可以拿id作为结果存放的目录 
  17.     parallelNum: 1 # 并发数 
  18.     seconds: 1800 # 压半个小时 
  19.     targetHost: 10.20.137.22  # 目标主机 
  20.     targetPort: 9999 
  21.     queryFilePath: /home/admin/access-log/add-600w.query  # 请求放在这儿 
  22.  
  23.     # 两台Search机器,定义一个List 
  24.     searchers: 
  25.        - 
  26.          host: 10.20.150.61 
  27.          port: 6322 # 监听的端口 
  28.          username: test # 因为需要通过ssh协议登录上去操作,因此需要用户名密码。如果你已经把机器ssh都打通了,那就不需要了 
  29.          password: 12345 
  30.          configFile: "${searchRoot}/scripts/conf/searcher_server.cfg" # 启动时运行的配置文件 
  31.          logConfigFile: "${searchRoot}/scripts/conf/searcher_log.cfg" # 启动时运行的日志文件 
  32.        - 
  33.          host: 10.20.150.60 
  34.          port: 6322 
  35.          username: test 
  36.          password: 12345 
  37.          configFile: "${searchRoot}/scripts/conf/searcher_server.cfg" 
  38.          logConfigFile: "${searchRoot}/scripts/conf/searcher_log.cfg" 
  39.  
  40.     # 我这边只有一台merger,如果merger也是有多台的话,也可以把这个设计成一个List 
  41.     merger: 
  42.        host: 10.20.137.22 
  43.        port: 6088 
  44.        username: test 
  45.        password: 12345 
  46.        configFile: "${searchRoot}/scripts/conf/merger_server.cfg"

52/5<12345>
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号