当前位置: 首页 > news >正文

如何轻松实现用户充值系统的API自动化测试

在现代软件开发中,API(应用程序编程接口)作为连接不同系统和模块的关键组件,其重要性日益凸显。随着软件应用的互联性不断增强,API的数量和复杂度也在不断增加。传统的API测试方法面临着诸多挑战:

1.手动测试效率低下:手动测试API接口耗时耗力,难以覆盖所有可能的测试场景,容易遗漏潜在的缺陷。

2.数据一致性问题:研发和测试人员使用不同的数据源进行操作,容易导致数据不一致,影响测试结果的准确性。

3.测试覆盖率不足:手动测试难以实现对大量API的全面测试,导致测试覆盖率不足,无法充分验证API的稳定性和可靠性。

4.难以融入自动化工作流:传统的测试工具难以与持续集成/持续部署(CI/CD)自动化工作流无缝对接,无法实现自动化的回归测试。

一、Apipost自动化测试概况

使用Apipost可视化的API自动化测试功能,研发人员「API管理」里设计、调试、维护接口文档;测试人员无需编写代码,在自动化测试创建自动化测试脚本时可以直接导入接口,与研发人员基于同一数据源进行自动化测试,且能生成功能全面清晰的测试报告。

导入后可以在接口编辑页面选择双向同步或手动同步数据。

勾选双向同步后无论在自动化测试还是API管理中修改接口另一方都会自动同步修改内容;如不勾选,在API管理中修改后需要手动获取最新数据。

1、控制器

Apipost提供了多种控制器用以覆盖多种测试场景:

  • 条件控制器:可以配置条件决定是否调用接口;
  • 事务控制器:适用于需要使用测试数据的某个接口;
  • 次数控制器:适用于场景中需要多次调用的接口;
  • forEach控制器:适用于循环获取某个接口中的变量值的场景;
  • while循环控制器:循环调用某个接口直至达到设置的条件;
  • 等待控制器:为步骤之间添加睡眠时间。

2、核心优势

  • 零代码:拖拽式编排,对新手友好;
  • 全场景覆盖:接口测试、性能压测、数据驱动一应俱全;
  • CI/CD集成:一键生成CLI命令,无缝对接Jenkins、GitLab!

二、快速上手

1、新建测试用例

打开Apipost,点击新建,给测试任务起个名字,如用户登录接口测试

2、编排测试用例

在测试用例中,可以直接把接口拖拽进来,比如:先添加用户登录接口,再添加获取用户信息接口

3、设置测试条件

  • 测试环境:从下拉菜单中选择你的测试环境(比如开发环境、预发布环境)。
  • 执行轮次:设置跑多少次测试,比如:跑5次验证稳定性。
  • 间隔时长:每次测试之间隔多久,比如:设置为3秒。

4、生成测试报告

点击保存并执行,Apipost会自动生成一份详细的测试报告,包括接口响应时间、断言结果、失败原因等。

三、使用测试数据

(一)、测试数据的创建

1、上传测试数据文件

  • 打开 Apipost,进入测试用例编辑页面,点击左侧的测试数据
  • 点击新建测试数据,选择上传文件,支持CSV和 TXT 格式。

示例:准备一个 CSV 文件,包含用户登录所需的`username` 和`password`字段。

username,password
test01@apipost.cn,123456
test02@apipost.cn,789012

上传后,Apipost 会自动解析文件内容,可以在右侧预览数据。

2、环境隔离:不同环境不同数据

在 Apipost 中,支持为每个环境单独配置测试数据。例如:

  • 开发环境使用 `local_users.csv`
  • 生产环境使用 `prod_users.csv`

切换环境时,系统会自动识别对应环境的测试数据。

(二)、测试数据的使用

1、参数化接口请求

  • 编辑接口时,将请求参数设置为变量,例如`{{username}}`和`{{password}}`

  • 在测试条件中选择刚创建的测试数据,Apipost 会自动将数据填充到接口中。

2、循环控制器与测试数据的结合

添加循环控制器,选择完成所有测试数据的迭代模式。

设置循环间隔为 1 秒,确保每次请求之间有足够的时间。

在循环体内调用接口,使用`{{username}}`和`{{password}}`引用数据。

3、动态数据提取与再利用

如果接口返回的数据是数组格式(如用户列表),可以通过 JSONPath

