Ejemplo n.º 1
0
    def run(uuid):

        # todo:恶心啊 如果不加这句,多进程运行会报错
        #  [pocoservice.apk] stdout: b'INSTRUMENTATION_RESULT: shortMsg=Process crashed.\r\nINSTRUMENTATION_CODE: 0\r\n'
        #  并且多进程执行时会出现报错(疑似隔离问题,加上这句初始化后正常)

        init_device(uuid=uuid)

        APK = "3139_wdsm_wdsm_3k_20191112_28835_28835.apk"
        game_name, package_name, launchable_activity = get_packagename_and_launchable_activity(
            APK)

        case = Cases(uuid=uuid,
                     apk_path=APK,
                     package=package_name,
                     game_name=game_name)
        case.execute()

        return "success!"
def run_case(uuid):

    log_dir = os.path.join(APP.AIRTEST_LOG_FILE_PATH, uuid,
                           time.strftime("%Y_%m_%d_%H_%M_%S"))
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)

    # todo 需要加上这一句,否则pocoservice会报错
    auto_setup(basedir=APP.WORKSPACE,
               devices=["Android:///" + uuid],
               logdir=log_dir)

    APK = "3139_wdsm_wdsm_3k_20191112_28835_28835.apk"
    game_name_, package_name_, launchable_activity = get_packagename_and_launchable_activity(
        APK)

    # discover = unittest.defaultTestLoader.discover(start_dir=APP.TEST_CASE_ROOT_PATH,
    #                                                pattern="test*.py",
    #                                                top_level_dir=None)

    # todo: 需要实现测试发现功能
    #  这里需要注意一下:后续会开放多个接口,有一键执行多个用例接口,有执行特定用例接口;
    suite = unittest.TestSuite()
    suite.addTest(
        BaseCase.parametrize(TestInstall,
                             uuid=uuid,
                             group_name=game_name_,
                             apk_path=APK,
                             package_name=package_name_))
    suite.addTest(
        BaseCase.parametrize(TestAllowPermission,
                             uuid=uuid,
                             group_name=game_name_,
                             apk_path=APK,
                             package_name=package_name_))

    unittest.TextTestRunner().run(suite)

    ret_ = run_one_report(os.path.join(APP.AIRTEST_LOG_FILE_PATH, "empty.py"),
                          uuid, log_dir)

    return uuid, ret_
Ejemplo n.º 3
0
def run_case_auto(uuid, apk_path):
    """
    自动添加测试用例文件下全部用例(执行顺序需按照既定的规则)

    :param uuid:
    :param apk_path:
    :return:
    """

    log_dir = os.path.join(APP.AIRTEST_LOG_FILE_PATH, uuid,
                           time.strftime("%Y_%m_%d_%H_%M_%S"))
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)

    # todo 需要加上这一句,否则pocoservice会报错
    auto_setup(basedir=APP.WORKSPACE,
               devices=["Android:///" + uuid],
               logdir=log_dir)

    game_name, package_name, activity = get_packagename_and_launchable_activity(
        apk_path)

    # todo: 需要实现测试发现功能
    #  这里需要注意一下:后续会开放多个接口,有一键执行多个用例接口,有执行特定用例接口;
    suite = suite_all_case(uuid,
                           group_name=game_name,
                           apk_path=apk_path,
                           package_name=package_name)

    try:
        unittest.TextTestRunner().run(suite)
    except Exception as e:
        logger.info(str(e))
        return uuid, {}
    else:
        # 运行报告
        result = run_one_report(
            os.path.join(APP.AIRTEST_LOG_FILE_PATH, "empty.py"), uuid, log_dir)
        return uuid, result
