作者:资讯 / 来源:PlatON
自动化测试泛指使用程序或工具来代替人工的测试方式。相比人工测试,自动化测试准确度更高,且具有高可复用性,对保障产品质量、缩短测试时间有极大作用。本文将分为两部分介绍 PlatON 开展自动化测试的思路与技术实践。
为什么做自动化测试
在 PlatON 的世界中,存在着各种状态,如:质押状态、锁仓状态、提案状态等。其中,节点的质押状态就分为犹豫期、锁定期、冻结期三种,当某个账户对节点进行质押、解质押后,这些状态就开始随着 PlatON 块高增长而发生自动变化。在人工测试时,测试人员很难把握好其变化的时间,一旦出现失误,就会导致环境不符合测试要求,只能重新开始测试。
自动化测试把人工测试时难以把握的状态变化,交给测试代码来负责。测试人员编写好自动化测试程序,这些程序按照代码逻辑,可以方便、精确地完成整个测试验证。这很好地解决了人工测试的困境,同时,我们也可以享受自动化高复用性带来的测试工作上的便利。
自动化测试的要点
在我们进行自动化测试前,需要通过对测试需求的延展和细化,来梳理出自动化测试的要点。有了这些要点,才能让我们在建立测试框架时,不至于出现设计上的偏差。
PlatON 自动化测试包括以下三个要点:
支持分布式请求与检查 -区块链的分布式特性,决定了我们在进行测试时,也要做到分布式请求和分布式检查。这体现在自动化测试上,就是能够在任意节点发送交易,在任意节点校验交易结果。
支持自由组装交易 -我们测试 PlatON 时,主要是通过发送交易对其程序逻辑进行验证。交易的类型、交易包含的数据不同时,打包该交易的程序逻辑也完全不同。自动化测试必须具备自由组装交易的能力,才能够更完善地构造测试场景,尤其是在模拟异常、作恶的测试场景时,该能力不可或缺。
支持自动化、自定义的部署链 -区块链有不同的网络结构模式,有节点的接入、退出,测试这些场景时,需要自动化测试能够自定义的部署链。除此之外,在进行测试场景恢复的时候(执行完某一个测试场景,将场景恢复为初始状态),遇到需要长时间等待的情况时,重新部署链将是更好的选择。
自动化测试框架介绍
PlatON 自动化测试框架使用 Python 语言开发,基于 Pytest、PlatON SDK 实现,主要分为 Case、Lib、SDK 三层。
代码详情见 Github 仓库:
https://github.com/PlatONnetwork/PlatON-Tests
框架设计图
_ 框架详细介绍_
1. Case
基于 Pytest 框架规则编写的自动化测试用例。
2. Fixture
基于 Pytest 框架开发的 Fixture,用于支持测试用例开发,实现了自定义测试运行参数、构造测试环境、判断环境是否满足用例运行条件、获取测试对象、用例前后置动作、使用钩子拉取异常日志等功能。
在使用 Fixture 来获取测试对象时,我们会将每个节点抽象化为一个 Client 对象,并返回所有 Client 对象列表给予用例使用,使得用例可以根据测试场景需要,自由进行分布式的交易请求和检查。
我们定义了一批检查环境的 Fixture,用于检查当前链是否满足某一类测试场景的运行条件。能够满足则运行该测试场景,不能满足,则将链进行重新部署,然后基于重新部署的链运行该测试场景。我们以这种方式,来保证自动化测试可以持续运行。
3. Lib
Lib 作为测试用例的支持层,对接 Fixture,封装了一些公共方法、测试工具、计算公式、配置信息等。其中 Client 类为 Lib 层的主类,它组装了整个 Lib 层的对象,方便自动化测试代码开发,并加入了 Env SDK 和 PlatON SDK 的主对象,以实现链环境部署、自定义交易发送的能力。
4. Env
PlatON 链部署代码,将测试环境抽象为 Env、Server、Node 等类,使用 Supervisor 来进行 PlatON 节点的进程、日志管理。Env 支持多线程的方式,对链、对节点进行部署、修改、查询、清理等操作。
5. SDK
PlatON SDK,提供了自由组装和发送交易能力,当我们需要构造特殊的交易时,我们会直接深入到 SDK 层再进行构造。