用序列化思想为自动化测试「提供动力」

Python 对象序列化技术

对象序列化是指将对象从内存转换为字节流的过程,以实现对象的持久化存储和网络传输。它在许多场景中都非常重要,比如远程调用、长期数据存储等。

在Python中,我们主要使用pickle和marshal这两个模块来实现对象的序列化和反序列化。我们来看看这两个模块的工作原理以及优缺点对比。

同时,在这我准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺这份测试文档资料也打包在里面啦,免费领取!

软件测试视频教程观看处:

【B站最系统自动化测试教程】整整400集,从入门到项目实战,只需18天,手把手带你进阶自动化测试!!!

在自动化测试中的应用

测试数据存储和读取

  • 自动化测试通常需要大量测试数据作为输入。对象序列化可以对测试数据进行存储和读取,方便测试数据的管理和重复利用。

  • 例如使用pickle将测试用例的输入输出数据序列化到文件中,测试执行时直接加载这些序列化的数据进行测试。

测试结果检查

  • 测试执行完成后,可以将测试运行期间产生的结果对象通过序列化的方式存储下来。

  • 后续可以对比实际结果与存储的期望结果进行验证。

远程测试

  • 对象序列化技术可以支持将测试用例和测试框架等对象在不同计算节点之间进行传输,实现集中式的远程测试。

测试环境重播

  • 通过对象序列化可以将测试环境中对象的状态持久化存储下来。以后可以直接加载这些状态来重放测试场景。

自动化框架模块化

  • 对象序列化可以实现自动化测试框架的封装和解耦。比如将各个测试模块和plugin以序列化的方式集成到框架中。

功能回归测试

  • 将历史测试通过和结果对象持久化下来,就可以实现随时执行历史功能点的回归测试。

对象序列化技术可以为自动化测试提供数据管理,结果检查,环境管理,远程执行以及回归测试等多种功能,在自动化测试过程中广泛应用。

pickle 模块

pickle模块可以将广泛的数据类型如字典、列表、对象实例等序列化和反序列化。

import pickledata = {'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 marshaldata = [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 marshaldef 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,整理不易,给个关注点个赞吧,谢谢各位大佬!

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/255197.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【环境搭建】ubuntu22安装ros2

基于某种特殊需求,从Ubuntu16到22目前都尝试过安装ros、ros2 参考1:http://t.csdnimg.cn/DzvSe 参考2:http://t.csdnimg.cn/sOzr1 1.设置locale sudo apt update && sudo apt install locales sudo locale-gen en_US en_US.UTF-8 s…

护眼台灯哪个品牌更好?考公护眼台灯推荐

小的时候,家里人对眼睛的重视程度比较低,我本人也没有爱护眼睛的习惯,属于在学校做眼保健操都要偷懒的那种,在小学时候就早早当上了“四眼仔”,随着时间的推移,现在成了一名高度近视人士,摘下眼…

C++中单引号‘‘和双引号““的区别

操作系统:Windows 10 IDE:CLion 单引号:表示一个字符,例如 a 双引号"":表示一个字符串,例如 "a" 在C中,使用双引号可以方便地创建字符串,而使用单引号可以方便…

echarts图之 底部滚动横轴 缩放图形大小

//折线图-堆叠面积图function pileLineChart(odata, dom){//放大缩小的代码startvar dataZoom [],y240;if(odata.xData.length > 7){dataZoom [{show: true,realtime: true,startValue:0, endValue:5,left:"center",top:"auto",right:"auto"…

前端笔记(四)Flex 布局

标准流 标准流也叫文档流,指的是标签在页面中默认的派不规则,例如:块元素独占一行,行内元素可以一行显示多个。 但是很多的网页布局都是块元素在一行中显示的,这时候就需要浮动和 Flex 布局,浮动只需要了解…

忘记PDF密码了,怎么办?

PDF文件有两种密码,一个打开密码、一个限制编辑密码,因为PDF文件设置了密码,那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密? PDF和office一样,可以对文件进行加密,但是没有提供恢复密码的功…

[足式机器人]Part2 Dr. CAN学习笔记-Ch0-1矩阵的导数运算

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-Ch0-1矩阵的导数运算 1. 标量向量方程对向量求导,分母布局,分子布局1.1 标量方程对向量的导数1.2 向量方程对向量的导数 2. 案例分析,线性回归3. 矩阵求导的链…

如何在报表工具 FastReport Cloud 中使用 ClickHouse

FastReport Cloud 是一项云服务 (SaaS),旨在为您的企业存储、编辑、构建和发送报告。您的整个团队可以从世界任何地方访问这些报告,并且无需创建自己的应用程序。 FastReport Cloud 试用(qun:585577353)https://chat8.…

(04730)串联电路与并联电路

04730电子技术基础 语雀(完整笔记) 这节图比较多,能够看懂图,理解图,清楚为什么这样等效很重要 分压分流公式是重点 电路等效的概念 二端网络 电路分析中,我们可以把一组相互联接的元件作为一个整体来…

重生奇迹mu武器镶嵌顺序

一,武器的镶嵌顺序: 雷冰火30%概率出现技能11 从上到下的镶嵌顺寻按照雷、冰、火镶嵌,就有30%的概率出现技能攻击力加11的幸运荧光属性。 从上到下的镶嵌顺寻按照火、冰、雷镶嵌,就有30%的概率出现攻击力加11的幸运荧光属性。 …

Git 如何撤回已 Push 的代码

在日常的开发中,我们经常使用Git来进行版本控制。有时候,我们可能会不小心将错误的代码 Push 到远程仓库,或者想要在本地回退到之前的某个版本重新开发。 或者像我一样,写了一些感觉以后很有用的优化方案push到线上,又…

C //例10.2 将一个磁盘文件中的信息复制到另一个磁盘文件中。

C程序设计 (第四版) 谭浩强 例10.2 例10.2 将一个磁盘文件中的信息复制到另一个磁盘文件中。 IDE工具:VS2010 Note: 使用不同的IDE工具可能有部分差异。 代码块 方法:使用指针,函数的模块化设计,动态分…