示例#1
0
 def __init__(self):
     """
     初始化连接串,并连接oracle
     """
     self._logger = init_logging()
     self._yaml = YamlParser().parser_common_conf(cf='projectConfig.yaml')
     self._dbinfo = self._yaml.get(self._yaml.get('project')).get('dbinfo')
     self._dbtype = self._dbinfo.get('type')
     self._username = self._yaml.get(self._dbtype).get('username')
     self._password = self._yaml.get(self._dbtype).get('password')
     self._jdbcclass = self._yaml.get(self._dbtype).get('jdbcClass')
     self._jdbcurl = self._yaml.get(self._dbtype).get('jdbcurl')
示例#2
0
 def test_demo(self):
     driver = InitDriverUtil().select_driver()
     element1 = driver.find_element_by_id(
         id_='com.baidu.searchbox:id/baidu_searchbox')
     element1.click()
     element2 = driver.find_element_by_id(
         id_='com.baidu.searchbox:id/SearchTextInput')
     testdata = YamlParser().parser_test_data_conf('demo.yaml')
     element2.send_keys(testdata.get('搜索关键字'))
     # com.baidu.searchbox:id/home_operation_enter
     element3 = driver.find_element_by_id(
         id_='com.baidu.searchbox:id/home_operation_enter')
     element3.click()
     time.sleep(10)
示例#3
0
class SeleniumUtil:
    def __init__(self, driver):
        self._driver = driver
        self._yml = YamlParser()
        self._logger = init_logging()

    def _find_element(self, elcf, elnode):
        """
        查找元素
        :param elcf: 元素所在的yaml配置文件
        :param elnode: 元素节点名称
        :return:
        """
        location = self._yml.parser_elements_from_yaml(cf=elcf, element=elnode)
        by, value = location.get('定位方式'), location.get('定位值')
        self._logger.info('[{node}]的定位方式为:{by},定位值为:{value}'.format(
            node=elnode, by=by, value=value))

        # 定位元素
        element = self._driver.find_element(by=by, value=value)
        return element

    def operate_element(self, elcf, elnode, dtyml=None, dtnode=None):
        """
        元素操作
        dtyml/dtnode都为None时,内部默认将该操作当做点击事件进行处理
        :param elcf: 元素所在的yaml配置文件
        :param elnode: 元素节点名称
        :param dtyml: 测试数据所在的yaml配置文件
        :param dtnode: 测试数据节点名称
        :return:
        """
        element = self._find_element(elcf=elcf, elnode=elnode)

        # 获取测试数据信息
        data = self._yml.parser_data_from_yaml(cf=dtyml, data=dtnode)
        optype, opvalue = data.get('操作'), data.get('值')

        if dtyml is None and dtnode is None:
            # 元素点击(click)
            element.click()
        elif operator.eq(optype, '输入'):
            # 元素输入(input)
            element.clear()
            element.send_keys(opvalue)
        else:
            self._logger.error('暂不支持的操作方式')
示例#4
0
 def __init__(self):
     self._logger = InitLogging().init_logging()
     self._conf = YamlParser().parser_common_conf(cf='projectConfig.yaml')
     self._project_root = root_path + os.sep
     self._driver_root_path = self._project_root + os.sep + 'drivers' + os.sep
