I would just be scared that some minor issues are different between the
database implementations - therefore some test that would work in the tests
and during development, doesn't work in production.

I usually try to use the same things in production and development (or as
close as possible).

That being said - Tests that take 300 minutes is just too much :-)

We have around 750 tests are it takes around 5 minutes to run - Something
that I find to be too long still....

Regards,

Andréas


Den lör 15 sep. 2018 kl 02:29 skrev Mike Dewhirst <[email protected]>:

> +1 Andréas
>
> One of my projects runs (currently) 1,248 tests using SQLite3 in 72
> minutes on my local Windows 10 dev laptop. That laptop has both a SSD
> and a hard disk. Foolishly I opted to use the SSD for software
> installations and the hard disk for development and thus the tests. I
> was concerned that overexercising the SSD might wear it out. I've since
> been advised that I shouldn't worry so one of these days I'll reorganise
> things and maybe see that 72 minutes drop somewhat.
>
> However, those same tests take 285 minutes on a headless PC running
> Ubuntu 16.04 LTS server with Postgres 9.6
>
> There are only one or two tests which generate slightly different error
> messages between SQLite3 and Postgres and that is trivial to manage.
>
> Most tests are database heavy, requiring queries and calling/testing
> model methods.
>
> Consequently, I use - and recommend - SQLite for dev tests and Postgres
> for deployment testing.
>
> Cheers
>
> Mike
>
> On 15/09/2018 1:45 AM, Andréas Kühne wrote:
> > Hi,
> >
> > Just my 5 cents. I think you are doing the tests wrong. I don't
> > believe that doing testing against hard coded values is at all correct
> > - and it isn't actually that hard to change the tests to a simpler
> > way. The values of the PK's aren't really necessary for your test to
> > be true either - how does that translate to a real use case? You
> > should probably check for A value in the pk field, but not a specific
> > value, because that doesn't result in any added value for your customer?
> >
> > Also changing the way django runs tests feels like working against the
> > framework rather than with it? I would probably much prefer changing
> > the tests than changing the way the framework runs my tests....
> > Another issue you may face is if Django changes the underlying code,
> > then you will get strange failures as well...
> >
> > I don't think that 70 tests is that much to change either - we work
> > with a project that could fail a considerable amount of tests during a
> > refactor - and then we need to fix them. The same goes here I think -
> > you did a change to the infrastructure that made the tests invalid -
> > rewrite the tests :-)
> >
> > Best regards,
> >
> > Andréas
> >
> >
> > Den fre 14 sep. 2018 kl 17:32 skrev Hezi Halpert <[email protected]
> > <mailto:[email protected]>>:
> >
> >     I would like to share with you an issue we encounter while moving
> >     from sqlite to postgres with heavily use of Django testing.
> >
> >     We have Django app with ~700 tests. Most of them accessing
> >     database. We recently migrated the database from sqlite to postgres.
> >     Many of our tests were written in a way that compares actual pk’s
> >     (hard-coded pks or just file/json comparisons) . Since Django
> >     testing on sqlite (testcases.TestCase class) creates in-memory
> >     database (which is being reseted every unit test by default), we
> >     never had a problem with it.
> >     However, Django TestCase on postgres create completely another
> >     test db which preserves the pk sequences between different tests.
> >     And since many of our tests were written in a way that compares
> >     actual pk’s they all start fail - depends on the exact tests
> >     execution order.
> >     Even tests which expect some pk and are were not failed yet, can
> >     potentially failed in the future - depends on adding/editing other
> >     tests which may change the db sequence
> >
> >     We consider the following solutions:
> >
> >      1. Move to TransactionTestCase (instead of TestCase) and use
> >         “reset_sequences = True” flag. Cons:
> >         TransactionTestCase reduces performance dramatically (~4 times
> >         longer in some of the tests)
> >      2. Refactor all failed tests: remove all hard-coded references to
> >         the pk. Cons: Require much Dev effort (we had more then 70
> >         such tests)
> >      3. Route the database in settings.py such it will use sqlite
> >         instead of postgres when running tests. Cons: It will not
> >         actually test the real scenarios - not an option
> >      4. Combine reset_sequences flag with TestCase in our own version
> >         to TestCase: OurTestCase class and make everything to inherit
> >         from it. This is the option we finally decided of. See below.
> >
> >
> >     fromdjango.test import TestCase, testcases
> >
> >     class OurTestCase(TestCase):
> >          reset_sequences =True def _fixture_setup(self):
> >              for db_namein self._databases_names(include_mirrors=False):
> >     if self.reset_sequences:
> >                      self._reset_sequences(db_name)
> >                  if self.fixtures:
> >     call_command('loaddata', *self.fixtures,
> **{'verbosity':0,'database': db_name})
> >              if not testcases.connections_support_transactions():
> >     self.setUpTestData()
> >                  return super(TestCase,self)._fixture_setup()
> >              self.atomics =self._enter_atomics()
> >
> >     Another problem of these kind of tests is the default ordering
> >     assumption of Django which changes significantly between postgres
> >     and sqlite when testing.
> >     Therefore, models included in such tests must have a hint for
> >     Django regarding the default ordering retrieval.
> >     Our solution was to make all models inherit from
> >     DexterModelDefaultOrder (below)
> >
> >
> >     class DexterModelDefaultOrder(models.Model):
> >          class Meta:
> >              abstract =True ordering = ['id']
> >
> >     I hope it (will) help someone
> >
> >     --
> >     You received this message because you are subscribed to the Google
> >     Groups "Django users" group.
> >     To unsubscribe from this group and stop receiving emails from it,
> >     send an email to [email protected]
> >     <mailto:[email protected]>.
> >     To post to this group, send email to [email protected]
> >     <mailto:[email protected]>.
> >     Visit this group at https://groups.google.com/group/django-users.
> >     To view this discussion on the web visit
> >
> https://groups.google.com/d/msgid/django-users/ffcd3cc9-c3be-44ba-9665-a4ded5fed492%40googlegroups.com
> >     <
> https://groups.google.com/d/msgid/django-users/ffcd3cc9-c3be-44ba-9665-a4ded5fed492%40googlegroups.com?utm_medium=email&utm_source=footer
> >.
> >     For more options, visit https://groups.google.com/d/optout.
> >
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Django users" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> > an email to [email protected]
> > <mailto:[email protected]>.
> > To post to this group, send email to [email protected]
> > <mailto:[email protected]>.
> > Visit this group at https://groups.google.com/group/django-users.
> > To view this discussion on the web visit
> >
> https://groups.google.com/d/msgid/django-users/CAK4qSCeeyDaUnTb95uO_LpdkLknS-V6tWtm8q3%2BY58FgEs_AnQ%40mail.gmail.com
> > <
> https://groups.google.com/d/msgid/django-users/CAK4qSCeeyDaUnTb95uO_LpdkLknS-V6tWtm8q3%2BY58FgEs_AnQ%40mail.gmail.com?utm_medium=email&utm_source=footer
> >.
> > For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/bf694e3d-2916-bfe9-0335-55deb2e6e3d8%40dewhirst.com.au
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAK4qSCfDAMDaJ-5KqEG_isydLTiXRCfY1qg3yi1Mretw0tJC1A%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to