基于EdgeWorkers的边缘应用如何进行单元测试?

随着各行各业数字化转型的持续深入,越来越多企业开始选择将一些应用程序放在距离最终用户更近的边缘位置来运行,借此降低延迟,提高应用程序响应速度,打造更出色的用户体验。

相比传统集中部署和运行的方式,这种边缘应用的开发、部署、运行等工作需要一系列全新工具和技术的支持。例如Akamai EdgeWorkers,作为Akamai构建的全球化分布式无服务器网络,可以帮助客户在全球超过4200个位置,从最接近最终用户的地方运行JavaScript代码,进而实现更快的响应速度。

然而随着各种应用程序将越来越多的将¥功能转移至边缘位置,我们也更迫切地需要确保应用的每个功能都可以顺利地完成自己的本职工作,为此往往需要进行单元测试(Unit test)。单元测试可以分别运行程序中每个组成部分所对应的代码,检查代码的输入和输出,借此开发者就能分别检查程序中的每个部分,了解在哪里(以及为什么)发生错误。目前市面上有很多框架可以帮助我们轻松进行这样的测试,其中比较流行的包括Jest、Mocha、Jasmine以及Cypress等。

在EdgeWorkers的帮助下,开发者将能在边缘处运行Mock测试(单元测试中的一种方法),进而:

  • 再将代码发布到Akamai EdgeWorkers平台之前,确定代码语法正确,可以顺利运行不出错
  • 验证代码中的业务逻辑可以正常运行无错误
  • (在不依赖远程系统的前提下)从公司防火墙之后测试代码变动
  • 确保无论自己的代码或Akamai的JavaScript版本如何变化,相关业务逻辑都能正常生效

本文将向大家介绍如何通过Jest设置单元测试套件,以确保业务逻辑正常运行,随后顺利部署变动的代码并降低回归风险。

一、背景知识

Jest无需额外配置即可使用,它可以算得上是最容易学习的框架之一。由于npm或node中未提供可实现类似功能的软件包,因此我们创建了一个Jest mock范例,可供大家使用Node.js通过EdgeWorkers API测试JavaScript代码。通过这些手工创建的Mock即可更精确地控制相关函数。

Akamai的EdgeWorkers代码库为EdgeWorkers API提供了一系列Jest mock。此外,Akamai EdgeWorkers执行环境也提供了一系列模块和对象。

注意:测试将在Node中执行,但Node和EdgeWorkers都在V8之上运行,EdgeWorkers中的一些功能已被明确禁用,此外EdgeWorkers还存在一些执行方面的限制(主要是在时间和内存方面),开发者需要注意这些问题,不要在测试中引入Node API。

接下来一起看看具体该怎么做吧。

二、EdgeWorkers的结构

EdgeWorkers的结构如下:

src ——我们的Main.js和Bundle.json的所在位置,所有其他模块也应该保存在这里。

test —— 单元测试

三、创建并运行测试

步骤1:启动一个新项目

我们可以执行如下命令新建一个项目:

步骤2:安装Node模块

接下来获取需要安装的Node模块,并配置相关文件。

该项目所需的Mock已经以Node模块的形式发布至edgeworkers-jest-mocks,请运行下列命令安装该模块:

步骤3:设置Package.json

请确保自己的Package.json文件中包含下列配置:

  • 为Jest设置测试脚本

  • 配置Jest

首先需要配置Jest,这样才能更容易地导入EdgeWorkers API Mock。

步骤4:设置Babel.config.json

Babel已作为依赖项包含在内,借此提供Akamai EdgeWorkers所用的新版ECMAScript对应的信息。要正确配置该文件,我们只需将如下内容加入babel.config.json文件即可。

注意:如果该文件不存在,只需创建一个JSON文件并将其更名为babel.config.json即可。

步骤5:编写测试

在从Main.js文件导入EdgeWorker或其函数后,即可开始编写自己需要的任何类型的测试。针对EdgeWorker event handlers编写的测试需要创建一个Request或Response Mock,随后用该Mock调用Event handler函数。

如下内容展示了一个针对EdgeWorker的Jest测试范例,该测试位于src/main.js中:

步骤6:运行测试

测试是由Jest框架提供的。要运行我们自己的单元测试,请通过命令行执行如下命令:

上述命令可以按照Jest的方式运行Test目录中的所有测试。

