Django Dynamic Fixture

31 views
Skip to first unread message

Paulo Cheque

unread,
Mar 8, 2011, 8:39:40 AM3/8/11
to Django Brasil
Pra quem faz testes com Django já deve ter percebido que usar as
fixtures é uma péssima ideia. Há uma lista de ferramentas que ajudam a
trabalhar com fixtures (djangopackages.com/grids/g/fixtures), mas só
divulgando a Django Dynamic Fixture (code.google.com/p/django-dynamic-
fixture) que acho que é a mais simples e completa.

abs
Paulo
pythonsmalltalk.blogspot.com

vanders...@gmail.com

unread,
Mar 8, 2011, 9:55:00 AM3/8/11
to django...@googlegroups.com, Paulo Cheque
instance_of_modelx = get(ModelX) # get save the model instance

Só achei que "get" pra salvar uma instância muito estranho.


[]'s

> --
> Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
> Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>

--
Vanderson Mota dos Santos

Matheus Rosa

unread,
Mar 8, 2011, 8:55:25 AM3/8/11
to django...@googlegroups.com
Em 08-03-2011 10:39, Paulo Cheque escreveu:
> Pra quem faz testes com Django j� deve ter percebido que usar as
> fixtures � uma p�ssima ideia. H� uma lista de ferramentas que ajudam a
> trabalhar com fixtures (djangopackages.com/grids/g/fixtures), mas s�

> divulgando a Django Dynamic Fixture (code.google.com/p/django-dynamic-
> fixture) que acho que � a mais simples e completa.
>
> abs
> Paulo
> pythonsmalltalk.blogspot.com
>
Obrigado pela dica.

[]'s

Matheus Rosa

Paulo Cheque

unread,
Mar 8, 2011, 10:43:58 AM3/8/11
to vanders...@gmail.com, django...@googlegroups.com
É em analogia ao que fazemos com fixtures estáticas. No setup fazemos
algo como x = X.objects.get(id=1) ou algo similar.

Mas tudo questão de convenção... como a ideia é usar esse método
trilhões de vezes nos testes, quanto menos poluir melhor. De qualquer
modo, pra dá pra alterar pelo import: import get as whatever_I_want

abs

2011/3/8 vanders...@gmail.com <vanders...@gmail.com>:

Mário Neto

unread,
Mar 8, 2011, 3:00:16 PM3/8/11
to django...@googlegroups.com
Uma boa para o stack de tests tbm é o model mommy[1]


[]s
Att. Mário A. Chaves Neto
Designer / U.I. Engineer
MBA - Design Digital

Paulo Cheque