Ejemplo n.º 4
0
def run_case_by_custom(uuid, apk_path):
    """
    手动添加测试用例,确保用例执行顺序

    :param uuid:
    :param apk_path:
    :return:
    """

    log_dir = os.path.join(APP.AIRTEST_LOG_FILE_PATH, uuid,
                           time.strftime("%Y_%m_%d_%H_%M_%S"))
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)

    # todo 需要加上这一句,否则pocoservice会报错
    auto_setup(basedir=APP.WORKSPACE,
               devices=["Android:///" + uuid],
               logdir=log_dir)

    game_name, package_name, activity = get_packagename_and_launchable_activity(
        apk_path)

    # 测试用例添加进测试套件
    suite = unittest.TestSuite()
    param = (uuid, game_name, apk_path, package_name)  # 参数
    suite.addTest(BaseCase.parametrize(TestInstall, *param))
    suite.addTest(BaseCase.parametrize(TestAllowPermission, *param))

    try:
        unittest.TextTestRunner().run(suite)
    except Exception as e:
        logger.info(str("run_case_by_custom error: {0}".format(e)))
        return uuid, {}
    else:
        # 运行报告
        result = run_one_report(
            os.path.join(APP.AIRTEST_LOG_FILE_PATH, "empty.py"), uuid, log_dir)
        return uuid, result
async def run_script(uuid):

    log_dir = os.path.join(APP.AIRTEST_LOG_FILE_PATH, uuid,
                           time.strftime("%Y_%m_%d_%H_%M_%S"))
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)

    # todo 需要加上这一句,否则pocoservice会报错
    auto_setup(basedir=APP.WORKSPACE,
               devices=["Android:///" + uuid],
               logdir=log_dir)

    APK = "3139_wdsm_wdsm_3k_20191112_28835_28835.apk"
    game_name_, package_name_, launchable_activity = get_packagename_and_launchable_activity(
        APK)

    # 需要实现测试发现功能
    suite = unittest.TestSuite()
    suite.addTest(
        BaseCase.parametrize(TestInstall,
                             uuid=uuid,
                             group_name=game_name_,
                             apk_path=APK,
                             package_name=package_name_))
    suite.addTest(
        BaseCase.parametrize(TestAllowPermission,
                             uuid=uuid,
                             group_name=game_name_,
                             apk_path=APK,
                             package_name=package_name_))

    # todo: 单元测试的run方法导致协程不能运行?
    unittest.TextTestRunner().run(suite)

    ret_ = run_one_report(os.path.join(APP.AIRTEST_LOG_FILE_PATH, "empty.py"),
                          uuid, log_dir)

    return uuid, ret_
Ejemplo n.º 6
0

if __name__ == '__main__':

    # apk = "3139_wdsm_wdsm_3k_20191112_28835_28835.apk"
    # apk = "2905_wdsm_wdsmzgl_qq3k_20191108_28156_28156.apk"

    # apk = "620_wzzg_wzzg_360_20190920_0_21381.apk"
    # apk = "1903_wzzg_wzzgjymz_qq3k_20191012_24007_24007.apk"

    # apk = "2322_xcqy_xcqymhxy_qq3k_20190930_26519_26519.apk"

    # apk = "3165_tkqx_tkqx_3k_20191106_2833_2833.apk"
    apk = "3372_tkqx_tkqxzh_qq3k_20191112_23875_23875.apk"

    game_name, package_name, activity = get_packagename_and_launchable_activity(
        apk)

    dev = init_device()
    if package_name not in dev.list_app():
        # 使用这种方式不会因为遇到弹框而阻塞
        dev.adb.push(apk, "/data/local/tmp/")
        proc = dev.adb.start_shell(
            "pm install /data/local/tmp/{0}".format(apk))

    dev.stop_app(package_name)
    dev.start_app(package_name)

    poco = AndroidUiautomationPoco()
    # 权限框弹窗处理
    btn_text = ["确认", "始终允许", "允许", "总是允许"]
    watcher(btn_text, poco=poco)
Ejemplo n.º 7
0
    def execute(self):
        while 1:
            uuid = self.q.get()
            if uuid is None:
                break
            self.execute_install(uuid)
            self.execute_allow_permission(uuid)
            q.task_done()


if __name__ == '__main__':

    devices = [dev[0] for dev in ADB().devices()]
    APK = "3139_wdsm_wdsm_3k_20191112_28835_28835.apk"
    game_name, package_name, launchable_activity = get_packagename_and_launchable_activity(
        APK)

    q = queue.Queue()

    tasks = []
    threads = []

    for device in devices:
        q.put(device)

    for device in devices:
        cases = Cases(q,
                      apk_path=APK,
                      package=package_name,
                      game_name=game_name)
        tasks.append(cases)