分享一个基于 ATX-Server 的 UI 自动化测试框架,可以实现多设备的并行测试,并生成统一的测试报告 GitHub 地址:https://github.com/pengchenglin/ATX-Test

前置条件

Android 设备需要通过 uiautomator2 init 初始化完成,确认可以正常连接 ,或者 init 接入 atx-server
相关的基础链接如下
小白入门篇:python uiautomator2 的代码示例
浅谈自动化测试工具 python-uiautomator2
atx 安卓集群管理 安装运行及自动化的实践
ATX-uiautomator2 实现 webview 的操作

先行声明:

1.下面展示的内容多源于 TesterHome 各位前辈的经验总结,我只是按照个人想法进行了简单拼接(基于 ATX-uiautomator2 的 Android 自动化测试)
2.主要参考了@hualin (王华林) 老师的https://testerhome.com/topics/7550uiautomator2 实现,并在此基础上结合
3.所用语言为 Python,测试报告模板借用了https://github.com/Gelomen/HTMLTestReportCN-ScreenShot,并进行了简单的修改以方便截图
4.使用了 macaca 的 bootstrap app 作为 demo 演示

工程介绍

工程目录如下

主体结构和@hualin (王华林) 老师的https://testerhome.com/topics/7550 的一致,主要修改了 Pubilc 下一些东西,并增加了一些东西

Public:

下面介绍一下流程:
1、通过 run_cases .py 或者 run_all_cases.py 开始执行测试

if __name__ == '__main__':
    # back up old report dir 备份旧的测试报告文件夹到TestReport_backup下
    backup_report()

    cs = CaseStrategy()
    cases = cs.collect_cases(suite=False)
    Drivers().run(cases)

    # Generate zip_report file  压缩测试报告文件
    # zip_report()

​ 1.首先会将 Testreport 目录剪切到 TestReport_backup 目录下,备份旧的测试报告
​ 2.通过 CaseStrategy 获取到需要执的测试用例
​ 3.Drivers().run(cases)开始执行测试
​ 4.执行完成之后打包压缩,没啥用 注释掉了

2、run(cases)执行测试

def run(self, cases):
    # 根据method 获取android设备
    method = ReadConfig().get_method().strip()
    if method == 'SERVER':
        # get ATX-Server Online devices
        devices = ATX_Server(ReadConfig().get_server_url()).online_devices()
        print('\nThere has %s online devices in ATX-Server' % len(devices))
    elif method == 'IP':
        # get  devices from config devices list
        devices = get_devices()
        print('\nThere has %s  devices alive in config IP list' % len(devices))
    elif method == 'USB':
        # get  devices connected PC with USB
        devices = connect_devices()
        print('\nThere has %s  USB devices alive ' % len(devices))

    else:
        raise Exception('Config.ini method illegal:method =%s' % method)

    if not devices:
        print('There is no device found')
        return

    # generate test data data.json 准备测试数据
    generate_test_data(devices)

    print('Starting Run test >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
    runs = []
    for i in range(len(devices)):
        runs.append(RunCases(devices[i]))

    # run on every device 开始执行测试
    pool = Pool(processes=len(runs))
    for run in runs:
        pool.apply_async(self._run_cases,
                         args=(run, cases,))
    print('Waiting for all runs done........ ')
    pool.close()
    pool.join()
    print('All runs done........ ')
    ChromeDriver.kill()

    #  Generate statistics report  生成统计测试报告 将所有设备的报告在一个HTML中展示
    create_statistics_report(runs)

​ 1.首先根据 config.ini 中method的值来判断从 atx-serve 获取 online 的设备 还是从 config.ini 中的 ip 来获取在线的设备,或者直接获取连接电脑的安卓设备
​ 2.在获取到设备之后,根据设备生产 data.json 测试数据
​ 3.并行多设备执行测试
​ 4.测试完之后,杀掉执行过程中打开的所有的 chromedriver 进程
​ 5.最后在 TestReport 下生成统计测试报告(自动化测试报告.html)

结果展示

生成的测试报告路径结构如下

每个设备的测试结果及报告或存放在单独的文件夹下
在 Testreport 目录下会有一个统计测试报告(自动化测试报告.html) 会将所有设备的报告统一在一个页面展示
报告展示:


↙↙↙阅读原文可查看相关链接,并与作者交流