unread,
Mar 13, 2011, 11:09:03 PM3/13/11
to django...@googlegroups.com, Mário Neto
Estava olhando o código agora da milkman
(https://github.com/ccollins/milkman/tree/master/milkman) e da
django-mockups (https://github.com/sorl/django-mockups). Ambas também
usam dados aleatórios.. e a impressão que tenho é que todas focam mais
na geração dos dados do que na criação das instâncias em si... a
mockup tem umas 600 linhas de código só pra gerar dados aleatórios...
apesar de que as classes estão organizadas bonitinho né..

abs

2011/3/13 Paulo Cheque <paulo...@gmail.com>:
> A mommy é bem legal. Simples, implementada com tdd... mas ela está com
> umas limitações que impedem de usá-la em certos projetos, como é meu
> caso, o qual preciso lidar com custom fields, modelos com fields auto
> calculados, m2m customizáveis.. ela ainda não atende bem a todas essas
> necessidades.
>
> A ideia de preencher os objetos com dados aleatórios também não é uma
> boa solução, apesar de também ser a solução utilizada todas as outras
> ferramentas. Dados aleatórios além de deixarem os testes intermitentes
> ainda os deixam difíceis de depurar. É mais legal usar dados mais
> legíveis e consistentes.
>
> abs
>
> 2011/3/8 Mário Neto <macnd...@gmail.com>:

Paulo Cheque

unread,
Mar 13, 2011, 10:54:12 PM3/13/11
to django...@googlegroups.com, Mário Neto
A mommy é bem legal. Simples, implementada com tdd... mas ela está com
umas limitações que impedem de usá-la em certos projetos, como é meu
caso, o qual preciso lidar com custom fields, modelos com fields auto
calculados, m2m customizáveis.. ela ainda não atende bem a todas essas
necessidades.

A ideia de preencher os objetos com dados aleatórios também não é uma
boa solução, apesar de também ser a solução utilizada todas as outras
ferramentas. Dados aleatórios além de deixarem os testes intermitentes
ainda os deixam difíceis de depurar. É mais legal usar dados mais
legíveis e consistentes.

abs

2011/3/8 Mário Neto <macnd...@gmail.com>:

vanders...@gmail.com

unread,
Mar 14, 2011, 1:10:45 PM3/14/11
to django...@googlegroups.com, Paulo Cheque, Mário Neto
Dados aleatórios além de deixarem os testes intermitentes
ainda os deixam difíceis de depurar. É mais legal usar dados mais
legíveis e consistentes.

Nos casos que você precisa de um valor específico, você diz na criação
do model. Ex:

mommy.make_one(Model, custom_field="Um valor qualquer")

Dessa forma você consegue a consistência que você deseja. O ganho
principal, é se você tiver outros campos que são obrigatórios, mas não
são utilizados no cenário de teste atual, você não precisa definir
todos eles.

[]'s

Paulo Cheque

unread,
Mar 14, 2011, 3:00:42 PM3/14/11
to vanders...@gmail.com, django...@googlegroups.com, Mário Neto
2011/3/14 vanders...@gmail.com <vanders...@gmail.com>:

> Dados aleatórios além de deixarem os testes intermitentes
> ainda os deixam difíceis de depurar. É mais legal usar dados mais
> legíveis e consistentes.
>
> Nos casos que você precisa de um valor específico, você diz na criação
> do model. Ex:
>
> mommy.make_one(Model, custom_field="Um valor qualquer")
>
> Dessa forma você consegue a consistência que você deseja. O ganho
> principal, é se você tiver outros campos que são obrigatórios, mas não
> são utilizados no cenário de teste atual, você não precisa definir
> todos eles.

Tô ligado. Esses valores estáticos são fundamentais, principalmente
para os testes de buscas onde precisamos ter certeza do que deverá ser
encontrado ou não.

Mas estava me referindo a problemas indiretos que os valores
aleatórios podem causar.
- o mais trivial (apesar de difícil de acontecer) é: gerar dois
valores iguais para um campo com unique=True. Para um teste de
sanidade isso pode ser um problema.
- falha um teste, vamos depurar, fica complicado porque aparece um
monte de string feia, que dificulta o entendimento.
- dados aleatórios não possuem um certo padrão, o que pode deixar os
casos intermitentes. Tive esse problema com o mommy e até hoje não
soube o motivo. Executava uma vez o teste e ele passava. Executava
novamente e ele falhava...

abs

vanders...@gmail.com

unread,
Mar 14, 2011, 3:26:19 PM3/14/11
to Paulo Cheque, django...@googlegroups.com, Mário Neto
- dados aleatórios não possuem um certo padrão, o que pode deixar os
casos intermitentes. Tive esse problema com o mommy e até hoje não
soube o motivo. Executava uma vez o teste e ele passava. Executava
novamente e ele falhava...

Esse problema ocorreu apenas com fields com unique=True?

vanders...@gmail.com

unread,
Mar 14, 2011, 4:25:43 PM3/14/11
to Paulo Cheque, django...@googlegroups.com, Mário Neto
Acredito que seja nos casos de unique=True. Já abri uma issue no
github: https://github.com/vandersonmota/model_mommy/issues/13

abraços!

Em 14 de março de 2011 17:22, Paulo Cheque <paulo...@gmail.com> escreveu:
> 2011/3/14 vanders...@gmail.com <vanders...@gmail.com>:

>> - dados aleatórios não possuem um certo padrão, o que pode deixar os
>> casos intermitentes. Tive esse problema com o mommy e até hoje não
>> soube o motivo. Executava uma vez o teste e ele passava. Executava
>> novamente e ele falhava...
>>
>> Esse problema ocorreu apenas com fields com unique=True?
>

> Não consegui identificar =/
> Já deletei os testes, senão mandava o código..
>
> abs!

Paulo Cheque

unread,
Mar 14, 2011, 4:22:45 PM3/14/11
to vanders...@gmail.com, django...@googlegroups.com, Mário Neto
2011/3/14 vanders...@gmail.com <vanders...@gmail.com>:

> - dados aleatórios não possuem um certo padrão, o que pode deixar os
> casos intermitentes. Tive esse problema com o mommy e até hoje não
> soube o motivo. Executava uma vez o teste e ele passava. Executava
> novamente e ele falhava...
>
> Esse problema ocorreu apenas com fields com unique=True?

Não consegui identificar =/


Já deletei os testes, senão mandava o código..

abs!

> Em 14 de março de 2011 16:00, Paulo Cheque <paulo...@gmail.com> escreveu:

Italo Maia

unread,
Mar 14, 2011, 10:14:34 PM3/14/11
to Django Brasil
Bem, não sei qual versão do mommy vc usou, mas se dava erro para gerar
um fields "às vezes", talvez seja interessante verificar se esse field
não precisa de um gerador de dados próprio ou se não há um defeito
alí. Essa é uma das qualidades de dados aleatórios, eles te permitem
fazer testes com dados que você pode não esperar. = ] Play safe!

On Mar 14, 5:22 pm, Paulo Cheque <pauloche...@gmail.com> wrote:
> 2011/3/14 vanderson.m...@gmail.com <vanderson.m...@gmail.com>:
>
> > - dados aleatórios não possuem um certo padrão, o que pode deixar os
> > casos intermitentes. Tive esse problema com o mommy e até hoje não
> > soube o motivo. Executava uma vez o teste e ele passava. Executava
> > novamente e ele falhava...
>
> > Esse problema ocorreu apenas com fields com unique=True?
>
> Não consegui identificar =/
> Já deletei os testes, senão mandava o código..
>
> abs!
>
>
>
>
>
>
>
> > Em 14 de março de 2011 16:00, Paulo Cheque <pauloche...@gmail.com> escreveu:
> >> 2011/3/14 vanderson.m...@gmail.com <vanderson.m...@gmail.com>:
> >>> Em 13 de março de 2011 23:54, Paulo Cheque <pauloche...@gmail.com> escreveu:
> >>>> A mommy é bem legal. Simples, implementada com tdd... mas ela está com
> >>>> umas limitações que impedem de usá-la em certos projetos, como é meu
> >>>> caso, o qual preciso lidar com custom fields, modelos com fields auto
> >>>> calculados, m2m customizáveis.. ela ainda não atende bem a todas essas
> >>>> necessidades.
>
> >>>> A ideia de preencher os objetos com dados aleatórios também não é uma
> >>>> boa solução, apesar de também ser a solução utilizada todas as outras
> >>>> ferramentas. Dados aleatórios além de deixarem os testes intermitentes
> >>>> ainda os deixam difíceis de depurar. É mais legal usar dados mais
> >>>> legíveis e consistentes.
>
> >>>> abs
>
> >>>> 2011/3/8 Mário Neto <macndes...@gmail.com>:
> >>>>> Uma boa para o stack de tests tbm é o model mommy[1]
> >>>>> [1] - https://github.com/vandersonmota/model_mommy
> >>>>> []s
>
> >>>>> Em 8 de março de 2011 12:43, Paulo Cheque <pauloche...@gmail.com> escreveu:
>
> >>>>>> É em analogia ao que fazemos com fixtures estáticas. No setup fazemos
> >>>>>> algo como x = X.objects.get(id=1) ou algo similar.
>
> >>>>>> Mas tudo questão de convenção... como a ideia é usar esse método
> >>>>>> trilhões de vezes nos testes, quanto menos poluir melhor. De qualquer
> >>>>>> modo, pra dá pra alterar pelo import: import get as whatever_I_want
>
> >>>>>> abs
>
> >>>>>> 2011/3/8 vanderson.m...@gmail.com <vanderson.m...@gmail.com>:
> >>>>>> > instance_of_modelx = get(ModelX) # get save the model instance
>
> >>>>>> > Só achei que "get" pra salvar uma instância muito estranho.
>
> >>>>>> > []'s
> >>>>>> > Em 8 de março de 2011 10:39, Paulo Cheque <pauloche...@gmail.com>

Italo Maia

unread,
Mar 14, 2011, 10:14:54 PM3/14/11
to Django Brasil
+1 para o model_mommy ^^

On Mar 8, 5:00 pm, Mário Neto <macndes...@gmail.com> wrote:
> Uma boa para o stack de tests tbm é o model mommy[1]
>
> [1] -https://github.com/vandersonmota/model_mommy
>
> []s
>
> Em 8 de março de 2011 12:43, Paulo Cheque <pauloche...@gmail.com> escreveu:
>
>
>
>
>
>
>
>
>
> > É em analogia ao que fazemos com fixtures estáticas. No setup fazemos
> > algo como x = X.objects.get(id=1) ou algo similar.
>
> > Mas tudo questão de convenção... como a ideia é usar esse método
> > trilhões de vezes nos testes, quanto menos poluir melhor. De qualquer
> > modo, pra dá pra alterar pelo import: import get as whatever_I_want
>
> > abs
>
> > 2011/3/8 vanderson.m...@gmail.com <vanderson.m...@gmail.com>:
> > > instance_of_modelx = get(ModelX) # get save the model instance
>
> > > Só achei que "get" pra salvar uma instância muito estranho.
>
> > > []'s
> > > Em 8 de março de 2011 10:39, Paulo Cheque <pauloche...@gmail.com>

Paulo Cheque

unread,
Mar 15, 2011, 12:00:05 AM3/15/11
to django...@googlegroups.com, Italo Maia
2011/3/14 Italo Maia <italo...@gmail.com>:

> +1 para o model_mommy ^^

Software livre não é sobre competição.

abs

Paulo Cheque

unread,
Mar 15, 2011, 12:05:39 AM3/15/11
to django...@googlegroups.com, Italo Maia
2011/3/14 Italo Maia <italo...@gmail.com>:

> Bem, não sei qual versão do mommy vc usou, mas se dava erro para gerar
> um fields "às vezes", talvez seja interessante verificar se esse field
> não precisa de um gerador de dados próprio ou se não há um defeito
> alí. Essa é uma das qualidades de dados aleatórios, eles te permitem
> fazer testes com dados que você pode não esperar. = ] Play safe!

