目录
[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 工具
三、测试短信接口的注意事项
-
避免真实频繁发送:
-
很多平台限制短信条数
-
推荐使用测试模板 + 白名单号码
-
-
查看返回码并记录日志
-
判断是否真正成功,而不是只看 200 响应码
-
建议写日志记录
手机号 + 返回状态 + 请求时间
-
-
避免误发真实客户
- 测试环境和生产环境分开(接口地址或配置分开)
-
模板必须事先审核通过
- 发送内容不能随意变动,有的平台采用"模板 + 变量"机制
四、额外建议:使用模拟环境
如果短信服务商支持,可以开启 "沙箱环境" 或 "测试模式":
-
不会真的发短信
-
可以验证接口是否调用成功
-
对新手来说非常友好
我们以国内短信接口的测试 为例,这里用一个常见服务商------阿里云短信服务(Aliyun SMS)作为示范,你也可以套用这个流程到其他服务商(如腾讯云、容联、云片等),它们接口设计类似。
✅ 一、准备工作(以阿里云为例)
-
开通短信服务:阿里云短信控制台
-
获取必要参数:
-
AccessKeyId
-
AccessKeySecret
-
签名名称(如:
【阿里云】
) -
模板CODE(如:
SMS_123456789
)
-
-
设置测试手机号(建议绑定白名单手机号测试,避免计费)
✅ 二、短信发送接口(示例)
请求地址(以阿里云为例):
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 字段
-
模拟高频多发,观察是否触发限流