如何模拟 REST 消息的 HTTP 方法以进行 ServiceNow ATF 测试?
如果想要测试涉及出站 REST 集成的解决方案,例如“出站 REST 集成”中介绍的解决方案,能够模拟所涉及的 REST 服务会很有帮助。
如何做到这一点?
背景
根据ServiceNow API 参考/REST API/自动化测试框架支持,自动化测试框架 (ATF) 支持入站 - 但不支持出站 - REST 测试步骤。
我希望也支持出站 REST 测试步骤,并能够模拟响应。
与此同时,我研究了如何模拟 ServiceNow REST 消息 HTTP 方法以进行 ATF 测试。
解决方案(如下)有很多步骤,但并不复杂。
在“出站 REST 集成”中提供的“IPInfo”示例中,解决方案如下:
目标:模拟 REST 消息“IPInfo”的 HTTP 方法“GetIPInfo”(通常调用“https://ipinfo.io/${ipaddress}/${special_field}”)。
创建脚本化 REST API,例如在范围“x_1234567_iplookup”中,API ID 为“mock_ipinfo_io_api”。
在其中创建脚本化的 REST 资源,以将 REST 消息“IPInfo”匹配到模拟:
活动:假
相对路径:/{ipaddress}/{specific_field}
需要身份验证: false
脚本:
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
response.setContentType('application/json; charset=utf-8');
response.setStatus(200);
var writer = response.getStreamWriter();
// Only the "city" field will be tested in this example.
let responseJson = {
"ip": "8.8.8.8",
"hostname": "dns.google",
"anycast": true,
// This is the value that will be tested:
"city": "Mock City",
"region": "California",
"country": "US",
"loc": "37.4056,-122.0775",
"org": "AS15169 Google LLC",
"postal": "94043",
"timezone": "America/Los_Angeles",
"readme": "https://ipinfo.io/missingauth"
};
writer.writeString(JSON.stringify(responseJson));
})(request, response);
创建测试:
启用参数化测试:true
独家参数定义:
列标签 | 列名称 | 类型 | 参考 | 参考质量。状况 |
---|---|---|---|---|
预计城市 | u_预期_城市 | 字符串(完整UTF-8) | ||
给定 HTTP 方法 | u_http_方法 | 参考 | HTTP 方法 | |
给定实例名称 | u_instance_name | 参考 | 系统属性 | 名称是实例名称 |
给定的IP地址 | u_ip_地址 | 字符串 | ||
给定模拟路径 | u_given_mock_endpoint | 字符串 | ||
给定模拟脚本化 REST 资源 | u_given_mocking_scripted_rest_resource | 参考 | 脚本化 REST 资源 |
创建测试运行数据集:
给定的IP地址:8.8.8.8
给定实例名称:instance_name
给定模拟路径:/api/x_1234567_iplookup/mock_ipinfo_io_api/${ipaddress}/${specific_field}
给定 HTTP 方法:GetIPInfo
预计城市:模拟城
给定模拟脚本化 REST 资源:通过 IP 地址获取给定字段
创建测试步骤:
记录更新
注意:激活mocking服务。
断言类型:记录已成功更新
表:脚本化 REST 资源 [sys_ws_operation]
记录:(参数➛给定模拟脚本化REST资源)
字段值:Active := true
记录更新
注意:将 HTTP 方法重定向到模拟服务。
断言类型:记录已成功更新
表:HTTP 方法 [sys_rest_message_fn]
记录:(参数➛给定的HTTP方法)
字段值:https://(参数➛给定实例名称➛值).service-now.com(参数➛给定模拟路径)
打开新表格
表:IP 地址信息
设置字段值
表:IP 地址信息
字段值:IP 地址 :=(参数➛给定 IP 地址)
提交表格
记录查询
超时:15秒
断言类型:至少有一条记录与查询匹配
表:IP 地址信息
条件:
'Sys ID'是(第5步:提交表格➛记录)
‘城市’为(参数➛期望城市)
标记互斥(!)测试:
执行测试。
如果有人希望导入并查看上述解决方案,可以从我的 GitHub 存储库克隆。