当前位置: 首页 > news >正文

基于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机构号,了解更多技巧和知识。同时,也期待着更多组织和个人开发者能借助快速发展的边缘技术塑造更多精彩!

相关文章:

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

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

【linux】校招中的“熟悉linux操作系统”一般是指达到什么程度?

这样,你先在网上找一套完整openssh升级方案(不是yum或apt的,要源码安装的),然后在虚拟机上反复安装测试,直到把他理解了、背下来。 面试的时候让你简单说说linux命令什么的,你就直接把这个方案…...

【CSS系列】常用容易忽略的css

user-select user-select 是一个 CSS 属性,用于控制用户是否可以选择文本。通过设置 user-select 的值,可以决定用户是否可以选择元素中的文本,以及如何选择文本。 auto:默认值。浏览器可以选择文本。none:用户不能选…...

Java 数据结构 二叉树(二)红黑树

目录 数据结构图-树 简介 规则 旋转 重新着色 红黑树构建过程 前言-与正文无关 生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中,我们往往容易陷入工作的漩涡,忘记了停下脚步&#xf…...

React18-完成弹窗封装

弹框封装 用法 // 创建 userRef.current?.open(create) // 修改 userRef.current?.open(edit,values){/* 创建用户 */} <CreateUser mRef{userRef} update{} />组件暴露open方法 文档地址&#xff1a;https://react.dev/reference/react/useImperativeHandle useIm…...

蓝桥杯2024/1/31-----底层测试模板

和之前一样建好工程文件夹&#xff0c;里边包含User&#xff08;放工程文件&#xff0c;mian.c&#xff09;、Driver&#xff08;存放底层文件如Led.c&#xff0c;Led.h等&#xff09; 新建的工程先搭建框架&#xff0c;可以先书写底层函数&#xff08;此次书写了四个函数并包含…...

蓝桥杯备战(AcWing算法基础课)-高精度-乘-低精度

目录 前言 1 题目描述 2 分析 2.1 关键代码 2.2 关键代码分析 3 代码 前言 详细的代码里面有自己的理解注释 1 题目描述 给定两个非负整数&#xff08;不含前导 00&#xff09; A 和 B&#xff0c;请你计算 AB 的值。 输入格式 共两行&#xff0c;第一行包含整数 A&a…...

C++设计模式-里氏替换原则

里氏替换原则定义了继承规范。&#xff08;封装、继承、多态&#xff09; 定义1&#xff1a;类型S对象o1&#xff0c;类型T对象o2&#xff0c;o1换成o2时程序意图不变&#xff0c;那么S是T的子类。 定义2&#xff1a;使用子类不破坏父类的意图。 注意&#xff1a;如果子类不…...

compose LazyColumn + items没有自动刷新问题

val dataLists by remember { mutableStateOf(datas) } 数据更改后列表不刷新问题。 val dataLists by remember { mutableStateOf(datas) } LazyColumn(modifier Modifier.padding(top 5.dp)) {items(dataLists) {....}} 可以将mutableStateOf 改为mutableStateListOf解决…...

Java八大常用排序算法

1冒泡排序 对于冒泡排序相信我们都比较熟悉了&#xff0c;其核心思想就是相邻元素两两比较&#xff0c;把较大的元素放到后面&#xff0c;在一轮比较完成之后&#xff0c;最大的元素就位于最后一个位置了&#xff0c;就好像是气泡&#xff0c;慢慢的浮出了水面一样 Jave 实现 …...

编程笔记 html5cssjs 075 Javascript 常量和变量

编程笔记 html5&css&js 075 Javascript 常量和变量 一、JavaScript 变量二、JavaScript 常量三、示例&#xff1a;小结&#xff1a; 在JavaScript中&#xff0c;变量和常量是用来存储数据的占位符。它们的主要区别在于可变性&#xff1a;变量的值可以改变&#xff0c;而…...

题目 1159: 偶数求和

