提问者:小点点

片状浓缩咖啡测试:启动活动后测试失败并超时


启动活动后,我的浓缩咖啡测试失败,并在 45 秒后超时。

要启动活动,我使用 InstrumentationRegistry.getInstrumentation().startActivitySync(intent)。尽管活动正确启动,但测试在 45 秒后运行超时失败。这只会偶尔发生。

请注意,我的应用程序在启动活动后立即通过 OkHTTP 获取一些内容。我还在使用像Firebase Event Logging这样的库。但是,我可以确认所有 OkHTTP 请求都在 2-3 秒内完成。

阻止浓缩咖啡完成测试的可能原因是什么?如何调试此问题?

以下是发生超时时的堆栈跟踪:

  Thread[Jit thread pool worker thread 0,5,main]

  Thread[arch_disk_io_3,5,main]
    sun.misc.Unsafe.park(Native Method)
    java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
    java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2067)
    java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    java.lang.Thread.run(Thread.java:919)

  Thread[AsyncTask #1,5,main]
    sun.misc.Unsafe.park(Native Method)
    java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
    java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:459)
    java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:920)
    java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    java.lang.Thread.run(Thread.java:919)

  Thread[Okio Watchdog,5,main]
    java.lang.Object.wait(Native Method)
    okio.AsyncTimeout.awaitTimeout(AsyncTimeout.java:361)
    okio.AsyncTimeout$Watchdog.run(AsyncTimeout.java:312)

  Thread[Timer-1,5,main]
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:442)
    java.util.TimerThread.mainLoop(Timer.java:559)
    java.util.TimerThread.run(Timer.java:512)

  Thread[OkHttp ConnectionPool,5,main]
    java.lang.Object.wait(Native Method)
    com.android.okhttp.ConnectionPool$1.run(ConnectionPool.java:106)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    java.lang.Thread.run(Thread.java:919)

  Thread[RenderThread,7,main]

  Thread[HeapTaskDaemon,5,system]

  Thread[queued-work-looper,5,main]
    android.os.MessageQueue.nativePollOnce(Native Method)
    android.os.MessageQueue.next(MessageQueue.java:336)
    android.os.Looper.loop(Looper.java:174)
    android.os.HandlerThread.run(HandlerThread.java:67)

  Thread[hwuiTask1,6,main]

  Thread[ReferenceQueueDaemon,5,system]
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:442)
    java.lang.Object.wait(Object.java:568)
    java.lang.Daemons$ReferenceQueueDaemon.runInternal(Daemons.java:215)
    java.lang.Daemons$Daemon.run(Daemons.java:137)
    java.lang.Thread.run(Thread.java:919)

  Thread[pool-1-thread-1,5,main]
    sun.misc.Unsafe.park(Native Method)
    java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
    java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2109)
    java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1132)
    java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:849)
    java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    java.lang.Thread.run(Thread.java:919)

  Thread[OkHttp ConnectionPool,5,main]
    java.lang.Object.wait(Native Method)
    okhttp3.ConnectionPool$1.run(ConnectionPool.java:67)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    java.lang.Thread.run(Thread.java:919)

  Thread[pool-5-thread-2,5,main]
    sun.misc.Unsafe.park(Native Met

共1个答案

匿名用户

我现在能够通过在我的前提条件代码中的几个地方插入 Thread.sleep() 来解决这个问题(在启动所测试的活动之前)。

我希望我有时间深入研究浓缩咖啡,以帮助解决所有这些混乱。