框架下一键化测试工具

切目录输任务编号太烦了,就写了个这个

  1 #!/usr/bin/python
  2 # -*- coding: utf-8 -*-
  3 # __author__ = "JieYao"
  4
  5 import os
  6 import string
  7 import argparse
  8 import shutil
  9 import json
 10 import time
 11 import subprocess
 12
 13 usage = "该程序为框架下Tool的一键化测试工具,支持连续测试多组数据。会提取对应的测试结果文件放到指定目录。\n"
 14 parser = argparse.ArgumentParser(description = usage)
 15 parser.add_argument("-c", "--code_file", help="源码文件路径", required = True)
 16 parser.add_argument("-i", "--id", help="用户ID", required = True)
 17 parser.add_argument("-type", "--type", help="工具所属流程和模块,格式如\"meta.beta_diversity.pca\",\"meta.otunetwork\"", required = True)
 18 parser.add_argument("-p", "--para_file", help="参数文件路径,文件中每行代表一次测试,各个参数用tab隔开,以name:value的形式写,不需要引号", required = True)
 19 parser.add_argument("-o", "--output_dir", help="重设输出文件路径", required = False, default="./")
 20 args = vars(parser.parse_args())
 21
 22
 23 args[‘code_file‘] = os.path.abspath(args[‘code_file‘])
 24 args[‘para_file‘] = os.path.abspath(args[‘para_file‘])
 25 args[‘output_dir‘] = os.path.abspath(args[‘output_dir‘])
 26
 27 try:
 28     shutil.copyfile(args[‘code_file‘], "/mnt/ilustre/users/sanger-dev/biocluster/src/mbio/tools/" + args[‘type‘].replace(".", "/") + ".py")
 29 except:
 30     print  "代码文件copy到%s下时出现错误,请检查type参数" % "/mnt/ilustre/users/sanger-dev/biocluster/src/mbio/tools/" + args[‘type‘].replace(".", "/") + ".py"
 31     exit(0)
 32
 33 if args[‘output_dir‘] and not os.path.exists(args[‘output_dir‘]):
 34     os,mkdir(args[‘output_dir‘])
 35
 36 para_data = []
 37 for s in open(args[‘para_file‘]).readlines():
 38     s = s.strip().split()
 39     if not s:
 40         continue
 41     tmp_dict = dict()
 42     for data in s:
 43         position = data.find(":")
 44         tmp_dict[data[:position]] = data[position+1 : len(data)]
 45     para_data += [tmp_dict]
 46
 47 option_type = dict()
 48 with open(args[‘code_file‘], "r") as tmp_file:
 49     for text in tmp_file.readlines():
 50         if "name" in text and "type" in text:
 51             text = text.strip()
 52             if text[-1] != "}":
 53                 text = text[0:-1]
 54             try:
 55                 data = json.loads(text)
 56                 if "type" in data.keys() and "name" in data.keys():
 57                     option_type[data["name"]] = data["type"]
 58             except:
 59                 continue
 60
 61 std_option = dict()
 62
 63 file_name = os.path.split(args[‘code_file‘])[1]
 64 json_name = "single_" + os.path.splitext(file_name)[0] + ".json"
 65 py_name = args["output_dir"] + ‘/test_single_‘ + file_name
 66 date = time.strftime(‘%Y%m%d‘,time.localtime(time.time()))
 67 log_file = "/mnt/ilustre/users/sanger-dev/workspace/%s/Single_%s" %(date, args[‘id‘])
 68
 69 with open(py_name, "w") as tmp_file:
 70     tmp_file.write("#!/mnt/ilustre/users/sanger-dev/app/program/Python/bin/python\n")
 71     tmp_file.write("from mbio.workflows.single import SingleWorkflow\n")
 72     tmp_file.write("from biocluster.wsheet import Sheet\n")
 73     tmp_file.write("wsheet = Sheet(\"%s\")\n" % json_name)
 74     tmp_file.write("wf = SingleWorkflow(wsheet)\n")
 75     tmp_file.write("wf.run()\n")
 76
 77 for i in range(len(para_data)):
 78     for keys in para_data[i].keys():
 79         if keys in option_type.keys():
 80             if option_type[keys] == "bool":
 81                 para_data[i][keys] = bool(para_data[i][keys])
 82             elif option_type[keys] == "int":
 83                 para_data[i][keys] = int(para_data[i][keys])
 84             elif option_type[keys] == "float":
 85                 para_data[i][keys] = float(para_data[i][keys])
 86             else:
 87                 continue
 88     std_option[‘type‘] = "tool"
 89     std_option[‘name‘] = args[‘type‘]
 90     std_option[‘options‘] = para_data[i]
 91     std_option[‘id‘] = args[‘id‘]
 92
 93     with open(json_name, "w") as tmp_file:
 94         tmp_file.write(json.dumps(std_option, indent=4))
 95
 96     task_ID = ""
 97     print "开始第%d组参数的测试。" %(i+1)
 98     try:
 99         os.system("python %s > /dev/null" % py_name)
