pythonのTestでテストケースの動的追加

チェック処理は同じでデータが違うときなどにいちいちtest_aaa、test_bbbと定義するのがめんどくさい時に以下のようにすると楽になる話。

from unittest import TestCase

import requests


class Test(TestCase):
    pass


for user_id in xrange(1, 10):
    def wrapper(user_id):
        def f(self):
            response = requests.get('/users/{}'.format(user_id))
            self.assertEqual(response.status_code, 200)
        return f

    setattr(Test, 'test_user_{}'.format(user_id), wrapper(user_id))