paint-brush
REST API 自动化测试中的 TypeScript 与 JavaScript经过@bormando
3,297 讀數
3,297 讀數

REST API 自动化测试中的 TypeScript 与 JavaScript

经过 Dmitrii Bormotov6m2023/08/04
Read on Terminal Reader

太長; 讀書

TypeScript 是一种编程语言,在 Node.js 生态系统中以包的形式呈现。 通过使用此包,您可以: 1. 在项目中进行简洁(绝对)导入。 2. 为您的请求和响应负载创建自定义类型。 3. 使用智能感知和类型检查功能来减少代码中的语法错误。 自定义类型还充当有效负载数据的文档 - 您不必再为此检查外部集合/工具!
featured image - REST API 自动化测试中的 TypeScript 与 JavaScript
Dmitrii Bormotov HackerNoon profile picture
0-item

大家好!


我写这篇文章的灵感来自于我的学生和学员。我经常建议他们在熟悉JavaScript上的测试自动化过程后立即学习TypeScript 。让我们看看在 REST API 测试方面,在测试自动化框架中使用 TypeScript 的特点是什么……


您可以在此处找到测试项目的完整代码。

打字稿

我们不要太深入地了解TypeScript是什么以及它与JavaScript有何不同,并声明重要的事情 -这是编程语言。但是,也非常重要 - 它直接依赖于JavaScriptNode.js平台)。


TypeScript作为Node.js包呈现,因此我将其视为具有一些很酷功能的JavaScript


要了解有关该语言本身及其功能的更多信息 - 请访问官方网站,同时我们将讨论其在测试自动化方面的功能......

项目设置

让我们回顾一下TypeScript上的测试自动化项目创建过程:


  1. 创建一个Node.js项目。

    npm init -y

  2. 安装TypeScript包。

    npm i typescript

  3. 为项目生成默认的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 ,因为它包含测试运行器和断言库。


Axios似乎是最流行的 HTTP 客户端,所以我建议您也选择它。


不能说您被迫在设置中使用它,但我是说,当您查看项目时,这是常见的事情。


现在,只需安装这些包作为依赖项:

npm i jest axios

类型集合

有些包(如Axios )内部包含TypeScript类型,但JestMocha不包含。此外, 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 testnpm run test命令运行测试。


运行测试


如果您是Visual Studio Code用户,我还建议您安装Jest Runner 扩展- 它允许您只需单击一下即可运行/调试所需的测试/套件。在WebStorm 中,这是一个内置功能。


一键运行和调试测试!

自定义类型

TypeScript引入 REST API 测试的主要功能是......类型, 当然!


您可以声明您的请求和响应正文应该是什么样子,即键名,值类型等等。


让我们以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.tokenresponse.data.message字段。

高级工具

除了上面的简单内容之外,还可以从自定义类型生成 JSON 模式。它使您不必检查响应正文中的每个键来查看它是否与架构匹配,而是检查整个有效负载


所以想法是:


  1. 从自定义类型生成JSON 架构
  2. 使用自定义匹配器toMatchSchema来验证响应正文。


非常酷的东西,但请记住,在这些更改之后,您的测试可能会变得不稳定 - 当出现一些其他字段时就会发生这种情况,因此您需要定期更新架构。

结论

TypeScript设置可能会很棘手,特别是如果这是您第一次,但这是值得的!


如果您使用类型覆盖输入和输出数据,那么在解析这些对象时就不可能出现拼写错误或其他语法错误。它可以帮助您避免简单的错误,并让您可以在代码中直接查看请求的结构,因此您不必打开任何HTTP集合(如Postman )并查找所需的请求以查看它请求/响应的主体和。


让我知道您的经历以及您的想法。