给接口自动化测试框架增色,实现企业微信测试报告

本文介绍了如何在Python接口自动化测试框架中添加消息通知功能,使用unittest和HTMLTestRunner生成测试报告,并结合企业微信API实现报告的上传与发送。通过配置文件实现环境隔离,根据不同环境发送报告给相应人员。详细分析了代码流程,包括发送文本和文件到企业微信的实现。目前仅在uat和prod环境中执行测试并发送报告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

作者在新项目中搭建了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 = "\n \
        执行环境:{}\n \
        测试人员:{}\n \
        开始时间:{}\n \
        持续时间:{}\n \
        测试结果:{},通过率为:{} \n \
        \n \
        报告详情需要在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")
复制代码

总结

上面对流程代码实现都进行了分析,如何上传文件和发送消息;再回到开始的那一片代码,逻辑理解就很清楚了;暂时这不集成jenkins。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值