如何测试短信接口

目录

一、测试短信接口的基本流程

[1. 了解短信接口文档](#1. 了解短信接口文档)

[2. 使用工具测试短信接口](#2. 使用工具测试短信接口)

[示例一:用 curl 测试 POST 请求](#示例一:用 curl 测试 POST 请求)

[示例二:用 Postman 设置 POST 请求](#示例二:用 Postman 设置 POST 请求)

[3. 编写测试脚本(Python 示例)](#3. 编写测试脚本(Python 示例))

二、测试类型和场景

[✅ 正常发送测试](#✅ 正常发送测试)

[❌ 异常场景测试](#❌ 异常场景测试)

[✅ 性能测试(可选)](#✅ 性能测试(可选))

三、测试短信接口的注意事项

四、额外建议:使用模拟环境

[✅ 一、准备工作(以阿里云为例)](#✅ 一、准备工作(以阿里云为例))

[✅ 二、短信发送接口(示例)](#✅ 二、短信发送接口(示例))

请求地址(以阿里云为例):

请求方式:

请求参数(简化版):

[✅ 三、使用 Python 测试代码(阿里云短信)](#✅ 三、使用 Python 测试代码(阿里云短信))

[✅ 四、常见返回结果说明(JSON)](#✅ 四、常见返回结果说明(JSON))

[✅ 五、模拟异常测试场景](#✅ 五、模拟异常测试场景)


测试短信接口(SMS API)是开发中一个非常重要的环节,确保系统能够可靠、稳定地发送短信。下面我会系统地讲解测试流程、注意事项和举一些具体例子


一、测试短信接口的基本流程

1. 了解短信接口文档

一般短信服务商会提供完整的接口文档,包含:

  • 接口地址(API Endpoint)

  • 请求方式(GET / POST)

  • 请求参数(如手机号、短信内容、签名等)

  • 返回格式(通常是 JSON)

  • 返回码说明

示例文档片段:

bash 复制代码
POST https://api.smsprovider.com/sendSms

请求参数:
{
  "phone": "13800000000",
  "content": "【公司名】您的验证码是1234,5分钟内有效。",
  "template_id": "123456",
  "sign": "公司名",
  "api_key": "your_api_key"
}

返回:
{
  "code": 0,
  "msg": "发送成功",
  "request_id": "abc123456789"
}

2. 使用工具测试短信接口

常用工具:

  • Postman(手动测试)

  • curl(命令行测试)

  • Python / Java 等语言写脚本自动测试

示例一:用 curl 测试 POST 请求
bash 复制代码
curl -X POST https://api.smsprovider.com/sendSms \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "13800000000",
    "content": "【测试公司】您的验证码是123456。",
    "template_id": "123456",
    "sign": "测试公司",
    "api_key": "your_api_key"
  }'
示例二:用 Postman 设置 POST 请求
  • 设置 URL

  • Headers 添加 Content-Type: application/json

  • Body 选择 raw 并填入 JSON 请求体

  • 点击发送后查看返回结果是否成功


3. 编写测试脚本(Python 示例)

python 复制代码
import requests

url = "https://api.smsprovider.com/sendSms"
payload = {
    "phone": "13800000000",
    "content": "【测试公司】验证码是1234。",
    "template_id": "123456",
    "sign": "测试公司",
    "api_key": "your_api_key"
}
headers = {'Content-Type': 'application/json'}

response = requests.post(url, json=payload, headers=headers)
print(response.json())

二、测试类型和场景

✅ 正常发送测试

  • 发送到自己的手机号,确保能接收到

  • 使用合法内容和正确模板

❌ 异常场景测试

  • 无效手机号:空号、非手机号格式(如"abc")

  • 内容过长:超出运营商限制字数

  • 非法内容:例如含敏感词

  • 签名不匹配:签名和模板不一致

  • 重复请求:短时间多次请求同一号码

✅ 性能测试(可选)

  • 批量并发发送(100条/秒,测试限流机制)

  • 使用 Python concurrent.futures 或 JMeter 工具


三、测试短信接口的注意事项

  1. 避免真实频繁发送:

    • 很多平台限制短信条数

    • 推荐使用测试模板 + 白名单号码

  2. 查看返回码并记录日志

    • 判断是否真正成功,而不是只看 200 响应码

    • 建议写日志记录 手机号 + 返回状态 + 请求时间

  3. 避免误发真实客户

    • 测试环境和生产环境分开(接口地址或配置分开)
  4. 模板必须事先审核通过

    • 发送内容不能随意变动,有的平台采用"模板 + 变量"机制

四、额外建议:使用模拟环境

如果短信服务商支持,可以开启 "沙箱环境""测试模式"

  • 不会真的发短信

  • 可以验证接口是否调用成功

  • 对新手来说非常友好

我们以国内短信接口的测试 为例,这里用一个常见服务商------阿里云短信服务(Aliyun SMS)作为示范,你也可以套用这个流程到其他服务商(如腾讯云、容联、云片等),它们接口设计类似。


✅ 一、准备工作(以阿里云为例)

  1. 开通短信服务:阿里云短信控制台

  2. 获取必要参数

    • AccessKeyId

    • AccessKeySecret

    • 签名名称(如:【阿里云】

    • 模板CODE(如:SMS_123456789

  3. 设置测试手机号(建议绑定白名单手机号测试,避免计费)


✅ 二、短信发送接口(示例)

请求地址(以阿里云为例):

bash 复制代码
https://dysmsapi.aliyuncs.com/

请求方式:

GET 或 POST(推荐 POST)

请求参数(简化版):

  • PhoneNumbers:接收短信的手机号码

  • SignName:短信签名

  • TemplateCode:短信模板CODE

  • TemplateParam:模板变量(JSON 格式)

  • AccessKeyId 和签名机制:用于授权(需签名加密)


✅ 三、使用 Python 测试代码(阿里云短信)

阿里云使用 Signature 机制,签名计算略复杂,因此建议用官方 SDK。

你可以先安装阿里云的 Python SDK:

bash 复制代码
pip install aliyun-python-sdk-core-v3
pip install aliyun-python-sdk-dysmsapi

示例 Python 测试代码:

python 复制代码
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

# 初始化
client = AcsClient(
    "<你的AccessKeyId>", 
    "<你的AccessKeySecret>", 
    "cn-hangzhou"
)

# 构建请求
request = CommonRequest()
request.set_method('POST')
request.set_domain('dysmsapi.aliyuncs.com')
request.set_version('2017-05-25')
request.set_action_name('SendSms')

request.add_query_param('RegionId', "cn-hangzhou")
request.add_query_param('PhoneNumbers', "13800000000")  # 测试手机号
request.add_query_param('SignName', "测试签名")           # 提前申请
request.add_query_param('TemplateCode', "SMS_123456789") # 模板CODE
request.add_query_param('TemplateParam', '{"code":"1234"}') # 模板变量

# 发送请求并打印响应
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))

✅ 四、常见返回结果说明(JSON)

bash 复制代码
{
  "Message": "OK",
  "RequestId": "ABCDEF1234567890",
  "BizId": "1234567890",
  "Code": "OK"
}
Code 值 含义
OK 发送成功
isv.BUSINESS_LIMIT_CONTROL 触发流控(频繁)
isv.INVALID_PARAMETERS 参数非法
isv.SMS_SIGNATURE_ILLEGAL 签名未审核通过
isv.TEMPLATE_ILLEGAL

✅ 五、模拟异常测试场景

你可以尝试:

  • 错误手机号(如空号或非数字)

  • 错误模板CODE

  • 缺失 TemplateParam 字段

  • 模拟高频多发,观察是否触发限流

相关推荐
西瓜本瓜@几秒前
在Android中如何使用Protobuf上传协议
android·java·开发语言·git·学习·android-studio
言之。1 分钟前
别学了,打会王者吧
java·python·mysql·容器·spark·php·html5
机智的人猿泰山1 分钟前
java kafka
java·开发语言·kafka
可爱的秋秋啊4 分钟前
vue3,element ui框架中为el-table表格实现自动滚动,并实现表头汇总数据
前端·vue.js·笔记·elementui
一夜枫林5 分钟前
uniapp自定义拖拽排列
前端·javascript·uni-app
SugarPPig28 分钟前
PowerShell 查询及刷新环境变量
服务器
Algorithm157631 分钟前
谈谈接口和抽象类有什么区别?
java·开发语言
细心的莽夫1 小时前
SpringCloud 微服务复习笔记
java·spring boot·笔记·后端·spring·spring cloud·微服务
IT瘾君2 小时前
JavaWeb:Html&Css
前端·html
264玫瑰资源库2 小时前
问道数码兽 怀旧剧情回合手游源码搭建教程(反查重优化版)
java·开发语言·前端·游戏