Postman的一些使用技巧

    Postman 是一个流行的 API 开发工具,用于设计、开发、测试、发布和监控 API。在现代web开发中使用非常广泛。后端开发必备而且必会的工具。

目录

1.配置环境变量

2.动态变量

3.脚本

4.测试

5.模拟

6.监控

7.集合运行器

8.响应保存

9.请求历史

10.同步请求

11.断言

12.使用 Postman Interceptor

13.API 文档生成

14.团队协作

15.使用 Postman API

16,快捷键

17.Postman工作流


1.配置环境变量

示例:假设你有一个 API 服务,它在不同的环境(开发、测试和生产环境)中有不同的基础 URL。你可以在 Postman 中设置环境变量来管理这些不同的 URL。

  • 在 Postman 的左侧菜单中,选择“环境”(Environments)。
  • 点击“添加”(Add),也就是那个加号,创建一个新的环境,例如命名为“Development”;或者直接在Globals中设置全局变量
  • 在“Development”环境的变量列表中,添加一个新的变量,例如 base_url,值为 http://dev.api.example.com。或者 127.0.0.1:8080
  • 接下来,创建另外两个环境,分别命名为“Testing”和“Production”,并为 base_url 变量设置相应的值。

当你在编写请求时,可以使用 {{base_url}} 来引用环境变量,这样你就可以轻松地在不同环境之间切换,而不需要手动更改每个请求的 URL。

GET {{base_url}}/users

当你在 Postman 中运行请求时,它会使用当前选择的环境,自动替换 {{base_url}} 为你设置的值。

2.动态变量

示例:在某些情况下,你可能需要在请求中使用动态生成的值,如当前日期或时间、随机数等。Postman 提供了多种内置的动态变量来满足这些需求。

  • 当前日期和时间:你可以在请求的 URL 或 Headers 中使用 {{timestamp}} 动态变量来插入当前的时间戳。

GET {{base_url}}/data?time={{timestamp}}

  • 随机数:使用 {{$randomAlphaNumeric}} 来生成一个随机的字母数字字符串。

GET {{base_url}}/random?value={{$randomAlphaNumeric}}

  • GUID:生成一个全局唯一标识符(GUID),可以使用 {{$guid}}

POST {{base_url}}/items
{
  "id": "{{$guid}}",
  "name": "Item Name"
}

 自定义变量:除了内置的动态变量,你还可以创建自己的动态变量。例如,如果你在请求中需要使用一个递增的序号,你可以在 Pre-request Script 中定义一个变量,并在每次请求前递增它的值。

// Pre-request Script
let counter = pm.environment.get("counter") || 0;
pm.environment.set("counter", ++counter);

然后在请求中使用 {{counter}}

GET {{base_url}}/items/{{counter}}

通过使用动态变量,你可以创建更加灵活和自动化的请求,适应各种不同的测试场景。

3.脚本

示例:Postman 的脚本功能允许你在请求发送前后执行自定义逻辑,这在测试 API 和自动化流程中非常有用。

Pre-request Script:在请求发送前运行的脚本。

// Pre-request Script
// 这个脚本会在发送请求之前执行,可以用来修改请求头、设置环境变量等

const timestamp = new Date().getTime();
pm.environment.set("requestTimestamp", timestamp);

// 也可以直接修改请求对象
pm.request.headers.add({
    key: "x-custom-header",
    value: "exampleHeaderValue",
    description: "A custom header for the request"
});

Tests:在请求发送后运行的脚本,通常用于验证响应。

// Tests
// 这个脚本会在请求完成后执行,用于测试响应的有效性

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

// 使用响应体数据
pm.test("Response should contain a name", function () {
    const jsonData = pm.response.json();
    pm.expect(jsonData.name).to.not.be.null;
});

Scripting with Data Variables:在脚本中使用环境变量和数据集合变量。

// Pre-request Script
const itemId = pm.collectionVariables.get("itemId");
pm.environment.set("currentItem", itemId);

 通过使用脚本,你可以实现更复杂的测试逻辑,动态生成请求,以及在测试运行时进行数据处理。

4.测试

示例:在 Postman 中编写测试脚本来验证 API 响应是否符合预期。

假设你正在测试一个返回用户列表的 API,并且你希望验证以下几点:

  • 响应状态码是否为 200。
  • 响应时间是否在 500 毫秒以内。
  • 响应体中是否包含特定字段。

