Exemplo n.º 1
0
    def setup(self, testcase, case):
        logger.info('Start running the SETUP testcase...')
        # setup 执行成功标记

        def run_setup(testcase):
            if testcase:
                tc = TestCase(testcase)
                tc.run()
                if testcase['result'] == 'success':
                    flag = 'Y'
                else:
                    flag = 'N'
            else:
                flag = 'O'
            return flag
        setup_flag = run_setup(deepcopy(self.setup_testcase))

        if setup_flag == 'N':
            base_flag = run_setup(deepcopy(self.base_testcase))
            if base_flag == 'Y':
                setup_flag = run_setup(deepcopy(self.setup_testcase))
                if setup_flag == 'N':
                    testcase['result'] = 'blocked'
                    case.block('Blocked', 'SETUP is not success')
                    logger.warn('Run the testcase: %s|%s blocked, SETUP is not success' % (
                        testcase['id'], testcase['title']))
                    return False
            elif base_flag == 'O':
                testcase['result'] = 'blocked'
                case.block('Blocked', 'SETUP is not success')
                logger.warn('Run the testcase: %s|%s blocked, SETUP is not success' % (
                    testcase['id'], testcase['title']))
                return False

        return True
Exemplo n.º 2
0
    def setup(self, testcase, case):
        logger.info('=' * 50)
        if self.setup_testcase:
            logger.info('*** SETUP testcase ***')
        else:
            logger.info('...No SETUP testcase need to run...')

        def run_setup(testcase):
            if testcase:
                tc = TestCase(testcase)
                tc.run()
                if testcase['result'] == 'success':
                    flag = 'Y'
                else:
                    flag = 'N'
            else:
                flag = 'O'
            return flag

        setup_flag = run_setup(deepcopy(self.setup_testcase))

        if setup_flag == 'N':
            base_flag = run_setup(deepcopy(self.base_testcase))
            if base_flag == 'Y':
                setup_flag = run_setup(deepcopy(self.setup_testcase))
                if setup_flag == 'N':
                    testcase['result'] = 'blocked'
                    case.block('Blocked', 'SETUP is not success')
                    logger.info('-' * 50)
                    logger.info(
                        f'>>> Run the testcase: {testcase["id"]}|{testcase["title"]}'
                    )
                    logger.warn(
                        '>>>>>>>>>>>>>>>>>>>> blocked <<<<<<<<<<<<<<<<<<<< SETUP is not success'
                    )
                    return False
            elif base_flag == 'O':
                testcase['result'] = 'blocked'
                case.block('Blocked', 'SETUP is not success')
                logger.info('-' * 50)
                logger.info(
                    f'>>> Run the testcase: {testcase["id"]}|{testcase["title"]}'
                )
                logger.warn(
                    '>>>>>>>>>>>>>>>>>>>> blocked <<<<<<<<<<<<<<<<<<<< SETUP is not success'
                )
                return False

        return True
Exemplo n.º 3
0
    def run(self):

        # 当前测试用例
        current = {'result': 'Pass'}
        # 上一个测试用例
        previous = {}

        # 1.执行用例
        for testcase in self.testsuite:
            previous = current
            current = testcase

            # xml 测试报告-测试用例初始化
            if testcase['flag'] != 'N':
                case = self.report.create_case(
                    testcase['title'], testcase['id'])
                case.start()
                case.priority = testcase['priority']
            else:
                testcase['result'] = 'Skip'
                # case.skip('Skip', 'Autotest Flag is N')
                logger.warn('Run the testcase: %s|%s Skipped, because the flag=N or the condition=snippet' % (
                    testcase['id'], testcase['title']))
                continue

            if testcase['condition'].lower() not in ('base', 'setup'):
                if testcase['condition'].lower() == 'sub':
                    if previous['result'] != 'Pass':
                        testcase['result'] = 'Block'
                        case.block(
                            'Blocked', 'Main or pre Sub testcase is not pass')
                        logger.warn('Run the testcase: %s|%s Blocked, Main or pre Sub TestCase is not Pass' % (
                            testcase['id'], testcase['title']))
                        continue
                else:
                    result = self.setup(testcase, case)
                    #if result == 'N':
                    if not result:
                        continue

            try:
                tc = TestCase(testcase)
                tc.run()
                if testcase['result'] == 'Pass':
                    case.succeed()
                elif testcase['result'] == 'Fail':
                    case.fail('Fail', testcase['report'])
                    if testcase['condition'].lower() == 'base':
                        logger.warn('Run the testcase: %s|%s Fail, BASE is not Pass. Break the AutoTest' % (
                            testcase['id'], testcase['title']))
                        break
                    if testcase['condition'].lower() == 'setup':
                        logger.warn('Run the testcase: %s|%s Fail, SETUP is not Pass. Break the AutoTest' % (
                            testcase['id'], testcase['title']))
                        break
