Ejemplo n.º 1
0
    def add_job(e_id, cron_time):
        # 添加定时任务
        seconds, minutes, hour, day, month, year = cron_time.split(' ')
        job_id = str(e_id)
        # 任务ID如果已存在,先删除
        EquipmentManagementList.remove_job(e_id)
        job_des = {
            'id': job_id,  # 任务的唯一ID,不要冲突
            'func': __name__ +
            ':EquipmentManagementList.scheduler_job',  # 执行任务的function名称
            'args': [e_id],  # 如果function需要参数,就在这里添加
            'trigger': {
                'type': 'cron',
                'year': year,
                'month': month,
                'day': day,
                'hour': hour,
                'minute': minutes,
                'second': seconds
            }
        }

        try:
            run_test_job.add_job(func=job_des['func'],
                                 id=job_des['id'],
                                 args=job_des['args'],
                                 trigger=job_des['trigger'])
            current_job = run_test_job.get_job(job_des['id'])
            log_main.info('添加定时任务{}'.format(current_job))
            return current_job.next_run_time
        except Exception:
            log_main.error(traceback.format_exc())
Ejemplo n.º 2
0
    def scheduler_job(e_id):
        log_main.info('运行定时任务: job-{}'.format(e_id))
        with run_test_job.app.app_context():
            # 更新下次运行时间
            entity = EquipmentManagement.query.filter(
                EquipmentManagement.id == e_id).first()
            job = run_test_job.get_job(str(e_id))
            entity.next_run_time = job.next_run_time
            db.session.commit()

            # 执行真正的任务
            StartCasSuit.run_test_task(e_id)
Ejemplo n.º 3
0
 def remove_job(e_id):
     # 移除定时任务
     job = run_test_job.get_job(str(e_id))
     if job:
         log_main.info('移除定时任务:{}'.format(job))
         run_test_job.remove_job(str(e_id))
