From 962215db13506deca67fae5dcba5b5bb4a1029a3 Mon Sep 17 00:00:00 2001 From: Nick Pope Date: Wed, 1 May 2024 09:56:49 +0100 Subject: [PATCH] Organized images in the screenshots workflow. Added a top-level directory in the zip archive that is the commit hash which makes it easier when downloading multiple artifacts for comparison. Updated the filenames of screenshots for easier comparison between different cases. Added that an error is raised if no screenshots uploaded in workflow. --- .github/workflows/screenshots.yml | 8 +++++++- django/test/selenium.py | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/workflows/screenshots.yml b/.github/workflows/screenshots.yml index f9f372102d..7b9db7d064 100644 --- a/.github/workflows/screenshots.yml +++ b/.github/workflows/screenshots.yml @@ -47,8 +47,14 @@ jobs: - name: Optimize screenshots run: oxipng --interlace=0 --opt=4 --strip=safe tests/screenshots/*.png + - name: Organize screenshots + run: | + mkdir --parents "/tmp/screenshots/${{ github.event.pull_request.head.sha }}" + mv tests/screenshots/* "/tmp/screenshots/${{ github.event.pull_request.head.sha }}/" + - name: Upload screenshots uses: actions/upload-artifact@v4 with: name: screenshots-${{ github.event.pull_request.head.sha }} - path: tests/screenshots/ + path: /tmp/screenshots/ + if-no-files-found: error diff --git a/django/test/selenium.py b/django/test/selenium.py index eecfd87bf1..2840afb9ec 100644 --- a/django/test/selenium.py +++ b/django/test/selenium.py @@ -142,6 +142,8 @@ class SeleniumTestCase(LiveServerTestCase, metaclass=SeleniumTestCaseBase): test.__name__ = f"{name}_{screenshot_case}" test.__qualname__ = f"{test.__qualname__}_{screenshot_case}" + test._screenshot_name = name + test._screenshot_case = screenshot_case setattr(cls, test.__name__, test) @classproperty @@ -214,7 +216,9 @@ class SeleniumTestCase(LiveServerTestCase, metaclass=SeleniumTestCaseBase): def take_screenshot(self, name): if not self.screenshots: return - path = Path.cwd() / "screenshots" / f"{self._testMethodName}-{name}.png" + test = getattr(self, self._testMethodName) + filename = f"{test._screenshot_name}--{name}--{test._screenshot_case}.png" + path = Path.cwd() / "screenshots" / filename path.parent.mkdir(exist_ok=True, parents=True) self.selenium.save_screenshot(path)