def benchmark_gtopk_sparse_allreduce(): logger.setLevel(logging.INFO) comm = MPI.COMM_WORLD rank = comm.rank #np.random.seed(rank) size = 25 * 1024 * 1024 ratio = 0.001 tensor = np.random.rand(size).astype(np.float32) k = int(tensor.size * ratio) indexes, values = utils.topk(tensor, k) #indexes, values = topk(tensor, k) #logger.info('topk[%d]%s', rank, values) tmp = tensor[indexes] tensor.fill(0.) tensor[indexes] = tmp logger.debug('[%d]%s', rank, tensor) storage = {} t = gtopk_sparse_allreduce(comm, tensor, storage=storage, indexes=indexes) iteration = 10 stime = time.time() for i in range(iteration): t, _ = gtopk_sparse_allreduce(comm, tensor, storage=storage, indexes=indexes) total_time = time.time() - stime logger.info('average time: %f', total_time / iteration)
def benchmark_gtopk_sparse_allreduce(): logger.setLevel(logging.DEBUG) np.set_printoptions(precision=3) comm = MPI.COMM_WORLD rank = comm.rank #np.random.seed(rank) size = 8 ratio = 0.5 tensor = np.random.rand(size).astype(np.float32) k = int(tensor.size * ratio) indexes, values = utils.topk(tensor, k) #indexes, values = topk(tensor, k) #logger.info('topk[%d]%s', rank, values) tmp = tensor[indexes] tensor.fill(0.) tensor[indexes] = tmp logger.debug('[%d]%s', rank, tensor) storage = {} #t = gtopk_sparse_allreduce(comm, tmp, storage=storage, indexes=indexes) result, global_indexes, included_indexes = gtopk_sparse_recursive_allreduce( comm, tmp, storage=storage, indexes=indexes, dtype=np.float32) iteration = 10 stime = time.time() logger.debug('[%d]value: %s, \n indexes: %s, \n included_indexes: %s', rank, result, global_indexes, included_indexes) #for i in range(iteration): # t,_ = gtopk_sparse_allreduce(comm, tmp, storage=storage, indexes=indexes) total_time = time.time() - stime
def main(): parser = OptionParser( description="Upload tests cases to TestRail. " "See settings.py for configuration." ) parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Enable debug output") parser.add_option('-j', '--job-name', dest='job_name', default=None, help='Jenkins swarm runner job name') parser.add_option('-N', '--build-number', dest='build_number', default='latest', help='Jenkins swarm runner build number') parser.add_option('-o', '--check_one_section', action="store_true", dest='check_one_section', default=False, help='Look for existing test case only in specified ' 'section of test suite.') (options, args) = parser.parse_args() if options.verbose: logger.setLevel(DEBUG) project = TestRailProject( url=TestRailSettings.url, user=TestRailSettings.user, password=TestRailSettings.password, project=TestRailSettings.project ) testrail_section = project.get_section_by_name( suite_id=project.get_suite_by_name(TestRailSettings.tests_suite)['id'], section_name=TestRailSettings.tests_section ) testrail_milestone = project.get_milestone_by_name( name=TestRailSettings.milestone) tests_groups = get_tests_groups_from_jenkins( options.job_name, options.build_number) if options.job_name else [] # If Jenkins job build is specified, but it doesn't have downstream builds # with tests groups in jobs names, then skip tests cases uploading because # ALL existing tests cases will be uploaded if options.job_name and not tests_groups: return tests_descriptions = get_tests_descriptions( milestone_id=testrail_milestone['id'], tests_include=TestRailSettings.tests_include, tests_exclude=TestRailSettings.tests_exclude, groups=tests_groups ) upload_tests_descriptions(testrail_project=project, section_id=testrail_section['id'], tests=tests_descriptions, check_all_sections=not options.check_one_section)
def changelog(signum, frame): for handler in logger.handlers[:]: logger.removeHandler(handler) logfile = "{0}/app.log.{1}".format(settings["log_path"], time.strftime("%Y%m%d")) fh = logging.FileHandler(filename=logfile) fh.setFormatter(settings["log_format"]) logger.setLevel(logging.INFO) logger.addHandler(fh)
def setting_recup(): # Function to read parameter settings args = parser_generation() logger.setLevel(args.verbose.upper()) if args.i_path is None and not args.profile == 2: logger.warning( "\nCannot analyse an image neither a video without a path\nSwitching to Webcam..." ) args.profile = 2 try: model = load_model(args.model_path) except OSError: logger.critical("\nCannot localize model\nLeaving...") sys.exit(3) return args, model
def initLog(level): """初始化日志""" logger.setLevel(level) # 创建一个handler,用于写入日志文件 fh = logging.FileHandler('webtest.log') fh.setLevel(level) # 再创建一个handler,用于输出到控制台 ch = logging.StreamHandler() ch.setLevel(level) # 定义handler的输出格式 formatter = logging.Formatter('[%(asctime)s-%(name)s-%(levelname)s] %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) # 给logger添加handler logger.addHandler(fh) logger.addHandler(ch)
import tornado.httpserver import tornado.ioloop import tornado.options from tornado.options import define, options from handler import TranspondHandler from settings import TEMPLATE_PATH, STATIC_PATH, logger define("port", default=8000, help="run on the given port", type=int) define("id", default=0, help="server id", type=int) define("debug", default=False, help="Debug Mode", type=bool) class Application(tornado.web.Application): def __init__(self): handlers = [(r'.*', TranspondHandler),] settings = dict( template_path=TEMPLATE_PATH, static_path=STATIC_PATH, debug=options.debug, gzip=True, ) tornado.web.Application.__init__(self, handlers, **settings) if __name__ == "__main__": tornado.options.parse_command_line() logger.setLevel(logging.DEBUG) if options.debug else logger.setLevel(logging.ERROR) http_server = tornado.httpserver.HTTPServer(Application()) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
from handler import TranspondHandler from settings import TEMPLATE_PATH, STATIC_PATH, logger define("port", default=8000, help="run on the given port", type=int) define("id", default=0, help="server id", type=int) define("debug", default=False, help="Debug Mode", type=bool) class Application(tornado.web.Application): def __init__(self): handlers = [ (r'.*', TranspondHandler), ] settings = dict( template_path=TEMPLATE_PATH, static_path=STATIC_PATH, debug=options.debug, gzip=True, ) tornado.web.Application.__init__(self, handlers, **settings) if __name__ == "__main__": tornado.options.parse_command_line() logger.setLevel(logging.DEBUG) if options.debug else logger.setLevel( logging.ERROR) http_server = tornado.httpserver.HTTPServer(Application()) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
parser.add_option("-f", "--file", dest="filename", help="target IPs to scan") parser.add_option("-v","--verbose", action="store_true", dest="verbose", help="get more verbose output") parser.add_option("-o", "--output", dest="output", help="output file") # parser.add_option("-t", "--threads", dest="threads", # help="threads number used for scan") (opt, args) = parser.parse_args() if not opt.filename and not opt.ip: parser.print_help() exit(1) if opt.verbose: logger.setLevel(logging.INFO) if opt.output: fh = logging.FileHandler(opt.output) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) logger.addHandler(fh) if opt.filename: with open(opt.filename, "rb") as f: for line in f: if line.lstrip(" ").startswith("#"): continue ipSegmentScan(line)
def main(): parser = OptionParser( description="Publish results of system tests from Jenkins build to " "TestRail. See settings.py for configuration." ) parser.add_option('-j', '--job-name', dest='job_name', default=None, help='Jenkins swarm runner job name') parser.add_option('-N', '--build-number', dest='build_number', default='latest', help='Jenkins swarm runner build number') parser.add_option("-l", "--live", dest="live_report", action="store_true", help="Get tests results from running swarm") parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Enable debug output") (options, args) = parser.parse_args() if options.verbose: logger.setLevel(DEBUG) if options.live_report and options.build_number == 'latest': build_number = 'latest_started' else: build_number = options.build_number # STEP #1 # Initialize TestRail Project and define configuration logger.info('Initializing TestRail Project configuration...') project = TestRailProject(url=TestRailSettings.url, user=TestRailSettings.user, password=TestRailSettings.password, project=TestRailSettings.project) logger.info('Initializing TestRail Project configuration... done') operation_systems = [{'name': config['name'], 'id': config['id'], 'distro': config['name'].split()[0].lower()} for config in project.get_config_by_name( 'Operation System')['configs']] os_mile = {'6.1': ['Centos 6.5', 'Ubuntu 14.04'], '6.0.1': ['Centos 6.5', 'Ubuntu 12.04']} tests_results = {} # STEP #2 # Get tests results from Jenkins runner_build = Build(options.job_name, build_number) runs = runner_build.build_data['runs'] # Analyze each test individually for run_one in runs: if '5.1' in run_one['url']: continue # Release 5.1 to skip tests_result = get_job_info(run_one['url']) if not tests_result['description']: continue # Not completed results to skip if 'skipping' in tests_result['description']: continue # Not performed tests to skip tests_job = {'result': tests_result['result'], 'name': (options.job_name + '/' + tests_result['url'].split('/')[-3]), 'number': int(tests_result['url'].split('/')[-2]), 'mile': (tests_result['description']. split()[0].split('-')[0]), 'iso': (int(tests_result['description']. split()[0].split('-')[1]))} if tests_job['mile'] not in tests_results: tests_results[tests_job['mile']] = {} test_mile = tests_results[tests_job['mile']] if tests_job['iso'] not in test_mile: test_mile[tests_job['iso']] = {} test_iso = test_mile[tests_job['iso']] for os in operation_systems: if os['distro'] in tests_job['name'].lower() and\ os['name'] in os_mile[tests_job['mile']]: if os['id'] not in test_iso: (test_iso[os['id']]) = [] test_os_id = test_iso[os['id']] test_os_id.extend(get_tests_results(tests_job)) # STEP #3 # Create new TestPlan in TestRail (or get existing) and add TestRuns for mile in tests_results: mile_tests_suite = '{0}{1}'.format(TestRailSettings.tests_suite, mile) logger.info(mile_tests_suite) tests_suite = project.get_suite_by_name(mile_tests_suite) milestone = project.get_milestone_by_name(name=mile) for iso_number in tests_results.get(mile, {}): # Create new TestPlan name check the same name in testrail test_plan_name = '{milestone} iso #{iso_number}'.format( milestone=milestone['name'], iso_number=iso_number) test_plan = project.get_plan_by_name(test_plan_name) if not test_plan: test_plan = project.add_plan( test_plan_name, description='/'.join([JENKINS['url'], 'job', '{0}.all'.format(milestone['name']), str(iso_number)]), milestone_id=milestone['id'], entries=[]) logger.info('Created new TestPlan "{0}".' .format(test_plan_name)) else: logger.info('Found existing TestPlan "{0}".' .format(test_plan_name)) plan_entries = [] # Create a test plan entry config_ids = [] for os in operation_systems: if os['name'] in os_mile[mile]: config_ids.append(os['id']) cases_ids = [] plan_entries.append( project.test_run_struct( name=tests_suite['name'], suite_id=tests_suite['id'], milestone_id=milestone['id'], description=('Results of system tests ({t_suite})' ' on iso #"{iso_number}"' .format(t_suite=tests_suite['name'], iso_number=iso_number)), config_ids=[os['id']], include_all=True, case_ids=cases_ids)) # Create a test plan entry with the test run run = find_run_by_name(test_plan, tests_suite['name']) if not run: logger.info('Adding a test plan entry with test run %s ...', tests_suite['name']) entry = project.add_plan_entry(plan_id=test_plan['id'], suite_id=tests_suite['id'], config_ids=config_ids, runs=plan_entries) logger.info('The test plan entry has been added.') run = entry['runs'][0] test_plan = project.get_plan(test_plan['id']) # STEP #4 # Upload tests results to TestRail logger.info('Uploading tests results to TestRail...') for os_id in tests_results.get(mile, {})\ .get(iso_number, {}): logger.info('Checking tests results for %s...', project.get_config(os_id)['name']) tests_added = publish_results( project=project, milestone_id=milestone['id'], test_plan=test_plan, suite_id=tests_suite['id'], config_id=os_id, results=tests_results[mile][iso_number][os_id]) logger.debug('Added new results for tests (%s): %s', project.get_config(os_id)['name'], [r.group for r in tests_added]) logger.info('Report URL: %s', test_plan['url'])
result[service_name] = json.loads(resp.text) result[service_name]['port'] = port # result[service] = resp.text #except requests.exceptions.ConnectionError: #except requests.exceptions.ReadTimeout: except requests.RequestException: continue return result if __name__=="__main__": parser = OptionParser() parser.add_option("-t", "--target", dest="ip", help="target IP to scan") parser.add_option("-v","--verbose", action="store_true", dest="verbose", help="get more verbose output") (opt, args) = parser.parse_args() if not opt.ip: parser.print_help() exit(1) if opt.verbose: logger.setLevel(logging.DEBUG) res= checkIP(opt.ip) from pprint import pprint pprint(res)
def main(): parser = OptionParser( description="Publish results of system tests from Jenkins build to " "TestRail. See settings.py for configuration." ) parser.add_option('-j', '--job-name', dest='job_name', default=None, help='Jenkins swarm runner job name') parser.add_option('-N', '--build-number', dest='build_number', default='latest', help='Jenkins swarm runner build number') parser.add_option('-o', '--one-job', dest='one_job_name', default=None, help=('Process only one job name from the specified ' 'parent job or view')) parser.add_option("-w", "--view", dest="jenkins_view", default=False, help="Get system tests jobs from Jenkins view") parser.add_option("-l", "--live", dest="live_report", action="store_true", help="Get tests results from running swarm") parser.add_option("-m", "--manual", dest="manual_run", action="store_true", help="Manually add tests cases to TestRun (tested only)") parser.add_option("-s", "--statistics", action="store_true", dest="bug_statistics", default=False, help="Make a statistics for bugs linked to TestRail for " "the test run") parser.add_option('-c', '--create-plan-only', action="store_true", dest="create_plan_only", default=False, help='Jenkins swarm runner job name') parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Enable debug output") (options, args) = parser.parse_args() if options.verbose: logger.setLevel(DEBUG) if options.live_report and options.build_number == 'latest': options.build_number = 'latest_started' # STEP #1 # Initialize TestRail Project and define configuration logger.info('Initializing TestRail Project configuration...') project = TestRailProject(url=TestRailSettings.url, user=TestRailSettings.user, password=TestRailSettings.password, project=TestRailSettings.project) tests_suite = project.get_suite_by_name(TestRailSettings.tests_suite) operation_systems = [{'name': config['name'], 'id': config['id'], 'distro': config['name'].split()[0].lower()} for config in project.get_config_by_name( 'Operation System')['configs'] if config['name'] in TestRailSettings.operation_systems] tests_results = {os['distro']: [] for os in operation_systems} # STEP #2 # Get tests results from Jenkins logger.info('Getting tests results from Jenkins...') if options.jenkins_view: jobs = get_jobs_for_view(options.jenkins_view) tests_jobs = [{'name': j, 'number': 'latest'} for j in jobs if 'system_test' in j] if \ not options.create_plan_only else [] runner_job = [j for j in jobs if 'runner' in j][0] runner_build = Build(runner_job, 'latest') elif options.job_name: runner_build = Build(options.job_name, options.build_number) tests_jobs = get_downstream_builds(runner_build.build_data) if \ not options.create_plan_only else [] else: logger.error("Please specify either Jenkins swarm runner job name (-j)" " or Jenkins view with system tests jobs (-w). Exiting..") return is_running_builds = False for systest_build in tests_jobs: if (options.one_job_name and options.one_job_name != systest_build['name']): logger.debug("Skipping '{0}' because --one-job is specified" .format(systest_build['name'])) continue if options.job_name: if 'result' not in systest_build.keys(): logger.debug("Skipping '{0}' job because it does't run tests " "(build #{1} contains no results)".format( systest_build['name'], systest_build['number'])) continue if systest_build['result'] is None: logger.debug("Skipping '{0}' job (build #{1}) because it's sti" "ll running...".format(systest_build['name'], systest_build['number'],)) is_running_builds = True continue for os in tests_results.keys(): if os in systest_build['name'].lower(): tests_results[os].extend(get_tests_results(systest_build, os)) # STEP #3 # Create new TestPlan in TestRail (or get existing) and add TestRuns milestone, iso_number, prefix = get_version(runner_build.build_data) milestone = project.get_milestone_by_name(name=milestone) test_plan_name = ' '.join( filter(lambda x: bool(x), (milestone['name'], prefix, 'iso', '#' + str(iso_number)))) test_plan = project.get_plan_by_name(test_plan_name) iso_link = '/'.join([JENKINS['url'], 'job', '{0}.all'.format(milestone['name']), str(iso_number)]) if not test_plan: test_plan = project.add_plan(test_plan_name, description=iso_link, milestone_id=milestone['id'], entries=[] ) logger.info('Created new TestPlan "{0}".'.format(test_plan_name)) else: logger.info('Found existing TestPlan "{0}".'.format(test_plan_name)) if options.create_plan_only: return plan_entries = [] all_cases = project.get_cases(suite_id=tests_suite['id']) for os in operation_systems: cases_ids = [] if options.manual_run: all_results_groups = [r.group for r in tests_results[os['distro']]] for case in all_cases: if case['custom_test_group'] in all_results_groups: cases_ids.append(case['id']) plan_entries.append( project.test_run_struct( name='{suite_name}'.format(suite_name=tests_suite['name']), suite_id=tests_suite['id'], milestone_id=milestone['id'], description='Results of system tests ({tests_suite}) on is' 'o #"{iso_number}"'.format(tests_suite=tests_suite['name'], iso_number=iso_number), config_ids=[os['id']], include_all=True, case_ids=cases_ids ) ) if not any(entry['suite_id'] == tests_suite['id'] for entry in test_plan['entries']): if project.add_plan_entry(plan_id=test_plan['id'], suite_id=tests_suite['id'], config_ids=[os['id'] for os in operation_systems], runs=plan_entries): test_plan = project.get_plan(test_plan['id']) # STEP #4 # Upload tests results to TestRail logger.info('Uploading tests results to TestRail...') for os in operation_systems: logger.info('Checking tests results for "{0}"...'.format(os['name'])) results_to_publish = publish_results( project=project, milestone_id=milestone['id'], test_plan=test_plan, suite_id=tests_suite['id'], config_id=os['id'], results=tests_results[os['distro']] ) logger.debug('Added new results for tests ({os}): {tests}'.format( os=os['name'], tests=[r.group for r in results_to_publish] )) logger.info('Report URL: {0}'.format(test_plan['url'])) # STEP #5 # Provide the bugs linked in TestRail for current run as a short statistics if options.bug_statistics: if is_running_builds: logger.info("Some jobs are still running. " "Skipping bug statistics report, please try later.") else: logger.info("Generating a bug statistics report...") bug_results = make_bug_statistics(tests_results, test_plan, tests_suite, project, operation_systems) project.update_plan(plan_id=test_plan['id'], description=test_plan['description'] + '\n' + bug_results)
def main(): parser = OptionParser(description="Upload tests cases to TestRail. " "See settings.py for configuration.") parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Enable debug output") parser.add_option("-j", "--job-name", dest="job_name", default=None, help="Jenkins swarm runner job name") parser.add_option( "-N", "--build-number", dest="build_number", default="latest", help="Jenkins swarm runner build number" ) parser.add_option( "-o", "--check_one_section", action="store_true", dest="check_one_section", default=False, help="Look for existing test case only in specified " "section of test suite.", ) (options, args) = parser.parse_args() if options.verbose: logger.setLevel(DEBUG) project = TestRailProject( url=TestRailSettings.url, user=TestRailSettings.user, password=TestRailSettings.password, project=TestRailSettings.project, ) testrail_section = project.get_section_by_name( suite_id=project.get_suite_by_name(TestRailSettings.tests_suite)["id"], section_name=TestRailSettings.tests_section, ) testrail_milestone = project.get_milestone_by_name(name=TestRailSettings.milestone) distros = [ config["name"].split()[0].lower() for config in project.get_config_by_name("Operation System")["configs"] if config["name"] in TestRailSettings.operation_systems ] tests_groups = ( get_tests_groups_from_jenkins(options.job_name, options.build_number, distros) if options.job_name else [] ) # If Jenkins job build is specified, but it doesn't have downstream builds # with tests groups in jobs names, then skip tests cases uploading because # ALL existing tests cases will be uploaded if options.job_name and not tests_groups: return tests_descriptions = get_tests_descriptions( milestone_id=testrail_milestone["id"], tests_include=TestRailSettings.tests_include, tests_exclude=TestRailSettings.tests_exclude, groups=tests_groups, ) upload_tests_descriptions( testrail_project=project, section_id=testrail_section["id"], tests=tests_descriptions, check_all_sections=not options.check_one_section, )
def main(): parser = OptionParser( description="Publish results of system tests from Jenkins build to " "TestRail. See settings.py for configuration." ) parser.add_option("-j", "--job-name", dest="job_name", default=None, help="Jenkins swarm runner job name") parser.add_option( "-N", "--build-number", dest="build_number", default="latest", help="Jenkins swarm runner build number" ) parser.add_option( "-o", "--one-job", dest="one_job_name", default=None, help=("Process only one job name from the specified " "parent job or view"), ) parser.add_option( "-w", "--view", dest="jenkins_view", default=False, help="Get system tests jobs from Jenkins view" ) parser.add_option( "-l", "--live", dest="live_report", action="store_true", help="Get tests results from running swarm" ) parser.add_option( "-m", "--manual", dest="manual_run", action="store_true", help="Manually add tests cases to TestRun (tested only)", ) parser.add_option( "-s", "--statistics", action="store_true", dest="bug_statistics", default=False, help="Make a statistics for bugs linked to TestRail for " "the test run", ) parser.add_option( "-c", "--create-plan-only", action="store_true", dest="create_plan_only", default=False, help="Jenkins swarm runner job name", ) parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Enable debug output") (options, args) = parser.parse_args() if options.verbose: logger.setLevel(DEBUG) if options.live_report and options.build_number == "latest": options.build_number = "latest_started" # STEP #1 # Initialize TestRail Project and define configuration logger.info("Initializing TestRail Project configuration...") project = TestRailProject( url=TestRailSettings.url, user=TestRailSettings.user, password=TestRailSettings.password, project=TestRailSettings.project, ) tests_suite = project.get_suite_by_name(TestRailSettings.tests_suite) operation_systems = [ {"name": config["name"], "id": config["id"], "distro": config["name"].split()[0].lower()} for config in project.get_config_by_name("Operation System")["configs"] if config["name"] in TestRailSettings.operation_systems ] tests_results = {os["distro"]: [] for os in operation_systems} # STEP #2 # Get tests results from Jenkins logger.info("Getting tests results from Jenkins...") if options.jenkins_view: jobs = get_jobs_for_view(options.jenkins_view) tests_jobs = ( [{"name": j, "number": "latest"} for j in jobs if "system_test" in j] if not options.create_plan_only else [] ) runner_job = [j for j in jobs if "runner" in j][0] runner_build = Build(runner_job, "latest") elif options.job_name: runner_build = Build(options.job_name, options.build_number) tests_jobs = get_downstream_builds(runner_build.build_data) if not options.create_plan_only else [] else: logger.error( "Please specify either Jenkins swarm runner job name (-j)" " or Jenkins view with system tests jobs (-w). Exiting.." ) return is_running_builds = False for systest_build in tests_jobs: if options.one_job_name and options.one_job_name != systest_build["name"]: logger.debug("Skipping '{0}' because --one-job is specified".format(systest_build["name"])) continue if options.job_name: if "result" not in systest_build.keys(): logger.debug( "Skipping '{0}' job because it does't run tests " "(build #{1} contains no results)".format(systest_build["name"], systest_build["number"]) ) continue if systest_build["result"] is None: logger.debug( "Skipping '{0}' job (build #{1}) because it's sti" "ll running...".format(systest_build["name"], systest_build["number"]) ) is_running_builds = True continue for os in tests_results.keys(): if os in systest_build["name"].lower(): tests_results[os].extend(get_tests_results(systest_build, os)) # STEP #3 # Create new TestPlan in TestRail (or get existing) and add TestRuns milestone, iso_number, prefix = get_version(runner_build.build_data) milestone = project.get_milestone_by_name(name=milestone) test_plan_name = " ".join(filter(lambda x: bool(x), (milestone["name"], prefix, "iso", "#" + str(iso_number)))) test_plan = project.get_plan_by_name(test_plan_name) iso_link = "/".join([JENKINS["url"], "job", "{0}.all".format(milestone["name"]), str(iso_number)]) if not test_plan: test_plan = project.add_plan(test_plan_name, description=iso_link, milestone_id=milestone["id"], entries=[]) logger.info('Created new TestPlan "{0}".'.format(test_plan_name)) else: logger.info('Found existing TestPlan "{0}".'.format(test_plan_name)) if options.create_plan_only: return plan_entries = [] all_cases = project.get_cases(suite_id=tests_suite["id"]) for os in operation_systems: cases_ids = [] if options.manual_run: all_results_groups = [r.group for r in tests_results[os["distro"]]] for case in all_cases: if case["custom_test_group"] in all_results_groups: cases_ids.append(case["id"]) plan_entries.append( project.test_run_struct( name="{suite_name}".format(suite_name=tests_suite["name"]), suite_id=tests_suite["id"], milestone_id=milestone["id"], description="Results of system tests ({tests_suite}) on is" 'o #"{iso_number}"'.format(tests_suite=tests_suite["name"], iso_number=iso_number), config_ids=[os["id"]], include_all=True, case_ids=cases_ids, ) ) if not any(entry["suite_id"] == tests_suite["id"] for entry in test_plan["entries"]): if project.add_plan_entry( plan_id=test_plan["id"], suite_id=tests_suite["id"], config_ids=[os["id"] for os in operation_systems], runs=plan_entries, ): test_plan = project.get_plan(test_plan["id"]) # STEP #4 # Upload tests results to TestRail logger.info("Uploading tests results to TestRail...") for os in operation_systems: logger.info('Checking tests results for "{0}"...'.format(os["name"])) results_to_publish = publish_results( project=project, milestone_id=milestone["id"], test_plan=test_plan, suite_id=tests_suite["id"], config_id=os["id"], results=tests_results[os["distro"]], ) logger.debug( "Added new results for tests ({os}): {tests}".format( os=os["name"], tests=[r.group for r in results_to_publish] ) ) logger.info("Report URL: {0}".format(test_plan["url"])) # STEP #5 # Provide the bugs linked in TestRail for current run as a short statistics if options.bug_statistics: if is_running_builds: logger.info("Some jobs are still running. " "Skipping bug statistics report, please try later.") else: logger.info("Generating a bug statistics report...") bug_results = make_bug_statistics(tests_results, test_plan, tests_suite, project, operation_systems) project.update_plan(plan_id=test_plan["id"], description=test_plan["description"] + "\n" + bug_results)
def main(): parser = argparse.ArgumentParser( description="Generate statistics for bugs linked to TestRun. Publish " "statistics to testrail if necessary." ) parser.add_argument('plan_id', type=int, nargs='?', default=None, help='Test plan ID in TestRail') parser.add_argument('-j', '--job-name', dest='job_name', type=str, default=None, help='Name of Jenkins job which runs tests (runner). ' 'It will be used for TestPlan search instead ID') parser.add_argument('-n', '--build-number', dest='build_number', default='latest', help='Jenkins job build number') parser.add_argument('-r', '--run-id', dest='run_ids', type=str, default=None, help='(optional) IDs of TestRun to check (skip other)') parser.add_argument('-b', '--handle-blocked', action="store_true", dest='handle_blocked', default=False, help='Copy bugs links to downstream blocked results') parser.add_argument('-s', '--separate-runs', action="store_true", dest='separate_runs', default=False, help='Create separate statistics for each test run') parser.add_argument('-p', '--publish', action="store_true", help='Publish statistics to TestPlan description') parser.add_argument('-o', '--out-file', dest='output_file', default=None, type=str, help='Path to file to save statistics as JSON and/or ' 'HTML. Filename extension is added automatically') parser.add_argument('-H', '--html', action="store_true", help='Save statistics in HTML format to file ' '(used with --out-file option)') parser.add_argument('-q', '--quiet', action="store_true", help='Be quiet (disable logging except critical) ' 'Overrides "--verbose" option.') parser.add_argument("-v", "--verbose", action="store_true", help="Enable debug logging.") args = parser.parse_args() if args.verbose: logger.setLevel(DEBUG) if args.quiet: logger.setLevel(CRITICAL) testrail_project = get_testrail() if args.job_name: logger.info('Inspecting {0} build of {1} Jenkins job for TestPlan ' 'details...'.format(args.build_number, args.job_name)) test_plan_name = generate_test_plan_name(args.job_name, args.build_number) test_plan = testrail_project.get_plan_by_name(test_plan_name) if test_plan: args.plan_id = test_plan['id'] else: logger.warning('TestPlan "{0}" not found!'.format(test_plan_name)) if not args.plan_id: logger.error('There is no TestPlan to process, exiting...') return 1 run_ids = () if not args.run_ids else map(int, args.run_ids.split(',')) generator = StatisticsGenerator(testrail_project, args.plan_id, run_ids, args.handle_blocked) generator.generate() stats = generator.dump() if args.publish: logger.debug('Publishing bugs statistics to TestRail..') generator.publish(stats) if args.output_file: html = generator.dump_html(stats) if args.html else args.html save_stats_to_file(stats, args.output_file, html) if args.separate_runs: for run in generator.test_runs_stats: file_name = '{0}_{1}'.format(args.output_file, run['id']) stats = generator.dump(run_id=run['id']) html = (generator.dump_html(stats, run['id']) if args.html else args.html) save_stats_to_file(stats, file_name, html) logger.info('Statistics generation complete!')
def main(): parser = OptionParser( description="Publish results of system tests from Jenkins build to " "TestRail. See settings.py for configuration.") parser.add_option('-j', '--job-name', dest='job_name', default=None, help='Jenkins swarm runner job name') parser.add_option('-N', '--build-number', dest='build_number', default='latest', help='Jenkins swarm runner build number') parser.add_option('-o', '--one-job', dest='one_job_name', default=None, help=('Process only one job name from the specified ' 'parent job or view')) parser.add_option("-w", "--view", dest="jenkins_view", default=False, help="Get system tests jobs from Jenkins view") parser.add_option("-l", "--live", dest="live_report", action="store_true", help="Get tests results from running swarm") parser.add_option("-m", "--manual", dest="manual_run", action="store_true", help="Manually add tests cases to TestRun (tested only)") parser.add_option("-s", "--statistics", action="store_true", dest="bug_statistics", default=False, help="Make a statistics for bugs linked to TestRail for " "the test run") parser.add_option('-c', '--create-plan-only', action="store_true", dest="create_plan_only", default=False, help='Jenkins swarm runner job name') parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Enable debug output") (options, args) = parser.parse_args() if options.verbose: logger.setLevel(DEBUG) if options.live_report and options.build_number == 'latest': options.build_number = 'latest_started' # STEP #1 # Initialize TestRail Project and define configuration logger.info('Initializing TestRail Project configuration...') project = TestRailProject(url=TestRailSettings.url, user=TestRailSettings.user, password=TestRailSettings.password, project=TestRailSettings.project) tests_suite = project.get_suite_by_name(TestRailSettings.tests_suite) operation_systems = [ { 'name': config['name'], 'id': config['id'], 'distro': config['name'].split()[0].lower() } for config in project.get_config_by_name('Operation System')['configs'] if config['name'] in TestRailSettings.operation_systems ] tests_results = {os['distro']: [] for os in operation_systems} # STEP #2 # Get tests results from Jenkins logger.info('Getting tests results from Jenkins...') if options.jenkins_view: jobs = get_jobs_for_view(options.jenkins_view) tests_jobs = [{'name': j, 'number': 'latest'} for j in jobs if 'system_test' in j] if \ not options.create_plan_only else [] runner_job = [j for j in jobs if 'runner' in j][0] runner_build = Build(runner_job, 'latest') elif options.job_name: runner_build = Build(options.job_name, options.build_number) tests_jobs = get_downstream_builds(runner_build.build_data) if \ not options.create_plan_only else [] else: logger.error("Please specify either Jenkins swarm runner job name (-j)" " or Jenkins view with system tests jobs (-w). Exiting..") return is_running_builds = False for systest_build in tests_jobs: if (options.one_job_name and options.one_job_name != systest_build['name']): logger.debug( "Skipping '{0}' because --one-job is specified".format( systest_build['name'])) continue if options.job_name: if 'result' not in systest_build.keys(): logger.debug("Skipping '{0}' job because it does't run tests " "(build #{1} contains no results)".format( systest_build['name'], systest_build['number'])) continue if systest_build['result'] is None: logger.debug("Skipping '{0}' job (build #{1}) because it's sti" "ll running...".format( systest_build['name'], systest_build['number'], )) is_running_builds = True continue for os in tests_results.keys(): if os in systest_build['name'].lower(): tests_results[os].extend(get_tests_results(systest_build, os)) # STEP #3 # Create new TestPlan in TestRail (or get existing) and add TestRuns milestone, iso_number, prefix = get_version(runner_build.build_data) milestone = project.get_milestone_by_name(name=milestone) test_plan_name = ' '.join( filter(lambda x: bool(x), (milestone['name'], prefix, 'iso', '#' + str(iso_number)))) test_plan = project.get_plan_by_name(test_plan_name) if not test_plan: test_plan = project.add_plan(test_plan_name, description='/'.join([ JENKINS['url'], 'job', '{0}.all'.format(milestone['name']), str(iso_number) ]), milestone_id=milestone['id'], entries=[]) logger.info('Created new TestPlan "{0}".'.format(test_plan_name)) else: logger.info('Found existing TestPlan "{0}".'.format(test_plan_name)) if options.create_plan_only: return plan_entries = [] all_cases = project.get_cases(suite_id=tests_suite['id']) for os in operation_systems: cases_ids = [] if options.manual_run: all_results_groups = [r.group for r in tests_results[os['distro']]] for case in all_cases: if case['custom_test_group'] in all_results_groups: cases_ids.append(case['id']) plan_entries.append( project.test_run_struct( name='{suite_name}'.format(suite_name=tests_suite['name']), suite_id=tests_suite['id'], milestone_id=milestone['id'], description='Results of system tests ({tests_suite}) on is' 'o #"{iso_number}"'.format(tests_suite=tests_suite['name'], iso_number=iso_number), config_ids=[os['id']], include_all=True, case_ids=cases_ids)) if not any(entry['suite_id'] == tests_suite['id'] for entry in test_plan['entries']): if project.add_plan_entry( plan_id=test_plan['id'], suite_id=tests_suite['id'], config_ids=[os['id'] for os in operation_systems], runs=plan_entries): test_plan = project.get_plan(test_plan['id']) # STEP #4 # Upload tests results to TestRail logger.info('Uploading tests results to TestRail...') for os in operation_systems: logger.info('Checking tests results for "{0}"...'.format(os['name'])) results_to_publish = publish_results( project=project, milestone_id=milestone['id'], test_plan=test_plan, suite_id=tests_suite['id'], config_id=os['id'], results=tests_results[os['distro']]) logger.debug('Added new results for tests ({os}): {tests}'.format( os=os['name'], tests=[r.group for r in results_to_publish])) logger.info('Report URL: {0}'.format(test_plan['url'])) # STEP #5 # Provide the bugs linked in TestRail for current run as a short statistics if options.bug_statistics: if is_running_builds: logger.info("Some jobs are still running. " "Skipping bug statistics report, please try later.") else: logger.info("Generating a bug statistics report...") make_bug_statistics(tests_results, operation_systems)
def main(): parser = OptionParser(description="Upload tests cases to TestRail. " "See settings.py for configuration.") parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Enable debug output") parser.add_option('-j', '--job-name', dest='job_name', default=None, help='Jenkins swarm runner job name') parser.add_option('-N', '--build-number', dest='build_number', default='latest', help='Jenkins swarm runner build number') parser.add_option('-o', '--check_one_section', action="store_true", dest='check_one_section', default=False, help='Look for existing test case only in specified ' 'section of test suite.') (options, args) = parser.parse_args() if options.verbose: logger.setLevel(DEBUG) project = TestRailProject(url=TestRailSettings.url, user=TestRailSettings.user, password=TestRailSettings.password, project=TestRailSettings.project) testrail_section = project.get_section_by_name( suite_id=project.get_suite_by_name(TestRailSettings.tests_suite)['id'], section_name=TestRailSettings.tests_section) testrail_milestone = project.get_milestone_by_name( name=TestRailSettings.milestone) testrail_default_test_priority = [ priority['id'] for priority in project.get_priorities() if priority['is_default'] is True ][0] distros = [ config['name'].split()[0].lower() for config in project.get_config_by_name('Operation System')['configs'] if config['name'] in TestRailSettings.operation_systems ] tests_groups = get_tests_groups_from_jenkins( options.job_name, options.build_number, distros) if options.job_name else [] # If Jenkins job build is specified, but it doesn't have downstream builds # with tests groups in jobs names, then skip tests cases uploading because # ALL existing tests cases will be uploaded if options.job_name and not tests_groups: return tests_descriptions = get_tests_descriptions( milestone_id=testrail_milestone['id'], tests_include=TestRailSettings.tests_include, tests_exclude=TestRailSettings.tests_exclude, groups=tests_groups, default_test_priority=testrail_default_test_priority) upload_tests_descriptions(testrail_project=project, section_id=testrail_section['id'], tests=tests_descriptions, check_all_sections=not options.check_one_section)
import logging import tornado.httpserver import tornado.ioloop import tornado.options from tornado.options import define, options from handler import ProxyHandler from settings import TEMPLATE_PATH, STATIC_PATH, logger define("port", default=8000, help="run on the given port", type=int) define("debug", default=False, help="Debug Mode", type=bool) class Application(tornado.web.Application): def __init__(self): handlers = [(r'.*', ProxyHandler),] settings = dict( template_path=TEMPLATE_PATH, static_path=STATIC_PATH, debug=options.debug, gzip=True, ) tornado.web.Application.__init__(self, handlers, **settings) if __name__ == "__main__": tornado.options.parse_command_line() if options.debug:logger.setLevel(logging.DEBUG) http_server = tornado.httpserver.HTTPServer(Application()) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()