简化 Autocal 界面测试并减少等待开销

用轻量曲面和独立页面验证普通交互,收拢窗口清理,并让后台测试任务获得执行时间。保留原有 90 项用例,113 项相关测试及代码检查通过。
This commit is contained in:
ykcheungab
2026-10-15 21:17:28 +08:00
parent a3aeca1d12
commit 31f6ef3881
4 changed files with 609 additions and 715 deletions
+23 -16
View File
@@ -19,6 +19,22 @@ def _csv(path, rows):
writer.writerows(rows)
@pytest.fixture
def review_dialog(qt_app):
"""Give each test fresh dialogs and release their chart trees afterwards."""
from orisys_autocal.ui.session_review_dialog import SessionReviewDialog
dialogs = []
def create(directory, **kwargs):
dialog = SessionReviewDialog(directory, **kwargs)
dialogs.append(dialog)
return dialog
yield create
for dialog in reversed(dialogs):
dialog.close()
dialog.deleteLater()
@pytest.fixture
def session(tmp_path):
manifest = {
@@ -106,10 +122,8 @@ def test_review_refuses_mismatched_identity_and_paths_outside_session(session):
review_session(session)
def test_review_dialog_shows_saved_windows_charts_and_new_export(qt_app, session, tmp_path):
from orisys_autocal.ui.session_review_dialog import SessionReviewDialog
dialog = SessionReviewDialog(session)
def test_review_dialog_shows_saved_windows_charts_and_new_export(qt_app, session, tmp_path, review_dialog):
dialog = review_dialog(session)
assert dialog.sites.count() == 2
assert dialog.table.rowCount() == 5
assert dialog.pages.currentIndex() == 0 and dialog.pages.count() == 2
@@ -127,7 +141,6 @@ def test_review_dialog_shows_saved_windows_charts_and_new_export(qt_app, session
dialog.show()
qt_app.processEvents()
assert dialog.grab().save(str(tmp_path / "review.png"))
dialog.close()
def test_reviewed_windows_roundtrip_and_reject_changed_inputs(session):
@@ -168,10 +181,10 @@ def test_invalid_review_selection_does_not_become_verified(session):
}})
def test_operator_confirms_windows_in_dialog_and_reloads_them(qt_app, session, monkeypatch):
def test_operator_confirms_windows_in_dialog_and_reloads_them(session, monkeypatch, review_dialog):
from orisys_autocal.ui import session_review_dialog
dialog = session_review_dialog.SessionReviewDialog(session)
dialog = review_dialog(session)
for row in (0, 1):
dialog.table.selectRow(row)
dialog.end_s.setValue(2)
@@ -182,14 +195,12 @@ def test_operator_confirms_windows_in_dialog_and_reloads_them(qt_app, session, m
dialog.save_button.click()
wait_review(dialog)
saved = next(session.glob("derived/*/review.json"))
fresh = session_review_dialog.SessionReviewDialog(session)
fresh = review_dialog(session)
monkeypatch.setattr(session_review_dialog.QFileDialog, "getOpenFileName",
lambda *args: (str(saved), ""))
fresh.load_button.click()
wait_review(fresh)
assert fresh.review["sites"] == dialog.review["sites"]
dialog.close()
fresh.close()
def test_baseline_image_matches_first_reviewed_zero_frame(session):
@@ -301,15 +312,12 @@ def test_quality_ignores_unconfirmed_data_and_unmatched_loads(repeated_session):
assert quality["hysteresis"] == []
def test_quality_dialog_is_reachable_and_shows_validation_tables(qt_app, repeated_session, monkeypatch, tmp_path):
def test_quality_dialog_is_reachable_and_shows_validation_tables(qt_app, repeated_session, monkeypatch, tmp_path, review_dialog):
from PySide6.QtWidgets import QTableWidget
from orisys_autocal.ui.session_review_dialog import SessionReviewDialog
from orisys_autocal.ui.quality_review_dialog import QualityReviewDialog
directory, selections = repeated_session
review = SessionReviewDialog(directory)
review.review = review_session(directory, selections=selections)
review._show_site()
review = review_dialog(directory, review=review_session(directory, selections=selections))
opened = []
monkeypatch.setattr(QualityReviewDialog, "exec", lambda dialog: opened.append(dialog))
review.quality_button.click()
@@ -328,4 +336,3 @@ def test_quality_dialog_is_reachable_and_shows_validation_tables(qt_app, repeate
qt_app.processEvents()
assert dialog.grab().save(str(tmp_path / "validation.png"))
dialog.close()
review.close()