题目描述: 有一个长度为n(n<100)的数列&#xff0c;该数列定义为从2开始的递增有序偶数&#xff08;公差为2的等差数列&#xff09;&#xff0c;现在要求你按照顺序每m个数求出一个平均值&#xff0c;如果最后不足m个&#xff0c;则以实际数量求平均值。编程输出该平均值序…...

呼吸灯--FPGA

目录 1.breath_led.v 2.tb_breath_led.v 呼吸灯就是从完全熄灭到完全点亮&#xff0c;再从完全点亮到完全熄灭。具体就是通过控制PWM的占空比控制亮灭程度。 绘制PWM波的步骤就是&#xff0c;首先灯是在第一个时钟周期保持高电平熄灭状态&#xff0c;在第二个时钟周期保持1/1…...

MySQL数据库①_MySQL入门(概念+使用)

目录 1. 数据库的概念 1.1 数据库的存储介质 1.2 主流数据库 2. MySQL的基本使用 2.1 链接数据库 2.2 服务器管理 2.3 数据库&#xff0c;服务器和表关系 2.4 简单MySQL语句 3. MySQL架构 4. SQL分类 5. 存储引擎 本篇完。 1. 数据库的概念 数据库是按照数据结构来…...

虚幻UE 特效-Niagara特效实战-魔法阵

回顾Niagara特效基础知识&#xff1a;虚幻UE 特效-Niagara特效初识 其他四篇实战&#xff1a;UE 特效-Niagara特效实战-烟雾、喷泉、 虚幻UE 特效-Niagara特效实战-火焰、烛火、 虚幻UE 特效-Niagara特效实战-雨天、 虚幻UE 特效-Niagara特效实战-眩晕。 本篇笔记记录了使用空模…...

Qt多语言翻译

Qt多语言翻译概述 Qt提供了非常简单易用的多语言翻译机制&#xff0c;其核心类为QTranslator.概括来说就是利用Qt的lupdate工具将项目中所有tr函数包裹的字符串提取到.ts文件中&#xff0c;然后使用Qt Linguist由专门的翻译人员对提取的.ts文件进行逐个单词短语的翻译工作. 翻译…...

Latex学习记录

目录 1.Latex各种箭头符号总结 2.[Latex]公式编辑&#xff0c;编号、对齐 3.Latex公式编号: 多行公式多编号&#xff0c;多行公式单编号 4.LaTex中输入空格以及换行 1.Latex各种箭头符号总结 箭头符号 - ➚ (piliapp.com)https://cn.piliapp.com/symbol/arrow/Latex各种箭头…...

你在做绩效考核,还是绩效管理?二者有什么区别

绩效考核&#xff0c;为什么99%都失败&#xff0c;最后一地鸡毛&#xff1f;败在指标&#xff01; 绩效管理&#xff0c;为什么大多数企业都能成功&#xff0c;而且越做越好&#xff1f;成在目标&#xff01; 丢掉层层指标&#xff0c;人人制定目标&#xff0c;这是企业重新定…...

ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发

需求分析 展示切换动画搜索框输入文字&#xff0c;自动发送请求搜索结果展示搜索状态维护历史搜索展示&#xff0c;点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…...

C系列-柔性数组

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 ​编辑 柔性数组 柔性数组的特点 柔性数组的使用 柔性数组的优势 柔性数组 也许你从来没有听说过柔性数组这个概念&#xff0c;但是它确实是存在的&#xff0c;C99中&#…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

游戏开发中常见的战斗数值英文缩写对照表

游戏开发中常见的战斗数值英文缩写对照表 基础属性&#xff08;Basic Attributes&#xff09; 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...

验证redis数据结构

一、功能验证 1.验证redis的数据结构&#xff08;如字符串、列表、哈希、集合、有序集合等&#xff09;是否按照预期工作。 2、常见的数据结构验证方法&#xff1a; ①字符串&#xff08;string&#xff09; 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...