示例#5
0
class InitDriverUtil:
    """
    初始化驱动程序,web项目同时输入地址
    @CREATED: [email protected]
    @CREATED_DATE: 2019-11-30
    @MODIFIED_DATE:
    """
    def __init__(self):
        self._logger = InitLogging().init_logging()
        self._conf = YamlParser().parser_common_conf(cf='projectConfig.yaml')
        self._project_root = root_path + os.sep
        self._driver_root_path = self._project_root + os.sep + 'drivers' + os.sep

    def select_driver(self):
        project_type = self._conf.get('projectType')
        if 'web' == project_type:
            return self.init_web_driver()
        elif 'app' == project_type:
            return self.init_appium_driver()
        else:
            self._logger.error("当前仅支持app、web两种类型的项目!")

    def init_web_driver(self):
        """
        初始化web浏览器
        :return: driver
        """
        driver_version = self._conf.get('browser')
        driver = ''
        if operator.contains(driver_version.lower(), 'chrome'):
            driver_path = self._driver_root_path + 'chrome' + os.sep + self._conf.get(
                'webbrowser').get(driver_version)
            driver = webdriver.Chrome(executable_path=driver_path)
        elif operator.contains(driver_version.lower(), 'firefox'):
            driver_path = self._driver_root_path + 'firefox' + os.sep + self._conf.get(
                'webbrowser').get(driver_version)
            driver = webdriver.Firefox(executable_path=driver_path)
        elif operator.contains(driver_version.lower(), 'ie'):
            driver_path = self._driver_root_path + 'ie' + os.sep + self._conf.get(
                'webbrowser').get(driver_version)
            driver = webdriver.Ie(executable_path=driver_path)
        else:
            self._logger.error('您选择的浏览器类型赞不支持')

        # 浏览器最大化
        driver.maximize_window()

        # 项目名称
        project = self._conf.get('project')

        # 项目url
        url = self._conf.get(project).get('url')

        # 输入地址到浏览器地址栏
        driver.get(url=url)
        driver.implicitly_wait(self._conf.get(project).get('timeout'))
        return driver

    def init_appium_driver(self):
        """
        初始化appium驱动
        :return: driver
        """
        desired_caps = {}

        # appilcation settings
        project = self._conf.get('project')
        desired_caps.update(self._conf.get(project).get('appInfo'))

        # appium common settings
        desired_caps.update(self._conf.get('appium_config'))

        # 获取设备名称
        device_name = self._conf.get(project).get('useDevice')

        # 设备信息
        device_info = self._conf.get(device_name)
        desired_caps.update(device_info)

        # init webdriver
        driver = webdriver.Remote(self._conf.get('remoteurl'), desired_caps)
        return driver
示例#6
0
 def __init__(self, driver):
     self._driver = driver
     self._yml = YamlParser()
     self._logger = init_logging()
