前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用序列化思想为自动化测试「提供动力」

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

作者头像
测试开发囤货
发布2023-12-10 14:17:53
1650
发布2023-12-10 14:17:53
举报
文章被收录于专栏:测试开发囤货测试开发囤货

Python 对象序列化技术

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

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

在自动化测试中的应用

测试数据存储和读取

  • 自动化测试通常需要大量测试数据作为输入。对象序列化可以对测试数据进行存储和读取,方便测试数据的管理和重复利用。
  • 例如使用pickle将测试用例的输入输出数据序列化到文件中,测试执行时直接加载这些序列化的数据进行测试。

测试结果检查

  • 测试执行完成后,可以将测试运行期间产生的结果对象通过序列化的方式存储下来。
  • 后续可以对比实际结果与存储的期望结果进行验证。

远程测试

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

测试环境重播

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

自动化框架模块化

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

功能回归测试

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

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

pickle 模块

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

代码语言:javascript
复制
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内置的数据类型如数字、字符串等。

代码语言:javascript
复制
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)

它通过直接保存对象在内存中的二进制表示实现序列化。

将函数序列化

我们也可以将函数本身当作对象进行序列化。

代码语言:javascript
复制
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,可能需要探索其他替代方案。

所以两者选择取决于项目实际需求,如兼容性、效率、安全等不同重点考虑。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发囤货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python 对象序列化技术
  • 在自动化测试中的应用
    • 测试数据存储和读取
      • 测试结果检查
        • 远程测试
          • 测试环境重播
            • 自动化框架模块化
              • 功能回归测试
              • pickle 模块
              • marshal 模块
              • 将函数序列化
              • 对比
                • pickle的优点:
                  • marshal的优点:
                    • pickle的缺点:
                      • marshal的缺点:
                      • 总体来说
                      相关产品与服务
                      腾讯云服务器利旧
                      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档