Я использую метаклассы и декораторы для генерации тестов. Вы можете проверить мою реализацию python_wrap_cases .
Ваш пример:
import unittest
from python_wrap_cases import wrap_case
@wrap_case
class TestSequence(unittest.TestCase):
@wrap_case("foo", "a", "a")
@wrap_case("bar", "a", "b")
@wrap_case("lee", "b", "b")
def testsample(self, name, a, b):
print "test", name
self.assertEqual(a, b)
Консольный выход:
testsample_u'bar'_u'a'_u'b' (tests.example.test_stackoverflow.TestSequence) ... test bar
FAIL
testsample_u'foo'_u'a'_u'a' (tests.example.test_stackoverflow.TestSequence) ... test foo
ok
testsample_u'lee'_u'b'_u'b' (tests.example.test_stackoverflow.TestSequence) ... test lee
ok
Также вы можете использовать генераторы . Например, этот код генерирует все возможные комбинации тестов с аргументами a__list
и b__list
import unittest
from python_wrap_cases import wrap_case
@wrap_case
class TestSequence(unittest.TestCase):
@wrap_case(a__list=["a", "b"], b__list=["a", "b"])
def testsample(self, a, b):
self.assertEqual(a, b)
Выход консоли:
testsample_a(u'a')_b(u'a') (tests.example.test_stackoverflow.TestSequence) ... ok
testsample_a(u'a')_b(u'b') (tests.example.test_stackoverflow.TestSequence) ... FAIL
testsample_a(u'b')_b(u'a') (tests.example.test_stackoverflow.TestSequence) ... FAIL
testsample_a(u'b')_b(u'b') (tests.example.test_stackoverflow.TestSequence) ... ok
Вы можете попробовать следующий запрос агрегации, который использует атрибут max: http://docs.mongodb.org/manual/reference/operator/aggregation/max/
db.collection.aggregate([
$group: {
"_id": "$session",
"age": { $max: "$age" }
},
{ $out : "max_age" }
])
Результаты должны выводиться в новую коллекцию max_age, а затем вы можете сбросить ее в csv.
Примечание: он даст только сеанс и максимальный возраст и не вернет другие поля.
Агрегация MongoDB предлагает оператор $max
, но в вашем случае вы хотите, чтобы «целая» запись была такой, какая есть. Таким образом, подходящей задачей является $sort
, а затем использовать оператор $first
в инструкции $group
:
db.collection.aggregate([
{ "$sort": { "session": 1, "age": -1 } },
{ "$group": {
"_id": "$session",
"age": { "$first": "$age" },
"firstName": { "$first" "$firstName" },
"lastName": { "$first": "$lastName" }
}}
])
Таким образом, «сортировка» получает право порядка, а «группировка» выбирает первое вхождение в ключ «группировки», где эти поля существуют.
В основном $first
здесь, потому что $sort
выполняется в обратном порядке. Вы также можете использовать $last
в порядке возрастания.