zoukankan      html  css  js  c++  java
  • 接口测试系列:工作中所用(四:文件操作工具类fileUtil.py)

    import os
    import shutil
    import yaml
    
    '''
        文件操作工具类
    '''
    class fileUtil:
    
        __instance = None  # 实例
    
        def __new__(cls, *args, **kwargs):
            '''
            单实例
            :param args:
            :param kwargs:
            :return:
            '''
            if not cls.__instance:
                cls.__instance = super(fileUtil, cls ).__new__(cls, *args)
            return cls.__instance
    
        def del_files(self, path):
            delList = os.listdir(path)
            for f in delList:
                filePath = os.path.join(path, f)
                if os.path.isfile(filePath):
                    os.remove(filePath)
                    print(filePath + " 已删除!")
                elif os.path.isdir(filePath):
                    shutil.rmtree(filePath, True)
                    print("目录: " + filePath + " 已删除!")
    
        def get_yml_file_path(self, file_name):
            file_path = None
            print(os.name)
            try:
                project_name = ""
                # windows系统下获取工程名
                if os.name == "nt":
                    file_dirs = os.path.split(file_name)[0]
                    #处理“D:/Software/WorkSpace/Python/”这种格式的路径
                    if file_dirs.find("/") != -1:
                        project_name = file_dirs.split("/")[len(file_dirs.split("/")) - 1] #倒数第一个目录
    
                    elif file_dirs.find("\") != -1:
                        project_name = file_dirs.split("\")[len(file_dirs.split("/"))-3] #取工程名
    
                # linux系统下获取工程名
                elif os.name == "posix":
                    file_dirs = os.path.split(file_name)[0]
    
                    if file_dirs.find( "/" ) != -1:
                        project_name = file_dirs.split("/")[len( file_dirs.split("/") ) - 2]
    
                # 拼接出yml测试数据文件的绝对路径
                if project_name == 'testcases':
                    file_path = file_name.replace(project_name, "testdatas")[:-8]+ ".yml"
                    suffix = '_smoke'
                    if file_path.find(suffix) > 0:
                        file_path = ''
                else:
                    file_path = os.path.join(
                        os.path.realpath(os.path.dirname(os.path.dirname(os.path.dirname(file_name)))),
                        project_name, "testdatas",
                        os.path.basename(file_name)[:-8]) + ".yml"
    
                self.file_path = file_path
            except Exception as e:
                print("yml测试数据文件路径有误!" + str(e))
            return file_path
    
        def get_test_data_by_name(self, file_name):
            '''
            根据test case的名字自动获取对应的yml格式测试数据
            :param file_name: test case的名字  os.path.abspath( __file__ )
            :return:
            '''
            return self.connect_to(self.get_yml_file_path(file_name)).parsed_data, self.file_path
    
        def connect_to(self, file_path):
            factory = None
            try:
                factory = self.connection_factory(file_path)
            except ValueError as ve:
                print(ve)
            return factory
    
        def connection_factory(self, file_path):
            if file_path.endswith("yml"):
                connector = self.YAMLConnector
            else:
                raise ValueError( "文件格式错误,Can't connect to {}".format(file_path))
            return connector(file_path)
    
        class YAMLConnector:
            def __init__(self, file_path):
                with open(file_path, "rb")as f:
                    self.data = yaml.load( f )
    
            @property
            def parsed_data(self):
                return self.data
    

      

  • 相关阅读:
    Pytest中参数化之Excel文件实战
    PyCharm 专业版 2018激活(pycharm-professional-2018.2.4.exe)
    python语言编写一个接口测试的例子,涉及切割获取数据,读取表格数据,将结果写入表格中
    webdriver之UI界面下拉框的选择
    git的安装与详细应用
    安装jenkins
    python对数据库mysql的操作(增删改查)
    批量执行测试用例
    面向对象中多态的讲解+工厂设计模式的应用与讲解
    面向对象
  • 原文地址:https://www.cnblogs.com/by170628/p/9816139.html
Copyright © 2011-2022 走看看