如果你和我一样,你会不断想象完全实现的物联网生态系统的未来可能性。在家庭的背景下,我想象我的汽车、GPS和Nest一起工作,以预测我的到来,并对气候控制进行适当的调整。或者是冰箱、Egg Minders和Amazon Fresh在我知道我需要鸡蛋之前,就能毫不费力地相互交流,订购鸡蛋......多么美好的未来。
其他时候,我相信物联网会带来一个荒诞的未来(正如《Wired》所描述的那样,令人扼腕叹息的细节)。
幸运的是,我们距离这种程度的互联还有一些距离。物联网发展还处于相对初级阶段,物联网开发者必须克服一些关键挑战。
似乎大家都认为环境的复杂性是一个主要的挑战,这是一个棘手的挑战,因为复杂性算是物联网世界的重点——作为一个物联网设备的开发者,我可能会集成很多下游的第三方API,而其他开发者可能会消耗我暴露的API。
在物联网需求增加之前,我们可能通过创建物理测试实验室,在API和设备的生态系统中测试我们的设备。现在,这是一个过时且昂贵的命题,而且开发人员通常无法控制来自第三方API或设备的数据(这对于边缘案例测试至关重要)。
这就是为什么服务虚拟化是解决方案的关键部分。我们可以模拟下游API并控制我们的设备正在消耗的数据,以验证集成测试期间的异常情况。
今天的例子
在这篇文章中,我将使用亚马逊Echo来演示这些功能,因为它可以成为家庭物联网生态系统的中心枢纽(也许你甚至像我一样有一个可用)。
我将首先带你完成使用AWS Lambda实现自己的Alexa技能的步骤。这个电话将允许你向Alexa询问一个邮政编码的天气状况。
然后,我们将在 Azure 中部署 Parasoft 虚拟服务,以模拟来自天气 API 的响应,进行边缘案例测试。(例如,当有雷雨或外面是101华氏度时,Alexa会说什么?)
先决条件,自己也要跟上:
在第一部分中,我们将设置我们的Alexa技能和Lambda函数。
在第二部分中,我们将在Azure中部署一个Parasoft虚拟服务器。然后,我们将在 Lambda 函数和 OpenWeatherMap API 之间放置一个 Parasoft 代理。该代理将允许我们控制来自 AWS Lambda 的天气请求,流向真正的 OpenWeatherMap API 或带有罐装响应的虚拟表示。
第1部分:设置我们的Alexa技能和Lambda函数
这里发生了什么?我们必须指定我们的Lambda函数的调用方式,Alexa技能套件将允许Alexa启动它(一旦它收到正确的Utterance,我们将在后面配置)。
“host”暂时应该等于 http://api.openweathermap.org 。“api_key”是指 http://api.openweathermap.org 。“api_key”是当你注册成为开发者时,你将从OpenWeatherMap收到的32位字母数字密钥(参见上面的先决条件列表中的操作位置)。
{
"intents": [
{
"slots": [
{
"name": "Zip",
"type": "AMAZON.Number"
}
],
"intent": "GetWeatherForZipIntent"
}
]
}
1.2.3.4.5.6.7.8.9.10.11.12.13.
GetWeatherForZipIntent what’s the weather for zip code {Zip}
GetWeatherForZipIntent what’s the weather for {Zip}
GetWeatherForZipIntent what’s the weather in {Zip}
最后两步具体规定了我们的用户将如何与我们的技能进行交互。我们的示例语句将用户发声输入映射到Intent.Intent类型(本例中为GetWeatherForZipIntent)和用户指定的邮政编码将以请求的形式发送到我们的Lambda函数。
我们已经准备好测试了 在“文本”选项卡下,输入一个样本Utterance,比如“91016年的天气如何”,然后点击“询问天气”。你应该看到发送到你的Lambda函数的JSON请求及其响应:
如果你的Echo连接到了这个账户,并且你已经在你的账户上启用了这个技能进行测试(你可以在测试页面上这样做),你也可以和Alexa说话来测试这个。说一些类似“Alexa,问天气,91016年的天气怎么样”。
就这样,Alexa的设置就完成了!这还不算太差,对吧?
但是本文开头提出的复杂性和外部依赖性的核心挑战呢?
我们的Lambda函数依赖于一个外部API,它提供了实时的、真实世界的数据。作为物联网设备的开发者或测试人员,我们如何确保我们接收到测试不同条件所需的下游数据呢?
例如,我们来看看我们Alexa技能的一部分,即weather.js:
我们在这里有一些简单的逻辑 可以根据我们的天气描述添加适合天气的短语。例如,每当我们的JSON响应的描述字段中提到下雨的时候,我们Alexa的响应中就会出现“Grab an umbrella!”。
那么我们到底要怎么测试呢?除非你准备好了可靠的雨舞,或者你恰好住在西雅图,否则这并不容易。将测试自动化(为此我们需要来自OpenWeather API的一致的、可重复的数据,这不太可能)加入到这个组合中,我们就有了一个非常棘手的问题。
显然,简单的答案是服务虚拟化。这将使我们能够模拟天气API并测试不同的情况。Parasoft有一个免费的服务虚拟化平台(持续测试平台),可以在Azure中免费试用30天。
第2部分:使用服务虚拟化对我们的Alexa技能进行边缘案例测试。
进入AWS Lambda( https://console.aws.amazon.com/lambda/ )中的virtualWeather函数,将我们创建的环境变量改为代理端点。
现在,交通被引导到我们的虚拟“T-Storm”服务,并返回一个响应(指示下雨和雷暴)。说一些类似于“Alexa,问问virtualWeather在91016的天气如何”,你会听到这样的回应:“拿把伞!蒙罗维亚有雷雨和大雨。”我们现在有能力控制天气了!
接下来的步骤:
那么,下一步该怎么走?这里有几个潜在的下一步:
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删