示例#7
0
class InitDriverUtil:
    """
    初始化驱动程序,web项目同时输入地址
    @CREATED: [email protected]
    @CREATED_DATE: 2019-11-30
    @MODIFIED_DATE:
    """
    def __init__(self):
        self._logger = init_logging()
        self._conf = YamlParser().parser_common_conf(cf='projectConfig.yaml')
        self._project_root = root_path + os.sep
        self._driver_root_path = self._project_root + os.sep + 'drivers' + os.sep

    def select_driver(self):
        """
        选择驱动类型
        :return:
        """
        project_type = self._conf.get('projectType')
        if 'web' == project_type:
            return self._init_web_driver()
        elif 'app' == project_type:
            return self._init_appium_driver()
        else:
            self._logger.error("当前仅支持app、web两种类型的项目!")

    def _init_web_driver(self):
        """
        初始化web浏览器
        :return: driver
        """
        driver_version = self._conf.get('browser')
        distribute = self._conf.get('seleniumGrid')
        driver = ''
        # 分布式开关开时,远程驱动浏览器,分布式开关关时本地驱动浏览器
        if not distribute.get('switch'):
            # 本地驱动chrome浏览器
            if operator.contains(driver_version.lower(), 'chrome'):
                driver_path = self._driver_root_path + 'chrome' + os.sep + self._conf.get(
                    'webbrowser').get(driver_version)
                driver = webdriver.Chrome(executable_path=driver_path)
            # 本地驱动firefox浏览器
            elif operator.contains(driver_version.lower(), 'firefox'):
                driver_path = self._driver_root_path + 'firefox' + os.sep + self._conf.get(
                    'webbrowser').get(driver_version)
                driver = webdriver.Firefox(executable_path=driver_path)
            # 本地驱动ie浏览器
            elif operator.contains(driver_version.lower(), 'ie'):
                driver_path = self._driver_root_path + 'ie' + os.sep + self._conf.get(
                    'webbrowser').get(driver_version)
                driver = webdriver.Ie(executable_path=driver_path)
            # 本地驱动edge浏览器
            elif operator.contains(driver_version.lower(), 'edge'):
                driver_path = self._driver_root_path + 'edge' + os.sep + self._conf.get(
                    'webbrowser').get(driver_version)
                driver = webdriver.Edge(executable_path=driver_path)
            else:
                raise self._logger.error('您选择的浏览器类型赞不支持')
        elif distribute.get('switch'):
            # 远程驱动chrome浏览器
            if operator.contains(driver_version.lower(), 'chrome'):
                driver_path = '/opt/selenium/chromedriver-86.0.4240.22'
                chrome_desired = {
                    "browserName": "chrome",
                    "platform": "LINUX",
                    "cssSelectorsEnabled": True,
                    "javascriptEnabled": True,
                    "binary": driver_path,
                }
                driver = webdriver.Remote(
                    command_executor=distribute.get('hubUrl'),
                    desired_capabilities=chrome_desired)
            # 远程驱动firefox浏览器,暂不支持
            elif operator.contains(driver_version.lower(), 'firefox'):
                driver_path = self._driver_root_path + 'firefox' + os.sep + self._conf.get(
                    'webbrowser').get(driver_version)
                fox_desired = {
                    "browserName": "firefox",
                    "platform": "WINDOWS",
                    "cssSelectorsEnabled": True,
                    "javascriptEnabled": True,
                    "firefox_binary": driver_path,
                }
                driver = webdriver.Remote(
                    command_executor=distribute.get('hubUrl'),
                    desired_capabilities=fox_desired)
            # 远程本地驱动ie浏览器
            elif operator.contains(driver_version.lower(), 'ie'):
                driver_path = self._driver_root_path + 'ie' + os.sep + self._conf.get(
                    'webbrowser').get(driver_version)
                ie_desired = {
                    "browserName": "internet explorer",
                    "platform": "WINDOWS",
                    "cssSelectorsEnabled": True,
                    "javascriptEnabled": True,
                    "binary": driver_path,
                }
                driver = webdriver.Remote(
                    command_executor=distribute.get('hubUrl'),
                    desired_capabilities=ie_desired)
            # 远程驱动edge浏览器,暂不支持
            elif operator.contains(driver_version.lower(), 'edge'):
                driver_path = self._driver_root_path + 'edge' + os.sep + self._conf.get(
                    'webbrowser').get(driver_version)
                edge_desired = {
                    "browserName": "MicrosoftEdge",
                    "platform": "WINDOWS",
                    "cssSelectorsEnabled": True,
                    "javascriptEnabled": True,
                    "binary": driver_path,
                }
                driver = webdriver.Remote(
                    command_executor=distribute.get('hubUrl'),
                    desired_capabilities=edge_desired)
            else:
                self._logger.error('您选择的浏览器类型赞不支持')
            driver.file_detector = LocalFileDetector()
        # 浏览器最大化
        driver.maximize_window()

        # 项目名称
        project = self._conf.get('project')

        # 项目url
        url = self._conf.get(project).get('url')

        # 输入地址到浏览器地址栏
        driver.get(url=url)
        driver.implicitly_wait(self._conf.get(project).get('timeout'))

        return driver

    def _init_appium_driver(self):
        """
        初始化appium驱动
        :return: driver
        """
        desired_caps = {}

        # appilcation settings
        project = self._conf.get('project')
        desired_caps.update(self._conf.get(project).get('appInfo'))

        # appium common settings
        desired_caps.update(self._conf.get('appium_config'))

        # 获取设备名称
        device_name = self._conf.get(project).get('useDevice')

        # 设备信息
        device_info = self._conf.get(device_name)
        desired_caps.update(device_info)

        # init webdriver
        driver = webdriver.Remote(self._conf.get('remoteurl'), desired_caps)
        return driver
