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

news2024/11/23 8:36:43

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

相比传统集中部署和运行的方式,这种边缘应用的开发、部署、运行等工作需要一系列全新工具和技术的支持。例如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.coloradmin.cn/o/1424698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字段使用函数是否会走索引

之前的印象中,字段上使用了函数操作,查询不会走索引。 一,AI回答 回答1 回答2 回答3 二,测试样例 查询未来n天内所有数据 查询方式1 EXPLAIN SELECT * FROM vehicle_info WHERE annual_inspection_due_date BE…

Vulnhub靶机:hackme2-DHCP

一、介绍 运行环境:Virtualbox(攻击机)和VMware(靶机) 攻击机:kali(192.168.56.106) 靶机:hackme2-DHCP(192.168.56.107) 目标:获取靶机root权限和flag 靶机下载地址&#xff1…

重写Sylar基于协程的服务器(2、配置模块的设计)

重写Sylar基于协程的服务器(2、配置模块的设计) 重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器(1、日志模…

厨师帽佩戴识别摄像机​

厨师帽佩戴识别摄像机是一种用于识别厨师是否佩戴帽子的智能设备,其作用在于强制执行食品安全卫生标准,防止头发掉落入食物中。该摄像机利用人工智能和图像识别技术,能够识别厨师是否佩戴厨师帽。当摄像机检测到厨师未佩戴帽子时,…

DNS服务实战:使用自定义域名访问Redis服务

前言 在这篇文章中,你将了解到如何在 CentOS 系统上安装 Redis 服务,并且掌握通过自定义域名来访问 Redis 服务的技巧。通过使用自定义域名,你可以方便地管理和访问你的 Redis 数据库,提高工作效率。无论你是开发者、系统管理员还是对 Redis 感兴趣的读者,这篇文章都会为…

Android 跳转应用设置/热点界面或等常用操作

Android 跳转应用设置/热点界面或等常用操作 https://www.jianshu.com/p/ba7164126690 android学习进阶——Setting https://blog.csdn.net/csdn_wanziooo/article/details/81980984 Android 7.1 以太网反射 EthernetManager 配置 DHCP、静态 IP https://codeleading.com/art…

UG949 适用于 FPGA 和 SoC 的UltraFast 设计方法指南

使用RTL创建设计 定义RTL设计层级 模块边界输出进行寄存 即寄存器输出,打一拍 IP的使用 AMBA AXI

C语言指针学习(1)

前言 指针是C语言中一个重要概念,也是C语言的一个重要特色,正确而灵活地运用指针可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人都应当深入的学习和掌握指针,也可以说不掌握指针就没有掌握C语言的精华。 一、什么是指针 想弄清楚什…

springboot+AOP+RBAC自定义权限访问控制03

springbootAOPRBAC自定义权限访问控制03!今天我们做完了整个权限管理的内容。 内容比较多。请大家有足够的耐心看完。 首先。我们为了测试权限的鉴别效果,我们提前准备了一个新闻实体类,对应数据库的tb_news数据表。 我们提前准备好了新闻…

【Android 字节码插桩】Gradle插件基础 Transform API的使用

前言 啪~我给大家开个会(手机扔桌子上) 什么叫做 客户无感的数据脱敏!? 师爷给翻译翻译什么叫做客户无感的数据脱敏? 什么特么的叫做客户无感数据脱敏? 举个栗子~ 客户端Sdk新升级了一个版本,增…

150基于matlab的凸轮轮廓的设计计算与绘图计算此结构的最优化参数

基于matlab的凸轮轮廓的设计计算与绘图计算此结构的最优化参数,根据其原理输出推程和回程的最大压力角、最小曲率半径等相关结果。程序已调通,可直接运行。 150 凸轮轮廓的设计 结构的最优化参数 (xiaohongshu.com)

EasyExcel使用,实体导入导出

简介 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中…

数据结构:图文详解 搜索二叉树(搜索二叉树的概念与性质,查找,插入,删除)

目录 搜索二叉树的相关概念和性质 搜索二叉树的查找 搜索二叉树的插入 搜索二叉树的删除 1.删除节点只有右子树,左子树为空 2.删除节点只有左子树,右子树为空 3.删除节点左右子树都不为空 搜索二叉树的完整代码实现 搜索二叉树的相关概念和性质 …

Java设计模式-组合模式(13)

大家好,我是馆长!今天开始我们讲的是结构型模式中的组合模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。 组合模式(Composite Pattern) 定义 组合(Composite)模式:又叫…

【大厂AI课学习笔记】1.3 人工智能产业发展(2)

(注:腾讯AI课学习笔记。) 1.3.1 需求侧 转型需求:人口红利转化为创新红利。 场景丰富:超大规模且多样的应用场景。主要是我们的场景大,数据资源丰富。 抗疫加速:疫情常态化,催生新…

(十一)springboot实战——springboot3下关于WebFlux项目的一些常用功能整合

前言 本节内容主要是对webflux项目一些常用功能的介绍,例如系统集成swagger接口文档,方便接口测试以及前后端项目联调测试;使用actuator完成系统各种指标的监控功能;系统使用logback日志框架完成项目日志的收集;使用过…

reactnative 调用原生ui组件

reactnative 调用原生ui组件 ![组件对应关系](https://img-blog.csdnimg.cn/direct/c4351ad7bd38411e9c13087f1059a4b0.png)1.该样例已textView,介绍。 新建MyTextViewManager 文件,继承SimpleViewManager。import android.graphics.Color; import android.widget.TextView;…

redis设计与实践的总结

Redis是一款高性能的Key-Value存储系统,它可以用作缓存、消息队列、计数器、排行榜等多种应用场景。在实际应用中,如何设计和使用Redis是非常关键的。本文将介绍Redis的设计原则和最佳实践,帮助您更好地利用Redis提高应用性能和可靠性。 ###…

【Linux】文件基础、文件系统调用接口、文件描述符

目录 文件基础 系统调用接口 open close write 实现文件写入 实现文件内容追加 read 实现文件读取 文件描述符fd 文件基础 1.空文件,也要在磁盘占用空间。 2.文件内容属性 3.文件操作:是单独对于内容或属性、或者内容和属性 4.文件路径文件名&…

C++ 菱形继承和虚拟菱形继承

菱形继承和虚拟菱形继承 菱形继承1. 概念2. 产生的问题 虚拟菱形继承1.1 使用1.2 原理 菱形继承 1. 概念 菱形继承是多继承的一个特殊情况,多继承是指一个子类类继承了两个或以上的直接父类,而菱形继承问题的产生是因为该子类的父类,继承了…