浏览代码

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.
Nick Pope 10 月之前
父节点
当前提交
962215db13
共有 2 个文件被更改,包括 12 次插入2 次删除
  1. 7 1
      .github/workflows/screenshots.yml
  2. 5 1
      django/test/selenium.py

+ 7 - 1
.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

+ 5 - 1
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)