前言
小程序开发测试过程中,云测平台是较常用的测试工具之一,通过将小程序云测任务结果自动推送到企业微信,能够让团队及时了解测试情况并快速跟进。
实现功能说明:
- 自动获取最新一条 MiniTest 测试任务(任务 ID、跑测平台、成功率等)
- 获取任务测试报告分享链接(30天有效)
- 渲染为 Markdown 消息模板
- 部署腾讯云 SCF 企业微信机器人每日定时通知、@指定人员/all
- 支持失败自动重试、配置灵活
一、前期准备
云测平台:MiniTest-自动化测试平台 (可以直接看微信官方文档 很详细也很简单上手)
基本步骤:
- 下载微信开发者工具,导入小程序项目创建
- 安装云测服务扩展插件
- 自动化测试录制测试用例,同步用例到云测服务
- MiniTest 平台新建小程序测试任务/定时任务
腾讯云(SCF):是腾讯提供的无服务器云平台,对个人开发者永久免费,适合低频任务(如定时推送通知就足够用了)
部署详细步骤:
1. 注册账号登录:https://cloud.tencent.com/product/scf
2. 访问 SCF 控制台,选择左侧导航栏的 函数服务
3. 新建 -> 从头开始创建
4. 配置项可按如下图:
- 基础配置
- 函数代码:选择 本地上传zip包,注意执行方法要与代码里的执行入口对应好,这里是 main.main_handler
- 触发器:Cron 30 6 * * * 代表每天早上 6:30
配置好后点击完成即创建成功,可点击 部署 或 测试,如果配置正确,将自动向你的企业微信群发送最新一条测试任务消息。
二、整体项目
1. 项目结构目录
| 文件 | 说明 | |------|------| | `main.py` | 云函数入口,自动执行任务 | | `utils.py` | 工具函数,含数据请求和发送消息 | | `config.yaml` | 配置文件,含 token、模板、Webhook 等 | | `requirements.txt` | 第三方依赖 |
2. 代码内容
# config.yaml (模板内容可自行配置)
wecom: webhook: "你的企业微信群机器人Webhook链接" minitest: token: "你从MiniTest获取的token" group_en_id: "你的MiniTest项目英文ID" message: at_list: - "@all" # 可填写具体的成员企业微信ID,如 zhangsan template: | 早上好~ 【云测日报】 任务ID:{id} 跑测平台:{platform} 成功率:{rate} 测试报告链接:[点击查看报告]({url}) {at}
# main.py (主函数)
# 从 utils 模块导入四个工具函数,分别用于读取配置、获取任务信息、构建消息和发送消息
from utils import load_config, get_latest_task_info, build_markdown_message, send_wecom_message_with_retry
# SCF 云函数主入口函数,event 和 context 是平台传入的参数
def main_handler(event=None, context=None):
# 读取本地配置文件 config.yaml
config = load_config("config.yaml")
# 调用接口获取最新的测试任务信息
task_info = get_latest_task_info(config)
if not task_info:
print("未获取到最新任务信息")
return
# 构建消息内容
message = build_markdown_message(config, task_info)
# 发送消息到企业微信,失败时自动重试
send_wecom_message_with_retry(config, message)
# utils.py (工具函数)
云测 API 接口文档地址:第三方接口介绍 | 微信开放文档
import yaml
import time
import requests
def load_config(path):
with open(path, 'r', encoding='utf-8') as f:
return yaml.safe_load(f)
def get_latest_task_info(config):
# 任务列表接口
url = "https://minitest.weixin.qq.com/thirdapi/plan_list"
params = {
"token": config["minitest"]["token"],
"group_en_id": config["minitest"]["group_en_id"],
"page_index": 1,
"page_size": 1 # 只取最新一条
}
try:
# 发 GET 请求拿到任务列表
resp = requests.get(url, params=params)
data = resp.json()
# 如果接口返回成功且有任务
if data["rtn"] == 0 and data["data"]["plan_list"]:
# 取第一条任务
task = data["data"]["plan_list"][0]
# 再查这个任务的测试报告链接
report = requests.get("https://minitest.weixin.qq.com/thirdapi/share_url", params={
"token": config["minitest"]["token"],
"group_en_id": config["minitest"]["group_en_id"],
"plan_id": task["id"]
}).json()
# 如果拿到了报告链接,存到任务里
task["report_url"] = report["data"]["share_url"] if report["rtn"] == 0 else ""
return task
except Exception as e:
print("获取任务失败:", e)
return None
def build_markdown_message(config, task):
# 从配置中读取消息模板
msg_tpl = config["message"]["template"]
# 获取要 @ 的人列表
at_list = config["message"].get("at_list", [])
# 转成企业微信支持的 @ 格式
at_str = " ".join([f"<@{uid}>" for uid in at_list])
# 填充消息模板
message = msg_tpl.format(
id=task["id"],
platform=task.get("platforms", ""),
rate=f"{task.get('success_rate', 0)*100:.1f}%" if task.get("success_rate") else "",
url=task.get("report_url", ""),
at=at_str
)
return message
def send_wecom_message_with_retry(config, content, retries=3):
webhook = config["wecom"]["webhook"]
data = {
"msgtype": "markdown",
"markdown": {"content": content}
}
# 最多重试3次
for attempt in range(retries):
try:
# 发 POST 请求发送消息
resp = requests.post(webhook, json=data)
if resp.status_code == 200 and resp.json().get("errcode") == 0:
print("消息发送成功")
return
except Exception as e:
print(f"发送失败,重试中({attempt+1}/{retries}):", e)
# 每次失败等待 3 秒后重试
time.sleep(3)
print("消息发送失败")
# requirements.txt (依赖文件)
requests==2.28.2 urllib3==1.26.15 PyYAML==6.0
3. 本地代码打包:
终端运行
pip install -r requirements.txt -t . (安装依赖)
zip -r wecom_notifier.zip . (打包执行)
如果 zip 报错失败,也可直接尝试:
-
打开项目文件夹,进入项目目录内部
-
全选 所有文件(比如
main.py
,utils.py
,config.yaml
等) -
右键 → 发送到 → 压缩文件夹
-
命名为
wecom_notifier.zip
上传 wecom_notifier.zip
到函数平台使用即可
三、最后
效果示例:
当前已基本满足 “动态获取云测任务结果,定时推送企业微信自动通知”,后续可以拓展至钉钉/飞书等其他平台,也能够基于自身需求再增加丰富功能。