sakamomo554101 / YouyakuAI

日本語用の要約を行うデモサービス
0 stars 0 forks source link

unittestをまとめて実行するような構成・スクリプトを作成 #30

Closed sakamomo554101 closed 2 years ago

sakamomo554101 commented 2 years ago

概要

各コンテナごとのunittestをまとめて実行するようなスクリプトや別途構成を組むような対応を行う。 ※unittestを個別に実行するのが煩雑なので、まとめて簡易に実行したい

sakamomo554101 commented 2 years ago

これやりたい・・

sakamomo554101 commented 2 years ago

対応検討する。

sakamomo554101 commented 2 years ago

検討

一つ目はメンテが重複するため、避ける。 二つ目か三つ目だが、多分、depends_onが三つ目だと対応できないかもしれない。

sakamomo554101 commented 2 years ago

https://scrapbox.io/ohbarye/%E8%A4%87%E6%95%B0%E3%81%AEdocker-compose.yml%E3%82%92%E3%83%9E%E3%83%BC%E3%82%B8%E3%81%99%E3%82%8B

あれ、でも三つ目でいけるかもだな。 試してみる

sakamomo554101 commented 2 years ago

https://docs.python.org/ja/3/library/unittest.html#test-discovery ディスカバリを使って、テストをまとめて実行することが可能。

sakamomo554101 commented 2 years ago

https://docs.python.org/ja/3/library/unittest.html#unittest.TestLoader.discover ふーむ、パッケージとして認識させるために、各フォルダにinit.pyが必要そう。

sakamomo554101 commented 2 years ago

大量のインポートエラーが・・・笑 自作パッケージのインポートに問題がありそう。

=====================================================================
ERROR: api_gateway.test.test_api (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: api_gateway.test.test_api
Traceback (most recent call last):
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 436, in _find_test_path
    module = self._get_module_from_name(name)
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "/workspace/api_gateway/test/test_api.py", line 2, in <module>
    from fastapi.testclient import TestClient
ModuleNotFoundError: No module named 'fastapi'

======================================================================
ERROR: db.test.test_bq_db_wrapper (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: db.test.test_bq_db_wrapper
Traceback (most recent call last):
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 436, in _find_test_path
    module = self._get_module_from_name(name)
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "/workspace/db/test/test_bq_db_wrapper.py", line 7, in <module>
    from db_wrapper import BodyInfo, DBConfig, DBFactory, DBUtil, SummarizeJobInfo, SummarizeJobLog, SummarizeResult
  File "/workspace/db/test/../db_wrapper.py", line 22, in <module>
    from log import AbstractLogger
ImportError: cannot import name 'AbstractLogger' from 'log' (/workspace/log/__init__.py)

======================================================================
ERROR: db.test.test_db_wrapper (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: db.test.test_db_wrapper
Traceback (most recent call last):
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 436, in _find_test_path
    module = self._get_module_from_name(name)
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "/workspace/db/test/test_db_wrapper.py", line 8, in <module>
    from db_wrapper import DBFactory, DBConfig, BodyInfo, SummarizeJobInfo, SummarizeResult, InferenceStatus
  File "/workspace/db/test/../db_wrapper.py", line 22, in <module>
    from log import AbstractLogger
ImportError: cannot import name 'AbstractLogger' from 'log' (/workspace/log/__init__.py)

======================================================================
ERROR: queue.test.test_queue_client (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: queue.test.test_queue_client
Traceback (most recent call last):
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 436, in _find_test_path
    module = self._get_module_from_name(name)
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "/workspace/queue/test/test_queue_client.py", line 7, in <module>
    import kafka_helper
  File "/workspace/queue/test/../kafka_helper.py", line 3, in <module>
    from queue_client import QueueConfig
  File "/workspace/queue/test/../queue_client.py", line 6, in <module>
    from log import AbstractLogger
ImportError: cannot import name 'AbstractLogger' from 'log' (/workspace/log/__init__.py)

======================================================================
ERROR: summarizer.test.test_summarizer (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: summarizer.test.test_summarizer
Traceback (most recent call last):
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 436, in _find_test_path
    module = self._get_module_from_name(name)
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "/workspace/summarizer/test/test_summarizer.py", line 10, in <module>
    from summarizer import T5Summarizer
ImportError: cannot import name 'T5Summarizer' from 'summarizer' (/workspace/summarizer/__init__.py)
sakamomo554101 commented 2 years ago

logのパッケージ名がバッティングしてるかもなので、custom_logとかにリネームしておく。

sakamomo554101 commented 2 years ago

queueも被ってそう・・

sakamomo554101 commented 2 years ago

なるほど、init.pyを追加する -> パッケージに登録される -> 他のqueueパッケージと自前で作ったqueueパッケージの名前が被る -> 下記エラー

ImportError: Failed to import test module: api_gateway.test.test_api
Traceback (most recent call last):
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 436, in _find_test_path
    module = self._get_module_from_name(name)
  File "/opt/conda/lib/python3.8/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "/workspace/api_gateway/test/test_api.py", line 2, in <module>
    from fastapi.testclient import TestClient
  File "/opt/conda/lib/python3.8/site-packages/fastapi/testclient.py", line 1, in <module>
    from starlette.testclient import TestClient as TestClient  # noqa
  File "/opt/conda/lib/python3.8/site-packages/starlette/testclient.py", line 16, in <module>
    import requests
  File "/opt/conda/lib/python3.8/site-packages/requests/__init__.py", line 43, in <module>
    import urllib3
  File "/opt/conda/lib/python3.8/site-packages/urllib3/__init__.py", line 7, in <module>
    from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, connection_from_url
  File "/opt/conda/lib/python3.8/site-packages/urllib3/connectionpool.py", line 53, in <module>
    from .util.queue import LifoQueue
  File "/opt/conda/lib/python3.8/site-packages/urllib3/util/queue.py", line 10, in <module>
    class LifoQueue(queue.Queue):
AttributeError: module 'queue' has no attribute 'Queue'
sakamomo554101 commented 2 years ago

以下の二つの手段が取れる。

sakamomo554101 commented 2 years ago

summarizerも多分パッケージ名がバッティングしてそう

sakamomo554101 commented 2 years ago

パッケージ名とファイル名がバッティングするのがNGだな。

sakamomo554101 commented 2 years ago

テストは大丈夫そう。 念のため、アプリケーションも稼働させてみる。