测试学习记录,仅供参考!
项目实战演练--封装方法
封装文件写入方法
1、 在项目根目录下新建一个名称为“configs”的目录文件,用于存放配置文件,继续在该目录文件下新建名称为“setting.py”的 Python 文件,在 “setting.py” 文件输入以下内容;
# 导包 import os import sys # 使用os.path.dirname获取当前文件所在目录的父目录--也就是说获取当前文件的上一级目录 # 这里需要拿到项目的根目录,所以再叠加一次 DIR_PATH = os.path.dirname(os.path.dirname(__file__)) # 找到项目根目录之后需要把它加到 搜索模块里面去 # 把项目根目录添加到系统的路径列表中--目的是:确保可以通过导入模块的方式找到项目根目录 sys.path.append(DIR_PATH)2、在项目根目录下新建一个自定义名称的 YAML 格式文件(例如文件名称为“extract.yaml”),用于储存接口返回值的提取结果, 暂时不需要输入任何内容(为空即可);
3、 修改 configs 目录下“setting.py” 文件内容,新建一个字典变量来定义某个需要的文件路径,以便后续使用(可自行打印出文件路径进行测试验证,查看是否准确;测试验证后记得注释掉);
# 导包 import os import sys # 使用os.path.dirname获取当前文件所在目录的父目录--也就是说获取当前文件的上一级目录 # 这里需要拿到项目的根目录,所以再叠加一次 DIR_PATH = os.path.dirname(os.path.dirname(__file__)) # 找到项目根目录之后需要把它加到 搜索模块里面去 # 把项目根目录添加到系统的路径列表中--目的是:确保可以通过导入模块的方式找到项目根目录 sys.path.append(DIR_PATH) # 新建一个字典 FILE_PATH 变量来定义文件路径 FILE_PATH = { # 这样做的好处是:其他地方需要用到时可直接引用 setting.py模块 'extract' : os.path.join(DIR_PATH, 'extract.yaml') } # 打印出文件路径--通过字典key值可以拿到文件路径 # print(FILE_PATH['extract'])4、修改 handle_data 软件包下“yaml_handler.py” 文件内容,封装一个写入方法;
# 导包 import yaml import os from configs.setting import FILE_PATH # 定义函数 read_yaml--传一个参数--要读取哪个yaml文件 def read_yaml(yaml_path): """ 读取yaml文件数据 :param yaml_path: :return: """ # 读取文件最好加上异常处理 try: # 使用open打开文件--使用这个后面可以不用手动关闭,它调用完之后会自动关闭文件句柄 # 打开哪个文件、权限、编码格式 with open(yaml_path, 'r', encoding='utf-8') as file: # 直接调用yaml.safe_load()加载文件file data = yaml.safe_load(file) # return返回 return data except UnicodeDecodeError: print(f"{yaml_path}文件编码格式错误,--尝试使用utf-8去解码YAML文件发送错误,请确保你的yaml文件是utf-8格式!") except Exception as e: print(f"读取{yaml_path}文件时出现异常,原因:{e}") # 定义一个方法 write_yaml--(file_path 写入路径,value 写入一个数据) # 这个写入方法是专门把数据写到创建的extract.yaml中 def write_yaml(value): # 这里做自动化测试,一般只需要固定写入,传一个参数就行,按需自行选择 """ yaml文件数据写入 :param value:(dict)写入的数据,必须为字典格式 :return: """ # 往哪里写入数据--先引进模块 configs.setting --获取文件路径--不至于后面把路径写死 file_path = FILE_PATH['extract'] # 打印查看文件路径--看它有没有拿到 print(file_path) # 判断这个文件 file_path 路径不存在时--引进 os 模块 if not os.path.exists(file_path): # 若不存在,调用 os.system() 再创建一个file_path文件路径 os.system(file_path) # 调试查看一下新写的 write_yaml()方法有没有生效 if __name__ == '__main__': # 调用 write_yaml--先传一个空 res = write_yaml(value=None) # 打印结果:None print(res)5、如若此时在项目根目录下没有 “extract.yaml”文件,再执行 yaml_handler.py 文件,会运行失败,控制台报错显示提醒乱码(可自行删除文件测试验证);
6、继续修改 handle_data 软件包下“yaml_handler.py” 文件内容,优化写入方法,假如项目根目录下不存在 extract.yaml 文件,则会自动创建一个;
# 导包 import yaml import os from configs.setting import FILE_PATH # 定义函数 read_yaml--传一个参数--要读取哪个yaml文件 def read_yaml(yaml_path): """ 读取yaml文件数据 :param yaml_path: :return: """ # 读取文件最好加上异常处理 try: # 使用open打开文件--使用这个后面可以不用手动关闭,它调用完之后会自动关闭文件句柄 # 打开哪个文件、权限、编码格式 with open(yaml_path, 'r', encoding='utf-8') as file: # 直接调用yaml.safe_load()加载文件file data = yaml.safe_load(file) # return返回 return data except UnicodeDecodeError: print(f"{yaml_path}文件编码格式错误,--尝试使用utf-8去解码YAML文件发送错误,请确保你的yaml文件是utf-8格式!") except Exception as e: print(f"读取{yaml_path}文件时出现异常,原因:{e}") # 定义一个方法 write_yaml--(file_path 写入路径,value 写入一个数据) # 这个写入方法是专门把数据写到创建的extract.yaml中 def write_yaml(value): # 这里做自动化测试,一般只需要固定写入,传一个参数就行,按需自行选择 """ yaml文件数据写入 :param value:(dict)写入的数据,必须为字典格式 :return: """ # 往哪里写入数据--先引进模块 configs.setting --获取文件路径--不至于后面把路径写死 file_path = FILE_PATH['extract'] # 打印查看文件路径--看它有没有拿到 print(file_path) # 判断这个文件 file_path 路径不存在时--引进 os 模块 if not os.path.exists(file_path): # 若在项目根目录下不存在extract.yaml文件,则新建一个 with open(file_path, 'w', encoding='utf-8'): pass # 调试查看一下新写的 write_yaml()方法有没有生效 if __name__ == '__main__': # 调用 write_yaml--先传一个空 res = write_yaml(value=None) # 打印结果:None print(res)7、持续修改 handle_data 软件包下“yaml_handler.py” 文件内容,给写入方法添加异常处理;
# 导包 import yaml import os from configs.setting import FILE_PATH # 定义函数 read_yaml--传一个参数--要读取哪个yaml文件 def read_yaml(yaml_path): """ 读取yaml文件数据 :param yaml_path: :return: """ # 读取文件最好加上异常处理 try: # 使用open打开文件--使用这个后面可以不用手动关闭,它调用完之后会自动关闭文件句柄 # 打开哪个文件、权限、编码格式 with open(yaml_path, 'r', encoding='utf-8') as file: # 直接调用yaml.safe_load()加载文件file data = yaml.safe_load(file) # return返回 return data except UnicodeDecodeError: print(f"{yaml_path}文件编码格式错误,--尝试使用utf-8去解码YAML文件发送错误,请确保你的yaml文件是utf-8格式!") except Exception as e: print(f"读取{yaml_path}文件时出现异常,原因:{e}") # 定义一个方法 write_yaml--(file_path 写入路径,value 写入一个数据) # 这个写入方法是专门把数据写到创建的extract.yaml中 def write_yaml(value): # 这里做自动化测试,一般只需要固定写入,传一个参数就行,按需选择 """ yaml文件数据写入 :param value:(dict)写入的数据,必须为字典格式 :return: """ # 往哪里写入数据--先引进模块 configs.setting --获取文件路径--不至于后面把路径写死 file_path = FILE_PATH['extract'] # 打印查看文件路径--看它有没有拿到 # print(file_path) # 判断这个文件 file_path 路径不存在时--引进 os 模块 if not os.path.exists(file_path): # 若在项目根目录下不存在extract.yaml文件,则新建一个 with open(file_path, 'w'): pass # 定义一个空的变量--因为作用域问题,若不在最外层定义空变量,file.close()则会显示file黄色下滑波浪线提示警告 file = None # 添加异常处理 try: # 使用open打开文件--文件名,权限 a 追加写入,编码格式--赋值给file file = open(file_path, 'a', encoding='utf-8') # 针对写入的 value 数据进行判断--写入的value是否为字典类型 if isinstance(value, dict): # 若value是字典类型--直接使用yaml.dump()调用yaml文件 # 把参数传给它 value,可以写入中文,按顺序去写入 write_data = yaml.dump(value, allow_unicode=True, sort_keys=False) # 调用文件file--使用write()写入--数据write_data file.write(write_data) else: # 若不是字典类型,则打印 print("写入的数据必须为字典类型!") except Exception as e: print(f"写入yaml文件出现异常,原因:{e}") finally: # 不管是否有异常,都执行关闭文件操作--因为前面使用的是 open--所以需要手动关闭文件句柄 file.close() # 调试查看一下新写的 write_yaml()方法有没有生效 if __name__ == '__main__': # 调用 write_yaml--先传一个空 res = write_yaml(value=None) # 打印结果:None print(res)鼠标光标移动到“yaml.dump()”方法上, 按住“CTRL”键再鼠标单击可自行查看对应方法详情;
往上滑动查看“dump_all()”方法,里面有各种参数可供参考;
- allow_unicode=True -- 控制是否可以写入中文,默认allow_unicode=None--为None时,不能写入中文,这里设置为True,写入时可以写入中文;
- sort_keys=False -- 按顺序去写入,默认sort_keys=True--这里设置为False;sort_keys=True 指示编码器按照字典排序 (a 到 z) 输出。如果是字典类型的 Python 对象,将关键字按照字典排序。
写入字典类型数据
8、 此时在项目根目录下“extract.yaml”文件里面为空,没有任何数据信息;
9、 在“yaml_handler.py”文件'__main__'主函数测试调试传入字典格式数据后执行查看结果;
# 调试查看一下新写的 write_yaml()方法有没有生效 if __name__ == '__main__': # 调用 write_yaml--传入一个字典格式 res = write_yaml({"name":"ZhangSan"}) # 打印结果:None print(res)若 yaml_handler.py 文件执行成功后,则会在 extract.yaml 文件中写入字典格式数据;
封装清空文件方法
10、 优化 handle_data 软件包下“yaml_handler.py” 文件内容,封装一个清空文件方法;
# 导包 import yaml import os from configs.setting import FILE_PATH # 定义函数 read_yaml--传一个参数--要读取哪个yaml文件 def read_yaml(yaml_path): """ 读取yaml文件数据 :param yaml_path: :return: """ # 读取文件最好加上异常处理 try: # 使用open打开文件--使用这个后面可以不用手动关闭,它调用完之后会自动关闭文件句柄 # 打开哪个文件、权限、编码格式 with open(yaml_path, 'r', encoding='utf-8') as file: # 直接调用yaml.safe_load()加载文件file data = yaml.safe_load(file) # return返回 return data except UnicodeDecodeError: print(f"{yaml_path}文件编码格式错误,--尝试使用utf-8去解码YAML文件发送错误,请确保你的yaml文件是utf-8格式!") except Exception as e: print(f"读取{yaml_path}文件时出现异常,原因:{e}") # 定义一个方法 write_yaml--(file_path 写入路径,value 写入一个数据) # 这个写入方法是专门把数据写到创建的extract.yaml中 def write_yaml(value): # 这里做自动化测试,一般只需要固定写入,传一个参数就行,按需自行选择 """ yaml文件数据写入 :param value:(dict)写入的数据,必须为字典格式 :return: """ # 往哪里写入数据--先引进模块 configs.setting --获取文件路径--不至于后面把路径写死 file_path = FILE_PATH['extract'] # 打印查看文件路径--看它有没有拿到 # print(file_path) # 判断这个文件 file_path 路径不存在时--引进 os 模块 if not os.path.exists(file_path): # 若在项目根目录下不存在extract.yaml文件,则新建一个 with open(file_path, 'w'): pass # 定义一个空的变量--因为作用域问题,若不在最外层定义空变量,file.close()则会显示file黄色下滑波浪线提示警告 file = None # 添加异常处理 try: # 使用open打开文件--文件名,权限 a 追加写入,编码格式--赋值给file file = open(file_path, 'a', encoding='utf-8') # 针对写入的 value 数据进行判断--写入的value是否为字典类型 if isinstance(value, dict): # 若value是字典类型--直接使用yaml.dump()调用yaml文件 # 把参数传给它 value,可以写入中文,按顺序去写入 write_data = yaml.dump(value, allow_unicode=True, sort_keys=False) # 调用文件file--使用write()写入--数据write_data file.write(write_data) else: # 若不是字典类型,则打印 print("写入的数据必须为字典类型!") except Exception as e: print(f"写入yaml文件出现异常,原因:{e}") finally: # 不管是否有异常,都执行关闭文件操作--因为前面使用的是 open--所以需要手动关闭文件句柄 file.close() # 定义一个清空文件方法 clear_yaml def clear_yaml(): """ 清空 extract.yaml 文件数据 :return: """ # 调用with open()--文件路径,权限 w ,编码格式 with open(FILE_PATH['extract'], 'w', encoding='utf-8') as f: # 调用一个方法 f.truncate()--调用这个方法就会清空yaml文件 f.truncate() # 调试查看一下新写的 write_yaml()方法有没有生效 if __name__ == '__main__': # 调用 write_yaml 写入数据 write_yaml({"name": "ZhangSan"}) # 调用 clear_yaml()方法清空文件 clear_yaml()11、 在“yaml_handler.py”文件'__main__'主函数测试验证;
运行成功后再次打开查看 extract.yaml 文件,可以发现写入的数据信息已经成功被清空。
未完待续。。。