Ejemplo n.º 4
0
    def run_test_task(e_id):
        entity = EquipmentManagement.query.filter(
            EquipmentManagement.id == e_id).first()
        start = datetime.now()
        log_main.info('正在运行的任务:{}'.format(e_id))
        if entity.status == 1:
            raise Exception('此设备已经在运行')
        else:
            entity.status = 1
        et_title = entity.title
        tl = TestLog(equipment_id=e_id,
                     equipment_title=et_title,
                     equipment_args=entity.setting_args,
                     run_test_result=2)
        db.session.add(tl)
        db.session.commit()
        tl_id = tl.id
        status = 1
        error_msg = '无'
        tl_result = 1
        failed_suit = ''
        success_suit = ''
        log_run = Log('TestLog-{}'.format(tl_id))
        log_run.info('第{}次运行,运行设备{}:{}, 参数设置:{}'.format(
            tl_id, e_id, et_title, entity.setting_args))
        try:
            for item in entity.test_case_suit:
                # 循环设备用例集
                driver = StartSession.start(e_id)
                suit_start = datetime.now()
                suit_title = item.test_case_suit.title
                shot_title = '{}-{}'.format(et_title, suit_title)
                log_run.info('-用例集开始: {}-'.format(shot_title))
                suit_log = TestCaseSuitLog(
                    test_log_id=tl_id,
                    test_case_suit_id=item.test_case_suit_id,
                    test_case_suit_title=suit_title,
                    run_test_result=0)
                db.session.add(suit_log)
                db.session.commit()

                suit_log_entity = TestCaseSuitLog.query.filter(
                    TestCaseSuitLog.id == suit_log.id).first()
                try:
                    for suit_step in item.test_case_suit.suit_step:
                        # 循环用例集下的用例
                        case_start = datetime.now()
                        case_entity = suit_step.test_case

                        if suit_step.skip == 1:
                            log_run.info('-----用例{}-{},跳过'.format(
                                case_entity.id, case_entity.title))
                            continue
                        else:
                            log_run.info(
                                '---开始:-----用例{}-{},输入参数列表: {}-----'.format(
                                    case_entity.id, case_entity.title,
                                    suit_step.input_args))
                        case_log_entity = TestCaseLog(
                            test_case_id=case_entity.id,
                            test_case_title=case_entity.title,
                            test_case_suit_log_id=suit_log.id)
                        db.session.add(case_log_entity)
                        db.session.commit()
                        test_case_result = 0
                        try:
                            case_step_list = analysis_case(
                                case_entity.step, suit_step.input_args)
                            ba = BaseAction(driver, shot_title, log_run, tl_id)
                            ba.action(case_step_list, case_log_entity.id)
                            test_case_result = 1
                            log_run.info(
                                '---结束-----用例{}-{},输入参数列表: {}-----成功-------'.
                                format(case_entity.id, case_entity.title,
                                       suit_step.input_args))
                        except Exception as t:
                            test_case_result = 0
                            log_run.error(
                                '---结束-----用例{}-{},输入参数列表: {}-----失败!!!!!!!!!'.
                                format(case_entity.id, case_entity.title,
                                       suit_step.input_args))
                            # 单个用例失败
                            raise t
                        finally:
                            case_end = datetime.now()
                            case_use_time = (case_end - case_start).seconds
                            case_log_entity.run_test_case_times = case_use_time
                            case_log_entity.run_test_case_result = test_case_result
                            db.session.commit()

                    suit_log_entity.run_test_result = 1
                    success_suit += suit_title + ','

                except Exception as e:
                    suit_log_entity.run_test_result = 0
                    failed_suit += suit_title + ','
                    status = 0
                    tl_result = 0
                finally:
                    suit_end = datetime.now()
                    suit_use_time = (suit_end - suit_start).seconds
                    suit_log_entity.run_test_suit_times = suit_use_time
                    db.session.commit()
                    # 一个用例集循环结束,重新获取driver
                    driver.quit()
                    log_run.info('-用例集结束: {}, 总用时 {} 秒-'.format(
                        shot_title, suit_use_time))
        except Exception as e:
            status = 0
            tl_result = 0
            error_msg = traceback.format_exc()
            log_main.error(error_msg)
            log_run.error(error_msg)
            raise e
        finally:
            end = datetime.now()
            run_task_use_time = (end - start).seconds
            log_entity = TestLog.query.filter(TestLog.id == tl.id).first()
            log_entity.run_test_result = tl_result
            log_entity.run_test_times = run_task_use_time
            entity.status = 0
            db.session.commit()
            msg = '此次测试执行结束,总用时:{}秒 成功用例集: [{}], 失败用例集: [{}] 错误:{}'.format(
                run_task_use_time, success_suit, failed_suit, error_msg)
            log_main.info(msg)
            log_run.info(msg)
            return jsonify({'status': status, 'data': '', 'message': msg})
Ejemplo n.º 5
0
def run_test_task(name):
    log_main.info('正在运行的任务:%s,PID:(%s)' % (name, os.getpid()))
    start = time.time()
    time.sleep(random.random() * 10)
    end = time.time()
    log_main.info('任务:%s,用时:%0.2f 秒' % (name, (end - start)))
Ejemplo n.º 6
0
from multiprocessing import Pool
import os, time, random
from appium_base.public.log import log_main


def run_test_task(name):
    log_main.info('正在运行的任务:%s,PID:(%s)' % (name, os.getpid()))
    start = time.time()
    time.sleep(random.random() * 10)
    end = time.time()
    log_main.info('任务:%s,用时:%0.2f 秒' % (name, (end - start)))


if __name__ == '__main__':
    log_main.info('父进程ID:%s' % (os.getpid()))
    p = Pool(2)
    for i in range(2):
        p.apply_async(run_test_task, args=(i, ))
    log_main.info('等待所有添加的进程运行完毕。。。')
    p.close()  # 在join之前要先关闭进程池,避免添加新的进程
    p.join()
    log_main.info('End!!,PID:%s' % os.getpid())