• 0
  • 0
分享
  • 给接口自动化测试框架增色,实现企业微信测试报告——软件测试圈
  • 恬恬圈 2023-03-14 15:07:29 字数 3344 阅读 920 收藏 0

  摘要:作者在新项目中搭建了python+requests+unittest+HTMLTestRunner接口自动化测试框架,通过修改配置文件实现环境隔离,一份脚本即可在不同的环境执行接口测试用例。

  但是没有实现任何形式的消息通知,也没有集成到jenkins,原因很简单,因为还没做到很大,而且用户活跃不够,问题也相对较少,只在上线前后执行一次uat和prod环境。

  那这几天想完善一下消息通知功能,让它具备发送消息及报告的功能。

  流程

2-1.jpg

  代码

  流程及代码功能已在注释中说明。

  '''
  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等多种模版,再往下看配置说明中有上传文件的说明:

2-2.jpg

  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。

2-3.jpg



作者:忘记先生忘记了名字    

来源:http://www.51testing.com/html/09/n-5961109.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 基于Appium的Android自动化框架根据多种工具选择的性价比,客户端自动化采Shell+Appium+Selenium+Java+TestNG框架。 工具选择背景以业界主流工具进行对比,优劣如下图所示:由于Selenium工具开源且扩展性较好,所以选定为框架主体框架设计详细根据工具选择,设计自动化框架如下:自动化演示通过命令或定时任务,达到自动执行的效果测试案例2016年初,经优化重组,中软测试团队固定在8人,根据当初接手的实际情况,项目组选用高速迭代开发的规范化流程。这段时期,由于android机型多样,导致软件兼容性问题突出,这对开发测试效率和产品质量都是严峻的考验。开发团...
            12 11 1574
            分享
          • 选择题一、数量关系1、甲乙2人比赛爬楼梯,已知每层楼梯相同,速度不变,当甲到3层时,乙到2层,照这样计算,当甲到9层时,乙到( D )层A.5 B.6C.7 D.82、有一份选择题试卷共6个小题,其得分标准是:一道小题答对得8分,答错得0分,不答得2分,某位同学得了20分,则他( D )A.至多答对一道题 B.至少有三个小题没答 C.至少答对三个小题 D.答错两小题3、有只蜗牛要从一口井底爬出来。井深20尺。蜗牛每天白天向上爬3尺,晚上向下滑2尺。请问该蜗牛几天才能爬出井口? (A)A.20B.19C.18D.154、下列哪一个计算结...
            0 0 902
            分享
          • 因为公司项目业务需要,前不久测试老大需要我这边对我们的性能测试apk做一下弱网测试,虽然以前弱网测试都有所了解。但是还没有实操过,作为一个三年工作经验的软件测试工程师确实是有点菜了,这里我就讲一下我根据网上教程自己去在公司内部做的一个弱网测试首先先确定弱网测试做什么?这里我就先说一下我对性能测试apk关注的弱网测试点,整理了一份测试方案,测试方案就不方便放上来了,但是主要内容其实就是看各类请求耗时最多,从而让开发去对页面的访问进行访问速度的优化做弱网测试的话单纯网络上提供的工具就有,fiddler,charles,httpwatch,Wireshark,这几个弱网工具功能是各有千秋,挑选适合自...
            0 0 1167
            分享
          • Linux系统的稳定、安全、免费、开源等特点,使其在软件行业中应用越来越广,越来越普遍。测试岗位的招聘要求中,也都会涉及要熟悉Linux命令,Linux也逐渐成为测试人员必不获取的一项技能。工作中用到的Linux远程管理工具有Xshell/PuTTY/SecureCRT等,使用最多的还是Xshell。基于Xshell,整理测试工作中常用的Linux命令,由于命令区分大小写,使用过程中一定注意。一、系统相关shutdown -h now或init 0:关闭系统shutdow -r now或reboot:重启系统logout:注销Ctrl+C:退出命令行date:显示系统日期ifconfig:查看...
            2 5 4216
            分享
          • 软件测试:描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。1、软件测试的定义软件测试就是根据需求,采用不同的测试方法或测试工具,对软件进行测试,尽可能早、尽可能多地发现软件的缺陷,跟踪并确保缺陷得到正确的解决,提高软件的质量。2、软件测试的目的软件测试为了发现程序存在的代码或业务逻辑错误;软件测试为了检验产品是否符合用户需求;软件测试为了提高用户的体验。3、什么是软件缺陷功能:没有实现的功能、实...
            0 0 1156
            分享
      • 51testing软件测试圈微信