diff --git a/test/camera/buffer_import.cpp b/test/camera/buffer_import.cpp
index 9288400474a7..815d1caed9f3 100644
--- a/test/camera/buffer_import.cpp
+++ b/test/camera/buffer_import.cpp
@@ -63,6 +63,8 @@ protected:
 		request->reuse();
 		request->addBuffer(stream, buffer);
 		camera_->queueRequest(request);
+
+		dispatcher_->interrupt();
 	}
 
 	int init() override
@@ -76,6 +78,8 @@ protected:
 			return TestFail;
 		}
 
+		dispatcher_ = Thread::current()->eventDispatcher();
+
 		return TestPass;
 	}
 
@@ -133,17 +137,20 @@ protected:
 			}
 		}
 
-		EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
+		const unsigned int nFrames = cfg.bufferCount * 2;
 
 		Timer timer;
-		timer.start(1000ms);
-		while (timer.isRunning())
-			dispatcher->processEvents();
+		timer.start(500ms * nFrames);
+		while (timer.isRunning()) {
+			dispatcher_->processEvents();
+			if (completeRequestsCount_ > nFrames)
+				break;
+		}
 
-		if (completeRequestsCount_ < cfg.bufferCount * 2) {
+		if (completeRequestsCount_ < nFrames) {
 			std::cout << "Failed to capture enough frames (got "
 				  << completeRequestsCount_ << " expected at least "
-				  << cfg.bufferCount * 2 << ")" << std::endl;
+				  << nFrames << ")" << std::endl;
 			return TestFail;
 		}
 
@@ -161,6 +168,8 @@ protected:
 	}
 
 private:
+	EventDispatcher *dispatcher_;
+
 	std::vector<std::unique_ptr<Request>> requests_;
 
 	unsigned int completeBuffersCount_;
diff --git a/test/camera/capture.cpp b/test/camera/capture.cpp
index de824083dfed..8766fb194ee5 100644
--- a/test/camera/capture.cpp
+++ b/test/camera/capture.cpp
@@ -59,6 +59,8 @@ protected:
 		request->reuse();
 		request->addBuffer(stream, buffer);
 		camera_->queueRequest(request);
+
+		dispatcher_->interrupt();
 	}
 
 	int init() override
@@ -73,6 +75,7 @@ protected:
 		}
 
 		allocator_ = new FrameBufferAllocator(camera_);
+		dispatcher_ = Thread::current()->eventDispatcher();
 
 		return TestPass;
 	}
@@ -135,19 +138,20 @@ protected:
 			}
 		}
 
-		EventDispatcher *dispatcher = Thread::current()->eventDispatcher();
+		unsigned int nFrames = allocator_->buffers(stream).size() * 2;
 
 		Timer timer;
-		timer.start(1000ms);
-		while (timer.isRunning())
-			dispatcher->processEvents();
+		timer.start(500ms * nFrames);
+		while (timer.isRunning()) {
+			dispatcher_->processEvents();
+			if (completeRequestsCount_ > nFrames)
+				break;
+		}
 
-		unsigned int nbuffers = allocator_->buffers(stream).size();
-
-		if (completeRequestsCount_ < nbuffers * 2) {
+		if (completeRequestsCount_ < nFrames) {
 			cout << "Failed to capture enough frames (got "
 			     << completeRequestsCount_ << " expected at least "
-			     << nbuffers * 2 << ")" << endl;
+			     << nFrames * 2 << ")" << endl;
 			return TestFail;
 		}
 
@@ -164,6 +168,8 @@ protected:
 		return TestPass;
 	}
 
+	EventDispatcher *dispatcher_;
+
 	std::vector<std::unique_ptr<Request>> requests_;
 
 	std::unique_ptr<CameraConfiguration> config_;
