一段时间以来,当我在一个设备(仿真器)上运行一个 Jmeter 测试,并尝试在第二个设备上并行启动另一个测试时,我得到了以下异常:
失败:生成失败,出现异常.
问题:执行任务":app:connectedDebugAndroidTest"失败。
java.nio.file.FileSystemException: D:\Android\我的应用\应用\构建\输出\Android测试结果\已连接\第一个设备的名称\logcat-MyApp.测试类名-测试名称. txt:该进程无法访问该文件,因为另一个进程正在使用该文件
问题似乎是,构建过程试图从第一个测试设备访问一个文件,这已经被阻止了。但是我正在使用一个不同的设备,并试图运行一个不同的测试。
我这样做的原因是因为一些测试非常大,因此我尝试将它们分散到几个设备上,这样我可以更快地得到结果。我运行测试的机器有着非常好的性能,所以它不可能是资源的问题; -).
当我几个月前执行上述操作时,它工作正常,所以我猜这是由于一些更新(可能是Gradle或其他版本)。但从那时起我安装了几个更新,所以它不可能只是当前版本的问题。
- 更新**-另外两个输入:
1.我最近改用了hilt,因此创建了我自己的TestRunner
,因为用@HiltApplication
注解的应用程序不能用于测试,所以我必须创建一个自定义的应用程序用于测试,它需要在自定义的TestRunner
中运行,如这里所述。
1.当我使用Android Studio中的"Select Multiple Devices"下拉菜单在多个设备上运行相同的测试时,它工作正常。
1条答案
按热度按时间xmq68pz91#
该错误消息表明,在您的开发计算机(而非Android测试设备)上的构建并运行输出文件上存在冲突。也就是说,它正试图在运行中的测试用于测试的logcat输出等目的的同一构建输出目录中执行另一个构建并运行。
我的第一个想法是尝试将
androidTest
复制到另一个构建目标。相同的内容,不同的目标名称,不同的输出目录。这种解决方案似乎可以克服这个限制但是name_of_the_first_device
子目录建议它可以为每个测试设备保存一个logcat输出文件,因此真正的问题是如何让测试运行程序对每个测试设备使用一个单独的子目录。第二个想法是为您指出文档Run Tests with Multiple Devices和Shard Tests。
对于定制的
TestRunner
,请参见Write a Sharded IRemoteTest Test Runner(以及"Tradefed"部分中的其他页面),了解如何使其成为"可分片"的测试运行器,从而使测试基础设施能够将完整的测试执行分布到多个设备上。