以下是如何为一个请求编写测试的示例:

// Tests
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("Response time is less than 500ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(500);
});

// 假设我们期望响应体中有一个 "users" 字段,它是一个数组
pm.test("Response has a users array", function () {
    const response = pm.response.json();
    pm.expect(response).to.have.property('users');
    pm.expect(response.users).to.be.an('array');
});

// 进一步验证数组中第一个用户的 "id" 和 "name" 字段
pm.test("First user has id and name", function () {
    const response = pm.response.json();
    const firstUser = response.users[0];
    pm.expect(firstUser).to.have.property('id');
    pm.expect(firstUser).to.have.property('name');
});

 在 Postman 的“Tests”选项卡中编写这些测试脚本,当你运行请求时,Postman 会自动执行这些测试,并在“Tests”结果区域显示测试是否通过。

其实postman中请求的Tests选项卡界面的右侧,已经内置了一些脚本,点击右边的对应的Snippets,就自动带入脚本了。 

测试是 Postman 中验证 API 行为的重要部分,它们帮助确保 API 的质量和稳定性

5.模拟

示例:使用 Postman Mock Server 来模拟 API 响应。

假设你正在开发一个前端应用程序,而后端 API 还没有完全开发完成。你可以使用 Postman 的 Mock Server 功能来模拟 API 的行为,这样前端开发可以不受后端开发进度的影响。

  • 首先,创建一个新的请求,定义你想要模拟的 API 的细节,例如:

GET https://mock-api.example.com/users

  • 然后,保存这个请求为一个新的集合,例如“Frontend Development Mocks”。

  • 接下来,选择这个集合,并点击“New Mock Server”来创建一个模拟服务器。

  • 设置模拟服务器的名称和延迟(可选,模拟网络延迟),然后保存。

  • Postman 会提供一个 URL,如 https://mock-api.example.com,这将是你的模拟服务器的基地址。

  • 现在,当有人访问这个 URL 时,Postman Mock Server 会返回你定义的响应。你还可以编辑模拟响应,添加状态码、响应头和响应体等。

{
  "status": 200,
  "headers": {
    "Content-Type": "application/json"
  },
  "body": "{\n  \"users\": [\n    {\n      \"id\": 1,\n      \"name\": \"Alice\"\n    },\n    {\n      \"id\": 2,\n      \"name\": \"Bob\"\n    }\n  ]\n}"
}

 你还可以设置模拟响应的条件,例如,根据不同的查询参数返回不同的响应。

通过使用 Mock Server,你可以在没有后端代码的情况下模拟 API 的行为,这对于并行开发和前端开发尤其有用。

6.监控

示例:设置监控来定期测试 API,确保其可用性和性能。

假设你想要监控一个关键的 API 端点,以确保它始终可用,并且在可接受的时间范围内响应。

  • 首先,创建一个监控的集合,包含了你想要监控的请求。

  • 然后,在 Postman 的界面中,导航到“自动化”(Automation) 部分,选择“监控”(Monitors)。

  • 点击“新建监控”(New Monitor),输入监控的名称。

  • 选择你之前创建的集合作为监控的请求集合。

  • 设置监控的频率,例如每 5 分钟运行一次。

  • 选择监控将运行的环境,这可以是一个特定的 Postman 环境,其中包含了所有必要的变量和配置。

  • 配置通知设置,选择在监控失败时通知你的方式,比如电子邮件、Slack 或其他集成服务。

  • 最后,保存监控。

现在,Postman 将按照你设置的时间间隔自动运行这个集合中的所有请求,并将结果记录在监控仪表板中。如果任何请求失败,或者响应时间超过你的阈值,你将通过配置的通知方式收到警报。

监控是确保 API 持续运行和性能满足要求的重要工具,它帮助你快速发现并解决问题

7.集合运行器

示例:使用集合运行器来批量执行测试集合,快速验证多个 API 端点。

假设你有一个 API 集合,包含了 20 个不同的请求,你想一次性运行这些请求以进行测试。

  • 打开 Postman,选择包含你想要测试请求的集合。

  • 点击集合名称旁边的"..."(更多选项),选择“运行”(Run)。

  • 在弹出的“运行集合”(Run Collection) 对话框中,选择如何运行你的请求集合。

  • 你可以选择“一次运行所有请求”(Run all requests in sequence) 及Run order中全选请求,设置迭代次数和延迟时间以在请求之间添加间隔。

  • 点击“运行”(Run) 按钮开始执行。

