使用 DevWeb 脚本进行 API 测试
DevWeb 脚本可用于 API 性能测试。要缩短脚本运行时间,可以使用 DevWeb 脱机脚本生成器将 Swagger API 文档转换为 JavaScript 函数,从而提供易于读取和维护的格式。可以从 DevWeb 脚本调用生成的函数。
注: 此功能将作为技术预览提供。
关于使用 DevWeb 进行 API 测试
Swagger 是用于描述和记录 RESTful API 的开放式规范。
要启用使用 DevWeb 脚本进行 API 测试,您可以将 Swagger 定义文件 (swagger.json 格式) 中的 API 调用转换为可从 DevWeb 测试调用的函数。
Swagger 规范 2.0 支持此功能。
提示: 观看视频: 使用 DevWeb 脚本进行 API 测试
使用 Swagger 模式生成 swaggerApi.js
转换 Swagger 文件的第一阶段是导入 Swagger JSON 文件并生成 JavaScript 文件 swaggerApi.js,其中包含自动生成的 JavaScript 函数。此操作由在 Swagger 模式下工作的 DevWeb 脱机生成器执行。生成的 swaggerApi.js 文件将被添加到 DevWeb 脚本所在的文件夹中,而导入的 JSON 定义则存储在 codeGen 文件夹中。
注: Swagger 模式还会生成 (或重新生成) main.js 文件,但内部不存在 API 函数调用。
每个 JavaScript 函数都包含各种参数,并在 Swagger 定义文件中表示一个 API 调用。该函数可以与服务器连接以执行 API 调用所述的操作。
swagger.json 可能非常大,包含数百项操作,但是您可能不想测试所有操作。一种选择是使用所需参数将要测试的函数手动添加到脚本中。实现位于 swaggerApi.js 内,因此调用该函数时,它将对应用程序生成 API 调用并返回 Web 请求。
根据包含已录制的 API 操作的 HAR 文件为脚本生成 main.js 是一种更快、更便捷的方法,无需手动编辑脚本。使用 DevWeb 代理服务器录制器可以预先录制或创建此文件。
使用 Swagger 模式和预先录制的 HAR 文件
针对 HAR 文件进行录制时,请在要测试的 Swagger UI 中调用特定的 API 操作。如果在 VuGen 中处于 Swagger 模式时从 HAR 文件生成脚本,则创建的脚本将包含相关函数调用。
使用代理服务器录制器进行录制时使用 Swagger 模式
处于 Swagger 模式时,可以使用 DevWeb 代理服务器录制器从 VuGen 录制 API 函数。直接在 Swagger UI 中进行录制,然后调用相关操作。生成脚本时,它包含相关函数调用。
创建函数调用
main.js 中每个函数调用的创建均基于脱机脚本生成器能在 HAR 条目和 swaggerApi.js 中生成的 JavaScript 函数之间找到一个唯一匹配项。如果存在一个匹配项,则将为该函数创建一个函数调用。如果找不到匹配项,或者存在多个匹配项,则将生成常规的 DevWeb WebRequest 发送调用。
示例
使用 pet_swagger.json 文件介绍宠物店应用程序。JSON 包含可为宠物店执行的各种不同操作。
pet_swagger.json 文件:
下面的 JSON 部分定义了用于将宠物添加到商店的 API 操作,其中 operationID 为 "addPet"。该操作应通过 POST 请求及其正文中的参数进行调用。参数名称为 "body"。
"/pet": { "post": { "tags": [ "pet" ], "summary": "Add a new pet to the store", "description": "", "operationId": "addPet", "consumes": [ "application/json" ], "produces": [ "application/json", "application/xml" ], "parameters": [ { "in": "body", "name": "body", "description": "Pet object that needs to be added to the store", "required": true, "schema": { "$ref": "#/definitions/Pet" } } ], "responses": { "405": { "description": "Invalid input" } },
swaggerApi.js 文件:
当脱机生成器生成 swaggerApi.js 文件时,该文件包含为 addPet 生成的相应函数。该文件包含名为 body 的参数 (与在 JSON 文件中使用的一样),以及 JSON 文件中对该参数的描述。
该函数会创建用于调用 API 的 WebRequest,并返回相应请求。在正文中,该函数已使用该参数。
main.js 文件:
生成的 main.js 文件包含对 swaggerApi.js 中 addPet 函数的调用,并使用取自 HAR 文件的值。该函数将使用返回的 WebRequest 并发送该请求。发送请求的返回值为 WebResponse,该值将分配给变量。
提示: “<DevWeb 根文件夹>\examples\”文件夹包括以下 API 测试示例脚本:
- APITestingPetStore
-
APITestingAdvantageOnlineShopping
参数
-
Swagger 描述函数参数的多个位置: 路径、标头、查询、表单数据和正文。
生成的函数将接受为 swagger 文件中的操作定义的参数,以及在生成的 WebRequest 内的函数正文中使用的参数。例如,Path 参数在 WebRequest URL 中使用,而 Query 参数则在 WebRequest 查询中使用。
- 参数的架构中具有必需属性,该属性可以为 true 或 false。无论是否需要,都会生成所有参数。脱机生成器将忽略此属性。
- 函数 getSchema 和 getHost (分别返回 Schema 和 Host 参数) 将在 WebRequest URL 中使用。
-
如果 swagger.json 缺少 Host 属性,则生成的 getHost 函数将返回空字符串,并且脚本会失败并显示错误。为避免出现这种情况,main.js 文件包括了 getHost 的覆盖选项,用于提示您添加主机名:
API 测试函数的关联
API 函数调用可能包括关联提取程序和应用器 (如果相关)。启用录制扫描或规则扫描并找到关联值后,这些值会添加到生成的 API 函数调用中。
有关如何使用关联的详细信息,请参阅 DevWeb 脚本的关联。
提取程序
生成 API 函数调用时,将在 main.js 文件中自动生成相关提取程序 (由关联录制或规则扫描定义)。例如:
用于脚本中已公开的值的应用器
对于公开的 API 函数调用参数,在 main.js 中能看到相关值的位置,应用器将直接替换已关联的值。
示例:
函数调用包含一个需要 API 密钥的已关联值的参数。此调用提取自较早的 Web 响应:
let webRequest = swaggerApi.deletePet(`API_KEY_11122FFFFF`, "123");
在录制扫描或规则扫描之后,它将变为:
let webRequest = swaggerApi.deletePet(`${earlierResponse.extractors['api_key']}`, "123");
用于脚本中未公开的属性的应用器
生成 API 函数调用时,存在未在参数中显示的 Web 请求属性,因此这些属性未在 main.js 中公开。例如,某些标头或查询字符串。
如果这些属性具有需要关联的值,则可以通过录制或录制扫描直接访问它们,并使用请求名称在 main.js 中以类似于分配的方式生成这些属性。然后,将相应的应用器应用于相应的字段。例如:
从 Swagger 定义生成文件
以下步骤介绍如何使用 Swagger 模式生成脚本的 swaggerApi.js 文件和 main.js 文件。
要从 Swagger 生成文件,请执行以下操作:
先决条件:已使用 Swagger 规范 2.0 创建 swagger.json 文件
- 在 VuGen 中打开 DevWeb 脚本,然后选择“录制”>“导入 API 文件”。
-
在“导入 API 文件”对话框中,执行以下操作:
- 在“API 文件”字段中输入 swagger.json 文件的路径。
- 如果要重新生成 swaggerApi.js,但又不想覆盖先前生成的 main.js,请取消选中“生成主脚本”复选框。例如,main.js 中可能存在您不想覆盖的手动编辑内容。
单击导入。
-
VuGen 将生成 swaggerApi.js 文件并将其添加到脚本中。可以在解决方案资源管理器下的“额外文件”文件夹中查看该文件。
- 单击“录制”按钮以定义录制设置。
-
在“开始录制”对话框中,确保选中“使用 API 分析生成”复选框。这会将脚本生成设置为 Swagger 模式。
- 选择相应的“录制”选项,并根据需要提供 HAR 文件或 Swagger UI 的路径。
- 单击开始录制。
- 如果已选择使用代理服务器录制器进行录制,请在 Swagger UI 中录制要测试的操作。
- 该脚本是使用 main.js 文件中的相关 API 函数生成的。
注: 如果重新生成脚本,则重新生成的脚本不包含 API 函数。
另请参阅: