我们正在评估应用程序测试工具,Appium是我们的候选人,但是我找不到一个好的解决方案,如何在使用Appium时如何模拟后端?
考虑: - 我想进行一个单个UI测试,该测试将在iOS和Android应用程序上执行(Appium假设是乘法图)
-
测试方案:
- 按下本机应用中的按钮。
- 本机应用将调用外部API(需要嘲笑)。
- 本机应用显示一些文本。
- 断言。
问题:
-
如何模拟API调用?
-
Appium使用构建项目(例如APK)。是否有任何方法可以在Appium端构建之前整合和配置应用程序?例如如果Appium触发了构建,则该应用应使用假API响应(JSONS)。
据我所知,Appium没有能力模拟任何API,因为所有Appium都可以查看屏幕并自动化用户可以手动做的事情,例如单击按钮等。
appium调用正在测试的应用程序(aut)并在其上执行操作(例如单击,按,输入文本)。如果在某个端点处的AUT点获得响应,则Appium无法改变。尽管可以构建AUT以消耗模拟端点。
创建本地模拟服务器并将其公开在端口(例如:3000)上,并使用Ngrok创建一个公开访问的端点,然后构建您的应用程序以指向此端点。模拟服务器可以是混合模拟服务器,可以模拟一些响应,其余的可以直接用于真实的后端。
从设备日志获取一些信息的其他方法。在我的项目中,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()
-
satch_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('%sn' % item) file.close() allure.attach.file( source=f'device_log.txt', name='device_log')
在我的示例中,我仅获得报告的日志。您可以根据需要在测试和解析数据期间获取日志。