Exemplo n.º 4
0
    def run(self):

        # 当前测试用例
        current = {'result': 'Pass'}
        # 上一个测试用例
        previous = {}

        # 1.执行用例
        for testcase in self.testsuite:

            # 根据筛选条件,把不需要执行的测试用例跳过
            flag = False
            for k, v in self.conditions.items():
                if not isinstance(v, list):
                    v = [v]
                if testcase[k] not in v:
                    testcase['result'] = '-'
                    flag = True
            if flag:
                continue

            # xml 测试报告-测试用例初始化
            if testcase['flag'] != 'N':
                case = self.report.create_case(testcase['title'],
                                               testcase['id'])
                case.start()
                case.priority = testcase['priority']
                # 用例上下文,
                previous = current
                current = testcase
            else:
                testcase['result'] = 'Skip'
                # case.skip('Skip', 'Autotest Flag is N')
                logger.info(
                    'Run the testcase: %s|%s Skipped, because the flag=N or the condition=snippet'
                    % (testcase['id'], testcase['title']))
                continue

            if testcase['condition'].lower() not in ('base', 'setup'):
                if testcase['condition'].lower() == 'sub':
                    if previous['result'] != 'Pass':
                        testcase['result'] = 'Block'
                        case.block('Blocked',
                                   'Main or pre Sub testcase is not pass')
                        logger.warn(
                            'Run the testcase: %s|%s Blocked, Main or pre Sub TestCase is not Pass'
                            % (testcase['id'], testcase['title']))
                        continue
                # 如果前置条件为 skip,则此用例不执行前置条件
                elif testcase['condition'].lower() == 'skip':
                    pass
                else:
                    result = self.setup(testcase, case)
                    #if result == 'N':
                    if not result:
                        continue

            try:
                tc = TestCase(testcase)
                tc.run()
                if testcase['result'] == 'Pass':
                    case.succeed()
                elif testcase['result'] == 'Fail':
                    case.fail('Fail', testcase['report'])
                    if testcase['condition'].lower() == 'base':
                        logger.warn(
                            'Run the testcase: %s|%s Fail, BASE is not Pass. Break the AutoTest'
                            % (testcase['id'], testcase['title']))
                        break
                    if testcase['condition'].lower() == 'setup':
                        logger.warn(
                            'Run the testcase: %s|%s Fail, SETUP is not Pass. Break the AutoTest'
                            % (testcase['id'], testcase['title']))
                        break
Exemplo n.º 5
0
                            % (testcase['id'], testcase['title']))
                        break
                    if testcase['condition'].lower() == 'setup':
                        logger.warn(
                            'Run the testcase: %s|%s Fail, SETUP is not Pass. Break the AutoTest'
                            % (testcase['id'], testcase['title']))
                        break
            except Exception as exception:
                case.error(
                    'Error', 'Remark:%s |||Exception:%s' %
                    (testcase['remark'], exception))
                logger.exception('Run the testcase: %s|%s fail' %
                                 (testcase['id'], testcase['title']))
                if testcase['condition'].lower() == 'base':
                    logger.warn(
                        'Run the testcase: %s|%s Error, BASE is not Pass. Break the AutoTest'
                        % (testcase['id'], testcase['title']))
                    break
                if testcase['condition'].lower() == 'setup':
                    logger.warn(
                        'Run the testcase: %s|%s Error, SETUP is not Pass. Break the AutoTest'
                        % (testcase['id'], testcase['title']))
                    break

        self.report.finish()

        # 2.清理环境
        try:
            if g.platform.lower() in ('desktop', ):
                w.close()
                g.driver.quit()
