Python, OpenCV: запись экрана с тестированием графического интерфейса

#python #opencv

Вопрос:

Я пытаюсь создать рекордер всякий раз, когда инициализируются тестовые случаи. Например, при выполнении сценария тестирования регистратор откроется и запишет поведение графического интерфейса. Однако рекордер застрял в бесконечном цикле, и я хочу, чтобы он был закрыт после тестирования. Как я мог бы решить эту проблему? Спасибо.

Вот Recorder класс, который я построил.

[ record_gif.py ]

 RESOLUTION = (1200, 950) FOURCC = cv2.VideoWriter_fourcc(*'mp4v')  class Recorder:  def __init__(self, video_name):  """  The class uses OpenCV to build an automated recorder to record the  testing cases.  """  # output would be name of the video, video type, FPS, (resolution)  # note the resolution must be the same as the image size  self.video_name = video_name  self.out = cv2.VideoWriter(self.video_name, FOURCC, 20, RESOLUTION)  self.recording = False   def record(self):  self.recording = True  while self.recording:  # bbox = (start_x, start_y, (end_x - start_x, end_y - start_y))  img = ImageGrab.grab(bbox=(471,  108,  (1920-471),  (1000-107)))  img_np = np.array(img)  img_np = cv2.resize(img_np, RESOLUTION)   # covert the img_np array's color scheme  frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)   # show on the Screen window  cv2.imshow("Screen", img_np)   # the video would write the frame  self.out.write(frame)   # use ESC, or set recording to False to end the recording  if cv2.waitKey(1) amp; 0xFF == 27:  break  elif self.recording == False:  break   self.out.release()  cv2.destroyAllWindows()  

А вот пример тестирования игрушек:

[ test_us01.py ]

 import recorder from record_gif  class TestUserStory1(unittest.TestCase):  @classmethod  def setUpClass(self):  recorder = Recorder("Test")  recorder.record()   @classmethod  def tearDownClass(self):  recorder.recording = False    def test_recorder(self):  sleep(10)  

Когда я выполняю сценарий py -m unittest test_us01.py , я хочу активировать диктофон, и после тестирования диктофон должен быть закрыт.