集合运行器会按照你在集合中定义的顺序执行每个请求,并且会运行任何关联的测试脚本。完成后,Postman 会提供一个测试摘要,显示哪些测试通过了,哪些失败了。

这个功能非常适合自动化回归测试,确保在代码更新后所有 API 端点仍然按预期工作。

8.响应保存

示例:保存响应体,以便在后续请求中使用。

假设你正在测试一个 API,它返回一个包含多个项目 ID 的列表,而你想要使用这些 ID 来获取每个项目的详细信息。

  • 首先,发送一个请求来获取项目列表,例如:

GET {{base_url}}/projects

  • 在收到响应后,你可以使用 Postman 的“响应保存”(Save Response) 功能来保存整个响应体或其一部分。

  • 在响应体下方,点击“保存”(Save) 按钮,选择“响应体”(Body) 作为保存类型。

  • 你可以选择将响应保存为 JSON、CSV 或其他格式的文件。

  • 保存之后,你可以在 Postman 的“历史”(History) 选项卡中找到已保存的响应。

  • 接下来,你可以创建一个新的请求来获取单个项目的详细信息,例如:

GET {{base_url}}/projects/{{project_id}}

  • 在这个请求中,你可以使用之前保存的响应体中的项目 ID。如果响应体很大,你可以使用 Postman 的“响应解析”(Response Parsing) 功能来快速定位到需要的 ID。

  • 你也可以使用 Postman 的脚本功能来解析和提取响应体中的特定数据,并将其设置为环境变量,以便在后续请求中使用。

通过保存响应,你可以轻松地在多个请求之间传递数据,实现复杂的测试场景。

9.请求历史

示例:利用请求历史来快速重新发送之前的请求。

Postman 的请求历史功能允许你回顾和重新发送之前做过的请求,这对于测试和调试非常有用。

  • 在 Postman 的界面左侧,点击“历史”(History) 选项卡。

  • 这里会列出你最近的请求活动,包括请求的 URL、方法、状态码和时间戳。

  • 你可以点击任何一个历史记录来查看完整的请求和响应详情。

  • 如果需要重新发送某个请求,只需选择该请求记录,然后点击“重新发送”(Re-send) 按钮。

  • 你也可以直接在历史记录中修改请求参数,然后再次发送修改后的请求。

  • 历史记录还可以帮助你重现和调试之前遇到的问题。如果一个请求之前失败了,你可以查看失败的请求详情,修改参数或测试脚本,然后重新发送。

此外,Postman 允许你搜索历史记录,通过输入关键词来快速找到特定的请求。

请求历史是 Postman 中一个非常实用的功能,它帮助你快速回顾和重复测试工作。

10.同步请求

示例:在脚本中使用同步请求来确保顺序执行。

在 Postman 中,你可以使用 pm.sendRequest 方法发送同步请求。这在需要按照特定顺序执行多个请求时非常有用,尤其是在测试脚本中。

假设你想要测试一个场景,其中第二个请求必须在第一个请求完成后才能发送。

// Pre-request Script for the second request
pm.sendRequest("{{base_url}}/first-endpoint", function (err, response) {
    if (err) {
        console.error("Error:", err);
        return;
    }

    // 假设第一个请求返回一个重要的 ID,我们需要在第二个请求中使用它
    const firstResponseId = response.json().id;
    pm.environment.set("idFromFirstRequest", firstResponseId);

    // 使用设置的变量发送第二个请求
    pm.sendRequest({
        url: "{{base_url}}/second-endpoint",
        method: "POST",
        header: {
            "Content-Type": "application/json"
        },
        body: {
            mode: 'raw',
            raw: JSON.stringify({
                id: "{{idFromFirstRequest}}"
            })
        }
    }, function (err, response) {
        if (err) {
            console.error("Error:", err);
            return;
        }

        // 这里可以继续处理第二个请求的响应
    });
});

请注意,pm.sendRequest 是一个异步操作,但是通过在回调函数中处理响应,你可以实现同步的流程控制。

使用同步请求可以帮助你编写更精确的测试脚本,确保在特定条件下发送请求。

