Robotium 自动遍历方案

本文介绍了使用Robotium进行自动化测试的方案,旨在解决混淆打包、版本兼容性等问题导致的崩溃。通过Python监控应用运行状态,当检测到崩溃时导出日志。尽管iOS的解决方案尚在探索中,但已实现对Android Activity的快速遍历和崩溃检测。预计5分钟内可完成一个Activity的遍历。分享自动化测试资源和交流群,助力测试人员提升效率。
摘要由CSDN通过智能技术生成

目录

前言:

背景

思路

验证点

实现了吗?

贴一张图

目前一些已实现的节点


前言:

Robotium 自动遍历方案是一种使用 Robotium 进行自动化测试的方案,可以用于测试应用程序的功能性和性能。

背景

项目经常遇到混淆打包、安卓版本兼容带来的崩溃问题,还有少部分代码引起的崩溃问题。

人工验证即费时也枯燥,故琢磨有没办法可以快速的验证这些问题,最重要的是快、最重要的是快、最重要的是快

思路
  • robotium 采用 Instrumentation 进行二次封装,Instrumentation 与被测应用属于同一进程,故 robotium 可以做一些想做的事情,比如启动一个 Activity
  • ios 怎么办?目前我也没思路,希望知道的可以告诉我(Appium 太慢了,先不考虑)
验证点

目前只验证崩溃问题,而且初步只是验证启动 Activity 的崩溃问题,后续增加自动遍历页面所有控件的方法,亦可考虑增加 UI 版本 diff 对比

实现了吗?

实现了,亲测有效,只是还没系统的整合在一起。

只要有 Activity 挂了,robotium 就会挂,检测到挂了就导出日志

怎么检测有没挂?

  • python 通过 adb 不定时监控目标应用是否在运行,如果未运行,那么导出日志,查找有没目标应用崩溃日志,有的话,那么肯定挂了
  • 挂了的话,再判断所有页面都遍历完成?没有的话再组装数据,进行下一轮测试

Activity 需要传参才能打开的怎么办?

有办法,源码传什么参数,robotium 就传什么参数过去

无参数的情况

Class <?> LoginClass;
LoginClass = Class.forName("Activity路径");
Intent intent = new Intent(getActivity(), LoginClass);
getActivity().startActivity(intent);

有参数的情况

Class <?> GroupMemberClass;
GroupMemberClass = Class.forName("Activity路径");
Intent intent = new Intent(getActivity(), GroupMemberClass);
intent.putExtra("GroupId", 77);
getActivity().startActivity(intent);

传参怎么管理?

配置文件以 Activity 为节点,通过字典的形式配置好,一劳永逸,后面只需少量改动,如页面变动等等

能有多快?

预测 5 分钟内可完成 Activity 的遍历

贴一张图

目前一些已实现的节点
  • 获取项目所有 Activities
  • 重签名
  • 本项目常用 adb 工具(后面补全,当做一个模块用)
#!/usr/bin/evn python
# -*- coding:utf-8 -*-

# FileName activities.py
# Author: HeyNiu
# Created Time: 2016/9/18
"""
获取项目所有Activity
"""


import re
import os
import utils.adbtools
import utils.consts


class Activities(object):

    def __init__(self, apk_path, manifest_path):
        """
        初始化
        :param apk_path: apk文件路径
        :param manifest_path: AndroidManifest.xml 路径
        """
        self.apk_path = apk_path
        self.manifest_path = manifest_path
        self.dump_stream = utils.adbtools.AdbTools().dump_apk(apk_path).readlines()
        self.manifest_stream = self.__read_file()
        self.__init_data()

    def __init_data(self):
        """
        初始化apk基本信息
        :return:
        """
        for i in self.dump_stream:
            if 'package' in i:
                reg = re.compile("name='(.+?)'")
                utils.consts.PACKAGE = re.findall(reg, i)[0]  # 包名
                reg = re.compile("versionCode='(.+?)'")
                utils.consts.VERSION_CODE = re.findall(reg, i)[0]  # build版本
                reg = re.compile("versionName='(.+?)'")
                utils.consts.VERSION_NAME = re.findall(reg, i)[0]  # 版本号
            if 'launchable-activity' in i:
                reg = re.compile("name='(.+?)'")
                utils.consts.LAUNCHER_ACTIVITY = re.findall(reg, i)[0]  # 启动Activity

    def __read_file(self):
        """
        读取AndroidManifest.xml
        :return:
        """
        if o
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值