作者在新项目中搭建了python+requests+unittest+HTMLTestRunner接口自动化测试框架,通过修改配置文件实现环境隔离,一份脚本即可在不同的环境执行接口测试用例。
但是没有实现任何形式的消息通知,也没有集成到jenkins,原因很简单,因为还没做到很大,而且用户活跃不够,问题也相对较少,只在上线前后执行一次uat和prod环境。
那这几天想完善一下消息通知功能,让它具备发送消息及报告的功能。
流程
代码
流程及代码功能已在注释中说明
'''
Created on 2021年5月12日
@author: qguan
'''
import time
import unittest
from Librarys.HTMLTestRunnerNew import HTMLTestRunnerNew
from common.dirs_config import testcases_path, report_dir
from unitconfig import env, conf
from utils.handle_notice import send_weixin, upload_weixin
# 当前时间
curTime = time.strftime('%Y-%m-%d_%H-%M')
# 创建测试套件并加载测试用例
suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.discover(start_dir=testcases_path, pattern='flaget_*.py'))
# 拼接测试报告路径及文件名
report_name = report_dir + 'FlagetAPI_{}_report_{}.html'.format(env, curTime)
# 报告生成器
with open(report_name, 'wb') as pf:
runner = HTMLTestRunnerNew(stream=pf, title='Flaget接口自动化测试报告', tester='joe-tester', description='{}环境,业务场景接口测试'.format(env))
runner.run(suite)
# 组织报告详情
msg = '
执行环境:{}
测试人员:{}
开始时间:{}
持续时间:{}
测试结果:{},通过率为:{}
报告详情需要在PC打开,移动端打开为HTML源码!'.format(env, runner.tester, runner.startTime, runner.duration, runner.status, runner.passrate)
# 获取企业微信key
prod_key = conf.get_value('notice', 'prod_key')
uat_key = conf.get_value('notice', 'uat_key')
if env == 'prod': # 只在生产环境发送报告给项目涉众
media_id = upload_weixin(key=prod_key, filename=report_name)
send_weixin(msg, key=prod_key)
send_weixin(media_id, key=prod_key, v_type='file', k_type='media_id')
elif env == 'uat': # uat环境报告发送给小组
send_weixin(msg, key=uat_key)
复制代码
分析
python如何请求发送消息到企业微信;这个流程已经在其他文章中说明,这里不再赘述,或者参考企业微信的配置说明。
python实现
def send_weixin(msg,key=None, **kwargs):
'''
发送企业微信通知
'''
headers = {'Content-Type':'application/json'}
# 地址
url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={}'
if not key:
print('key不能为空')
raise
url = url.format(key)
if not kwargs: # 默认发送文本
v_type = 'text'
k_type = 'content'
else: # 如果有传入则按需
v_type=kwargs.get('v_type')
k_type=kwargs.get('k_type')
# 请求主体
data = {
'msgtype': v_type,
v_type: {
k_type: msg
}
}
# 发送请求
requests.post(url, json=data, headers=headers)
复制代码
问题:怎么上传并发送文件呢?
仔细阅读企业微信机器人配置说明,有如何上传文件及发送;发送消息的主题根据不同的参数来选择是发送文字还是文件;msgtype:支持text、file、image、markdown、news等多种模版,再往下看配置说明中有上传文件的说明:
python实现
def upload_weixin(key=None, filename=None):
'''
上传附件到企业微信,获得media_id.然后发送消息通知,可查看文件
'''
if not key:
print('key不能为空')
raise
# 请求地址
url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={}&type=file'.format(key)
# 请求头
headers = {'Content-Type':'multipart/form-data'}
# 请求数据,是rb读取文件流
data = {'file':open(filename, 'rb')}
# 发送请求
res = requests.post(url, files=data, headers=headers).json()
# 获取结果返回的media_id是给发送消息的接口参数使用的。
return res.get('media_id')
复制代码
总结
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点