接口自动化测试

247 篇文章 0 订阅
183 篇文章 0 订阅

软件测试面试刷题,这个小程序(永久刷题),靠它可以快速找到工作!https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502

接口自动化测试

接口自动化测试是一种通过编写代码来自动化验证接口(通常是API)的功能、性能和安全性的过程。它有助于确保接口按预期工作,并且可以在开发周期的早期发现问题。以下是接口自动化测试的一些关键概念和步骤:

关键概念

  1. 1. 接口(API):应用程序编程接口,允许不同软件系统相互通信。

  2. 2. 测试用例:定义特定的输入、执行步骤和预期输出。

  3. 3. 测试框架:组织和运行测试用例的结构,常用的测试框架包括JUnit、TestNG、PyTest等。

  4. 4. 断言(Assertion):检查实际输出是否与预期输出匹配。

  5. 5. 测试报告:记录测试结果,帮助识别和解决问题。

测试步骤

  1. 1. 准备环境

    • • 配置测试环境,确保所有依赖项和服务都可以正常工作。

  2. 2. 选择工具

    • • 选择合适的工具来进行接口自动化测试,例如Postman、SoapUI、RestAssured(Java)、Requests(Python)等。

  3. 3. 编写测试用例

    • • 定义测试场景,包括请求方法(GET、POST、PUT、DELETE等)、请求URL、请求头、请求体和预期响应。

    • • 例如,使用 Java 的 RestAssured 库测试一个简单的GET请求:

      import io.restassured.RestAssured;
      import io.restassured.response.Response;
      import static io.restassured.RestAssured.*;
      import static org.hamcrest.Matchers.*;
      
      public class APITest {
          public static void main(String[] args) {
              RestAssured.baseURI = "https://api.example.com";
      
              // 发送GET请求并断言响应
              given().
                  header("Content-Type", "application/json").
              when().
                  get("/v1/resource").
              then().
                  assertThat().
                  statusCode(200).
                  body("key", equalTo("expected_value"));
          }
      }
    • • 例如,使用Python的Requests库来编写一个简单的测试用例:

      import requests
      import json
      
      # 定义请求URL和请求头
      url = 'https://api.example.com/v1/resource'
      headers = {'Content-Type': 'application/json'}
      
      # 发送GET请求
      response = requests.get(url, headers=headers)
      
      # 断言响应状态码和响应内容
      assert response.status_code == 200
      assert json.loads(response.text)['key'] == 'expected_value'
  4. 4. 执行测试

    • • 使用测试框架运行测试用例,记录测试结果。

  5. 5. 生成报告

    • • 生成测试报告,帮助开发人员和测试人员了解测试结果。

  6. 6. 持续集成

    • • 将接口自动化测试集成到CI/CD管道中,例如使用Jenkins、GitLab CI等,确保每次代码变更后自动运行测试。

常用工具

  • • Postman:支持创建和运行 API 测试,生成测试报告。

  • • SoapUI:用于测试 SOAP 和 RESTful Web 服务。

  • • RestAssured:一个 Java 库,用于简化REST API 的测试。

  • • Requests:一个 Python 库,简化 HTTP 请求。

  • • HttpRunner:一个开源的 API/UI 测试工具。

接下来介绍几种比较常用的 API 自动化测试的工具。

Postman

https://www.postman.com/downloads/

使用 Chai Assertion Library 增强测试能力

Postman 内置了 Chai Assertion Library 是一个功能强大的 JavaScript 断言库,可以帮助你编写更复杂、更具可读性的测试脚本。

以下是一些 Chai 断言方法的示例:

  • • pm.expect(actual).to.be.equal(expected);:断言实际值等于预期值。

  • • pm.expect(actual).to.be.above(expected);:断言实际值大于预期值。

  • • pm.expect(actual).to.be.below(expected);:断言实际值小于预期值。

  • • pm.expect(actual).to.include(expected);:断言实际值包含预期值。

  • • pm.expect(actual).to.have.lengthOf(expected);:断言实际值具有指定的长度。

测试用例组织技巧

  • • 将测试用例组织成不同的集合(Collection),以便于管理和运行。

  • • 使用 Postman 的文件夹功能来组织测试用例。

  • • 为每个测试用例编写清晰的描述,以便于理解其目的。

