在我的仪器测试中,我使用Robotium。大多数情况下,我能够测试一切,但离线情况。
一旦我禁用数据(使用adb,F8快捷键在模拟器等。...)测试断开。它在设备/模拟器中继续,但没有报告结果。
所以,我有一个想法,只把应用程序在离线模式,而不是整个设备。问题是我不知道怎么...
使用iptablesApi我需要root我的设备。我读到过Mobiwol应用程序使用某种VPN来限制应用程序的互联网访问,而不需要root设备。
问题Mobiwol应用如何阻止每个应用的互联网连接?或者有其他方法可以离线测试apk?
2014年12月30日编辑
我忘了说,我可以离线运行测试,但我必须在设备处于离线状态时开始测试。目前,我将我的测试分为离线和在线测试。在运行ONLINES之后,我执行著名的adb kill-server
和adb start-server
。之后我执行OFFLINES。
7条答案
按热度按时间wgx48brx1#
只是提出一些建议,因为这里似乎有不同的问题。1)如果你想做的只是在运行OFFLINE测试用例之前关闭数据,你可能想简单地尝试使用robotium本身来完成。
示例:对于WiFi:
对于移动的数据(使用反射):
您可以在运行OFFLINE套件中的单个测试用例之前,在
setup()
方法中执行上述两个调用。完成OFFLINE套件中的所有测试用例后,您可以在最后的teardown()
方法中启用WiFi/DATA。2)看看你在OP中发布的应用程序,似乎它:
ipTables
ipTable
中的现有规则。很肯定,虽然必须有相当困难的代码所有这些..听起来容易得多的形式要点。
希望这对你有所帮助。
附言:如果你确实想出了一些东西,请发布一个更新的答案,想知道你是如何使它工作的
mfuanj7w2#
在花了几个小时试图做类似于user2511882的解决方案,我仍然有一个异常,因为缺少权限(是的,“修改系统设置”权限被激活)。
最后我用UI automator来做:
您需要在androidTest清单文件中包含ACCESS_NETWORK_STATE:
别忘了在测试后禁用它。
如果您有英语以外的其他语言,您需要将“飞行模式”更改为您的语言文本。因为我有几个翻译,我从一个resource字符串中读取它。
2fjabf4q3#
LinkedIn Test Butler有一个很棒的库,您可以通过简单的调用启用,禁用WiFi和移动的数据:
此库的主要优点是它不需要在您的清单中获得任何权限,有关更多详细信息,请参阅项目网站:
https://github.com/linkedin/test-butler
t9eec4r04#
抱歉,如果我过于简单化了,但是把手机/模拟器置于飞行模式怎么样?通过实际的用户界面。我就是这么做的。
mitkmikd5#
使用@Illyct的解决方案(请投票支持他们的答案https://stackoverflow.com/a/64765567/191761)
0s7z1bwu6#
这里有一个解决方案,它使用UiAutomator从下拉状态栏中启用或禁用“飞行模式”,如果启用,则关闭所有网络。它适用于大多数Android操作系统版本,并使用用户Aorlinn(2019年10月12日)的部分答案。
app/build.gradle
AndroidManifest.xml
不需要额外的权限,甚至不需要
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
,因为UiAutomator只需要点击状态栏UI中的一个按钮。因此,应用程序不需要直接访问来修改设备的Wifi或移动的数据设置。Kotlin
如果您的设备使用的语言与英语不同,则必须调整字符串
"Aeroplane mode"
。例如,您可以在这里查看大约70种语言的翻译:https://github.com/aosp-mirror/platform_frameworks_base/search?q=global_actions_toggle_airplane_mode(截至2023年9月,您必须登录GitHub帐户才能查看搜索结果)。yacmzcpb7#
由于@user2511882的回答,您可以通过以下方式在Android X Test中使用Application context而不是Activity:
考虑到这种方法仅适用于API <= 28。还有其他方法,如使用UI Automator或API > 28