11.断言

示例:使用断言来验证响应数据,确保 API 按预期工作。

断言是 Postman 测试脚本中用来验证特定条件是否为真的语句。如果断言失败,那么测试也会失败。

假设你正在测试一个返回用户信息的 API,你想要验证以下条件:

  • 响应状态码为 200。
  • 响应时间小于 200 毫秒。
  • 响应体中包含 name 和 email 字段。

以下是如何使用断言的示例:

// Tests
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test("Response has a name and email", function () {
    const responseJson = pm.response.json();
    pm.expect(responseJson).to.have.property('name');
    pm.expect(responseJson).to.have.property('email');
    // 进一步验证 email 格式
    pm.expect(responseJson.email).to.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/);
});

 在 Postman 中,当运行测试集合时,每个测试的结果会在 Postman 的测试结果区域显示。如果测试失败,你可以在这里看到失败的原因,帮助你快速定位问题。

断言是 Postman 中验证 API 响应的重要工具,它们帮助你确保 API 的行为符合预期。

12.使用 Postman Interceptor

示例:使用 Postman Interceptor 捕获浏览器发出的请求和响应,然后直接在 Postman 中使用它们。

Postman Interceptor 是一个浏览器扩展,可以拦截通过浏览器发出的 HTTP 请求和响应,允许你查看、编辑和导出这些请求,然后在 Postman 中使用它们。

以下是如何使用 Postman Interceptor 的步骤:

  1. 安装 Postman Interceptor 扩展到你的浏览器。

  1. 打开你想要捕获请求的网站,并开始你的浏览器活动,比如登录、搜索或任何其他操作。

  2. 点击浏览器工具栏中的 Postman Interceptor 图标,这将打开 Interceptor 的界面。

  3. 当你看到所需捕获的请求时,选择该请求,然后点击“保存到 Postman”(Save to Postman)。

  4. Postman Interceptor 将自动将请求信息发送到 Postman 桌面应用。

  5. 打开 Postman 应用,你会在侧边栏的“服务”(Services) 部分看到一个新条目,表示 Interceptor 捕获的请求。

  6. 点击这个条目,Postman 将自动创建一个新的请求,包含了从浏览器捕获的所有信息,包括 URL、方法、头信息和请求体。

  7. 你现在可以编辑这个请求,添加测试脚本,或者将其保存为模板,用于未来的测试。

使用 Postman Interceptor 可以快速捕获和导入浏览器中的请求,这对于测试那些通过浏览器发出的复杂请求非常有用。

13.API 文档生成

示例:自动生成 API 文档,方便团队成员和 API 用户查看和理解。

Postman 提供了从你的 API 请求集合自动生成文档的功能。这对于创建易于理解和使用的 API 文档非常有帮助,特别是当你的 API 集合非常大时。

以下是如何生成 API 文档的步骤:

  1. 打开包含你想要生成文档的 API 请求的集合。

  2. 点击集合名称旁边的"..."(更多选项),选择“View documentation"。

  3. Postman 会打开一个新的标签页,显示该集合的文档视图。

  4. 在这里,你可以选择不同的选项卡来查看请求、模型、示例和测试。

  5. 你还可以编辑文档,添加描述、参数详情、响应字段说明等。

  6. 一旦你满意了文档的内容,点击右上角的“分享”(Share) 按钮。

  7. 在分享对话框中,你可以选择公开分享文档,或者邀请特定的团队成员查看。

  8. 如果你选择公开分享,Postman 会提供一个公共链接,任何人都可以查看。

  9. 对于私有分享,你可以邀请团队成员,他们需要登录 Postman 才能查看文档。

通过自动生成的文档,你可以确保团队成员和 API 用户能够快速理解如何使用你的 API,同时保持文档的更新与 API 的变更同步。

14.团队协作

示例:在 Postman 中创建团队,共享集合和环境,以便团队成员可以协作开发和测试 API。

Postman 的团队协作功能允许你与团队成员共享集合、环境和 API 文档,非常适合团队一起工作。

