Ola Fábio, na versão 6.1/trunk foi melhorada a plataforma de testes do OpenERP, na branch que eu criei para migração da localização vamos escrever testes nos módulos da localizaçao, eu já até coloque as pastas test nos módulos l10n_br, se vc tiver um tempo hoje queria ver umas coisas com vc
* Testes não independentes
* Dependencias são implicitas pela ordem de execução
* yaml é uma ferramenta péssima para fazer asserções, a sintaxe é bem
mais pesada do que python
* yaml do jeito que a openerp usou é muito complexo para definir
objetos e a sintaxe não é bem documentada
Os 3 primeiros defeitos foi o que me levou a criar o pytest-oerp, ele
não tem nenhum desses defeitos, e para o quarto problema eu estou
procurando tempo para integrar o lettuce com o pytest e o openerp,
basicamente é portar esse código:
https://github.com/italomaia/flask-lettuce/blob/master/flask_lettuce.py
para o pytest e oerp.
Ah e sobre o uso interno de testes no openerp é muito muito fraco,
alguns modulos só tem testes e eles são muito superficiais, testando
só o muito básico.
O lettuce é um port do cucumber e é exatamente por isso que estou
querendo portar ele para rodar dentro do pytest, assim dá para rodar
os testes de aceitação/bdd junto com os outros testes e com suporte a
independencia e transações. :)
neste caso, te aconselho de olhar do lado do OERPScenario da CampToCamp (que usa a meu connector OOOR dentro):Pois ele faz exactamente o que vc quer aqui.Veja so um resultado:Melhor do que isso fica dificil.Bom agora, parece que os caras da OpenERP SA sao meio limitado ao Python, entao nao sei se foi por isso o pela vontade de re-inventar a roda que eles fizeram o framework deles, mas enfim, re-inventaram.
Em 17 de novembro de 2011 16:08, Raphael Valyi <rva...@gmail.com> escreveu:neste caso, te aconselho de olhar do lado do OERPScenario da CampToCamp (que usa a meu connector OOOR dentro):Pois ele faz exactamente o que vc quer aqui.Veja so um resultado:Melhor do que isso fica dificil.Bom agora, parece que os caras da OpenERP SA sao meio limitado ao Python, entao nao sei se foi por isso o pela vontade de re-inventar a roda que eles fizeram o framework deles, mas enfim, re-inventaram.
O framework do openerp não parece com o cucumber, é na verdade muito pior. O importante de usar só uma linguagem num sistema como o openerp é justamente tu não ter que ser bom em duas linguagens ao mesmo tempo, principalmente no aso de ruby e python que tem o mesmo poder de abstração usar ambas faz muito pouco sentido.
O problema que eu vejo do openerpscenario é o não controle das transações porque ele usa a api de rpc do open que não tem suporte a transações o que limita muito em como separar um teste do outro.
A lettuce é um port do cucumber para python e funciona muito bem, e além de tudo é feita por brasileiros então o suporte a testes em português é bem bom.
Ola Cristiano,
neste caso, te aconselho de olhar do lado do OERPScenario da CampToCamp (que usa a meu connector OOOR dentro):Pois ele faz exactamente o que vc quer aqui.Veja so um resultado:
Melhor do que isso fica dificil.
Bom agora, parece que os caras da OpenERP SA sao meio limitado ao Python, entao nao sei se foi por isso o pela vontade de re-inventar a roda que eles fizeram o framework deles, mas enfim, re-inventaram.
Em final de conta, acho que podemos ter alguns testes simples da localizaçao com o framework da OpenERP pois ele nao necessita nehnuma infraestrutura. Como falei, seria um começo e da para testar ja o basico com isso.
Agora, para um projeto de integraçao real, na minha opinao vale a pena investir em coisa que nem a OERPScenario. Ou simplesmente parar apenas no RSpec e nem mexer com Cucumber caso precisa de agilidade e nao tem ninguem de nao tecnico que ia ler. Ou qualquer outra tecnologia do tipo.
Mas na minha opinao isso ja vai alem do projeto da localizaçao e faz mais parte do jeito que cada um tem de controlar as instalaçoes que ele faz. Pois quando nao se trata do basico, muitas empresas vao ter um jeito bem particular de funcionar. O que vai importar vai ser mais testar que tudo funciona bem de acordo com o funcionamento da empresa e os varios modulos presentes nessa instalaçao X. Entao acho que é um assunto interessante, mas na minha opinao ultrapasse o scope da localizaçao.
Vou pegar um exemplo: quero fazer um teste sophisticado completo: do pedido de venda ate o pagamento: algumas empresas faturam em cima do orçado, outras em cima das expediçoes, outras nem faturam exactamente o que foi orçado (projetos). Uma empresas receber o pagamento antes da nota fiscal, outras depois. Ai, nessas explosao de combinaçoes, voce ja nem consegue fazer um teste que vai ser portavel suficentemente, ele quasi sempre vai ficar quebrado. Por isso na minha opinao isso deve ser feito apenas na hora de testar uma implementaçao X, provavelmente re-aproveitando pedaços de outros testes.
Vc poderia me mandar um exemplo de como vc se utiliza de transações em BDD ?
Como eu só faço testes "caixa preta" e normalmente a partir da interface
de usuário, eu nunca precisei trabalhar diretamente com isso, no máximo
eu executo (e as vezes reuso) um ou outro cenário para poder Definir um
Contexto para o teste (por exemplo, adicionar um registro no banco)
Veja um pedaço de um cenário em um sistema que fiz (tá cortado):
História: Lançamento de Nota Fiscal
Cenário: Auxiliar Administrativo deve poder lançar nota de serviço com
mão de obra, de fornecedor não optante do simples, para dois centros de
custo e
pagamento em 3 vezes.
// Serviços com mão de obra exigem que se selecione uma categoria que
tenha o imposto INSS associado, como Segurança.
Dado que exista os seguintes dados na tabela "Categorias":
|codigo|Descrição|
|1|Serviço de Vigilância|
E que o usuário 0001 esteja devidamente autenticado com Auxiliar de
Administrativo
E a página corrente seja "Lançamento de Contas a Pagar"
Quando o usuário preenche o formulário "Conta a Pagar" com os seguintes
dados:
|usuario|fornecedor|optanteSimples|dataReferencia|tipoDocumento|dataEmissao|...
|0001|1|não|19/09/2009|NFS-A|15/09/2009|....
E preenche o formulário "Lançamentos" com os seguintes dados:
|centroCusto|valor|categoriaLancamento|
|1|5000,00|Serviço de Vigilância|
|2|5000,00|Serviço de Vigilância|
Então o sistema apresenta o formulário "Impostos" preenchido com os
seguintes valores calculados:
....
abs
Cristiano
2011/11/17 Leonardo Santagada <sant...@proge.com.br>Em 17 de novembro de 2011 16:08, Raphael Valyi <rva...@gmail.com> escreveu:neste caso, te aconselho de olhar do lado do OERPScenario da CampToCamp (que usa a meu connector OOOR dentro):Pois ele faz exactamente o que vc quer aqui.Veja so um resultado:Melhor do que isso fica dificil.Bom agora, parece que os caras da OpenERP SA sao meio limitado ao Python, entao nao sei se foi por isso o pela vontade de re-inventar a roda que eles fizeram o framework deles, mas enfim, re-inventaram.
O framework do openerp não parece com o cucumber, é na verdade muito pior. O importante de usar só uma linguagem num sistema como o openerp é justamente tu não ter que ser bom em duas linguagens ao mesmo tempo, principalmente no aso de ruby e python que tem o mesmo poder de abstração usar ambas faz muito pouco sentido.
O problema que eu vejo do openerpscenario é o não controle das transações porque ele usa a api de rpc do open que não tem suporte a transações o que limita muito em como separar um teste do outro.O problema é que o framework vai te fazer varios commits em muitos lugares (so procurar cr.commit() nos addons, nao falta). Por isso, de qualquer forma acho que é melhor usar os "savepoints" do Postgres caso quiser tentar re-approveitar os testes melhor. Caso quiser usar savepoints, nao faz diferençà se vc esta do lado client que nem no OERPScenario.
A minha opinao sobre os linguagens nao é a mesma: considero que nessa altura aprender varias linguagens abre os horizontes e deixa o programador melhor. Pois ja estamos falando de um certo nivel para mexer com um ERP, mas enfim, cada um tem a sua opinao.
De qualquer forma, acho que qualquer iniciativa a respeito de testar mais e boa, embora o framework de test. Depois sempre tera um jeito de integrar os testes que um ou outro faz. Por examplo, mesmo que ainda nao integrados, varias regressoes ja foram detectadas pela CampToCamp com o OERPScenario deles.A lettuce é um port do cucumber para python e funciona muito bem, e além de tudo é feita por brasileiros então o suporte a testes em português é bem bom.
Em geral e boto mais confiança (e procurar entender as escolhas delas) nas pessoas capaz de fazer o original do que apenas produzir uma copia, mas esse Lettuce e provavelmente bem valido tambem.
Por exemplo, tu num teste pode configurar o OpenERP para por default
fazer uma operação, no fim do teste tu não precisa limpar as
preferencias de volta porque a transação criada durante o teste vai
receber um rollback. Outro exemplo é se tu cria um objeto em
especifico e modifica ele e testa, quando for rodar o teste de novo
poderia acontecer um erro porque o objeto já existe (por exemplo se
ele tem campos que não permitem duplicados no postgresql). Outro
exemplo é a independencia dos testes, um teste pode falhar ou passar
porque outro rodou antes, e ai quando for rodar apenas um teste ele
falha, ou o pior, em produção a feature não funciona.
Isso tu usa na parte de implementação do BDD, no arquivo do
lettuce/cocumber teoricamente tu não ve diferença nenhuma, só na parte
em python que implementa o teste e no aumento consideravel de robustes
e utilidade do teste.
Agora entendi o seu ponto... :)
Sem dúvida essa independência é mesmo necessária...
No meu caso, para isso, eu me utilizo de um módulo que criei em cima do
jbehave que usa o JPA.
A cada teste, eu faço uma "limpeza da base de dados" (faço um drop) e
configuro um novo contexto (faço uma carga de dados) para o próximo
teste ... QQ dia desse vou tentar com rollback para ver se dá diferença
na performance..
valeu
abs
Olha depende da tua base, mas é pra ser de 10x a milhões de vezes mais
rápido (no caso do openerp). A base com os modulos da localização e
tudo mais leva uns bons 20 segundos para ser carregado, enquanto um
rollback de transação (numa maquina com pg configurado para
desenvolvimento) leva alguns milisegundos.