BitXHub 是趣链科技自主研发的跨链技术平台,提供基于异构联盟链间的账本互操作解决方案。为保障 BitXHub 跨链平台在日常迭代过程中的性能合乎用户需要,并尽可能多的把问题在公布或交付之前发现并改过,Premo 测试工具应运而生。Premo 次要基于 BitXHub 本身的 gosdk 实现,具备易于扩大和保护的特点。本文次要围绕功能测试、性能测试以及自动化测试三个方面来概述 Premo 的测试框架。
【架构总览】
Premo 测试框架如下图所示。基于测试的内容次要分为「功能测试」和「性能测试」。功能测试次要基于 testing 和 testify 实现整体测试框架,基于 gosdk 实现和 BitXHub 跨链平台的通信和调用;性能测试次要是在 gosdk 的根底上通过协程实现。Premo 在功能测试的根底上又进一步实现了继续集成测试,继续集成测试局部次要借助 GitHub Actions 实现。
【功能测试】
功能测试模块次要依靠于 BitXHub 我的项目本身的 gosdk,testify 开源库和 testing 库实现。功能测试模块依据测试的性能点分为多个测试文件,每一个测试文件内的测试用例都蕴含于一个测试套件中,在日常测试能够基于你所须要测试的性能点来运行不同的套件,如下图所示。例如 model1001_chain_test.go 内的所有测试用例都蕴含在 model1 这个套件中,如果须要运行 chain 相干的测试用例只需运行 model1 的套件即可。
▲并行化测试
随着我的项目的一直扩大,测试用例的数目也在一直减少,回归全量测试用例所耗费的工夫也越来越长,程序测试的办法在疾速迭代的版本开发中显得越来越低效。采纳并行化测试能够无效解决这个问题,然而这又会引入一个新的问题,也就是测试用例之间的耦合性。很多用例在串行测试的过程中不会裸露问题,一旦进行并行化测试就会呈现并发上的问题。
以 BitXHub 跨链平台为例,BitXHub 跨链平台在接管跨链交易的过程中会依据账户地址保护一个 nonce 值用于实现跨链交易的有序性,每收到一笔交易 nonce 值就会减少 1,如果收到的 nonce 值小于预期的 nonce 值,BitXHub 跨链平台就会丢掉这笔交易,反之,如果大于预期的 nonce,BitXHub 跨链平台就会暂存这笔交易,直至 nonce 达到预期。这就会要求咱们在并行化测试的用例中人为的去保护这个 nonce 值。因而,并行化测试中很重要的一点就是须要保护用例之间的绝对独立性,如何保护用例的绝对独立性则须要依据我的项目本身就地取材。
【性能测试】
掂量一个跨链服务零碎是否牢靠稳固很重要的一点便是跨链本身的性能指标。Premo 根据上述需要,基于 BitXHub 本身的 gosdk 实现了一套残缺的性能测试计划用于测验 BitXHub 跨链平台的性能是否满足需要。Premo 中进行的性能测试次要是压力测试,通过向 BitXHub 跨链平台发送大量的跨链交易来验证 BitXHub 解决跨链交易的性能。整体性能测试次要分 3 个步骤进行,别离是利用链筹备、发送跨链交易和统计 TPS。
▲利用链筹备
在发送跨链交易前,须要事后依据不同的交易类型注册肯定数量的利用链到中继链,以便后续 Premo 通过 SDK 应用这些利用链的身份向中继链发送跨链交易。利用链注册胜利后还须要部署相应的验证规定,用于中继链验证交易的有效性。
▲发送跨链交易
依据事后设定的 TPS 和利用链数量能够计算出一条利用链在一秒内须要向 BitXHub 跨链平台发送的跨链交易数量。事后设定的交易类型能够结构出对应的交易体。留神因为跨链交易的有序性要求,咱们须要在交易体中保护每一条跨链交易的 nonce 值。同时为了更加平均的发送跨链交易,每隔 50ms,Premo 就会发送局部跨链交易到 BitXHub 跨链平台上,例如 Premo 须要模仿 20 条利用链每秒总共发送 2000 条跨链交易,那么每条利用链须要在 1 秒内发送 100 条跨链交易,每 50ms 每条利用链就会发送 5 条跨链交易。
▲统计 TPS
统计 TPS 是通过订阅 BitXHub 跨链平台的区块事件实现。订阅区块事件后,BitXHub 跨链平台每出一个块就会推送到 Premo 中,Premo 通过统计区块内的交易数量来计算 TPS,每笔交易的延时 = 收到区块的工夫搓 – 交易的工夫搓。Premo 根据上述信息每秒打印 TPS 和交易的均匀延时。
【自动化测试】
自动化测试次要实现的性能是在任意一个分支提 PR 到 master 分支或者 release* 分支时,实现全量性能测试用例的测试,同时依据测试后果生成相应的测试报告,并将测试报告公布到服务器,通过邮箱的模式告诉 PR 的提交者。
▲Make 命令
Premo 将功能测试退出 make 命令中,通过 make 命令就能进行全量的功能测试。同时 make 命令依据测试的后果生成相应的测试报告。
▲GitHubActions
GitHub Actions 是 GitHub 的继续集成服务。在任意一个分支提 PR 到 master 分支或者 release* 分支时会触发对应的 action,action 将依据目标分支名拉取对应的 Premo 分支进行功能测试,同时将成的测试报告公布到指定的服务器上,并将测试报告的连贯通过邮件的模式发送给 PR 的提交者。
▲allure-server
GitHub 上开源的 Allure Report Server,反对通过 GitHub Actions 的形式公布测试报告,并且 allure-server 反对 docker。
「上述须要进行的工作较多,咱们能够一点一点解析」
(1)依据 PR 触发 action:
具体参考 github actions 的官网文档 Eventsthat trigger workflows 相干章节;
(2)依据目标分支功能测试:
在 action 中咱们能够获取目标分支名,Premo 的测试用例是依据 BitXHub 跨链平台的版本保护的,所以只需依据目标分支名拉取 Premo 进行功能测试即可;
(3)公布测试报告:
公布测试报告次要通过 allure-server 进行,allure-server 在上文曾经提过。须要留神的一点是 allure-server 对应的服务器的地址不能裸露,否则会给服务器带来不稳固因素,通过仓库 [Setting] 中设置 [Secrets] 来能够解决这个问题;
(4)邮箱告诉:
邮件告诉在 GitHub Actions 中较为常见,应用对应的 action 即可。须要留神是因为应用的 SMTP 的模式所以邮箱的账号和明码不能公开。通过仓库 [Setting] 中设置 [Secrets] 能够解决这个问题。在邮箱告诉的过程中须要晓得目标邮箱的账目明码,同时还须要邮箱开启 SMTP 服务,这种状况下在 action 中配置 PR 提交者的邮箱变的不可取。
一个适合的解决形式是:通过邮箱本身的收发信规定。以腾讯企业邮箱为例,邮箱反对依据邮件的内容进行主动转发。咱们只须要在邮件中携带提交者的 github 的名称(或者其余身份信息),收发信规定依据名称过滤,将邮件主动转发给 PR 提交者。通过上述形式在 action 中不须要依据不同的 PR 提交者指定不同的邮箱地址,只须要将邮件发送给 ” 中转站 ” 即可。
实现上述工作后,只须要依据 BitXHub 的分支保护 Premo 性能测试用例即可实现相应的自动化测试。具体流程如下图所示:
【总结】
本文介绍了 BitXHub 官网测试框架 Premo 的根本设计原理和测试模块,及功能测试和性能测试的重要实现办法。通过 Github Actions 的编排,Premo 能够较好地对 BitXHub 的功能模块实现自动化并行测试,并及时反馈测试后果。
如想进一步理解 Premo 测试框架的具体实现,可拜访我的项目地址或分割小助手桔子(18458407117)退出技术交换群,获取更多材料。
地址:https://github.com/meshplus/p…
作者简介
祝炜洁
趣链科技数据网格实验室 BitXHub 团队