100         print "第%d组参数测试运行完成" %(i+1)
101     except:
102         print "第%d组参数测试运行失败" %(i+1)
103         continue
104     for text in open(log_file + "/log.txt", "r").readlines():
105         if "ID" not in text:
106             continue
107         text = text.strip()[text.find("ID")+3:]
108         while len(text)>0 and text[0] not in "1234567890":
109             text = text[1:]
110         task_ID = text[:5]
111     group_name = args[‘output_dir‘] + "/Option_Group_%d_" %(i+1)
112     if os.path.exists(group_name + task_ID):
113         shutil.rmtree(group_name + task_ID)
114     os.mkdir(group_name + task_ID)
115     calc_path = log_file + "/" + os.path.splitext(file_name)[0].capitalize()
116     for tmp_name in os.listdir(calc_path):
117         files = os.path.join(calc_path, tmp_name)
118         if os.path.isdir(files):
119             os.system("cp -r %s %s" %(files, group_name + task_ID))
120         if task_ID in files:
121             os.system("cp %s %s" %(files, group_name + task_ID))
122     shutil.move(json_name, group_name + task_ID)
时间: 2024-10-19 02:22:34

框架下一键化测试工具的相关文章

lLinux 下 Stress 压力测试工具

Stress是什么 stress是一个linux下的压力测试工具,专门为那些想要测试自己的系统,完全高负荷和监督这些设备运行的用户. 安装 方式一 将stress的安装包上传并解压到linux服务器的/usr/local/src路径下, 执行:tar -xf stress_1.0.1.orig.tar.gz 进入解压后的stress-1.0.1文件夹, 输入:./configure 进行配置,若配置失败,并打印no acceptable c compiler found in path, 则表示

linux下web压力测试工具ab使用及详解

APACHE自带的测试工具AB(apache benchmark).在APACHE的bin目录下.格式: ./ab [options] [http://]hostname[:port]/path参数:    -n requests     Number of requests to perform    //在测试会话中所执行的请求个数.默认时,仅执行一个请求    -c concurrency Number of multiple requests to make    //一次产生的请求个数

Windows 平台下局域网劫持测试工具 – EvilFoca

简介 安全测试工具可能含有攻击性,请谨慎适用于安全教学及学习用途,禁止非法利用! EvilFoca是Windows环境下基于.NET FrameWork的一款轻量级的劫持测试工具.与BackTrack和Kali_Linux下复杂的命令相比,EvilFoca更加小巧,轻便,简单,但其效果更加显著高效. 准备工作 Logo: Logo有点卖萌-- 官网:http://www.informatica64.com/evilfoca/下载:http://www.informatica64.com/evil

linux 下网站压力测试工具webbench

一直在用webbench ,这个linux下的网站压力测试工具.整理下. 笔记本装的ubuntu,其他linux系统也差不多. webbench 需要先安装 ctags,一个vim的阅读插件,可以直接输入ctags看看系统上装了没有,如果需要安装直接命令:sudo apt-get install ctags (ubuntu,debian支持). 或者源码安装: wget http://prdownloads.sourceforge.net/ctags/ctags-5.8.tar.gz  tar

linux下web压力测试工具siege的使用

linux下得web压力测试工具,最常用的应该就是apache的ab了,当然可供选择的有很多.webbench,http_load.看你个人爱好了.不过,最近,用的最顺手的是siege. siege官网地址http://www.joedog.org/ ,最新版本3.0.8,下载地址http://download.joedog.org/siege/ 1.安装 wget http://download.joedog.org/siege/siege-3.0.8.tar.gz tar xzvf sieg

Linux下的内核测试工具——perf使用简介

Perf是Linux kernel自带的系统性能优化工具.Perf的优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature.pef可以用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能. 1.perf的安装 由于我们经常是在自己编译的内核上进行开发工作,这里需要有包含调式信息的内核启动镜像文件vmlinux,在自定义内核的基础之上,进入linux内核源码,linux/tools/perf make make instal

linux下的压力测试工具

1.http_load 2.webbench 3.ab -n 测试多少次 -c 并fa数 apache自带的软件 4.siege

【工具】Android下的渗透测试工具

这是google的一个项目,地址在最后...最后面有美化文档 Ad Network Detector (1.2): http://market.android.com/details?id=com.lookout.addetector App Backup & Restore (1.0.5): http://market.android.com/details?id=mobi.infolife.appbackup App Cache Cleaner (1.1.3): http://market.

Android平台下渗透测试工具大集合

Android平台下渗透测试工具大集合 分享一个google的项目,各种Android下的渗透测试工具. Ad Network Detector (1.2): http://market.android.com/details?id=com.lookout.addetector App Backup & Restore (1.0.5): http://market.android.com/details?id=mobi.infolife.appbackup App Cache Cleaner (