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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •       前言      什么是自动化测试      把人对软件的测试行为转化为由机器执行测试行为的一种实践。      例如GUI自动化测试,模拟人去操作软件界面,把人从简单重复的劳动中解放出来,如果不了解可以参考下这个例子:Selenium实现微博自动化运营:关注、点赞、评论      本质是用代码去测试另一段代码,属于一种软件开发工作,已经开发完成的用例还必须随着被测试对象的改变而更新,因此,还有额...
            1 1 1576
            分享
          • Fintech概念正受到不少互联网金融公司的热捧,主要是指代那些可用于撕裂传统金融服务方式的高新技术。越来越多的企业开辟了新的部门去研究各种各样能让自己产品增值的科技类产品。尤其是在很多互联网金融公司,业务分析师BA(Business Analyst),又称产品经理受到大家的追捧,虽然身处西二旗等ITer聚集地,但是他们做的工作与金融街上的白领们并无不同,他们是无所不懂的金融达人,顶着各个海外名校金融数学系的Master光环,手持CFA,CPA,FRM,AFP/CFP,CIIA,ACCA等等。既然是在IT公司做需求分析的工作,除了需要出具需求说明书,然后将需求翻译成程序员能够理解的说明文档,不...
            0 1 2360
            分享
          • 尽管现在已经不再做自动化测试了,但是对自动化测试还是保持一直保持关注的。就像是尽管跟女神相隔两地,无缘一睹真容,但还是悄悄关注她的微博,默默的在朋友圈中刷出关于她的点点滴滴。从业很多年了,做过很多项目,有成功有失败,但是自动化测试项目的失败率无疑是最高的。久而久之,便渐渐能够总结出一种自动化测试作死的节奏。节奏一:大神,帮帮忙啊,救命啊,老是搞不定啊这句话我经常看到,一般来说有时间的话,我会教你怎么去解决这个问题。不过几天后,类似的问题出现了,你还是解决不了。首先,大神很忙。有些大神愿意分享,他们贡献的资料很多,但是,你不查,你不看,你总是认为"不耻上问"最直接,但大神帮你...
            0 0 788
            分享
          •   据《纽约时报》报道,沙特阿拉伯正计划设立 400 亿美元(IT之家备注:当前约 2880 亿元人民币)的 AI 初创企业风投基金。  根据多位消息人士的说法,这一坐拥巨大石油财富的海湾国家正寻求支持一系列的 AI 科技初创企业,涵盖从芯片设计到数据中心领域。该国代表甚至表示沙特正考虑创办自己的 AI 公司。  具体而言,沙特方面与硅谷顶级风险投资公司安德森 霍洛维茨(Andreessen Horowitz)等方就潜在的合作关系进行了讨论,不过计划仍存有变化的可能。该基金有望于今年下半年正式推出。  如果 400 亿美元的规模成真,则这支风险投资基金将在规模上远超典型的美国对手,仅次于世界范...
            0 0 835
            分享
          • 想做一个小游戏玩玩,飞行的小鸟,简单好玩,尝试看看。用python做游戏的话,就得要用到pygame这个模块了。先简单介绍一下pygame吧。 pygame是一个利用SDL库(全名Simple DirectMedia Layer)写就的游戏库。安装好python3环境以后,可以用pip3 install pygame命令来安装pygame。pygame有很多的模块,我们这个游戏会用到以下模块: pygame:主模块,一些通用的控制 pygame.display:用来访问显示设备 pygame.draw:绘制形状,线和点 pygame.rec...
            3 0 2473
            分享
      • 51testing软件测试圈微信