优化建议

  • • 使用 Postman 的 Pre-request Scripts 来设置请求头和参数,而不是在每次请求中都重复设置。

  • • 使用 Postman 的 Tests tab 来验证响应,而不是使用 console.log() 或其他方法。

  • • 使用 Newman 来运行 Postman 测试,而不是使用 Postman GUI,可以提高性能。

  • • 将 Postman 测试导出为 JSON 或 Collection 文件,便于 CLI 命令执行。

Newman 安装和执行

## 官网(https://nodejs.org/zh-cn)下载安装 NodeJS 或者Brew 安装安装
brew install node@20
node -v # should print `v20.15.0`
npm -v # should print `10.7.0`

## 安装 Newman(报错的话,加上 sudo )
npm install -g newman

## 执行测试文件
newman run /path/to/your_postman_collection.json

GUI 运行测试

图片

如果你不熟悉 JavaScript 语言,可以参考右侧的一些Snippets,可以帮助你快速生成断言代码,如果语法报错,还可以通过 AI 自动帮你修复,如下图:

图片

通过 Postbot 来快速生成测试代码,以下是通过命令 Test for response 生成:

图片

整体使用下来,可以通过 Postman + JavaScript + Newman 的方式,导出项目 Collection 的脚本,newman cli 进行执行,也是可以集成到 CI 工具的。但是缺点还是比较明显的:

  1. 1. 通过 GUI 进行接口维护,对于复杂项目不利于维护,没有 IDEA 来得方便,JavaScript 脚本都藏在每个 API Rquest 中

  2. 2. 和 CI 集成不方便,每次在 GUI 界面维护后,重新导出 Collection 的 JSON 文件,还得上传到 CI 服务器能访问的目录中

对于个人项目或者 POC 项目还是可以快速地验证接口的可行性,非常的方便。

RestAssured

https://github.com/rest-assured/rest-assured

RestAssured 结合 SpringBoot,添加如下依赖:

testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("io.rest-assured:spring-mock-mvc:5.4.0")

RestAssured 测试代码:

图片

RestAssured 结合 SpringBoot 框架使用起来非常的简单,如果对于 Java 比较熟悉的话,建议两种方式进行维护:

  1. 1. 由 Dev 人员进行维护,内置到后端微服务项目中,容器化启动数据库中间件,既能做到接口的自动化测试,又能结合 Jacoco 满足项目的测试覆盖率

  2. 2. 由 QA 人员进行维护,单独新建一个Git Repository 进行维护,单独的 DB 数据库

在实际项目中还需要结合 dbunit + Yaml 来初始化数据到数据库,结合 Jacoco 生成测试报告。根据以上两种方式的选择,判断是否要新建一条新的 CI 流水线。

Http Runner

HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型。简单易用,功能强大,具有丰富的插件化机制和高度的可扩展能力。

图片

相比于其它 API 测试工具,HttpRunner 最大的不同在于设计理念。

  • • 约定大于配置:测试用例是标准结构化的,格式统一,方便协作和维护

  • • 标准开放:基于开放的标准,支持与 HAR[1]/Postman/Swagger/Curl/JMeter 等工具对接,轻松实现用例生成和转换

  • • 一次投入多维复用:一套脚本可同时支持接口自动化测试、性能测试、数字体验监测等多种 API 测试需求

  • • 融入最佳工程实践:不仅仅是一款测试工具,在功能中融入最佳工程实践,实现面向网络协议的一站式测试解决方案

核心特性

  • • 网络协议:完整支持 HTTP(S)/1.1 和 HTTP/2,可扩展支持 WebSocket/TCP/RPC 等更多协议

  • • 多格式可选:测试用例支持 YAML/JSON/go test/pytest 格式,并且支持格式互相转换

  • • 双执行引擎:同时支持 golang/python 两个执行引擎,兼具 go 的高性能和 pytest[2] 的丰富生态

  • • 录制 & 生成:可使用 HAR[3]/Postman/Swagger/curl 等生成测试用例;基于链式调用的方法提示也可快速编写测试用例

  • • 复杂场景:基于 variables/extract/validate/hooks 机制可以方便地创建任意复杂的测试场景

  • • 插件化机制:内置丰富的函数库,同时可以基于主流编程语言(go/python/java)编写自定义函数轻松实现更多能力

  • • 性能测试:无需额外工作即可实现压力测试;单机可轻松支撑 1w+ VUM,结合分布式负载能力可实现海量发压

  • • 网络性能采集:在场景化接口测试的基础上,可额外采集网络链路性能指标(DNS 解析、TCP 连接、SSL 握手、网络传输等)

  • • 一键部署:采用二进制命令行工具分发,无需环境依赖,一条命令即可在 macOS/Linux/Windows 快速完成安装部署

