Login

Fuzzy testing with assertNumQueries

Author:
spookylukey
Posted:
January 12, 2011
Language:
Python
Version:
Not specified
Tags:
testing performance optimization assertNumQueries fuzzy
Score:
1 (after 1 ratings)

Django 1.3 has an assertNumQueries method which will allows you to simply specify the number of queries you expect. Sometimes, however, specifying the exact number of queries is overkill, and makes the test too brittle. This code provides a way to make more forgiving tests.

See http://lukeplant.me.uk/blog/posts/fuzzy-testing-with-assertnumqueries/

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# Django 1.3 adds 'assertNumQueries'. Here is how to do fuzzy testing 
# with this function, using a clever subclass of int.

class FuzzyInt(int):
    def __new__(cls, lowest, highest):
        obj = super(FuzzyInt, cls).__new__(cls, highest)
        obj.lowest = lowest
        obj.highest = highest
        return obj

    def __eq__(self, other):
        return other >= self.lowest and other <= self.highest

    def __repr__(self):
        return "[%d..%d]" % (self.lowest, self.highest)

class MyFuncTests(TestCase):
    def test_1(self):
        # This will fail if the number of queries is outside the range 5 to 8 inclusive
        with self.assertNumQueries(FuzzyInt(5,8)):
            my_func(some_args)

More like this

  1. compressing polygons for geodjango by showell 6 years, 2 months ago
  2. JSON-compatible query filter specification by mhalle 7 years, 5 months ago
  3. Query count decorator for TestCase by coleifer 4 years, 11 months ago
  4. Fuzzy Date Diff Template Filter by zain 6 years, 6 months ago
  5. Dynamic Test Loading by cronosa 5 years, 8 months ago

Comments

dudus (on January 20, 2011):

standard unittest already has assertAlmostEqual that seems to perform the same thing with a different approach.

#

Please login first before commenting.