diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 6f617df..0ec53a7 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -67,7 +67,7 @@ jobs:
         run: poetry install
 
       - name: Run Pytest
-        run: poetry run pytest --cov-report xml --cov=./src/plugins/nonebot_bison -k 'not compare and not render and not external'
+        run: poetry run pytest --cov-report xml --cov=./src/plugins/nonebot_bison -k 'not compare and not render'
 
       - name: Upload coverage report
         uses: codecov/codecov-action@v3
diff --git a/tests/test_merge_pic.py b/tests/test_merge_pic.py
index e223d51..df5de6d 100644
--- a/tests/test_merge_pic.py
+++ b/tests/test_merge_pic.py
@@ -1,4 +1,5 @@
 import typing
+from sys import dont_write_bytecode
 
 import pytest
 from flaky import flaky
@@ -41,12 +42,34 @@ merge_source_9_2 = [
 ]
 
 
+async def download_imgs(url_list: list[str]) -> list[bytes]:
+    from nonebot_bison.utils import http_client
+
+    img_contents = []
+    async with http_client(headers={"referer": "https://weibo.com"}) as client:
+        for url in url_list:
+            res = await client.get(url)
+            res.raise_for_status()
+            img_contents.append(res.content)
+    return img_contents
+
+
+@pytest.fixture
+async def downloaded_resource():
+    return await download_imgs(merge_source_9)
+
+
+@pytest.fixture
+async def downloaded_resource_2():
+    return await download_imgs(merge_source_9_2)
+
+
 @pytest.mark.external
 @flaky
-async def test_9_merge(app: App):
+async def test_9_merge(app: App, downloaded_resource: list[bytes]):
     from nonebot_bison.post import Post
 
-    post = Post("", "", "", pics=merge_source_9)
+    post = Post("", "", "", pics=list(downloaded_resource))
     await post._pic_merge()
     assert len(post.pics) == 5
     await post.generate_messages()
@@ -54,10 +77,10 @@ async def test_9_merge(app: App):
 
 @pytest.mark.external
 @flaky
-async def test_9_merge_2(app: App):
+async def test_9_merge_2(app: App, downloaded_resource_2: list[bytes]):
     from nonebot_bison.post import Post
 
-    post = Post("", "", "", pics=merge_source_9_2)
+    post = Post("", "", "", pics=list(downloaded_resource_2))
     await post._pic_merge()
     assert len(post.pics) == 4
     await post.generate_messages()
@@ -65,39 +88,43 @@ async def test_9_merge_2(app: App):
 
 @pytest.mark.external
 @flaky
-async def test_6_merge(app: App):
+async def test_6_merge(app: App, downloaded_resource: list[bytes]):
     from nonebot_bison.post import Post
 
-    post = Post("", "", "", pics=merge_source_9[0:6] + merge_source_9[9:])
+    post = Post(
+        "", "", "", pics=list(downloaded_resource[0:6] + downloaded_resource[9:])
+    )
     await post._pic_merge()
     assert len(post.pics) == 5
 
 
 @pytest.mark.external
 @flaky
-async def test_3_merge(app: App):
+async def test_3_merge(app: App, downloaded_resource: list[bytes]):
     from nonebot_bison.post import Post
 
-    post = Post("", "", "", pics=merge_source_9[0:3] + merge_source_9[9:])
+    post = Post(
+        "", "", "", pics=list(downloaded_resource[0:3] + downloaded_resource[9:])
+    )
     await post._pic_merge()
     assert len(post.pics) == 5
 
 
 @pytest.mark.external
 @flaky
-async def test_6_merge_only(app: App):
+async def test_6_merge_only(app: App, downloaded_resource: list[bytes]):
     from nonebot_bison.post import Post
 
-    post = Post("", "", "", pics=merge_source_9[0:6])
+    post = Post("", "", "", pics=list(downloaded_resource[0:6]))
     await post._pic_merge()
     assert len(post.pics) == 1
 
 
 @pytest.mark.external
 @flaky
-async def test_3_merge_only(app: App):
+async def test_3_merge_only(app: App, downloaded_resource: list[bytes]):
     from nonebot_bison.post import Post
 
-    post = Post("", "", "", pics=merge_source_9[0:3])
+    post = Post("", "", "", pics=list(downloaded_resource[0:3]))
     await post._pic_merge()
     assert len(post.pics) == 1