前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ZLJAPP_UI自动化延伸

ZLJAPP_UI自动化延伸

作者头像
雷子
发布2021-04-29 17:28:29
8170
发布2021-04-29 17:28:29
举报

作者|邹德龙

想法诞生

基于找靓机APP接入内部UITest框架,已累计了70+场景case和140+埋点验证case ,且已经投入业务上线的回归使用。同时现有的AB测试需求,虽经过前期的AB实验流程建设,人工验证流程在质量和效率上已有大大提升,但是投入的人力成本还是比较高,重复性极强,且验证的数据都是固定的,假设1个需求有ABC共3个分组,验证Android+IOS 两端,人力预计投入约8-10小时。那么有没有办法通过UI 自动化去提效,解决这种困境呢?

说干就干

1、协同大数据/组内同学确认AB测试验收的标准流程,梳理关键点和是否可自动化完成情况大致如下:

  • 手机设备代理
  • 本地环境host代理
  • 配置接口刷新实验缓存数据(可实现)
  • 首页_AB分组接口核对上报实验的接口(可实现)
  • AB场景对应的接口上报AB(可实现)
  • 转化路径的执行(可实现)
  • AB切换后重复验证转化路径(可实现)
  • 执行订单/支付脚本(可实现)

当前客户端处理AB流程:

2、设计思路诞生,和大数据同学确认数据以及方案可行。基于现有UITest框架,(详见:转转 App UI自动化进化史) 在case执行基础上,补充python + request + 配置文件形式方便业务配置,同时在原有AB测试验收流程上添加:

  • 接入企业微信机器人实时播报自动化整个验收过程
  • 添加人工复审的SQL输出

3、流程解析

所有的实现都基于现有的UITest框架上面实现,同时流程中还存在暂无法避免的人工操作。

(1)数据准备,目前这些步骤还需手动配置,但只有测试环境创建实验和AB测试相关服务部署是重复性步骤。

(2)填写配置文件,主要是AB测试需求中所涉及的分组、实验ID、执行设备ID和企业机器人信息相关配置

代码语言:javascript
复制
# True:执行该分组  False:不执行该组
A = True   
B = True
C = False
D = False
ab_id = 10xxx   # AB实验ID
deviseId = 'xxxx-123-321--xxxxxxxxx'   # 设备ID
# 调试机器人
webHookTest = 'xxx'
webHookTest_key = 'xxx'

(3)脚本执行,直接本地执行python文件即可。

代码语言:javascript
复制
# -*-coding:utf-8-*-
import os
import UiTest
from ZljUItest.ab_case import ab_regression_test
 
 
def test():
    ab_regression_test.ab_test_b2c()
     
 
if __name__ == '__main__':
    receivers = "xxxx"  # 通知邮箱
    root_path = os.path.abspath(os.path.dirname(__file__) + os.path.sep + "..") + os.path.sep
    resource_mapping_path = ''
    config_path = root_path + "config.yaml"
    UiTest.run_ui(email=receivers, suit_file=__file__, project=root_path, os="android",
                  config_yaml=config_path)

AB实验自动化执行,企业微信自动发送通知:

(4)验收执行流程

  • 断言config是否存在实验ID,保证AB实验配置是生效的。
代码语言:javascript
复制
def ab_config(self, ab):
    """
    开启实验后,需要刷新实验的缓存数据(每次修改实验后,都要刷新才能生效)
    :param ab: 实验ID
    :return:
    """
    url = "xxx" # API地址
    response = requests.get(url)
    code = response.status_code
    text = response.text
    ab_text = re.findall(r'"test_id":{}.*?0,'.format(str(ab)), text)  # 正则取出上报的data数据
    Logger().setlog(str(code))
    Logger().setlog(str(ab_text))
    # 转str
    ab_text = str(ab_text)
    if str(ab) in ab_text:
        ab_text = ab_text.replace("['", "{").replace(",']", "}")     # 替换相关字段
        ab_text = json.loads(ab_text)   # 转dist
        Logger().setlog("打印配置文件获取的AB信息")
        Logger().setlog(str(ab_text))   # 打印配置文件获取的AB信息
        # ab_id = ab_text["test_id"]
        Logger().setlog("ab_config配置接口成功获取到实验ID:{}".format(str(ab)))
        # 企业机器人通知
        ABPage().webhook_push(host=zljconfig.webHookTest, text="ab_config配置接口成功获取到实验ID:{},开始执行检查APP是否上报AB...".format(str(ab)))
        return True
    else:
        Logger().setlog("ab_config配置接口获取实验ID失败:{}".format(str(ab)))
        # 企业机器人通知
        ABPage().webhook_push(host=zljconfig.webHookTest, text="实验{}未获取到".format(str(ab)))
        return False
  • 切换AB分组,自动覆盖全部AB的分组验证,首页_AB分组接口获取实验的实验分组/桶号/page_id/实验id,通过UITest重启APP(冷启动),APP启动时,埋点数据上报数据正确性检测以及上报路径时序检测。
代码语言:javascript
复制
if zljconfig.A:
    ABPage().webhook_push(host=zljconfig.webHookTest, text="该实验存在A桶,开始执行A桶验证")
    # 设备切成A桶
    ABPage().switch_group_id(ab_id=ab_id, device_id=zljconfig.deviseId, hit_num='A')
    # 重新启动APP加载配置
    device.stop_app(package="xxxxx")
    # 创建AB上报日志路径
    log_path = ABPage().ab_get(ab_id=ab_id, clear=False)
    # 启动APP
    device.start_app(package="xxxxx")
    time.sleep(10) 
    # 断言APP首页是否上报AB
    assert ABPage().ab_assert(log_path, ab_id=ab_id, hit_num='A')
    # 执行转化路径
    # TransitionPath().b2c_one_path()
  • 验收脚本执行完成后,结果和复核查询SQL通过企业微信机器人推送:

后续改进

初版本虽然已经实现可以使用,但是后续还有些值得优化的地方:

  1. 断言的地方,添加执行失败@伙伴通知功能
  2. 以配置文件形式去拼装执行转化路径和埋点上报页面,覆盖更多业务线。
  3. 接入jenkins,可视化修改配置文件和页面执行,让业务同学都能够快捷投入使用起来。

成果

目前通过数据分析,初版已实现效率约50%+提升,但是还只局限于APP首页上报的AB实验验证,取得初效如下表格分析,后续通过业务使用,会进行场景的添加以及脚本优化,同时支持IOS客户端。

写在最后

“工欲善其事必先利其器”,UI自动化是移动应用开发中重要的一环,实现过后我们不妨结合公司的业务去思考更多的落地场景,同时应用到测试工作中去提升效率以及赋能于其他伙伴,不再局限于核心流程的业务回归。

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

本文分享自 雷子说测试开发 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 成果
  • 写在最后
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档