{
"code":200,
"success":true,
"msg":"Data generated successfully",
"timestamp":"2023-09-20T14:30:00Z",
"data":[
{  
"id":"e3f5a7b1-9c2d-4f8a-b6c0-1d8e9f2a7b3c",
"username":"alice_m2023", 
"password":"Tp9@xQvL!",    
"created_at":"2023-09-20T14:00:00Z"
},
{    
"id":"a2b4c6d8-e0f1-4a3b-9c5d-7e9f1a2b3c4d",    
"username":"maxwell_7",    
"password":"8nG#r2sKd",   "created_at":"2023-09-20T14:05:00Z"
},
{    
"id":"5d7f9a1b-3c8e-4a2d-9b0f-6e1a3b5c7d9e",    
"username":"zara.frost",   "password":"qW6$bY9pA",   "created_at":"2023-09-20T14:10:00Z"
},
{ "id":"8e1a3b5c-7d9e-4f2a-b6c0-9d8e7f1a2b3c",    
"username":"t_robot92",    
"password":"Lm3^cF8zN",    
"created_at":"2023-09-20T14:15:00Z"
},
{    
"id":"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",    
"username":"kira_nexus",    
"password":"R@4vP7hXy",    
"created_at":"2023-09-20T14:20:00Z"
}
]
}

使用`$.data`提取数组。

然后在后续接口中通过使用`{{username}}`和` {{password}}`引用数据。

四、性能测试

Apipost的性能测试功能能帮我们快速定位。

(一)、固定模式压测

  • 设置并发数为100,模拟100个用户同时登录。
  • 查看压测报告中的平均响应时间失败率,判断接口是否能扛住高并发。

(二)、爬坡模式压测

  • 从10个并发开始,逐步增加到100个并发,观察接口性能的变化趋势。
  • 如果响应时间突然飙升,说明接口在某个并发点出现了性能问题。

五.CI/CD:从安装到集成

(一)、Apipost CLI工具

1、安装 CLI工具

  • 打开终端,运行以下命令安装 Apipost CLI:
npm install -g apipost-cli-pro
  • 如果你之前安装过旧版本的 Apipost-cli,请先卸载:
npm uninstall -g apipost-cli

2、生成CICD命令

  • 进入测试用例页面。
  • 点击持续集成,新建--Apipost Cli,系统会自动生成一个唯一的运行链接和 Token。
  • 复制生成的命令,例如:
apipost run 
"https://open.apipost.net/open/ci/automated_testing?ci_id=xxx&token=xxx" 
-r html

(二)、集成到CI/CD 流程

1、Jenkins集成

在 Jenkins 项目配置中,添加一个新的执行 shell步骤。

粘贴刚才生成的 CI/CD 命令,确保在代码提交后自动触发测试。

示例配置:

pipeline {    
agent any    
tools {nodejs "node16.14"} //替换替换服务器支持的node版本。node版本>16    
stages {      
stage('Install Apipost CLI') {        
steps {          
sh 'npm install -g apipost-cli' }     }      
stage('Running Test Scenario') {        
steps {          
sh 'apipost run "https://open.apipost.net/open/ci/automated_testing?ci_id=xxx&token=xxx" -r html'}  }  }  
} 

2、GitHub Actions集成

在项目根目录下创建`.github/workflows/test.yml`文件。

添加以下内容:

name: Automated API Tests
on: [push, pull_request]
jobs:build:  runs-on: ubuntu-lateststeps: - uses: actions/checkout@v3- name: Setup Node.js environment uses: actions/setup-node@v2 with:      node-version: '14'- name: Install Apipost CLI run: npm install -g apipost-cli- name: Running Test Scenario run: apipost run "https://open.apipost.net/open/ci/automated_testing?ci_id=xxx&token=xxx" -r html 

六.实战:用户充值系统查询的API自动化测试

场景描述

假设我们有一个用户管理系统,包含以下四个接口:

1. 用户注册接口:允许新用户注册。
2. 用户登录接口:验证用户凭据并返回认证token。
3. 用户充值接口:允许用户为账户充值。
4. 查询账户信息接口:查询用户的账户余额和充值历史。

我们将使用Apipost对这些接口进行自动化测试,确保系统的稳定性和可靠性。

自动化测试流程设计

(一)、创建测试用例