借助Jest针对EdgeWorkers边缘应用程序进行单元测试的方法就是这么简单。如果想要进一步了解相关技术,可参阅下列资源。Akamai还会持续提供更丰富的开发者工具和资源,帮助大家更轻松、快捷地使用Akamai提供的服务。

参考资源

  • EdgeWorkers Test Mocks GitHub
  • Jest
  • EdgeWorkers developer page
  • EdgeWorkers user guide
  • EdgeWorkers API guide
  • Akamai CLI for EdgeWorkers
  • EdgeKV getting started guide
注意:随着时间流逝,上述方法中的相关步骤可能会有所变化。最新方法请访问 GitHub。

如果在使用上述范例代码时遇到任何问题,也欢迎通过GitHub提交Issue,或通过EdgeWorkers Slack space与我们的开发者联系。

万物互联时代,边缘计算正加速向我们靠近,无论远程医疗、流畅低时延的智能生活,或是智能驾驶,背后都有它的身影。这就需要从底层基础架构到上层应用,都为这种全新的模式做好充分准备。

Akamai在边缘计算领域提供了完善的解决方案,同时也通过各类辅助性技术帮助开发者更高效、快速、敏捷地开发能在边缘运行的各类应用程序。

本文从测试角度为边缘应用程序的开发提供了一种新思路,欢迎关注Akamai机构号,了解更多技巧和知识。同时,也期待着更多组织和个人开发者能借助快速发展的边缘技术塑造更多精彩!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/251520.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[office] Excel2007在工作簿中创建区域名称 #职场发展#经验分享

Excel2007在工作簿中创建区域名称 Excel 提供了几种不同的方法来创建区域名称。但在开始之前,必须注意关于可接受内容的重要规则: 名称不能含有空格。可以用一个下划线字符来代替空格(如Annual Total ) 。 可以使用字母和数字的任意组合,但是名称必须以…

3 编辑器(Vim)

1.完成 vimtutor。备注:它在一个 80x24(80 列,24 行) 终端窗口看起来效果最好。 2.下载我们提供的 vimrc,然后把它保存到 ~/.vimrc。 通读这个注释详细的文件 (用 Vim!), 然后观察 …

CDH6.3.2 多 Spark 版本共存

一 部署Spark客户端 1.1 部署spark3客户端 tar -zxvf spark-3.3.1-bin-3.0.0-cdh6.3.2.tgz -C /opt/cloudera/parcels/CDH/lib cd /opt/cloudera/parcels/CDH/lib mv spark-3.3.1-bin-3.0.0-cdh6.3.2/ spark3将 CDH 集群的 spark-env.sh 复制到 /opt/cloudera/parcels/CDH/li…

Framework - ActivityThread 应用启动UI渲染流程

一、概念 ActivityThread拥有 main(String[] agrs) 方法,作为程序的入口,是应用程序的初始化类。(ActivityThread不是主线程,它在 main() 方法中实例化,是运行在主线程中。)ApplicationThread是 ActivityT…

Linux---信号

前言 到饭点了,我点了一份外卖,然后又开了一把网游,这个时候,我在打游戏的过程中,我始终记得外卖小哥会随时给我打电话,通知我我去取外卖,这个时候游戏还没有结束。我在打游戏的过程中需要把外…

Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.8.1

目录 【问题描述】maven环境报错 Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.8.1 【解决办法】 检查maven路径是否一致 路径一致的话&#xff0c;更改配置文件settings.xml的镜像源。 添加代码到 <mirrors> <!-- 阿里镜像 --> &l…

网络原理-TCP/IP(5)

TCP协议 延迟应答 它也是基于滑动窗口,提高效率的一种机制,结合滑动窗口以及流量控制,能够以延迟应答ACK的方式,把反馈的窗口,搞大.核心在于允许范围内,让窗口尽可能大. 如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小. 1.假设接收端缓冲区为1M.一次收到了5…

新手小白零基础一分钟自动部署搭建幻兽帕鲁服务器教程

对于初次接触游戏联机服务器搭建的新手玩家来说&#xff0c;部署和配置一个像“幻兽帕鲁”这样的网络游戏联机服务器可能会显得有些复杂。但别担心&#xff0c;本文将提供一种快速、简洁且适合零基础新手的一分钟自动部署搭建幻兽帕鲁游戏联机服务器的详细教程。 本文将为大家提…

Linux 驱动开发基础知识——内核对设备树的处理与使用(十)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

Oracle闪回日志管理(flashbackup log)

