在移动原生应用程序测试中:使用 Appium 时如何模拟后端?
Posted
技术标签:
【中文标题】在移动原生应用程序测试中:使用 Appium 时如何模拟后端?【英文标题】:In Mobile Native App Testing: How to mock backend when using Appium? 【发布时间】:2015-07-15 00:53:00 【问题描述】:我们正在评估 App 测试工具,Appium 是我们的候选者,但是我找不到一个好的解决方案,如何在使用 Appium 时模拟后端?
考虑: - 我想要一个 UI 测试,它将在 ios 和 android 应用程序上执行(Appium 应该是多平台的)
测试场景:
-
按下 Native App 中的按钮。
Native App 将调用外部 API(需要模拟)。
原生应用显示一些文字。
断言。
问题:
如何模拟 API 调用?
Appium 使用已构建的项目(例如 apk)。在从 Appium 端构建之前,有什么方法可以集成和配置应用程序?例如如果 Appium 触发构建,则应用应使用虚假 API 响应 (JSON)。
【问题讨论】:
嘿@masoodg,你知道了吗? 没有。 Appium 的主要目的似乎是 e-2-e 测试,即没有 mock/stub。 【参考方案1】:据我所知,Appium 不具备模拟任何 API 的能力,因为 appium 所做的只是查看屏幕并自动执行用户可以手动执行的操作,例如单击按钮等。
【讨论】:
【参考方案2】:Appium 调用被测应用程序 (AUT) 并对其执行操作(如单击、按下、输入文本)。 如果 AUT 指向某个端点以获取响应,Appium 无法改变这一点。 虽然可以构建 AUT 以使用模拟端点。
创建一个本地模拟服务器并将其暴露在一个端口(例如:3000)上,并使用 ngrok 创建一个可公开访问的端点,然后构建您的应用程序以指向该端点。 mockserver 可以是一个混合模拟服务器,它可以模拟一些响应,其余的可以定向到真正的后端。
【讨论】:
【参考方案3】:从设备日志中获取一些信息的其他方法。在我的 iOS 应用程序开发人员项目中,出于安全考虑,我将所有信息隐藏在那里,但在 Android 应用程序中,我可以读取日志数据。 这是我可以保存设备日志的地方。
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()
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')
在我的示例中,我只获取报告的日志。您可以在测试期间获取日志并根据需要解析数据。
【讨论】:
以上是关于在移动原生应用程序测试中:使用 Appium 时如何模拟后端?的主要内容,如果未能解决你的问题,请参考以下文章