原创 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层再进行构造。
| 多层面的自动化测试
在全方位生态系统中,基于隐私AI计算网络衍生的周边产品,如区块链浏览器PlatScan、区块链钱包ATON等,我们也需要对其进行自动化测试。
对于PlaON网络,我们主要是调用节点的RPC接口来进行自动化测试。而对于周边产品,其涉及的测试范围更加宽泛,涵盖了UI、接口、数据库等多个测试层面。我们要建立完善的自动化测试,就需要从各个层面,以不同的视角进行切入,来开展分层自动化测试。
分层测试原则
那么,怎么开展分层自动化测试,又要怎么避免因为存在多个测试层面而导致重复测试相同场景呢?我们梳理了三点分层自动化测试原则:
明确主层:根据业务侧重点,选择UI、接口等某一个层面作为主层,自动化测试场景倾向于在主层去实现测试。
各层互补:除了主层外,其他层面作为主层的辅助层,用于补充主层的不足。当接口层作为主层时,UI层就倾向于做UI的校验,业务逻辑在接口层进行测试。
多层结合:在检验业务流程的时候,自动化用例应实现端到端的测试,在多个层面进行检查,实现全视角覆盖。每个层面都应该拥有自己的Case、Fixture和Lib,多个层面之间,通过Fixture来实现衔接。
| 自动化测试的应用
PlatON的自动化测试,涵盖了2000余个测试场景,对黑盒测试场景的覆盖率达到了90%。同时,我们把自动化测试加入到了持续集成的过程中,与研发工作流程相结合,为迭代测试、版本发布测试工作,贡献了一份独有的力量。
本文转载自https://mp.weixin.qq.com/s/a7iiMRMOS790gRM3mFLZzA