UI自动化测试框架搭建-优化企业微信通知

目的

由于执行完测试的报告存放在内网,当我们人不在公司的时候就比较难评估错误是否为误报

所以需要将测试步骤、异常信息、错误截图发送到专门的群里。

公司使用的是企业微信,所以发送到企业微信中

下面主要讲一下测试步骤和异常信息的提取

测试步骤提取

在13.UI自动化测试框架搭建-处理Allure报告数据 中我们拿到了一些信息,其实result.json中还包含了测试步骤,所以再对它进行一次提取

def get_steps(self, data, steps_data, num=None):
    if data:
        if not num:
            for index, i in enumerate(data):
                self.get_steps(i, steps_data, index + 1)
        else:
            if all([s not in data["name"] for s in skip_steps]):
                steps_data.append(f'{num}-{data["name"]}')
            if data.get("steps"):
                n = 0
                for j in data.get("steps"):
                    if all([s not in j.get("name") for s in skip_steps]):
                        n += 1
                        self.get_steps(j, steps_data, f"{num}.{n}")

由于步骤有一个嵌套的概念,所以传入一个num表示它的执行顺序

比如1、1.1、1.1.1、2

一些实际测试无意义的步骤,我们可以使用skip_steps来忽略,比如我项目中的一些弹框处理步骤

skip_steps = [
    "点击「同意」",
    "点击「允许」",
    "点击「确定」",
    "点击「稍后再说」",
    "点击「以后再说」",
    "点击「我知道了」",
    "点击「仅在使用中允许」",
    "点击「我知道啦」",
    "点击「始终允许」",
    "点击「仍然视频问诊」",
    "点击「知道了」",
    "点击「关闭」",
]

使用:

steps = []
self.get_steps(json_data.get("steps"), steps)
data = {
    ...
    "steps": ";".join(steps)
}

这样steps中就存放了全部的步骤了

大概展示如下:

1-点击问诊;1.1-点击「我_我的订单-问诊」;2-查看Tab;2.1-查看「我_我的订单-问诊-线上门诊Tab」是否存在;2.2-查看「我_我的订单-问诊-追问包Tab」是否存在;2.3-查看「我_我的订单-问诊-远程诊疗Tab」是否存在;3-点击「线上门诊」查看是否存在「查看全部问诊订单」;3.1-点击「我_我的订单-问诊-线上门诊Tab」;3.2-查看「我_我的订单-问诊-查看全部问诊订单」是否存在;4-获取首条线上门诊订单信息并核对;4.1-转换参数化元素;4.2-获取「我_我的订单-问诊-线上门诊第n条内容」的文字;5-点击「追问包」查看是否不存在「查看全部问诊订单」;5.1-点击「我_我的订单-问诊-追问包Tab」;5.2-查看「我_我的订单-问诊-查看全部问诊订单」是否存在;6-点击「远程诊疗」查看是否不存在「查看全部问诊订单」;6.1-点击「我_我的订单-问诊-远程诊疗Tab」;6.2-查看「我_我的订单-问诊-查看全部问诊订单」是否存在

异常信息

先拿到异常信息

statusDetails = json_data.get('statusDetails', {})

然后对错误进行精简

statusDetails1 = {
    "message": "",
    "trace": ""
}
if statusDetails:
    try:
        message = statusDetails.get("message") and \
                  statusDetails.get("message").split("\n")[0] \
                      .replace("selenium.common.exceptions.NoSuchElementException: Message:", "【异常】") \
                      .replace("AssertionError:", "【断言】")
        if message and "pytest_assume.plugin.FailedAssumption:" in message:
            message = "【多重断言】" + ";".join(
                [i for i in statusDetails.get("message").split("\n") if
                 i.startswith("AssertionError:")]).replace("AssertionError:", "")
        statusDetails1["message"] = message or ""
        statusDetails1["trace"] = statusDetails.get("trace", "")
    except Exception:
        pass

可以根据后续实际的报错来增加replace

data = {
    ...
    "statusDetails": statusDetails1,
    ...
}

效果

【断言】 不存在「购药记录」入口
【断言】 预计极速图文剩余次数为【1次】,实际剩余次数为【0次】

修改发送企业微信部分

def change_run_detail(self, run_detail):
    passed_list = []
    failed_list = []
    error_list = []
    skipped_list = []
    for i in run_detail:
        parameter = ""
        steps = i.get('steps')
        if steps:
            steps = f"【步骤】:{steps}"
        if i.get('parameters', ''):
            parameter = f"({i.get('parameters', '')})"
        if i.get('status') == 'passed':
            passed_list.append(f"{i.get('labels')}:{i.get('fullName')} {parameter}")
        elif i.get('status') == 'failed':
            failed_list.append(
                f"{i.get('labels')}:{i.get('fullName')}{parameter}<font color=#009900 >{steps}</font><font color=#ff0000 >{i['statusDetails']['message']}</font>")
        elif i.get('status') in ['error', 'broken']:
            error_list.append(
                f"{i.get('labels')}:{i.get('fullName')}{parameter}<font color=#009900 >{steps}</font><font color=#ff0000 >{i['statusDetails']['message']}</font>")
        elif i.get('status') == 'skipped':
            skipped_list.append(f"{i.get('labels')}:{i.get('fullName')} {parameter}")
    return passed_list, failed_list, error_list, skipped_list

错误截图

由于错误截图使用的公司内部的图片存储服务器,暂时不放了,思路类似

最终效果

https://gitee.com/zx660644/uitest/commit/2fdb2ce0c971d21ac95935940ac8e85a64615e54

图片

最后: 可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值