打开Apipost,点击新建测试用例,给测试任务起个名字,比如用户完整流程测试

(二)、添加接口并编排顺序

按照以下顺序将接口拖拽到测试用例中:
1. 用户注册接口;
2. 用户登录接口;
3. 用户充值接口;
4. 查询账户信息接口。

(三)、设置请求参数和动态数据提取

1、用户注册接口:

  • 请求参数:
{  
"username": "test_user", "email": "test_user_@example.com",  
"password": "Test@123"
}

  • 断言:
  • 响应状态码为200。
  • 响应体中包含"status": "success"
  • 提取userId并存储为全局变量.

2、用户登录接口

  • 请求参数:
{  
"username": "test_user",  
"password": "Test@123"
}
  • 断言:
  • 响应状态码为200。
  • 响应体中包含"token"字段。
  • 提取token并存储为全局变量。

3、用户充值接口:

  • 请求头:
Authorization: Bearer {{token}}

  • 请求参数:
{ 
"userId": "{{userId}}", 
"amount": 100.00,"currency": "CNY"
}

  • 断言:
  • 响应状态码为200。
  • 响应体中包含"transactionId"字段。

4、查询账户信息接口:

  • 请求头:
Authorization: Bearer {{token}}
  • 查询参数
userId={{userId}}
  • 断言:
  • 响应状态码为200。
  • 充值金额是否为100。

4、设置测试条件

  • 测试环境:选择你的测试环境(如开发环境)。
  • 执行轮次:设置为1次(完整流程测试)。
  • 间隔时长:设置为2秒(确保接口响应稳定)。

5、生成测试报告

点击保存并执行,Apipost会自动生成一份详细的测试报告,包括接口响应时间、断言结果、失败原因等。

动态数据提取与再利用

在测试过程中,我们使用了动态数据提取功能,将注册接口返回的`userId`和登录接口返回的`token`存储为全局变量,并在后续接口中引用这些变量。这种方式不仅减少了重复输入数据的工作量,还确保了测试数据的一致性和准确性。

性能测试

为了验证接口在高并发场景下的性能,我们可以在登录接口上进行性能测试:
1. 固定模式压测:设置并发数为100,模拟100个用户同时登录。
2. 爬坡模式压测:从10个并发开始,逐步增加到100个并发,观察接口性能的变化趋势。

CI/CD集成

将测试用例集成到CI/CD流程中,确保每次代码提交后自动触发测试:
1. Jenkins集成:在Jenkins项目配置中,添加执行shell步骤,粘贴Apipost生成的CI/CD命令。
2. GitHub Actions集成:在项目根目录下创建.github/workflows/test.yml文件,添加安装Apipost CLI和运行测试命令的步骤。

相关文章:

  • 【实战中提升自己】内网安全部署之端口隔离与MAC地址认证
  • Dify部署内网时遇到的代理问题及解决办法
  • 【C语言】char unsigned char signed char
  • python 字符串解析 struct.unpack_from(fmt, buffer, offset=0) ‘<? B I‘
  • 从零开始详细讲解 Boost.Asio
  • ZYNQ笔记(十):XADC (PS XDAC 接口)
  • 火箭姿态控制系统
  • HTML 如何改变字体颜色?深入解析与实践指南
  • 【题解-Acwing】790. 数的三次方根
  • HeavyKeeper 算法
  • Python类和对象一(十)
  • STM32 HAL 水位传感器驱动程序
  • MySQL -数据类型
  • leetcode0078. 子集-medium
  • (undone) 吴恩达版提示词工程 2. 指南
  • Sentinel源码—6.熔断降级和数据统计的实现一
  • 【kubernetes】pod资源配额
  • 5G网络切片:精准分配资源,提升网络效率的关键技术
  • 基于 LWE 的格密码python实战
  • (done) 吴恩达版提示词工程 1. 引言 (Base LLM 和 Instruction Tuned LLM)
  • 中远海运:坚决反对美方对中国海事物流及造船业301调查的歧视性决定
  • 亚太峰会上哪个词最火?我们问了问AI
  • 外交部介绍中印尼“2+2”机制首次部长级会议将讨论的议题
  • 守护体面的保洁员,何时能获得体面?|离题
  • 9部门发文促进家政服务消费扩容升级
  • 鲁比奥称美国已向各方提出了“持久和平的框架”