From 6432ed6e604eb442a484fe27092148deb77a6be8 Mon Sep 17 00:00:00 2001 From: Stitch-z <284618289@qq.com> Date: Tue, 26 Dec 2023 13:47:04 +0800 Subject: [PATCH 1/3] Update: improve the unit testing of tutorial assistants and OCR assistants. --- metagpt/roles/tutorial_assistant.py | 1 + tests/metagpt/actions/test_invoice_ocr.py | 4 ++-- tests/metagpt/roles/test_invoice_ocr_assistant.py | 12 +----------- tests/metagpt/roles/test_tutorial_assistant.py | 9 ++++----- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/metagpt/roles/tutorial_assistant.py b/metagpt/roles/tutorial_assistant.py index 5d1323371..bedf8b3be 100644 --- a/metagpt/roles/tutorial_assistant.py +++ b/metagpt/roles/tutorial_assistant.py @@ -90,4 +90,5 @@ async def react(self) -> Message: msg = await super().react() root_path = TUTORIAL_PATH / datetime.now().strftime("%Y-%m-%d_%H-%M-%S") await File.write(root_path, f"{self.main_title}.md", self.total_content.encode("utf-8")) + msg.content = str(root_path / f"{self.main_title}.md") return msg diff --git a/tests/metagpt/actions/test_invoice_ocr.py b/tests/metagpt/actions/test_invoice_ocr.py index 7f16aa9a4..12b1b4b30 100644 --- a/tests/metagpt/actions/test_invoice_ocr.py +++ b/tests/metagpt/actions/test_invoice_ocr.py @@ -6,7 +6,7 @@ @Author : Stitch-z @File : test_invoice_ocr.py """ - +import json import os from pathlib import Path @@ -42,7 +42,7 @@ async def test_generate_table(invoice_path: str, expected_result: list[dict]): filename = os.path.basename(invoice_path) ocr_result = await InvoiceOCR().run(file_path=Path(invoice_path), filename=filename) table_data = await GenerateTable().run(ocr_results=ocr_result, filename=filename) - assert table_data == expected_result + assert json.dumps(table_data) == json.dumps(expected_result) @pytest.mark.asyncio diff --git a/tests/metagpt/roles/test_invoice_ocr_assistant.py b/tests/metagpt/roles/test_invoice_ocr_assistant.py index ab3092004..38436fa60 100644 --- a/tests/metagpt/roles/test_invoice_ocr_assistant.py +++ b/tests/metagpt/roles/test_invoice_ocr_assistant.py @@ -38,17 +38,7 @@ Path("../../data/invoices/invoice-3.jpg"), Path("../../../data/invoice_table/invoice-3.xlsx"), [{"收款人": "夏天", "城市": "福州市", "总费用/元": 2462.00, "开票日期": "2023年08月26日"}], - ), - ( - "Invoicing date", - Path("../../data/invoices/invoice-4.zip"), - Path("../../../data/invoice_table/invoice-4.xlsx"), - [ - {"收款人": "小明", "城市": "深圳市", "总费用/元": 412.00, "开票日期": "2023年02月03日"}, - {"收款人": "铁头", "城市": "广州市", "总费用/元": 898.00, "开票日期": "2023年03月17日"}, - {"收款人": "夏天", "城市": "福州市", "总费用/元": 2462.00, "开票日期": "2023年08月26日"}, - ], - ), + ) ], ) async def test_invoice_ocr_assistant( diff --git a/tests/metagpt/roles/test_tutorial_assistant.py b/tests/metagpt/roles/test_tutorial_assistant.py index 105f976c3..f019c07d4 100644 --- a/tests/metagpt/roles/test_tutorial_assistant.py +++ b/tests/metagpt/roles/test_tutorial_assistant.py @@ -12,13 +12,12 @@ @pytest.mark.asyncio -@pytest.mark.parametrize(("language", "topic"), [("Chinese", "Write a tutorial about Python")]) +@pytest.mark.parametrize(("language", "topic"), [("Chinese", "Write a tutorial about pip")]) async def test_tutorial_assistant(language: str, topic: str): - topic = "Write a tutorial about MySQL" role = TutorialAssistant(language=language) msg = await role.run(topic) filename = msg.content - title = filename.split("/")[-1].split(".")[0] - async with aiofiles.open(filename, mode="r") as reader: + async with aiofiles.open(filename, mode="r", encoding="utf-8") as reader: content = await reader.read() - assert content.startswith(f"# {title}") + assert content + From dc77a0d99b4cacf30427d41f6dbb4d142c37e8fb Mon Sep 17 00:00:00 2001 From: Stitch-z <284618289@qq.com> Date: Tue, 26 Dec 2023 14:33:17 +0800 Subject: [PATCH 2/3] Update: improve the unit testing of tutorial assistants and OCR assistants. --- tests/metagpt/actions/test_invoice_ocr.py | 5 ++++- .../roles/test_invoice_ocr_assistant.py | 20 ++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/tests/metagpt/actions/test_invoice_ocr.py b/tests/metagpt/actions/test_invoice_ocr.py index 12b1b4b30..b3b93cf9f 100644 --- a/tests/metagpt/actions/test_invoice_ocr.py +++ b/tests/metagpt/actions/test_invoice_ocr.py @@ -34,7 +34,10 @@ async def test_invoice_ocr(invoice_path: str): @pytest.mark.parametrize( ("invoice_path", "expected_result"), [ - ("../../data/invoices/invoice-1.pdf", [{"收款人": "小明", "城市": "深圳市", "总费用/元": "412.00", "开票日期": "2023年02月03日"}]), + ( + "../../data/invoices/invoice-1.pdf", + [{"收款人": "小明", "城市": "深圳市", "总费用/元": "412.00", "开票日期": "2023年02月03日"}] + ), ], ) async def test_generate_table(invoice_path: str, expected_result: list[dict]): diff --git a/tests/metagpt/roles/test_invoice_ocr_assistant.py b/tests/metagpt/roles/test_invoice_ocr_assistant.py index 38436fa60..48abb9eb8 100644 --- a/tests/metagpt/roles/test_invoice_ocr_assistant.py +++ b/tests/metagpt/roles/test_invoice_ocr_assistant.py @@ -7,7 +7,6 @@ @File : test_invoice_ocr_assistant.py """ -import json from pathlib import Path import pandas as pd @@ -25,29 +24,36 @@ "Invoicing date", Path("../../data/invoices/invoice-1.pdf"), Path("../../../data/invoice_table/invoice-1.xlsx"), - [{"收款人": "小明", "城市": "深圳市", "总费用/元": 412.00, "开票日期": "2023年02月03日"}], + {"收款人": "小明", "城市": "深圳", "总费用/元": 412.00, "开票日期": "2023年02月03日"}, ), ( "Invoicing date", Path("../../data/invoices/invoice-2.png"), Path("../../../data/invoice_table/invoice-2.xlsx"), - [{"收款人": "铁头", "城市": "广州市", "总费用/元": 898.00, "开票日期": "2023年03月17日"}], + {"收款人": "铁头", "城市": "广州", "总费用/元": 898.00, "开票日期": "2023年03月17日"}, ), ( "Invoicing date", Path("../../data/invoices/invoice-3.jpg"), Path("../../../data/invoice_table/invoice-3.xlsx"), - [{"收款人": "夏天", "城市": "福州市", "总费用/元": 2462.00, "开票日期": "2023年08月26日"}], + {"收款人": "夏天", "城市": "福州", "总费用/元": 2462.00, "开票日期": "2023年08月26日"}, ) ], ) async def test_invoice_ocr_assistant( - query: str, invoice_path: Path, invoice_table_path: Path, expected_result: list[dict] + query: str, invoice_path: Path, invoice_table_path: Path, expected_result: dict ): invoice_path = Path.cwd() / invoice_path role = InvoiceOCRAssistant() await role.run(Message(content=query, instruct_content=InvoicePath(file_path=invoice_path))) invoice_table_path = Path.cwd() / invoice_table_path df = pd.read_excel(invoice_table_path) - dict_result = df.to_dict(orient="records") - assert json.dumps(dict_result) == json.dumps(expected_result) + resp = df.to_dict(orient="records") + assert isinstance(resp, list) + assert len(resp) == 1 + resp = resp[0] + assert expected_result["收款人"] == resp["收款人"] + assert expected_result["城市"] in resp["城市"] + assert int(expected_result["总费用/元"]) == int(resp["总费用/元"]) + assert expected_result["开票日期"] == resp["开票日期"] + From 25b58f22ca092c89b076f66001f8c476479859a4 Mon Sep 17 00:00:00 2001 From: Stitch-z <284618289@qq.com> Date: Tue, 26 Dec 2023 15:38:24 +0800 Subject: [PATCH 3/3] Update: improve the unit testing of tutorial assistants and OCR assistants. --- tests/metagpt/roles/test_tutorial_assistant.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/metagpt/roles/test_tutorial_assistant.py b/tests/metagpt/roles/test_tutorial_assistant.py index f019c07d4..4455e1bf6 100644 --- a/tests/metagpt/roles/test_tutorial_assistant.py +++ b/tests/metagpt/roles/test_tutorial_assistant.py @@ -5,19 +5,27 @@ @Author : Stitch-z @File : test_tutorial_assistant.py """ +import shutil import aiofiles import pytest +from metagpt.const import TUTORIAL_PATH from metagpt.roles.tutorial_assistant import TutorialAssistant @pytest.mark.asyncio @pytest.mark.parametrize(("language", "topic"), [("Chinese", "Write a tutorial about pip")]) async def test_tutorial_assistant(language: str, topic: str): + shutil.rmtree(path=TUTORIAL_PATH, ignore_errors=True) + role = TutorialAssistant(language=language) msg = await role.run(topic) + assert TUTORIAL_PATH.exists() filename = msg.content async with aiofiles.open(filename, mode="r", encoding="utf-8") as reader: content = await reader.read() - assert content + assert "pip" in content + +if __name__ == "__main__": + pytest.main([__file__, "-s"])