大家好! 我写这篇文章的灵感来自于我的学生和学员。我经常建议他们在熟悉 上的测试自动化过程后立即学习 。让我们看看在 REST API 测试方面,在测试自动化框架中使用 TypeScript 的特点是什么…… JavaScript TypeScript 您可以 找到测试项目的完整代码。 在此处 打字稿 我们不要太深入地了解 是什么以及它与 有何不同,并声明重要的事情 - 。但是,也非常重要 - 它直接依赖于 ( 平台)。 TypeScript JavaScript 这是编程 语言 JavaScript Node.js 作为 包呈现,因此我将其视为具有一些很酷功能的 。 TypeScript Node.js JavaScript 要了解有关该语言本身及其功能的更多信息 - 请访问 ,同时我们将讨论其在测试自动化方面的功能...... 官方网站 项目设置 让我们回顾一下 上的测试自动化项目创建过程: TypeScript 创建一个 项目。 Node.js npm init -y 安装 包。 TypeScript npm i typescript 为项目生成默认的 配置 - 。 TypeScript tsconfig.json npx tsc --init 上面的命令将生成一个默认配置文件,但我建议将其缩短很多,如下 : 所示 { "compilerOptions": { "baseUrl": "./", "module": "esnext", "target": "esnext", "sourceMap": false, "moduleResolution": "node", "allowJs": true, "skipLibCheck": true, "resolveJsonModule": true, "allowSyntheticDefaultImports": true, "paths": { "*": ["./*"] } } } 此配置包含所需的最低配置: 使用最新的 版本, EcmaScript 使 JSON 导入可用, 允许您在导入中使用绝对路径。 您可以使用 扩展您的配置。 官方文档 工具选择 您可以使用 生态系统提供的任何工具,但根据我的经验 - 大多数 工程师选择 有几个很好的理由: Node.js 使用 TypeScript 的 Jest 出色的社区支持(更新、答案、文档、代码示例), 配置灵活。 以前,我很喜欢使用 + 来设置项目的核心,但现在我也坚持使用 ,因为它包含测试运行器和断言库。 Mocha Chai Jest 似乎是最流行的 HTTP 客户端,所以我建议您也选择它。 Axios 不能说您被迫在设置中使用它,但我是说,当您查看项目时,这是常见的事情。 现在,只需安装这些包作为依赖项: npm i jest axios 类型集合 有些包(如 )内部包含 类型,但 不包含。此外, 需要 包和 才能正常工作 - 第一个包启用 功能,第二个包允许您使用 。 Axios TypeScript Jest 和 Mocha Jest ts-jest @types/jest TypeScript IntelliSense 因此请记住 - 如果您在尝试使用某些包时没有自动完成功能 - 您可能缺少类型声明。 让我们也安装 相关的扩展(包): TypeScript npm i ts-jest @types/jest 配置 需要 配置预设,因此您必须在配置(或 )文件中声明它: Jest ts-jest package.json { "jest": { "preset": "ts-jest" } } 如果您计划 ,则还需要调整您的配置: 在项目中使用绝对路径 { "jest": { "preset": "ts-jest", "moduleDirectories": [ "node_modules", "<rootDir>" ] } } 此配置允许您使用简单的命令运行测试... jest 因此,将 中的 脚本配置为: package.json 测试 { "scripts": { "test": "jest" } } 然后随时使用 或 命令运行测试。 npm test npm run test 如果您是 用户,我还建议您安装 - 它允许您只需单击一下即可 / 所需的测试/套件。在 这是一个内置功能。 Visual Studio Code Jest Runner 扩展 运行 调试 WebStorm 中, 自定义类型 引入 REST API 测试的主要功能是...... , 当然! TypeScript 类型 您可以声明您的请求和响应正文应该是什么样子,即 , 等等。 键名 值类型 让我们以 服务器为例 - 我们可以将 端点的请求正文有效负载写为类型: Paysis /auth export type AuthRequestBody = { login: string password: string } 响应正文也是如此 - 服务器应该向我们的请求发送什么: export type AuthResponseBody = { token?: string message?: string } 由于成功/失败场景会有不同的有效负载 - 您可以通过“ 将键标记为“可选”特点。 ?” 完成后 - 您可以使用这些类型在测试中组成请求和验证...... 要求 在 中,您可以通过请求配置说出要发送的正文: Axios const payload: AxiosRequestConfig<AuthRequestBody> = { method: 'post', url: '/auth', data: { login: process.env.USERNAME, password: process.env.PASSWORD, }, } 中的 正是这个意思☝️ AxiosRequestConfig<AuthRequestBody> AuthRequestBody 这意味着您将被迫使用与 对象中提供的 类型匹配的有效负载。如果您忘记设置一些必填字段或设置一些过多的字段 - 您将看到错误。 data AuthRequestBody 回复 对于响应也可以做同样的事情: const response: AxiosResponse<AuthResponseBody> = await client.request(payload) 它将自动完成功能添加到 对象中,以便您能够访问 或 字段。 response.data response.data.token response.data.message 高级工具 除了上面的简单内容之外,还可以 。它使您不必检查响应正文中的每个键来查看它是否与架构匹配,而是 。 从自定义类型生成 JSON 模式 检查整个有效负载 所以想法是: 从自定义类型生成 。 JSON 架构 使用自定义匹配器 来验证响应正文。 toMatchSchema 非常酷的东西,但请记住,在这些更改之后,您的测试可能会变得不稳定 - 当出现一些其他字段时就会发生这种情况,因此您需要定期更新架构。 结论 设置可能会很棘手,特别是如果这是您第一次,但这是值得的! TypeScript 如果您使用类型覆盖输入和输出数据,那么在解析这些对象时就不可能出现拼写错误或其他语法错误。它可以帮助您避免简单的错误,并让您可以在代码中直接查看请求的结构,因此您不必打开任何 (如 )并查找所需的请求以查看它请求/响应的主体和。 HTTP 集合 Postman 让我知道您的经历以及您的想法。