【问题标题】:In Mobile Native App Testing: How to mock backend when using Appium?在移动原生应用程序测试中:使用 Appium 时如何模拟后端?
【发布时间】:2015-07-15 00:53:00
【问题描述】:

我们正在评估 App 测试工具,Appium 是我们的候选者,但是我找不到一个好的解决方案,如何在使用 Appium 时模拟后端?

考虑: - 我想要一个 UI 测试,它将在 iOS 和 Android 应用程序上执行(Appium 应该是多平台的)

  • 测试场景:

    1. 按下 Native App 中的按钮。
    2. Native App 将调用外部 API(需要模拟)。
    3. 原生应用显示一些文字。
    4. 断言。

问题:

  • 如何模拟 API 调用?

  • Appium 使用已构建的项目(例如 apk)。在从 Appium 端构建之前,有什么方法可以集成和配置应用程序?例如如果 Appium 触发构建,则应用应使用虚假 API 响应 (JSON)。

【问题讨论】:

  • 嘿@masoodg,你知道了吗?
  • 没有。 Appium 的主要目的似乎是 e-2-e 测试,即没有 mock/stub。

标签: mocking automated-tests appium mobile-application


【解决方案1】:

据我所知,Appium 不具备模拟任何 API 的能力,因为 appium 所做的只是查看屏幕并自动执行用户可以手动执行的操作,例如单击按钮等。

【讨论】:

    【解决方案2】:

    Appium 调用被测应用程序 (AUT) 并对其执行操作(如单击、按下、输入文本)。 如果 AUT 指向某个端点以获取响应,Appium 无法改变这一点。 虽然可以构建 AUT 以使用模拟端点。

    创建一个本地模拟服务器并将其暴露在一个端口(例如:3000)上,并使用 ngrok 创建一个可公开访问的端点,然后构建您的应用程序以指向该端点。 mockserver 可以是一个混合模拟服务器,它可以模拟一些响应,其余的可以定向到真正的后端。

    【讨论】:

      【解决方案3】:

      从设备日志中获取一些信息的其他方法。在我的 iOS 应用程序开发人员项目中,出于安全考虑,我将所有信息隐藏在那里,但在 Android 应用程序中,我可以读取日志数据。 这是我可以保存设备日志的地方。

      1. conftest.py

        @pytest.fixture
        def appdriver():
        
        driver = config.get_driver_caps()
        
        if config.IS_IOS:
            driver.start_recording_screen(videoQuality='high', videoType='mpeg4', videoFps='24')
        else:
            driver.start_recording_screen()
        
        yield driver
        
        attach_device_log(driver)
        save_video(driver)
        driver.quit()
        
      2. attach_device_log()

        def attach_device_log(appdriver):
        if config.IS_ANDROID:
            device_logs = appdriver.get_log('logcat')
        else:
            device_logs = appdriver.get_log('syslog')
        
        os.path.dirname(os.path.abspath('/tests/'))
        
        with open('device_log.txt', 'w') as file:
            file.write('')
        
            for item in device_logs:
                file.write('%s\n' % item)
            file.close()
        
        allure.attach.file(
            source=f'device_log.txt', name='device_log')
        

      在我的示例中,我只获取报告的日志。您可以在测试期间获取日志并根据需要解析数据。

      【讨论】:

        猜你喜欢
        • 2014-12-03
        • 2020-05-09
        • 1970-01-01
        • 2021-08-04
        • 2020-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        相关资源
        最近更新 更多