示例#8
0
class dbUtil:
    def __init__(self):
        """
        初始化连接串,并连接oracle
        """
        self._logger = InitLogging().init_logging()
        self._yaml = YamlParser().parser_common_conf(cf='projectConfig.yaml')
        self._dbinfo = self._yaml.get(self._yaml.get('project')).get('dbinfo')
        self._dbtype = self._dbinfo.get('type')
        self._username = self._yaml.get(self._dbtype).get('username')
        self._password = self._yaml.get(self._dbtype).get('password')
        # self._database = self._dbinfo.get('database')
        self._jdbcclass = self._yaml.get(self._dbtype).get('jdbcClass')
        self._jdbcurl = self._yaml.get(self._dbtype).get('jdbcurl')
        # self._dbfile = self._dbinfo.get('dbfile')
        # self._connstr = self._dbinfo.get('connectstr')
        # self._port = self._dbinfo.get('port')
        # jdbcClass: oracle.jdbc.driver.OracleDriver
        # jdbcurl: jdbc:oracle: thin:

    def connect_database(self):
        """
        连接数据库
        :return:
        """
        # jdbc驱动包路径
        lib_path = root_path + os.sep + 'libs' + os.sep
        conn = None
        cursor = None
        # 根据配置的不同数据库类型选择对应的驱动并初始化连接
        if operator.eq(self._dbtype, 'oracle'):
            conn = jdbc.connect(jclassname=self._jdbcclass,
                                jars=lib_path +
                                'mysql-connector-java-8.0.16.jar',
                                url=self._jdbcurl,
                                driver_args={
                                    'user': self._username,
                                    'password': self._password
                                })
            cursor = conn.cursor()
        if operator.eq(self._dbtype, 'mysql'):
            conn = jdbc.connect(jclassname=self._jdbcclass,
                                url=self._jdbcurl,
                                driver_args={
                                    'user': self._username,
                                    'password': self._password
                                },
                                jars=lib_path +
                                'mysql-connector-java-8.0.16.jar')
            cursor = conn.cursor()
        if operator.eq(self._dbtype, 'sqlite'):
            conn = jdbc.connect(jclassname=self._jdbcclass,
                                url=self._jdbcurl,
                                jars=lib_path + 'sqlite-jdbc-3.28.0.jar')
            cursor = conn.cursor()
        if operator.eq(self._dbtype, 'hive'):
            pass
        if operator.eq(self._dbtype, 'gauss'):
            pass
        else:
            self._logger.error('暂不支持%s数据库类型' % self._dbtype)
        return {'conn': conn, 'cursor': cursor}

    def execute_single_sql(self, operate, sql, parameters=None):
        """
        执行单个SQL语句
        :param operate: SQL类型,DML、DDL
        :param sql:  SQL语句
        :param parameters:  SQL参数
        :return: 查询结果集
        """
        db_obj = self.connect_database()
        db_obj.get('cursor').execute(operation=sql, parameters=parameters)
        if operator.eq(operate, 'ddl'):
            db_obj.get('conn').commit()
        result = db_obj.get('cursor').fetchall()
        db_obj.get('cursor').close()
        db_obj.get('conn').close()
        return result
示例#9
0
class dbUtil:
    def __init__(self):
        """
        初始化连接串,并连接oracle
        """
        self._logger = init_logging()
        self._yaml = YamlParser().parser_common_conf(cf='projectConfig.yaml')
        self._dbinfo = self._yaml.get(self._yaml.get('project')).get('dbinfo')
        self._dbtype = self._dbinfo.get('type')
        self._username = self._yaml.get(self._dbtype).get('username')
        self._password = self._yaml.get(self._dbtype).get('password')
        self._jdbcclass = self._yaml.get(self._dbtype).get('jdbcClass')
        self._jdbcurl = self._yaml.get(self._dbtype).get('jdbcurl')

    def connect_database(self):
        """
        连接数据库
        """
        lib_path = root_path + os.sep + 'libs' + os.sep

        if operator.eq(self._dbtype, 'oralce'):
            conn = jdbc.connect(jclassname=self._jdbcclass,
                                jars=lib_path + 'ojdbc8.jar',
                                url=self._jdbcurl,
                                driver_args={
                                    'user': self._username,
                                    'password': self._password
                                })
            cursor = conn.cursor()
        elif operator.eq(self._dbtype, 'mysql'):
            conn = jdbc.connect(jclassname=self._jdbcclass,
                                url=self._jdbcurl,
                                driver_args={
                                    'user': self._username,
                                    'password': self._password
                                },
                                jars=lib_path +
                                'mysql-connector-java-8.0.16.jar')
            cursor = conn.cursor()
        elif operator.eq(self._dbtype, 'sqlite3'):
            conn = jdbc.connect(jclassname=self._jdbcclass,
                                url=self._jdbcurl,
                                jars=lib_path + 'sqlite-jdbc-3.28.0.jar')
            cursor = conn.cursor()
        else:
            self._logger.error('暂不支持%s数据库类型' % self._dbtype)
            raise
        return {'conn': conn, 'cursor': cursor}

    def execute_sql(self, operate, sql, parameters=None):
        """
        执行单个SQL
        :param operate:  操作类型,ddl/dml
        :param sql: sql语句,使用参数的方式时,sql必须使用 :variable的方式绑定变量
        :param parameters: sql参数,传入字典族
        :return: 查询结果集
        """

        db_obj = self.connect_database()
        db_obj.get('cursor').execute(operation=sql, parameters=parameters)
        if operator.eq(operate, 'ddl'):
            db_obj.get('conn').commit()
        result = db_obj.get('cursor').fetchall()
        db_obj.get('cursor').close()
        db_obj.get('conn').close()
        return result