以下是如何设置团队协作的步骤:

  1. 在 Postman 网站上创建一个团队账号或加入一个现有的团队。

  2. 登录你的 Postman 账号,进入你的工作台。

  3. 或者直接invite,邀请你的团队成员或者组加入你的工作空间,并配置角色权限

  1. 在团队工作区中,你可以创建或添加集合和环境。邀请团队成员还可以选择一个集合或环境,点击“...”(更多选项),选择“Share”。

  2. 在弹出的对话框中,选择你的团队,然后点击“共享”(Share),这样可以只共享你工作空间的某个请求集合(Collections)。

  1. 现在,这个集合或环境就与团队共享了,团队成员可以查看、编辑和协作。

  2. 你还可以在团队中创建不同的角色,如管理员、开发者或测试人员,来控制团队成员的权限。

  3. 使用团队功能,你可以轻松地与团队成员沟通,分配任务,跟踪进度。

通过团队协作,你可以确保所有团队成员都使用最新的集合和环境,同时方便地跟踪和审查工作进度。

15.使用 Postman API

示例:通过 Postman API 来自动化各种任务,如创建集合、运行测试等。

Postman 提供了一个强大的 API,允许你自动化各种与 Postman 相关的任务。你可以使用 Postman API 来创建和管理集合、环境、监控,以及执行测试等。

以下是如何使用 Postman API 的基本步骤:

  1. 首先,你需要有一个 Postman 账户,并确保你的集合是保存在 Postman 的云服务上的。

  2. 登录到 Postman API 参考文档 了解不同 API 端点的详细信息。

  3. 为了使用 Postman API,你可能需要生成一个 API 密钥。在 Postman 应用中,进入“Postman API Keys”部分,生成一个新的 API 密钥。

  4. 使用这个 API 密钥,你可以通过 HTTP 请求与 Postman API 交互。

  5. 例如,如果你想要通过 API 创建一个新的集合,你可以发送一个 POST 请求到 /collections 端点,包含必要的信息,如集合名称和描述。

POST https://api.getpostman.com/collections
X-Postman-Token: YOUR_API_KEY
Content-Type: application/json

{
  "name": "New Collection",
  "description": "This is a new collection created via API"
}
  1. 你可以使用编程语言,如 Python、Node.js 或任何其他支持 HTTP 请求的语言来调用 Postman API。

  2. 通过脚本和自动化工具,你可以将 Postman API 集成到你的 CI/CD 流程中,实现自动化测试和部署。

使用 Postman API 可以极大地提高你的工作效率,允许你创建复杂的自动化流程,并且更好地集成 Postman 到你的开发和测试工作流中。

16,快捷键

示例:学习并使用 Postman 的快捷键来提高效率。

Postman 提供了一系列的快捷键,可以帮助你更快地执行常用操作,提升工作效率。以下是一些常用的 Postman 快捷键示例:

  • Ctrl + Enter 或 Cmd + Enter:发送请求。
  • F5 或 Cmd + R:刷新当前响应。
  • F6 或 Cmd + Alt + R:重新发送当前请求。
  • Ctrl + Space 或 Cmd + Space:自动完成环境变量或数据集合变量。
  • Ctrl + Shift + M 或 Cmd + Shift + M:快速打开或关闭侧边栏。
  • Ctrl + S 或 Cmd + S:保存当前的请求或文档。
  • Ctrl + Z 或 Cmd + Z:撤销上一个操作。
  • Ctrl + Shift + Z 或 Cmd + Shift + Z:重做上一个撤销的操作。

除了这些,Postman 还提供了很多其他的快捷键,你可以通过以下步骤查看完整的快捷键列表:

  1. 打开 Postman 应用。
  2. 点击右上角的齿轮图标,打开“设置”(Settings)。
  3. 在设置菜单中,选择“快捷键”(Shortcuts)。

通过熟练使用这些快捷键,你可以减少对鼠标的依赖,提高操作速度,特别是在编写测试脚本或处理大量请求时。

17.Postman工作流

Postman 的 Flows 功能是一个相对较新的功能,它允许用户使用一种可视化的拖放界面来设计、构建和测试 API 工作流程。Flows 可以看作是一种更高级的测试脚本编写方式,它提供了一种更直观的方法来处理复杂的测试逻辑,特别是对于不熟悉编程的用户来说。

