PlatON的自动化测试(上)

原创 PlatON 

PlatON的自动化测试(上)

自动化测试泛指使用程序或工具来代替人工的测试方式。相比人工测试,自动化测试准确度更高,且具有高可复用性,对保障产品质量、缩短测试时间有极大作用。本文将分为两部分介绍PlatON开展自动化测试的思路与技术实践。

| 为什么做自动化测试

在PlatON的世界中,存在着各种状态,如:质押状态、锁仓状态、提案状态等。其中,节点的质押状态就分为犹豫期、锁定期、冻结期三种,当某个账户对节点进行质押、解质押后,这些状态就开始随着PlatON块高增长而发生自动变化。在人工测试时,测试人员很难把握好其变化的时间,一旦出现失误,就会导致环境不符合测试要求,只能重新开始测试。

自动化测试把人工测试时难以把握的状态变化,交给测试代码来负责。测试人员编写好自动化测试程序,这些程序按照代码逻辑,可以方便、精确地完成整个测试验证。这很好地解决了人工测试的困境,同时,我们也可以享受自动化高复用性带来的测试工作上的便利。

| 自动化测试的要点

在我们进行自动化测试前,需要通过对测试需求的延展和细化,来梳理出自动化测试的要点。有了这些要点,才能让我们在建立测试框架时,不至于出现设计上的偏差。

PlatON自动化测试包括以下三个要点:

支持分布式请求与检查-区块链的分布式特性,决定了我们在进行测试时,也要做到分布式请求和分布式检查。这体现在自动化测试上,就是能够在任意节点发送交易,在任意节点校验交易结果。

支持自由组装交易-我们测试PlatON时,主要是通过发送交易对其程序逻辑进行验证。交易的类型、交易包含的数据不同时,打包该交易的程序逻辑也完全不同。自动化测试必须具备自由组装交易的能力,才能够更完善地构造测试场景,尤其是在模拟异常、作恶的测试场景时,该能力不可或缺。

支持自动化、自定义的部署链-区块链有不同的网络结构模式,有节点的接入、退出,测试这些场景时,需要自动化测试能够自定义的部署链。除此之外,在进行测试场景恢复的时候(执行完某一个测试场景,将场景恢复为初始状态),遇到需要长时间等待的情况时,重新部署链将是更好的选择。

| 自动化测试框架介绍

PlatON自动化测试框架使用Python语言开发,基于Pytest、PlatON SDK实现,主要分为Case、Lib、SDK三层。

代码详情见Github仓库:

https://github.com/PlatONnetwork/PlatON-Tests

PlatON的自动化测试(上)
框架设计图

框架详细介绍

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层再进行构造。

发布者:PlatONWorld-Mr.Dou,转载请注明出处:https://platonworld.org/zh/?p=6039

(1)
PlatONWorld-Mr.Dou的头像PlatONWorld-Mr.Dou管理员
上一篇 29 6 月, 2021 10:25
下一篇 29 6 月, 2021 21:14

相关推荐

发表回复

登录后才能评论