安装

## 安装最新版本
bash -c "$(curl -ksSL https://httprunner.com/script/install.sh)"

## github下载对应版本
https://github.com/httprunner/httprunner/releases?page=2
$ tar -xzf hrp-xxx.tar.gz
$ chmod +x hrp
$ mv hrp /usr/local/bin/

初始化项目

hrp startproject eric-http-runner-demo
hrp -h

██╗  ██╗████████╗████████╗██████╗ ██████╗ ██╗   ██╗███╗   ██╗███╗   ██╗███████╗██████╗
██║  ██║╚══██╔══╝╚══██╔══╝██╔══██╗██╔══██╗██║   ██║████╗  ██║████╗  ██║██╔════╝██╔══██╗
███████║   ██║      ██║   ██████╔╝██████╔╝██║   ██║██╔██╗ ██║██╔██╗ ██║█████╗  ██████╔╝
██╔══██║   ██║      ██║   ██╔═══╝ ██╔══██╗██║   ██║██║╚██╗██║██║╚██╗██║██╔══╝  ██╔══██╗
██║  ██║   ██║      ██║   ██║     ██║  ██║╚██████╔╝██║ ╚████║██║ ╚████║███████╗██║  ██║
╚═╝  ╚═╝   ╚═╝      ╚═╝   ╚═╝     ╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═══╝╚═╝  ╚═══╝╚══════╝╚═╝  ╚═╝

HttpRunner is an open source API testing tool that supports HTTP(S)/HTTP2/WebSocket/RPC
network protocols, covering API testing, performance testing and digital experience
monitoring (DEM) test types. Enjoy! ✨ 🚀 ✨

License: Apache-2.0
Website: https://httprunner.com
Github: https://github.com/httprunner/httprunner
Copyright 2017 debugtalk

Usage:
  hrp [command]

Available Commands:
  adb          simple utils for android device management
  boom         run load test with boomer
  build        build plugin for testing
  completion   Generate the autocompletion script for the specified shell
  convert      convert multiple source format to HttpRunner JSON/YAML/gotest/pytest cases
  help         Help about any command
  ios          simple utils for ios device management
  pytest       run API test with pytest
  run          run API test with go engine
  startproject create a scaffold project
  wiki         visit https://httprunner.com

Flags:
  -h, --help               help for hrp
      --log-json           set log to json format (default colorized console)
  -l, --log-level string   set log level (default "INFO")
      --venv string        specify python3 venv path
  -v, --version            version for hrp

Use "hrp [command] --help" for more information about a command.

测试用例快速转换

官方说当前的支持度仅为 1/3,很可惜没有支持 Swagger如下:

from \ toJSONYAMLGoTestPyTest
HAR
Postman
JMeter
Swagger
curl
Apache ab
JSON
YAML
GoTest
PyTest

新建测试用例

Edge 浏览器导出 HAR 文件(同理 Chrome 浏览器):

图片

# 4.1.0 版本
## HAR 格式转换
$ hrp convert locale.har --to-yaml --output-dir testcases

## Postman 用例转换
### 创建输出目录
$ mkdir -p testcases/from/postman

### 建议先使用 4.1.0 版本,postman 导出 2.1 版本 json
### 将输入的 eric_postman_collection.json 转换为 YAML 测试用例 postman_collection_test.yaml,并导出到 testcases/from/postman 目录下
$ hrp convert eric_postman_collection.json --to-yaml --output-dir testcases/from/postman

# 4.3.6 版本
## HAR 格式转换
$ hrp convert --from-har locale.har --to-yaml --output-dir testcases

图片

执行用例

$ hrp run testcases/locale_test.yaml --gen-html-report

图片

如果要从接口测试切换到性能测试,可以使用(缺点是还不支持测试报告,只能在终端显示):

$ hrp boom testcases/locale_test.yaml --spawn-count 100 --spawn-rate 10 --loop-count 1000

图片

更多其他功能和语法还在学习和试用中。

总结

接口自动化测试是确保API可靠性和功能性的关键步骤,通过使用合适的工具和框架,可以高效地编写和执行测试用例,从而提升软件质量。

结合项目的实际情况来选择,个人比较建议:

  1. 1. Dev 人员使用类似于基于代码的框架进行 API 自动化测试,如:RestAssured

  2. 2. QA 人员使用类似于基于配置的框架进行 API 自动化测试,如:HttpRunner、go4api 等工具

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值