Flows的主要功能:

  1. 可视化编辑:Flows 提供了一个拖放界面,用户可以通过拖拽不同的操作块来构建测试逻辑。

  2. 并行执行:Flows 支持并行执行多个请求,这对于测试需要同时发生的场景非常有用。

  3. 条件逻辑:用户可以添加条件块来根据测试结果决定执行流程。

  4. 迭代和循环:Flows 支持迭代数据集合,允许用户对集合中的每项数据运行一系列请求。

  5. 变量和数据引用:可以在 Flows 中使用和修改环境变量、数据集合变量以及从响应中提取的数据。

  6. 测试结果:Flows 允许用户添加测试步骤来验证每个请求的结果。

  7. 错误处理:Flows 支持错误处理,可以捕获和处理请求执行中的错误。

  8. 集成监控:Flows 可以被设置为监控,定期运行以测试 API 的可用性和性能。

示例

假设我们想要测试一个电商网站的购物流程,包括以下步骤:

  1. 登录用户账号。
  2. 搜索产品。
  3. 选择一个产品并加入购物车。
  4. 验证购物车中的产品数量。
  5. 结账并验证订单详情。

使用 Flows,我们可以这样构建:

  1. 开始:从一个起始块开始,这将触发整个流程的开始。

  2. 登录:添加一个请求块,设置为 POST 方法,目标 URL 为登录端点,添加必要的身份验证数据。

  3. 搜索产品:紧接着,添加另一个请求块,设置为 GET 方法,目标 URL 为产品搜索端点,可能需要使用环境变量来传递搜索关键词。

  4. 加入购物车:再添加一个请求块,用于将选定的产品添加到购物车,这可能需要从上一个响应中提取某些信息,如产品 ID。

  5. 验证购物车:添加一个条件块来检查购物车中的产品数量是否正确,如果不正确,则流程终止或重试。

  6. 结账:最后,添加一个请求块来执行结账操作,并添加测试块来验证订单详情是否正确。

  7. 监控设置:如果需要,可以将这个 Flow 设置为监控,定期运行以确保购物流程始终按预期工作。

通过使用 Flows,你可以创建复杂的测试场景,而无需编写复杂的测试脚本,使得测试工作更加直观和易于管理。

上边提到的Monitors,Mock servers和Flows和APIs的功能菜单默认情况下没有在postman最左侧显示出来,需要手动设置打开。

最新版本的postman还有一个beta的功能(生成测试),大家也可以尝试一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/592069.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue+Mysql的影城管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

brpc profiler

cpu profiler cpu profiler | bRPC MacOS的额外配置 在MacOS下,gperftools中的perl pprof脚本无法将函数地址转变成函数名,解决办法是: 安装standalone pprof,并把下载的pprof二进制文件路径写入环境变量GOOGLE_PPROF_BINARY_PA…

现代循环神经网络(GRU、LSTM)(Pytorch 14)

一 简介 前一章中我们介绍了循环神经网络的基础知识,这种网络 可以更好地处理序列数据。我们在文本数据上实现 了基于循环神经网络的语言模型,但是对于当今各种各样的序列学习问题,这些技术可能并不够用。 例如,循环神经网络在…

Java中接口的默认方法

为什么要使用默认方法 当我们把一个程序的接口写完后 用其他的类去实现,此时如果程序需要再添加一个抽象方法的时候我们只有两种选择 将抽象方法写在原本的接口中 但是这样写会导致其他所有改接口的实现类都需要实现这个抽象方法比较麻烦 写另一个接口 让需要的实…

23.哀家要长脑子了!

目录 1.290. 单词规律 - 力扣(LeetCode) 2.532. 数组中的 k-diff 数对 - 力扣(LeetCode) 3.205. 同构字符串 - 力扣(LeetCode) 4.138. 随机链表的复制 - 力扣(LeetCode) 5.599. 两…

Spring Boot与OpenCV:融合机器学习的智能图像与视频处理平台

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

VMware虚拟机中ubuntu使用记录(6)—— 如何标定单目相机的内参(张正友标定法)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、张正友相机标定法1. 工具的准备2. 标定的步骤(1) 启动相机(2) 启动标定程序(3) 标定过程的操作(5)可能的报错 3. 标定文件内容解析 前言 张正友相机标定法…

什么是PWM?

1.PWM也叫做脉冲宽度调制,它是一种模拟控制方式,根据相应 载荷 的变化来调制晶体管基级和MOS管栅极的偏置,来实现 晶体管 或 MOS管 导通时间的改变,从而实现开关稳压电源输出的改变。 这种方式能使电源的输出电压在工作条件变化时…