Oracle闪回日志管理&#xff08;flashbackup log&#xff09; 1.开启闪回日志 shutdown immediate startup mount; alter database archivelog; alter database flashback on; alter database open; 2、查看闪回日志保留期限 show parameter flash 默认是1440分钟&#xff0c…

【LeetCode】刷题总结 - 15. 三数之和

15. 三数之和 | LeetCode 思路 首先对 nums 进行排序&#xff0c;然后设置三个指针&#xff1a;left、mid、right&#xff1a; left 从最左边开始&#xff0c;依次向后遍历每次固定住 left 后&#xff0c;就化为一个 2sum 问题&#xff1a; mid left 1&#xff0c;right …

python中[[]] * (n)和[[] for _ in range(n)]的区别

1、现象 刷leetcode207的时候碰到一个坑&#xff0c;用[[]] * (n)初始化二维数组&#xff0c;逻辑是正确的&#xff0c;但是结果始终不对。 2、原因 最后定位是初始化语句使用错误导致的&#xff0c;我使用的是[[]] * (n)&#xff0c;应该使用[[] for _ in range(n)] 3、解…

SpringBoot:实例一

一、实现的效果 在浏览器地址栏输入http://localhost:8080/hello&#xff0c;当前页面显示hello world 实例一代码&#xff1a;点击查看LearnSpringBoot01 点击查看更多的SpringBoot教程 二、 效果图 三、 pom.xml代码 <?xml version"1.0" encoding"UTF-…

【快速上手QT】01-QWidgetQMainWindow QT中的窗口

总所周知&#xff0c;QT是一个跨平台的C图形用户界面应用程序开发框架。它既可以开发GUI程序&#xff0c;也可用于开发非GUI程序&#xff0c;当然我们用到QT就是要做GUI的&#xff0c;所以我们快速上手QT的第一篇博文就讲QT的界面窗口。 我用的IDE是VS2019&#xff0c;使用QTc…

【小白学unity记录】使用unity播放声音

1. 示例 unity中播放声音涉及到两个组件。AudioSource和AudioClip。AudioSource可以理解为播放器&#xff0c;AudioClip可以理解为音频片段文件。AudioSource可以通过.clip属性切换音频片段。 using UnityEngine;public class PlayerController : MonoBehaviour {private int…

Windows11通过Hyper-V创建VM,然后通过vscode连接vm进行开发

这边需要在win11上建立vm来部署docker(这边不能用windows版本的docker destop)&#xff0c;学习了下&#xff0c;记录。 下载系统镜像 首先下载系统镜像&#xff1a;https://releases.ubuntu.com/focal/ 这边使用的是ubuntu20.04.6 LTS (Focal Fossa) &#xff0c;Server inst…

Facebook的数字合作愿景:创新与未来发展

随着科技的飞速发展&#xff0c;Facebook一直处于数字创新的前沿&#xff0c;致力于构建开放、智能、社交的数字社交体验。本文将深入探讨Facebook的数字合作愿景&#xff0c;探索其在创新与未来发展方面的雄心壮志。 引言 在当今数字化时代&#xff0c;社交媒体不仅是人们沟通…

Vue3+vite搭建基础架构(5)--- 使用vue-i18n

Vue3vite搭建基础架构&#xff08;5&#xff09;--- 使用vue-i18n 说明官方文档安装vue-i18n使用vue-i18n测试vue-i18n的国际化配置 说明 这里记录下自己在Vue3vite的项目使用vue-i18n做国际化语言的过程&#xff0c;不使用ts语法&#xff0c;方便以后直接使用。这里承接自己的…

uniapp中配置开发环境和生产环境

uniapp在开发的时候&#xff0c;可以配置多种环境&#xff0c;用于自动切换IP地址&#xff0c;用HBuilder X直接运行的就是开发环境&#xff0c;用HBuilder X发布出来的&#xff0c;就是生产环境。 1.使用HBuilder X创建原生的uniapp程序 选择vue3 2.什么都不改&#xff0c;就…

如何开通GitHub Copilot

GitHub Copilot 是由GitHub 和OpenAI共同开发的人工智能代码辅助工具&#xff0c;可以自动地生成高质量代码片段、上下文信息等。 通过自然语言处理和机器学习技术&#xff0c;能够通过分析程序员编写的代码、注释和上下文信息&#xff0c;自动生成代码&#xff0c;减轻程序员的…