Exemplo n.º 6
0
            # 统计结束时间
            testcase['end_timestamp'] = timestamp()
            return

        if testcase['condition'].lower() not in ('base', 'setup'):
            if testcase['condition'].lower() == 'sub':
                if self.previous['result'] != 'success':
                    testcase['result'] = 'blocked'
                    case.block('Blocked',
                               'Main or pre Sub testcase is not success')
                    logger.info('-' * 50)
                    logger.info(
                        f'>>> Run the testcase: {testcase["id"]}|{testcase["title"]}'
                    )
                    logger.warn(
                        '>>>>>>>>>>>>>>>>>>>> blocked <<<<<<<<<<<<<<<<<<<< Main or pre Sub TestCase is not success'
                    )
                    # 统计结束时间
                    testcase['end_timestamp'] = timestamp()
                    return
            # 如果前置条件为 skip,则此用例不执行前置条件
            elif testcase['condition'].lower() == 'skip':
                pass
            else:
                result = self.setup(testcase, case)
                # if result == 'N':
                if not result:
                    # 统计结束时间
                    testcase['end_timestamp'] = timestamp()
                    return
Exemplo n.º 7
0
    def run_testcase(self, testcase):
        # 根据筛选条件,把不需要执行的测试用例跳过
        flag = False
        for k, v in self.conditions.items():
            if not isinstance(v, list):
                v = [v]
            if testcase[k] not in v:
                testcase['result'] = 'skipped'
                flag = True
        if flag:
            return

        if testcase['condition'].lower() == 'base':
            logger.info('*** BASE testcase ↓ ***')

        if testcase['condition'].lower() == 'setup':
            return

        # 统计开始时间
        testcase['start_timestamp'] = timestamp()
        # xml 测试报告-测试用例初始化
        if testcase['flag'] != 'N':
            # 如果前置条件失败了,直接设置为阻塞
            if self.blocked_flag:
                testcase['result'] = 'blocked'
                testcase['end_timestamp'] = timestamp()
                return

            case = self.report.create_case(
                testcase['title'], testcase['id'])
            case.start()
            case.priority = testcase['priority']
            # 用例上下文
            self.previous = self.current
            self.current = testcase
        else:
            testcase['result'] = 'skipped'
            # case.skip('Skip', 'Autotest Flag is N')
            # logger.info('Run the testcase: %s|%s skipped, because the flag=N or the condition=snippet' % (
            #     testcase['id'], testcase['title']))
            # 统计结束时间
            testcase['end_timestamp'] = timestamp()
            return

        if testcase['condition'].lower() not in ('base', 'setup'):
            if testcase['condition'].lower() == 'sub':
                if self.previous['result'] != 'success':
                    testcase['result'] = 'blocked'
                    case.block(
                        'Blocked', 'Main or pre Sub testcase is not success')
                    logger.info('-'*50)
                    logger.info(f'>>> Run the testcase: {testcase["id"]}|{testcase["title"]}')                        
                    logger.warn('>>>>>>>>>>>>>>>>>>>> blocked <<<<<<<<<<<<<<<<<<<< Main or pre Sub TestCase is not success')
                    # 统计结束时间
                    testcase['end_timestamp'] = timestamp()
                    return
            # 如果前置条件为 skip,则此用例不执行前置条件
            elif testcase['condition'].lower() == 'skip':
                pass
            else:
                result = self.setup(testcase, case)
                # if result == 'N':
                if not result:
                    # 统计结束时间
                    testcase['end_timestamp'] = timestamp()
                    return

        try:
            tc = TestCase(testcase)
            logger.info('-'*50)
            tc.run()

            # 统计结束时间
            testcase['end_timestamp'] = timestamp()

            if testcase['result'] == 'success':
                case.succeed()
            elif testcase['result'] == 'failure':
                case.fail('Failure', testcase['report'])
                if testcase['condition'].lower() == 'base':
                    logger.warn('Run the testcase: %s|%s Failure, BASE is not success. Break the AutoTest' % (
                        testcase['id'], testcase['title']))
                    self.blocked_flag = True
                    return
                if testcase['condition'].lower() == 'setup':
                    logger.warn('Run the testcase: %s|%s failure, SETUP is not success. Break the AutoTest' % (
                        testcase['id'], testcase['title']))
                    self.blocked_flag = True
                    return