Isso são testes aleatórios, um teste de sanidade... ai bacana!
Usar dados aleatórios pra fazer teste de um comportamento definido,
seja teste de unidade ou de integração, ai como já argumentei nos
e-mails anteriores, não acho legal.
Mas bola pra frente e evoluir cada vez mais as ferramentas!

abs!

Italo Maia

unread,
Mar 15, 2011, 12:29:41 AM3/15/11
to Django Brasil
Competindo? Não não, é que eu uso! = ]

> Isso são testes aleatórios, um teste de sanidade... ai bacana!
> Usar dados aleatórios pra fazer teste de um comportamento definido,
> seja teste de unidade ou de integração, ai como já argumentei nos
> e-mails anteriores, não acho legal.
> Mas bola pra frente e evoluir cada vez mais as ferramentas!

Tah bom, gosto é gosto = ]

On Mar 15, 1:00 am, Paulo Cheque <pauloche...@gmail.com> wrote:
> 2011/3/14 Italo Maia <italo.m...@gmail.com>:

Heigler

unread,
Mar 15, 2011, 8:08:57 AM3/15/11
to Django Brasil
Muito bacana essas ferramentas, eu não conhecia nenhuma delas, hoje
uma das coisas que mais sofro com testes são as fixtures.
Ótimo tópico!

Abraços,
Reply all
Reply to author
Forward
0 new messages