写点什么

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

作者:伤心的辣条
  • 2022 年 6 月 13 日
  • 本文字数:3094 字

    阅读完需:约 10 分钟

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 自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。


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


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

发布于: 刚刚阅读数: 3
用户头像

一个乐于分享技术的测试人... 2022.03.18 加入

公众号:【伤心的辣条】主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。

评论

发布
暂无评论
UI自动化测试框架搭建-优化企业微信通知_Python_伤心的辣条_InfoQ写作社区