Exemplo n.º 8
0
    def run(self):

        self.testsuite_start()

        # 当前测试用例
        current = {'result': 'success'}
        # 上一个测试用例
        previous = {}

        # 前置条件执行失败标志,即未执行用例阻塞标志
        blcoked_flag = False

        # 1.执行用例
        for testcase in self.testsuite:
            # 根据筛选条件,把不需要执行的测试用例跳过
            flag = False
            for k, v in self.conditions.items():
                if not isinstance(v, list):
                    v = [v]
                if testcase[k] not in v:
                    testcase['result'] = 'skipped'
                    flag = True
            if flag:
                continue

            # 统计开始时间
            testcase['start_timestamp'] = timestamp()
            # xml 测试报告-测试用例初始化
            if testcase['flag'] != 'N':
                # 如果前置条件失败了,直接设置为阻塞
                if blcoked_flag:
                    testcase['result'] = 'blocked'
                    testcase['end_timestamp'] = timestamp()
                    continue

                case = self.report.create_case(testcase['title'],
                                               testcase['id'])
                case.start()
                case.priority = testcase['priority']
                # 用例上下文
                previous = current

                current = testcase
            else:
                testcase['result'] = 'skipped'
                # case.skip('Skip', 'Autotest Flag is N')
                # logger.info('Run the testcase: %s|%s skipped, because the flag=N or the condition=snippet' % (
                #     testcase['id'], testcase['title']))
                # 统计结束时间
                testcase['end_timestamp'] = timestamp()
                continue

            if testcase['condition'].lower() not in ('base', 'setup'):
                if testcase['condition'].lower() == 'sub':
                    if previous['result'] != 'success':
                        testcase['result'] = 'blocked'
                        case.block('Blocked',
                                   'Main or pre Sub testcase is not success')
                        logger.warn(
                            'Run the testcase: %s|%s blocked, Main or pre Sub TestCase is not success'
                            % (testcase['id'], testcase['title']))
                        # 统计结束时间
                        testcase['end_timestamp'] = timestamp()
                        continue
                # 如果前置条件为 skip,则此用例不执行前置条件
                elif testcase['condition'].lower() == 'skip':
                    pass
                else:
                    result = self.setup(testcase, case)
                    # if result == 'N':
                    if not result:
                        # 统计结束时间
                        testcase['end_timestamp'] = timestamp()
                        continue

            try:
                tc = TestCase(testcase)
                logger.info('-' * 50)
                tc.run()

                # 统计结束时间
                testcase['end_timestamp'] = timestamp()

                if testcase['result'] == 'success':
                    case.succeed()
                elif testcase['result'] == 'failure':
                    case.fail('Failure', testcase['report'])
                    if testcase['condition'].lower() == 'base':
                        logger.warn(
                            'Run the testcase: %s|%s Failure, BASE is not success. Break the AutoTest'
                            % (testcase['id'], testcase['title']))
                        blcoked_flag = True
                        continue
                    if testcase['condition'].lower() == 'setup':
                        logger.warn(
                            'Run the testcase: %s|%s failure, SETUP is not success. Break the AutoTest'
                            % (testcase['id'], testcase['title']))
                        blcoked_flag = True
                        continue
