コード例 #1
0
def auto_app_test(adb, app_info):
    print u'\n[INFO] 开始自动化测试...'

    # monkey script 测试,用于进入初始化界面
    monkey_script_test(adb, app_info)

    packagename = app_info['packagename']
    # monkey 测试,输出太多,重定向输出
    p = subprocess.Popen([
        adb, '-s',
        get_identifier(), 'shell', 'monkey', '-p', packagename,
        '--ignore-crashes', '--ignore-timeouts', '--monitor-native-crashes',
        '-v', '-v', '-v', '1000'
    ],
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE)
    # 设置超时检查
    start_time = time.time()
    while True:
        if p.poll() is not None:
            #useless_out, useless_err = p.communicate()
            break
        if time.time() - start_time > 60:
            p.terminate()
            break
        time.sleep(0.5)

    # TODO: 添加其他测试方法
    return
コード例 #2
0
def get_packages(toolsdir):
    """Get List of Pacakges"""
    adb = getADB(toolsdir)
    args = [adb, "-s", get_identifier(), "shell", "ls", "/data/data"]
    # prolly a better way to get packages is needed
    try:
        return subprocess.check_output(args)
    except:
        return "error"
コード例 #3
0
def avd_load_wait(adb):
    """Wait for AVD Load"""
    try:
        emulator = get_identifier()

        print "[INFO] Wait for emulator to load"
        args = [adb, "-s", emulator, "wait-for-device"]
        subprocess.call(args)

        print "[INFO] Wait for dev.boot_complete loop"
        while True:
            args = [
                adb, "-s", emulator, "shell", "getprop", "dev.bootcomplete"
            ]
            try:
                result = subprocess.check_output(args)
            except:
                result = None
            if result is not None and result.strip() == "1":
                break
            else:
                time.sleep(1)

        print "[INFO] Wait for sys.boot_complete loop"
        while True:
            args = [
                adb, "-s", emulator, "shell", "getprop", "sys.boot_completed"
            ]
            try:
                result = subprocess.check_output(args)
            except:
                result = None
            if result is not None and result.strip() == "1":
                break
            else:
                time.sleep(1)

        print "[INFO] Wait for svc.boot_complete loop"
        while True:
            args = [
                adb, "-s", emulator, "shell", "getprop", "init.svc.bootanim"
            ]
            try:
                result = subprocess.check_output(args)
            except:
                result = None
            if result is not None and result.strip() == "stopped":
                break
            else:
                time.sleep(1)
        time.sleep(5)
        # Remount the partitions for RW
        subprocess.call([adb, "-s", emulator, "remount"])
        return True
    except:
        PrintException("[ERROR] emulator did not boot properly")
        return False
コード例 #4
0
def stop_avd(adb):
    """Stop AVD"""
    print "\n[INFO] Stopping MobSF Emulator"
    try:
        # adb -s emulator-xxxx emu kill
        FNULL = open(os.devnull, 'w')
        args = [adb, '-s', get_identifier(), 'emu', 'kill']
        subprocess.call(args, stderr=FNULL)
    except:
        PrintException("[ERROR] Stopping MobSF Emulator")
コード例 #5
0
def download_logs(adb, download_dir):
    subprocess.call([
        adb, "-s",
        get_identifier(), "pull",
        "/data/data/de.robv.android.xposed.installer/log/error.log",
        download_dir + "x_logcat_temp.txt"
    ])
    print "\n[INFO] Downloading Droidmon API Monitor Logcat logs"
    # TODO: 下载其他有用文件
    return
コード例 #6
0
def stop_avd(adb):
    """Stop AVD"""
    print "\n[INFO] Stopping MobSF Emulator"
    try:
        # adb -s emulator-xxxx emu kill
        FNULL = open(os.devnull, 'w')
        args = [adb, '-s', get_identifier(), 'emu', 'kill']
        subprocess.call(args, stderr=FNULL)
    except:
        PrintException("[ERROR] Stopping MobSF Emulator")
