【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

用 Amplify CLI 进行本地模拟和测试

  • 2019-09-20
  • 本文字数:3066 字

    阅读完需:约 10 分钟

用 Amplify CLI 进行本地模拟和测试

开源 Amplify 框架提供一组库、用户界面 (UI) 组件和命令行接口 (CLI),可通过使用 AWS CloudFormation 预置后端资源更加容易地将复杂的云功能增加到您的 Web 或移动应用程序中。


与客户交谈时,我经常听到这样的评论:当增加新功能或解决漏洞时,尽可能快地进行迭代从而快速得到操作反馈很重要。我们如何改进他们的开发体验?


上周,Amplify 团队推出了新预测类别,可使您将机器学习能力快速增加到您的 Web 或移动应用程序中。今天,他们又一次这样做。我很高兴地与大家分享的是,您现在可以使用 Amplify CLI 模拟它提供的一些最常见的云服务,并且可以完全在本地测试您的应用程序!


这里模拟的意思是,对于云服务中的 API,我们将不使用实际后端组件,而是可以使用该 API 的本地简化模拟。此模拟可提供开发期间的测试所需的基本功能,而不是您从生产服务中获得的全部行为。


利用这一新的模拟功能,您可以快速测试更改,无需在每一步预置或更新您使用的云资源。借此,您可以设置可快速执行的单元和集成测试,而不会影响您的云后端。根据您的应用程序架构的不同,您可以在 CI/CD 管道中设置自动测试,无需预置后端资源。


这在编辑 AWS AppSync 解析器映射模板时非常有用,这些模板使用 Apache Velocity 模板语言 (VTL) 编写,将您的请求用作输入,并且输出包含解析器说明的 JSON 文档。现在,您可以立即获得编辑反馈,并测试您的解析器是否按预期运行,无需等待每个更新的部署。


对于第一个版本,Amplify CLI 可以在本地模拟:


  • AppSync GraphQL API,包括 Amazon DynamoDB 支持的解析器映射模板和存储。

  • AWS Lambda 函数直接调用或作为 GraphQL API 的解析器调用。

  • Amazon Simple Storage Service (S3) 存储桶用作您应用程序的存储。

  • Amazon Cognito 适合 GraphQL API 的用户池身份验证,但您首先需要从实际服务中获得 JSON Web Token (JWT);此后,在本地支持 JWT。

  • API 模拟

  • 我们来快速概览一下您可以执行的操作。例如,我们来创建一个示例应用程序,以帮助人们存储和共享可使您再灌满可重复使用的水瓶并减少塑料垃圾的良好地点的位置。


要安装 Amplify CLI,我需要 Node.js(版本 >= 8.11.x)和 npm(版本 >= 5.x):


npm install -g @aws-amplify/cliamplify configure
复制代码


Amplify 支持很多不同的框架,在此示例中,我使用 React 并且从示例应用程序开始(npx 需要 npm >= 5.2.x):


npx create-react-app refillappcd refillapp
复制代码


我使用 Amplify CLI 初始化项目并添加 API。Amplify CLI 是交互式的,将向您询问推动后端配置的问题。在此情况下,当被询问时,我选择添加 GraphQL API。


amplify initamplify add api
复制代码


在创建 API 期间,我编辑 GraphQL 架构并用此方式定义 RefillLocation:


type RefillLocation @model {  id: ID!  name: String!  description: String  streetAddress: String!  city: String!  stateProvinceOrRegion: String  zipCode: String!  countryCode: String!}
复制代码


结尾有感叹号 ! 的字段为必填字段。其他字段为选填字段,创建新对象时,可以省略。


您在第一行看到的 @model 一种指令,该指令使用 GraphQL Transform 在您的 API 中定义 DynamoDB 支持的顶级对象类型并为您生成所有必要的 CRUDL(创建、读取、更新、删除和列出)查询和突变及接收此类突变通知的订阅。