Exemplo n.º 9
0
class TestSuite:
    def __init__(self, testsuite, sheet_name, report, conditions={}):
        self.testsuite = testsuite
        self.sheet_name = sheet_name
        self.report = report
        self.conditions = conditions
        self.result = {}

        # base 在整个测试套件中首先执行一次
        self.base_testcase = {}
        # setup 在每个测试用例执行之前执行一次
        self.setup_testcase = {}
        for testcase in self.testsuite:
            if testcase['condition'].lower() == 'base':
                self.base_testcase = testcase
            elif testcase['condition'].lower() == 'setup':
                self.setup_testcase = testcase
                testcase['flag'] = 'N'  # setup 用例只在执行其他普通用例之前执行
            elif testcase['condition'].lower() == 'snippet':
                g.snippet[testcase['id']] = testcase
                testcase['flag'] = 'N'

    def testsuite_start(self):
        self.result['no'] = g.no
        g.no += 1
        self.result['testsuite'] = self.sheet_name
        self.result['start_timestamp'] = timestamp()

    def testsuite_end(self):
        self.result['end_timestamp'] = timestamp()
        g.testsuite_data[self.sheet_name] = self.result

    def setup(self, testcase, case):
        logger.info('=' * 50)
        if self.setup_testcase:
            logger.info('*** SETUP testcase ***')
        else:
            logger.info('...No SETUP testcase need to run...')

        def run_setup(testcase):
            if testcase:
                tc = TestCase(testcase)
                tc.run()
                if testcase['result'] == 'success':
                    flag = 'Y'
                else:
                    flag = 'N'
            else:
                flag = 'O'
            return flag

        setup_flag = run_setup(deepcopy(self.setup_testcase))

        if setup_flag == 'N':
            base_flag = run_setup(deepcopy(self.base_testcase))
            if base_flag == 'Y':
                setup_flag = run_setup(deepcopy(self.setup_testcase))
                if setup_flag == 'N':
                    testcase['result'] = 'blocked'
                    case.block('Blocked', 'SETUP is not success')
                    logger.warn(
                        'Run the testcase: %s|%s blocked, SETUP is not success'
                        % (testcase['id'], testcase['title']))
                    return False
            elif base_flag == 'O':
                testcase['result'] = 'blocked'
                case.block('Blocked', 'SETUP is not success')
                logger.warn(
                    'Run the testcase: %s|%s blocked, SETUP is not success' %
                    (testcase['id'], testcase['title']))
                return False

        return True

    def run(self):

        self.testsuite_start()

        # 当前测试用例
        current = {'result': 'success'}
        # 上一个测试用例
        previous = {}

        # 前置条件执行失败标志,即未执行用例阻塞标志
        blcoked_flag = False

        # 1.执行用例
        for testcase in self.testsuite:
            # 根据筛选条件,把不需要执行的测试用例跳过
            flag = False
            for k, v in self.conditions.items():
                if not isinstance(v, list):
                    v = [v]
                if testcase[k] not in v:
                    testcase['result'] = 'skipped'
                    flag = True
            if flag:
                continue

            # 统计开始时间
            testcase['start_timestamp'] = timestamp()
            # xml 测试报告-测试用例初始化
            if testcase['flag'] != 'N':
                # 如果前置条件失败了,直接设置为阻塞
                if blcoked_flag:
                    testcase['result'] = 'blocked'
                    testcase['end_timestamp'] = timestamp()
                    continue

                case = self.report.create_case(testcase['title'],
                                               testcase['id'])
                case.start()
                case.priority = testcase['priority']
                # 用例上下文
                previous = current

                current = testcase
            else:
                testcase['result'] = 'skipped'
                # case.skip('Skip', 'Autotest Flag is N')
                # logger.info('Run the testcase: %s|%s skipped, because the flag=N or the condition=snippet' % (
                #     testcase['id'], testcase['title']))
                # 统计结束时间
                testcase['end_timestamp'] = timestamp()
                continue

            if testcase['condition'].lower() not in ('base', 'setup'):
                if testcase['condition'].lower() == 'sub':
                    if previous['result'] != 'success':
                        testcase['result'] = 'blocked'
                        case.block('Blocked',
                                   'Main or pre Sub testcase is not success')
                        logger.warn(
                            'Run the testcase: %s|%s blocked, Main or pre Sub TestCase is not success'
                            % (testcase['id'], testcase['title']))
                        # 统计结束时间
                        testcase['end_timestamp'] = timestamp()
                        continue
                # 如果前置条件为 skip,则此用例不执行前置条件
                elif testcase['condition'].lower() == 'skip':
                    pass
                else:
                    result = self.setup(testcase, case)
                    # if result == 'N':
                    if not result:
                        # 统计结束时间
                        testcase['end_timestamp'] = timestamp()
                        continue

            try:
                tc = TestCase(testcase)
                logger.info('-' * 50)
                tc.run()

                # 统计结束时间
                testcase['end_timestamp'] = timestamp()

                if testcase['result'] == 'success':
                    case.succeed()
                elif testcase['result'] == 'failure':
                    case.fail('Failure', testcase['report'])
                    if testcase['condition'].lower() == 'base':
                        logger.warn(
                            'Run the testcase: %s|%s Failure, BASE is not success. Break the AutoTest'
                            % (testcase['id'], testcase['title']))
                        blcoked_flag = True
                        continue
                    if testcase['condition'].lower() == 'setup':
                        logger.warn(
                            'Run the testcase: %s|%s failure, SETUP is not success. Break the AutoTest'
                            % (testcase['id'], testcase['title']))
                        blcoked_flag = True
                        continue
            except Exception as exception:
                case.error(
                    'Error', 'Remark:%s |||Exception:%s' %
                    (testcase['remark'], exception))
                logger.exception('Run the testcase: %s|%s failure' %
                                 (testcase['id'], testcase['title']))
                if testcase['condition'].lower() == 'base':
                    logger.warn(
                        'Run the testcase: %s|%s error, BASE is not success. Break the AutoTest'
                        % (testcase['id'], testcase['title']))
                    blcoked_flag = True
                    continue
                if testcase['condition'].lower() == 'setup':
                    logger.warn(
                        'Run the testcase: %s|%s error, SETUP is not success. Break the AutoTest'
                        % (testcase['id'], testcase['title']))
                    blcoked_flag = True
                    continue