コード例 #7
0
def avd_load_wait(adb):
    """Wait for AVD Load"""
    try:
        emulator = get_identifier()

        print "[INFO] Wait for emulator to load"
        args = [adb,
                "-s",
                emulator,
                "wait-for-device"]
        subprocess.call(args)

        print "[INFO] Wait for dev.boot_complete loop"
        while True:
            args = [adb,
                    "-s",
                    emulator,
                    "shell",
                    "getprop",
                    "dev.bootcomplete"]
            try:
                result = subprocess.check_output(args)
            except:
                result = None
            if result is not None and result.strip() == "1":
                break
            else:
                time.sleep(1)

        print "[INFO] Wait for sys.boot_complete loop"
        while True:
            args = [adb,
                    "-s",
                    emulator,
                    "shell",
                    "getprop",
                    "sys.boot_completed"]
            try:
                result = subprocess.check_output(args)
            except:
                result = None
            if result is not None and result.strip() == "1":
                break
            else:
                time.sleep(1)

        print "[INFO] Wait for svc.boot_complete loop"
        while True:
            args = [adb,
                    "-s",
                    emulator,
                    "shell",
                    "getprop",
                    "init.svc.bootanim"]
            try:
                result = subprocess.check_output(args)
            except:
                result = None
            if result is not None and result.strip() == "stopped":
                break
            else:
                time.sleep(1)
        time.sleep(5)
        # Remount the partitions for RW
        subprocess.call([adb, "-s", emulator, "remount"])
        return True
    except:
        PrintException("[ERROR] emulator did not boot properly")
        return False
コード例 #8
0
def monkey_script_test(adb, app_info):
    monkey_script_pattern = '''
    type=user
    count=10
    speed=1.0
    start data >>
    captureDispatchPointer(0,0,0,200,600,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,200,600,1,1,-1,1,1,0,0)
    UserWait(1000)
    captureDispatchPointer(0,0,0,400,600,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,400,600,1,1,-1,1,1,0,0)
    UserWait(1000)
    captureDispatchPointer(0,0,0,600,600,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,600,600,1,1,-1,1,1,0,0)
    UserWait(1000)
    captureDispatchPointer(0,0,0,200,800,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,200,800,1,1,-1,1,1,0,0)
    UserWait(1000)
    captureDispatchPointer(0,0,0,600,1000,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,600,1000,1,1,-1,1,1,0,0)
    UserWait(3000)
    LaunchActivity({packagename}, {mainactivity})
    UserWait(5000)
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    Drag({screen_x_right},{screen_y_middle},{screen_x_left},{screen_y_middle},70)
    UserWait({drag_wait})
    captureDispatchPointer(0,0,0,{screen_x_middle},100,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},100,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,0,{screen_x_middle},200,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},200,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,0,{screen_x_middle},300,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},300,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,0,{screen_x_middle},400,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},400,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,0,{screen_x_middle},500,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},500,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,0,{screen_x_middle},600,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},600,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,0,{screen_x_middle},700,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},700,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,0,{screen_x_middle},800,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},800,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,0,{screen_x_middle},900,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},900,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,0,{screen_x_middle},1000,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},1000,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,0,{screen_x_middle},1100,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},1100,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,0,{screen_x_middle},1200,1,1,-1,1,1,0,0)
    captureDispatchPointer(0,0,1,{screen_x_middle},1200,1,1,-1,1,1,0,0)
    UserWait(1000)
    captureDispatchPress(4)
    captureDispatchPress(4)
    captureDispatchPress(4)
    '''
    drag_wait = 750
    packagename = app_info['packagename']
    mainactivity = app_info['mainactivity']
    if mainactivity.startswith('.'):
        mainactivity = packagename + mainactivity
    screen_x_right = 750
    screen_y_middle = 640
    screen_x_left = 50
    screen_x_middle = 400

    monkey_script_data = monkey_script_pattern.format(
        drag_wait=drag_wait,
        packagename=packagename,
        mainactivity=mainactivity,
        screen_x_right=screen_x_right,
        screen_y_middle=screen_y_middle,
        screen_x_left=screen_x_left,
        screen_x_middle=screen_x_middle)

    monkey_script_file_name = os.path.join(
        os.path.join(UPLOAD_DIR, app_info['file_md5']), 'monkey_script.txt')
    with open(monkey_script_file_name, 'w') as f:
        f.write(monkey_script_data)

    subprocess.call([
        adb, "-s",
        get_identifier(), "push", monkey_script_file_name, "/data/local/tmp"
    ])
    subprocess.call([
        adb, "-s",
        get_identifier(), "shell", "monkey", "-f",
        "/data/local/tmp/monkey_script.txt", "1"
    ])
    print u'\n[INFO] 跳过初始化界面'
    return