あいつの日誌β

働きながら旅しています。

Python でテスト用のデータを準備する一例

あらすじ

ログ集計テーブルのテストケースを作っていた時の話ですがテーブルに入っているデータを各テストケース毎に作成したい。

なんですけどテストケースが増えるとどのケースでどのようなデータが用意されているのかが分かりづらいのでちょっと工夫して書いてみました。

だいたいこんな感じ

# -*- coding: utf-8 -*-


def parse_lines(self, lines):
    rows = []
    for line in lines.split("\n"):
        if not line.strip():
            continue
        columns = []
        for string in line.split("|"):
            if string.strip():
                columns.append(string.strip())
        rows.append(columns)
    return rows


rows = parse_lines("""
| date       | uid | pid | cid | count |
| 2015-01-01 |   1 |   1 |   1 | 14000 |
| 2015-01-01 |   2 |   1 |   2 | 13000 |
| 2015-01-01 |   3 |   2 |   6 | 10000 |
| 2015-01-02 |   1 |   4 |   6 | 12000 |
| 2015-01-02 |   2 |   5 |   1 | 10000 |
| 2015-01-02 |   3 |   5 |   1 | 10000 |
""")

print rows

実行すると以下のように配列が取得できるのでこれから bulk insert 文とか作るといいんじゃないでしょうか。

:!python %
[['date', 'uid', 'pid', 'cid', 'count'], ['2015-01-01', '1', '1', '1', '14000'], ['2015-01-01', '2', '1', '2', '13000'], ['2015-01-01', '3', '2', '6', '10000'], ['2015-01-02', '1', '4', '6', '12000'], ['2015-01-02', '2', '5', '1', '10000'], ['2015-01-02', '3', '5', '1', '10000']]

この関数を利用すると expected のデータも同じ形式で書けるのでこんな感じで見えやすくなるとかならないとか。

def test_success_a(self):
    """ 
    A: 該当する範囲のxxxIDに紐づくxxx一覧を count の降順で表示
    """
    self.setup("""
  | date       | uid | pid | cid | count |
  | 2015-01-01 |   1 |   1 |   1 | 14000 |
  | 2015-01-01 |   2 |   1 |   2 | 13000 |
  | 2015-01-01 |   3 |   2 |   6 | 10000 |
  | 2015-01-02 |   1 |   4 |   6 | 12000 |
  | 2015-01-02 |   2 |   5 |   1 | 10000 |
  | 2015-01-02 |   3 |   5 |   1 | 10000 |
    """)
    result = TestModule.find('2015-01-01', '2015-01-02', cid=1)

    assert_equal(result, self.parse_expected("""
  | date       | uid | pid | cid | count |
  | 2015-01-01 |   1 |   1 |   1 | 14000 |
  | 2015-01-01 |   2 |   1 |   2 | 13000 |
  | 2015-01-02 |   2 |   5 |   1 | 10000 |
  | 2015-01-02 |   3 |   5 |   1 | 10000 |
    """))

おしまい。

https://itunes.apple.com/jp/album/do-for-love/id450058343?i=450058474&uo=4&at=1l3vw5g