Python 对象序列化技术
对象序列化是指将对象从内存转换为字节流的过程,以实现对象的持久化存储和网络传输。它在许多场景中都非常重要,比如远程调用、长期数据存储等。
在Python中,我们主要使用pickle和marshal这两个模块来实现对象的序列化和反序列化。我们来看看这两个模块的工作原理以及优缺点对比。
同时,在这我准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,这份测试文档资料也打包在里面啦,免费领取!
软件测试视频教程观看处:
【B站最系统自动化测试教程】整整400集,从入门到项目实战,只需18天,手把手带你进阶自动化测试!!!
在自动化测试中的应用
测试数据存储和读取
-
自动化测试通常需要大量测试数据作为输入。对象序列化可以对测试数据进行存储和读取,方便测试数据的管理和重复利用。
-
例如使用pickle将测试用例的输入输出数据序列化到文件中,测试执行时直接加载这些序列化的数据进行测试。
测试结果检查
-
测试执行完成后,可以将测试运行期间产生的结果对象通过序列化的方式存储下来。
-
后续可以对比实际结果与存储的期望结果进行验证。
远程测试
-
对象序列化技术可以支持将测试用例和测试框架等对象在不同计算节点之间进行传输,实现集中式的远程测试。
测试环境重播
-
通过对象序列化可以将测试环境中对象的状态持久化存储下来。以后可以直接加载这些状态来重放测试场景。
自动化框架模块化
-
对象序列化可以实现自动化测试框架的封装和解耦。比如将各个测试模块和plugin以序列化的方式集成到框架中。
功能回归测试
-
将历史测试通过和结果对象持久化下来,就可以实现随时执行历史功能点的回归测试。
对象序列化技术可以为自动化测试提供数据管理,结果检查,环境管理,远程执行以及回归测试等多种功能,在自动化测试过程中广泛应用。
pickle 模块
pickle模块可以将广泛的数据类型如字典、列表、对象实例等序列化和反序列化。
import pickle
data = {
'a': [1, 2.0, 3],
'b': 'hello'
}
with open('data.pkl', 'wb') as f:
pickle.dump(data, f)
with open('data.pkl', 'rb') as f:
data2 = pickle.load(f)
print(data2)
它通过保存和提取对象的状态实现深度克隆。
marshal 模块
marshal模块也能实现对象的序列化,但它只支持Python内置的数据类型如数字、字符串等。
import marshal
data = [1, 2.0, "hello"]
with open('data.marshal', 'wb') as f:
marshal.dump(data, f)
with open('data.marshal', 'rb') as f:
data2 = marshal.load(f)
print(data2)
它通过直接保存对象在内存中的二进制表示实现序列化。
将函数序列化
我们也可以将函数本身当作对象进行序列化。
import pickle
import marshal
def test():
print(123)
with open('func.pkl', 'wb') as f:
pickle.dump(test, f)
with open('func.marshal', 'wb') as f:
marshal.dump(test, f)
通过加载函数定义本身实现了函数的持久化。
对比
marshal 和 pickle是Python中两种常用的对象序列化模块,它们各有优缺点:
pickle的优点:
-
支持广泛的数据类型,可以序列化最基本的数据类型以及用户自定义的数据类型。
-
兼容性好,可以在不同Python版本之间进行序列化和反序列化。
-
更友好,支持持久化整个对象状态。
marshal的优点:
-
速度更快,生成的序列化数据体积更小。
-
只支持Python内置数据类型,不支持自定义类等。
pickle的缺点:
-
安全性较低,可能因为外部输入数据恶意构造而导致 segurança 漏洞。
-
兼容性不错但是并不完美,在不同版本间可能因为API更改而出现问题。
marshal的缺点:
-
只支持Python内置类型,不适用于持久化完整对象状态。
-
不同平台或者Python版本间不一定兼容。
总体来说
-
如果需要跨平台/版本兼容或持久化完整对象,建议使用pickle。
-
如果只在同一环境下进行快速序列化,且数据体积要求小,使用marshal效率会高一些。
-
安全性要求高的场景下不推荐使用pickle,可能需要探索其他替代方案。
所以两者选择取决于项目实际需求,如兼容性、效率、安全等不同重点考虑。
总结
PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。