linux的基础入门(2)

环境变量 在Shell中,正确的赋值语法是没有空格的,即变量名数值。所以,正确的方式是: tmpshy 这样就将变量tmp赋值为"shy"了。 注意:并不是任何形式的变量名都是可用的,变量名只能是英文字母、…

Reac19 升级指南

Reactv19 已经发布 beta 版本,想要快速体验如何升级到 v19 版本尝鲜的朋友们可以查阅进行了解 前言 React 已于近日发布了 v19 的 beta 版本,同时为了帮助后续的 v19 升级,也同时发布了 v18.3.0的正式版, 与 v18.2 版本完全相同…

JavaEE初阶Day 15:文件IO(1)

目录 Day 15:文件IO(1)IO文件1. 路径2. 文件的分类3. 使用Java针对文件系统进行操作3.1 属性3.2 构造方法3.3 方法 Day 15:文件IO(1) IO I:Input输入 O:Output输出 输入输出规则…

【golang-ent】go-zero框架 整合 ent orm框架实现一对一 一对多 多种姿势查询方式

一、ent的 O2O 问题 官方文档如下: https://entgo.io/zh/docs/schema-edges#o2o-same-type 1、ent O2O问题 官方提供了三种 one2one的方式,可以看到他全部使用了 mysql的 foregionKey 的方式进行关联,虽然举例了单表和双表的不同使用方式,但是我们实际使用mysql中是不创建…

深度解析 Spring 源码:探寻Bean的生命周期

文章目录 一、 Bean生命周期概述二、Bean生命周期流程图三、Bean生命周期验证3.1 代码案例3.2 执行结果 四、Bean生命周期源码4.1 setBeanName()4.2 setBeanFactory()4.3 setApplicationContext()4.4 postProcessBeforeInitialization()4.5 afterPropertiesSet()4.6 postProces…

银行数字化转型导师坚鹏:银行数字化转型5大战略定位

银行数字化转型必须建立清晰的战略定位,可以从以下5个方面建立,使广大银行员工明白银行数字化转型的重要性。 1.国家战略落地的重要抓手 银行是中国金融体系的核心,银行是做好“科技金融、绿色金融、普惠金融、养老金融和数字金融‘五篇大文…

【c++】继承学习(二):探索 C++ 中派生类的默认机制与静态成员共享

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 目录 1.派生类的默认成员函数2.继承与友元3.继承与静态成员 朋友们大家好,本篇文章我们来学习继承的第二部分 1.派生类的默认成员函数 来看下面的类: class Person…

【自留】运行一个开源项目

运行一个开源项目 首先是运行起来 1. 拿到地址 拿到你想要的项目的地址 2. 克隆 打开编辑器 VSCode ,创建一个放项目的文件夹,控制台输入以下代码克隆项目 git clone 克隆地址gitee克隆地址在这看: github上项目的话,在这…

【python的魅力】:教你如何用几行代码实现文本语音识别

文章目录 引言一、运行效果二、文本转换为语音2.1 使用pyttsx32.2 使用SAPI实现文本转换语音2.3 使用 SpeechLib实现文本转换语音 三、语音转换为文本3.1 使用 PocketSphinx实现语音转换文本 引言 语音识别技术,也被称为自动语音识别,目标是以电脑自动将…

SSM+Vue+小程序+基于微信小程序的高校学生事务管理系统

项目配合学校日常生活通知,考试等管理需要,开发学校事务管理系统,maven管理依赖,mybatis处理数据库交互 学校管理 学院管理 班级管理 年级管理 教师管理 通知公告管理 学生资料管理 待办事项管理 教务处通知管理 讲座通…

【Conda】解决无名虚拟环境问题

文章目录 问题描述:无名虚拟环境解决步骤1 添加虚拟环境目录到envs步骤2 成功命名 问题描述:无名虚拟环境 如果不指定创建目录,默认创建在C盘用户目录下,这应该是很多人不愿意的吧。 指定目录创建虚拟环境命令如下: …

vector的使用

1.构造函数 void test_vector1() {vector<int> v; //无参的构造函数vector<int> v2(10, 0);//n个value构造&#xff0c;初始化为10个0vector<int> v3(v2.begin(), v2.end());//迭代器区间初始化,可以用其他容器的区间初始化vector<int> v4(v3); //拷贝…