我正在尝试制作一个用于控制相机的网站,我需要检查一下相机是否正忙(其他用户已在访问)。更具体地说,我正在测试在 post-request 期间运行的这段代码:
def try_capture_image(self, image_path, raw_file_path=None):
if self.is_busy:
raise ImageCaptureError("Camera is already in use")
self.is_busy = True
self.capture_image(image_path, raw_file_path)
self.is_busy = False
self.capture_image
可能需要相当长的时间。
我正在尝试为此代码编写单元测试,但我不太确定该怎么做。现在我正在尝试在一个单独的线程中运行应用程序,同时执行两个同时发布的请求,如下所示:
def test_camera_busy(self):
def start_and_init_server(app):
app.run(threaded=True)
server_thread = threading.Thread(target=start_and_init_server, args=(self.app, ))
server_thread.daemon = True # This will stop the thread when process is finished
server_thread.start()
self.run_create_album_request()
async def func1():
return requests.post(
SERVER_URL + "/albums/album1"
).json()
asyncio.set_event_loop(asyncio.new_event_loop())
loop = asyncio.get_event_loop()
group = asyncio.gather(func1(), func1())
results = loop.run_until_complete(group)
loop.close()
print(results)
打印的响应是:
[{'image_url': '/tmpslbk6b55/albums/album1/images/image0001.png', 'success': 'Image successfully captured', 'thumbnail_url': '/tmpslbk6b55/albums/album1/thumbnails/image0001.jpg'}, {'image_url': '/tmpslbk6b55/albums/album1/images/image0002.png', 'success': 'Image successfully captured', 'thumbnail_url': '/tmpslbk6b55/albums/album1/thumbnails/image0002.jpg'}]
因此即使服务器以 threaded=True
启动,请求也不会并行运行。当手动运行服务器(并从不同设备执行两个请求)时,is-busy 机制工作正常,所以我不明白为什么在测试时请求按顺序运行。
有人知道发生了什么吗?或者对更好的测试方法的建议?任何帮助表示赞赏:)