前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >14.UI自动化测试框架搭建-企业微信发送报告

14.UI自动化测试框架搭建-企业微信发送报告

作者头像
zx钟
发布2022-03-29 16:42:27
6180
发布2022-03-29 16:42:27
举报
文章被收录于专栏:测试游记测试游记

效果

发送内容如下

包含Allure报告链接、控制台链接、运行结果、异常或者失败脚本

获取要发送的企业微信群机器人信息

之前在jenkinsfile中已经有了一个参数

代码语言:javascript
复制
string(name: 'robot', defaultValue: '', description: '企业微信群机器人地址,以逗号分隔')

所以在代码中很容易就可以获取到这个字符串了

代码语言:javascript
复制
ROBOT = get_env("robot")  # 企业微信群机器人

处理要发送企业微信消息的请求

  1. 拼接Allure报告地址
  2. 拼接要发送的企业微信地址
代码语言:javascript
复制
class ReportOperator:

    def __init__(self, hook: list):
        self.headers = {"Content-Type": "text/plain"}
        self.hook_url_list = [f"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={i}" for i in hook]
        self.allure_url = f"http://jenkins.com/job/{ProjectName}/{BUILD_NUMBER}/allure/"
        self.test_system = {
            "Darwin": "MAC",
            "Linux": "Linux",
            "Windows": "Windows",
        }

    def send_msg(self, other=''):
        data = f"""**【{ProjectName}】**
> 项目名称:{ProjectName}
> 构件编号:#{BUILD_NUMBER}
> 完成时间:{timeoperator.now1}
> 测试环境:{self.test_system.get(platform.system(), platform.system())}
> [报告链接]({self.allure_url})
> [控制台链接]({BUILD_URL})

{other}"""
        send_data = {
            "msgtype": "markdown",  # 消息类型:markdown
            "markdown": {
                "content": data
            }
        }
        for hook_url in self.hook_url_list:
            requests.post(url=hook_url, headers=self.headers, json=send_data)

send_msg基本已经完成了发送消息的主体,后面的失败和异常用例通过other参数传入

见:https://gitee.com/zx660644/uitest/blob/master/src/utils/reportoperator.py

修改pytest_terminal_summary钩子函数

在测试完成之后才需要发送报告,这时候可以使用pytestpytest_terminal_summary钩子函数来拿到测试的结果

代码语言:javascript
复制
def pytest_terminal_summary(terminalreporter, exitstatus, config):
    """
    统计测试结果
    :param terminalreporter:
    :param exitstatus:
    :param config:
    :return:
    """
    logger.info(f"总计:{terminalreporter._numcollected}")
    stats = terminalreporter.stats
    failed_num = len(stats.get('failed', []))
    error_num = len(stats.get('error', []))
    logger.info(f"通过:{len(stats.get('passed', []))}")
    logger.info(f"失败:{failed_num}")
    logger.info(f"异常:{error_num}")
    logger.info(f"跳过:{len(stats.get('skipped', []))}")
    duration = time.time() - terminalreporter._sessionstarttime
    logger.info(f"总耗时:{duration}秒")

通过terminalreporter.stats可以拿到本轮测试的测试结果

10.UI自动化测试框架搭建-获取Jenkins参数已经拿到过Allure中的测试内容了,这次就使用一下

代码语言:javascript
复制
jsonoperator = JsonOperator()
allure_results = jsonoperator.get_allure_result()
  1. config中不包含workerinput表示测试结束了
  2. 当测试结果失败、异常用例大于0的时候才发送通知,减少无效的通知
  3. 使用change_run_detail方法拿到allure_results中的具体用例(名称+参数)
  4. 拼接测试结果传入到send_msg函数的other参数
代码语言:javascript
复制
if not hasattr(config, "workerinput"):
    jsonoperator = JsonOperator()
    allure_results = jsonoperator.get_allure_result()
    if failed_num + error_num > 0:
        if ROBOT:
            try:
                r = ReportOperator(hook=ROBOT.split(','))
                result_str = '\n'.join([
                    f"通过:{len(stats.get('passed', []))}",
                    f"失败:{len(stats.get('failed', []))}",
                    f"异常:{len(stats.get('error', []))}",
                    f"跳过:{len(stats.get('skipped', []))}",
                    f"耗时:{duration:.2f}秒",
                ])
                try:
                    passed_list, failed_list, error_list, skipped_list = r.change_run_detail(allure_results)
                    if len(failed_list):
                        result_str += '\n\n失败用例:\n'
                        result_str += '\n'.join(failed_list)
                    if len(error_list):
                        result_str += '\n\n异常用例:\n'
                        result_str += '\n'.join(error_list)
                except Exception as e:
                    logger.error(e)
                r.send_msg(result_str)
            except Exception as e:
                logger.error(e)

见:https://gitee.com/zx660644/uitest/blob/master/src/cases/conftest.py

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 效果
  • 获取要发送的企业微信群机器人信息
  • 处理要发送企业微信消息的请求
  • 修改pytest_terminal_summary钩子函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档