现在,我通常需要运行 amplify push 来配置和预置项目需要的后端资源(在此情况下为 AppSync 和 DynamoDB)。 但为了获得快速反馈,我使用运行此指令的本地新模拟功能:


amplify mock
复制代码


或者,我可以使用 amplify mock api 命令特别模拟我的 GraphQL API。在此阶段,使用此命令是一样的,但当一次使用多个模拟功能时,此命令很方便。


mock 命令的输出为您提供了有关该命令功能和您可以用它进行的操作的信息,包括 AppSync 模拟终端节点:


GraphQL 架构已成功编译。
在位于 /MyCode/refillapp/amplify/backend/api/refillapp/schema 的目录中的 /MyCode/refillapp/amplify/backend/api/refillapp/schema.graphql 或 place .graphql 文件中编辑您的架构
在本地创建表 RefillLocationTable
运行 GraphQL codegen
✔ 已成功生成 GraphQL 操作并保存在 src/graphql 中
AppSync 模拟终端节点在 http://localhost:20002 中运行
复制代码


我使 mock 命令在终端窗口中保持运行,以获得我的代码中可能出现的错误的反馈。例如,当我编辑 VTL 模板时,Amplify CLI 立即识别到此情况并为解析器生成更新后的代码。如果发生错误,我将从正在运行的 mock 命令中获得错误。


AppSync 模拟终端节点使您可以访问:


  • 您的 API 所需的 GraphQL 转换

  • 在本地管理您的 API 数据的 DynamoDB Local

  • 基于开源 OneGraph graphiql-explorer 插件的 Amplify GraphQL Explorer

  • 现在,我可以使用 Web 界面在本地为我的 API 运行 GraphQL 查询、突变和订阅。例如,为了创建新的 RefillLocation,我直观地构建突变,如下所示:


为了获得某个城市的 RefillLocation 对象列表,我使用相同 Web 界面构建查询,并在本地 DynamoDB 存储中运行它:



当我确信我的数据模型正确时,我开始构建应用程序的前端代码,从而编辑 React 应用程序的 App.js 文件,并且添加因本地模拟而可以立即测试的功能。


要将 Amplify 框架添加到我的应用程序中,包括 React 扩展,我使用 Yarn:


yarn add aws-amplifyyarn add aws-amplify-react
复制代码


现在,我可以使用 Amplify 框架库编写这样的代码来运行 GraphQL 操作:


import API, { graphqlOperation } from '@aws-amplify/api';import { createRefillLocation } from './graphql/mutations';
const refillLocation = { name: "My Favorite Place", streetAddress: "123 Here or There", zipCode: "12345" city: "Seattle", countryCode: "US"};
await API.graphql(graphqlOperation(createRefillLocation, { input: refillLocation }));
复制代码


存储模拟


现在,我希望为应用程序增加一项新功能,从而让用户可以上传并分享 RefillLocation 的图片。为执行此操作,我在项目的配置中添加存储类别并选择“内容”以使用 S3:


amplify add storage


现在,我可以使用 Amplify 框架库直接在浏览器中使用以下语法放入、从 S3 中获取或删除对象:


import Storage from '@aws-amplify/storage';
Storage.put(name, file, { level: 'public'}).then(result => console.log(result)).catch(err => console.log(err));
Storage.get(file, { level: 'public'}).then(result => { console.log(result); this.setState({ imageUrl: result }); fetch(result);}).catch(err => alert(err));
复制代码


与 S3 的所有交互都被标记为公共,因为我希望我的用户能相互公开分享他们的图片,不过,Amplify 框架支持不同的访问级别,如私有、受保护和公共。您可以在 Amplify 文档的文件访问级别部分中查找关于它的更多信息。


由于这一新模拟功能支持 S3 存储,我再次使用 amplify mock 在本地测试我的整个应用程序,包括我的 GraphQL API(AppSync 和 DynamoDB)使用的后端和我的内容存储 (S3)。


