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

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

作者头像
zx钟
发布2022-06-15 13:36:22
2680
发布2022-06-15 13:36:22
举报
文章被收录于专栏:测试游记测试游记

目的

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

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

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

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

测试步骤提取

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

代码语言:javascript
复制
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 + )
        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 = 
                for j in data.get("steps"):
                    if all([s not in j.get("name") for s in skip_steps]):
                        n += 
                        self.get_steps(j, steps_data, f"{num}.{n}")

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

比如1、1.1、1.1.1、2

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

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

使用:

代码语言:javascript
复制
steps = []
self.get_steps(json_data.get("steps"), steps)
data = {
    ...
    "steps": ";".join(steps)
}

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

大概展示如下:

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

异常信息

先拿到异常信息

代码语言:javascript
复制
statusDetails = json_data.get('statusDetails', {})

然后对错误进行精简

代码语言:javascript
复制
statusDetails1 = {
    "message": "",
    "trace": ""
}
if statusDetails:
    try:
        message = statusDetails.get("message") and \
                  statusDetails.get("message").split("\n")[] \
                      .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

代码语言:javascript
复制
data = {
    ...
    "statusDetails": statusDetails1,
    ...
}

效果

代码语言:javascript
复制
【断言】 不存在「购药记录」入口
【断言】 预计极速图文剩余次数为【次】,实际剩余次数为【次】

修改发送企业微信部分

代码语言:javascript
复制
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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目的
  • 测试步骤提取
  • 异常信息
  • 修改发送企业微信部分
  • 错误截图
  • 最终效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档