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

效果

发送内容如下

14.UI自动化测试框架搭建-企业微信发送报告_第1张图片

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

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

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

string(name: 'robot', defaultValue: '', description: '企业微信群机器人地址,以逗号分隔')

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

ROBOT = get_env("robot")  # 企业微信群机器人

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

  1. 拼接Allure报告地址

  2. 拼接要发送的企业微信地址

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钩子函数来拿到测试的结果

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中的测试内容了,这次就使用一下

jsonoperator = JsonOperator()
allure_results = jsonoperator.get_allure_result()
  1. config中不包含workerinput表示测试结束了

  2. 当测试结果失败、异常用例大于0的时候才发送通知,减少无效的通知

  3. 使用change_run_detail方法拿到allure_results中的具体用例(名称+参数)

  4. 拼接测试结果传入到send_msg函数的other参数

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

你可能感兴趣的:(python,redis,filter,post,unittest)