一、异常处理主要是用来统一处理测试过程中的各种异常;【没有详细研究……主要还是就装饰器的运用……】

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import traceback
from selenium.common.exceptions import NoSuchElementException
from Result.Result import Result
from Result.DBResult import DBResult
result = Result()
dbResult = DBResult()
def element_not_found_exception(func):
    def not_found(self, locator):
        try:
            return func(self, locator)
        except NoSuchElementException:
            msg = 'element not found for locator:'+locator+'At method:'+func.__name__
            dbResult.log_error(self, msg)
            result.log_error(msg)
            return None
    return not_found

def assert_logger(func):
    def assertlogger(self):
        try:
            msg = 'Test Case is:'+func.__name__
            dbResult.log_info(self, msg)
            result.log_info(msg)
            return func(self)
        except AssertionError as ex:
            msg = 'AssertError in: %s.%s' % (self.__class__.__name__, func.__name__)
            dbResult.log_error(self, msg)
            dbResult.log_fail(self)
            result.log_error(msg)
            result.log_fail()
    assertlogger.__name__=func.__name__
    return assertlogger

def exception_logger(func):
    def exceptionlogger(self):
        try:
            return func(self)
        except Exception as ex:
            # print sys.exc_info()
            if True: ##debug is Ttrue?
                print(traceback.print_exc())  ##打印完整堆栈用于定位代码行
            msg = "%s:%s At method:%s" % (Exception, ex, func.__name__)
            result.log_error(msg)
            dbResult.log_error(self, msg)
    return exceptionlogger

def name_logger(func):
    def namelogger(self):
        self.__class__.test_result_id = dbResult.log_init('', self.__class__.__name__, func.__name__) ##设置test_result_id
        result.log_info('Test Class is:'+self.__class__.__name__)
        return func(self)
    namelogger.__name__=func.__name__
    return namelogger
#自定义
class NOTESTDATAERROR(Exception):
    def __init__(self, module, test_case):
        self.value = '%s: Module: %s, TestCase: %s' % (self.__class__.__name__, module, test_case)
    def __str__(self):
        return repr(self.value)

class NOLOCATORERROR(Exception):
    def __init__(self, module, test_case, name):
        self.value = '%s: Module: %s, TestCase: %s' % (self.__class__.__name__, module, test_case)
    def __str__(self):
        return repr(self.value)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest

from selenium import webdriver
from Errors.ExceptionWarpper import *
from Data.DataPool import DBDataPool
from Pages.BaiduHome import BaiduHome
from Result.Result import Result
class TestDemo(unittest.TestCase):
    @exception_logger
    @name_logger
    def setUp(self):
        self.wd = webdriver.Chrome()
        self.dp = DBDataPool(self.__class__.__name__)
        self.wd.get(self.dp.get('BAIDU_HOME_URL'))
        self.page = BaiduHome(self.wd)
        self.result = Result()

    @exception_logger
    @assert_logger
    def test_sample(self):
        self.page.key_worlds_input(self.dp.get('SELENIUM'))
        self.page.search_click()
        self.result.log_info('The search button is clicked')
        assert True
        self.result.log_pass()

    @exception_logger
    def tearDown(self):
        self.wd.close()

if __name__=='__main__':
    unittest.main()

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