如果我只想在本地测试我的部分应用程序,我可以使用 amplify mock api 或 amplify mock storage 仅在本地模拟 GraphQL API 或 S3 存储。


现已推出


还有很多其他功能我没有时间在这篇博文中介绍,最好的学习方法是充满好奇心、动手去做! 您可以按照入门教程开始使用 Amplify。


能够在本地模拟和测试您的应用程序可以帮助您更快的构建和改进您的想法,请告诉我们您对 Amplify CLI GitHub 存储库的看法。


本文转载自 AWS 博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/new-local-mocking-and-testing-with-the-amplify-cli/


2019-09-20 10:11801
用户头像

发布了 1835 篇内容, 共 91.9 次阅读, 收获喜欢 73 次。

关注

评论

发布
暂无评论
发现更多内容

同程内网流传的分布式凤凰缓存系统手册,竟遭GitHub强行开源下载

Java 程序员 后端

Apache Pulsar 在 BIGO 的性能调优实战(下)

Apache Pulsar

分布式 中间件 BIGO Apache Pulsar 消息系统 Apache BookKeeper

万文讲解知乎实时数仓架构演进

大数据老哥

如何避免企业在碳排放数据上造假?

石云升

学习笔记 碳中和 碳交易

双非本科进不了大厂?阿里技术四面+交叉面+HR面,成功拿到offer

Java spring 程序员 mybatis

同一份数据,Redis为什么要存两次

Java 程序员 后端

数据服务基础能力之元数据管理

数据分析 数据 元数据 数据管理 业务数据

活动预告|ArchSummit全球架构师峰会

第四范式开发者社区

【高并发】SimpleDateFormat类到底为啥不是线程安全的?(附六种解决方案,建议收藏)

冰河

Java 并发编程 多线程 高并发 异步编程

四、StringRedisTemplate 和RedisTemlate有什么不同

Java 程序员 后端

工作五年之后,对技术和业务的思考

程序员 技术 职场 互联网人 业务

发量能决定一个程序员的水平吗

Java 程序员 后端

哪有什么中年危机,不过是把定目标当成了有计划

Java 程序员 后端

因为一次 Kafka 宕机,我明白了 Kafka 高可用原理!

Java 程序员 后端

基于 ElasticSearch 实现站内全文搜索(1)

Java 程序员 后端

史上最全Java面试266题:算法+缓存+TCP+JVM

Java 程序员 后端

哭了,我居然回答不出来女同事的问题:索引为什么能提供查询性能---

Java 程序员 后端

吊打 ThreadLocal,谈谈FastThreadLocal为啥能这么快?

Java 程序员 后端

同一个Spring-AOP的坑,我一天踩了两次,深坑啊

Java 程序员 后端

【Redis源码分析专题】(1)从本质分析你写入Redis中的数据为什么不见了?

洛神灬殇

redis Redis 核心技术与实战 11月日更 缓存驱逐

听我讲完GET、POST原理,面试官给我倒了杯卡布奇诺

Java 程序员 后端

喝了杯咖啡,我突然对MySQL锁、事务、MVCC-有了新的认识!

Java 程序员 后端

图像处理网站

Java 程序员 后端

双非本科毕业的我,为何能在金九银十期间斩获京东、字节、快手的offer

Java 程序员 后端

企业数字化转型的起手式是什么?

百度大脑

人工智能 百度

同事问我如何Java实现,搞定分析栈和队列数据结构的实现过程不就好了

Java 程序员 后端

可以回答一下:Redis和mysql数据是怎么保持数据一致的嘛?

Java 程序员 后端

网络安全漏洞复现与分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

可以回答一下:Redis和mysql数据是怎么保持数据一致的嘛?(1)

Java 程序员 后端

国庆临近,字节后端开发3+4面,终于拿到秋招第一个offer

Java 程序员 后端

吐血总结——90%程序员面试都用得上的索引优化手册

Java 程序员 后端

用 Amplify CLI 进行本地模拟和测试_技术管理_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章