練習課題#

Pytestの練習#

以下のテストを書いてみましょう(全部書く必要はありません。)

  • 2つの数字を足して答えが正しいことを確認する

  • 2つの数字を引いて答えが正しいことを確認する

  • 2つの文字列が等しいことを確認する

  • 2つのリストが等しいことを確認する

  • 正の数字が正の数字であることを確認する

  • 負の数字が負の数字であることを確認する

  • 3で割り切れる数字が3で割り切れることを確認する

  • 3で割り切れない数字が3で割り切れないことを確認する

connpass_clientを使った connpass api テスト#

1. conftest.py にフィクスチャを記述#

  1. event_id="266898" をリクエストするフィクスチャ an_event_data を書いてください。

  2. event_id='273501,272790,271250,270289,269404,266898,264872'order=2 オプションに入れてリクエストするフィクスチャ some_events_data を書いてください。

Attention

connpass の規約を守るために、 connpass_client を使う時は、リクエストは5秒以上間隔を開けて行う工夫をしましょう。たとえばセットアップもしくはティアダウンのタイミングで time.sleep(5) 記述するのは良い方法かもしれません。

2. 一つのイベントリクエストに対するテスト#

an_event_data フィクスチャを使って以下のテストを書いてみましょう。

  1. an_event_data で得ることができる辞書のキーは、['results_start', 'results_returned', 'results_available', 'events'] である。

  2. events キーに紐づく配列データは1つである。

  3. events キーに紐づく配列に格納された一つの辞書データのキーは ['event_id', 'title', 'catch', 'description', 'event_url', 'started_at', 'ended_at', 'limit', 'hash_tag', 'event_type', 'accepted', 'waiting', 'updated_at', 'owner_id', 'owner_nickname', 'owner_display_name', 'place', 'address', 'lat', 'lon', 'series'] と一致する。

  4. results_returnedevents の配列データ数は一致する。

  5. an_event_data の fixiture の scopemodulesession でそれぞれ試し、テスト動作が違うことを確認する。

3. 複数のイベントリクエストに対するテスト#

some_events_data フィクスチャを使って以下のテストを書いてみましょう。

  1. some_events_data のレスポンスフィールドは、['results_start', 'results_returned', 'results_available', 'events'] である。

  2. events の配列データは7つである。

  3. events の配列データで返ってくるそれぞれの辞書データのキーは ['event_id', 'title', 'catch', 'description', 'event_url', 'started_at', 'ended_at', 'limit', 'hash_tag', 'event_type', 'accepted', 'waiting', 'updated_at', 'owner_id', 'owner_nickname', 'owner_display_name', 'place', 'address', 'lat', 'lon', 'series'] と一致する。

  4. イベントIDがリクエストした時のID7つと一致すること。

  5. results_returnedevents の配列データ数は一致する。

  6. owner_id は全て 36417 である。

  7. events の配列データは、開催日時順が降順(新着順)である。

4. テストの目的からフィクスチャを書く#

以下のテストは、フィクスチャを新規に作る必要が有ります。テストにあわせてフィクスチャを作り、テストを作成してください

  1. event_id="266898" を3回リクエストし、常に同じレスポンスであることを確認する。

  2. event_id="266898" のレスポンスをいったん CSV に書き出し、一行目が以下の一致すること。

    event_id,title,catch,description,event_url,started_at,ended_at,limit,hash_tag,event_type,accepted,waiting,updated_at,owner_id,owner_nickname,owner_display_name,place,address,lat,lon,series
    
  3. 任意の event_id でリクエストして、常に同じレスポンスが返ってくること。

    Note

    以下は任意のパラメータをフィクスチャに渡す関数例です。

    @pytest.fixture
    def custom_event_data():
        def _custom_event_data(**params):
            cli = ConnpassClient()
            return cli.get(**params)
        return _custom_event_dat
    
    def test_something(custom_event_data):
        data = custom_event_data(event_id = "266898")
        assert data["results_returned"] == 1