Exemplo n.º 1
0
def setup_project(start_path=os.getcwd()):
    """
    从指定起始路径扫描指定后缀配置文件
    :param start_path: 默认值为当前根路径
    :return: None
    """
    def parse_conf(conf_file_path):
        log(f'开始从{conf_file_path}中解析配置文件')
        _config = load_file(conf_file_path)
        for key, value in _config.items():
            if conf_file_path.suffix == '.ini':
                for sub_key, sub_value in value.items():
                    settings.set(sub_key, sub_value)
            else:
                settings.set(key, value)  # 解析json??或者其他配置文件

    log(f'开始从{start_path}扫描...', level='debug')
    # 扫描当前项目文件夹,根据项目需求只扫描外面2层目录即可,正则过滤无效的.或者__打头的隐藏或者无效目录
    target_dir = scan_depth_dir(start_path, depth=2, condition='[A-Za-z]+')
    for dir_path in target_dir:  # 魔改目录名称
        settings.set(f"DCN_{dir_path.stem.upper()}_PATH", dir_path)
    # 扫描当前项目config中的ini配置文件(目前只扫描ini/json文件,后续可以进行扩展)
    target_conf_path = scan_file(settings.get('DCN_CONFIG_PATH'),
                                 condition=('[\w]+\.ini', '[\w]+\.json'))
    for conf in target_conf_path:
        parse_conf(conf)
    # 扫描当前项目testdata中的xls和xlsx的文件,正则排除以~$开头的临时文件
    target_file = scan_file(settings.get('DCN_TESTDATA_PATH'),
                            condition=('[\w]+\.xls', '[\w]+\.xlsx'))
    for _file in target_file:
        settings.set(_file.stem, _file)

    def modify_log_report_config():
        """
        根据项目实际需要修改log和report目录,存放结构如下
        test_report/current_time/console.log
        test_report/current_time/report.html
        :return: None
        """
        import time
        current_time = time.strftime("%Y%m%d%H%M%S")
        if settings.get('report_file_modify'):  # 根据配置文件中的策略修改日志和报告路径
            report_path = settings.get('DCN_TESTREPORT_PATH')
            settings.set('report_dir_path',
                         (report_path / current_time).__fspath__())
            settings.set('report_file',
                         (report_path / current_time /
                          settings.get('report_name')).__fspath__())
            if settings.log_file_modify:
                settings.set('log_dir_path',
                             (report_path / current_time).__fspath__())
                settings.set('log_file',
                             (report_path / current_time /
                              settings.get('log_name')).__fspath__())
        del time

    modify_log_report_config()  # 动态修改日志和报告存放路径和信息
    import sys
    sys.modules['library.conf'].settings = settings
Exemplo n.º 2
0
 def load(self, discovery):
     if discovery:
         self.parse(discovery)
     else:  # 默认加载方式 先从全局settings中获取,失败再从当前python文件中获取
         if settings.get('testcase_ini'):  # 尝试全局扫描到的配置文件
             log("使用自动扫描到的配置文件加载测试用例", level='info')
         else:  # 尝试通过py加载
             log("使用当前环境中的py变量加载测试用例", level='info')
Exemplo n.º 3
0
def file_import(url):
    """
    + 说明:
        根据输入的url,判断需要导入的csv文件

    :param url: sheet表中读出的url
    :return: 导出的文件名
    """
    imports = settings.get('imports')  # 将配置文件中的string转换成dict
    for key in imports:
        if re.match(key, url) is not None:
            return imports[key]
    return None
Exemplo n.º 4
0
def file_export(url):
    """
    + 说明:
        根据输入的url,判断需要导出的csv文件

    :param url: sheet表中读出的url
    :return: 导出的文件名
    """
    exports = settings.get('exports')  # 此处获取的exports为dict类型
    for key in exports:
        if re.match(key, url) is not None:
            return exports[key]  # 支持通过.的方式访问字典
    return None
Exemplo n.º 5
0
 def modify_log_report_config():
     """
     根据项目实际需要修改log和report目录,存放结构如下
     test_report/current_time/console.log
     test_report/current_time/report.html
     :return: None
     """
     import time
     current_time = time.strftime("%Y%m%d%H%M%S")
     if settings.get('report_file_modify'):  # 根据配置文件中的策略修改日志和报告路径
         report_path = settings.get('DCN_TESTREPORT_PATH')
         settings.set('report_dir_path',
                      (report_path / current_time).__fspath__())
         settings.set('report_file',
                      (report_path / current_time /
                       settings.get('report_name')).__fspath__())
         if settings.log_file_modify:
             settings.set('log_dir_path',
                          (report_path / current_time).__fspath__())
             settings.set('log_file',
                          (report_path / current_time /
                           settings.get('log_name')).__fspath__())
     del time