SlideShare uma empresa Scribd logo
Globalcode – Open4education
Como melhoramos a performance dos testes
automatizados com py.test e factoryboy
por Leonardo Galani
Globalcode – Open4education
Globalcode – Open4education
Era uma vez um contexto…
Automação linda, rodando em ambiente de
Integração
Equipe de desenvolvimento usando python para
desenvolvimento
Testers usando usando linguagens diferentes para
desenvolver testes “afastados" da equipe de
desenvolvimento.
Globalcode – Open4education
Globalcode – Open4education
Globalcode – Open4education
Globalcode – Open4education
Olhando mais de perto…
Erros só eram encontrados quando eram executados
pelo Jenkins
Pessoal não dava muita bola e como não entendiam
muito bem porque estava falhando, deixava de lado o
problema.
Muito teste e código duplicado em algumas equipes e
métodos mirabolantes para validações simples.
Globalcode – Open4education
Globalcode – Open4education
import unittest
class SomethingTestCase(unittest.TestCase):
def test_something(self):
self.assertNotEqual('foo'.upper(), 'FOO')
Globalcode – Open4education
def test_something():
assert 'foo'.upper() != 'FOO'
Globalcode – Open4education
def test_something():
assert 'foo'.upper() == 'FOO'
def test_something2():
assert 'foo'.upper() in ['FOO', ‘foo']
def test_zero_division():
with pytest.raises(ZeroDivisionError):
10 / 2
1 / 0
Globalcode – Open4education
import pytest
@pytest.fixture
def name():
return obj(first='Baltazar', last='Barata')
@pytest.fixture
def course():
return ‘desenvolvimento de sistemas'
@pytest.fixture
def student(name, course):
return Student(first_name=name.first,
last_name=name.last,
couse=course)
def test_student(student):
assert student.first_name == 'Baltazar'
assert student.last_name == 'Barata'
Globalcode – Open4education
Globalcode – Open4education
import factory
from . import models
class StudentFactory(factory.Factory):
class Meta:
model = models.Student
first_name = 'Baltazar'
last_name = 'Barata'
course = ‘Analise e desenvolvimento’
- - -
import factory
def some_test():
student = StudentFactory()
otherStudent = StudentFactory(first_name=‘Leonardo’)
assert otherStudent.first_name == ‘Leonardo’
#poderia também realizar um loop para gerar Jsons dinâmicos
Globalcode – Open4education
Globalcode – Open4education
import factory
from factory import fuzzy
from factory_rest import RestFactory
import requests
class StudentFactory(RestFactory):
class Meta:
create_url = ‘http://api.endpoint.com/student'
create_method = 'post'
request_session = requests.session()
code = fuzzy.FuzzyText()
first_name = fuzzy.FuzzyText()
last_name = fuzzy.FuzzyText()
course = factory.SubFactory(CourseFactory)
- - -
Student = StudentFactory(course__course_name=‘marketing')
Globalcode – Open4education
Globalcode – Open4education
Marca
Pacote Licença
Produto
Produto
Marca
Sistema 1 Sistema 2
Globalcode – Open4education
Marca
model
no factory boy
Pacote
Licença
model
no factory boy
Produto
model
no factory boy
Produto
model
no factory boy
Marca
model
no factory boy
Sistema 1 Sistema 2
model
no factory boy
Globalcode – Open4education
requests.session
para sistema1
fixture
requests.session
para sistema2
fixture
Tokens e Headers
fixture
Massa especifica para
N cenários
fixture
Globalcode – Open4education
Conclusão
py.test é um incrível ferramenta de teste
(“framework de automação")
FactoryBoy é uma ótima opção para geração de
dependências / massa de teste
As duas ferramentas podem ser usadas tanto para
teste de aceitação / funcional, quanto para testes
unitários, logo a adoção do padrão por toda equipe
é muito mais fácil e desenvolvedores conseguem
extender testes funcionais se necessário.
Globalcode – Open4education
Globalcode – Open4education
the end.
agiletesters.com.br
keeptesting.com.br
lazytester.com
factoryboy.readthedocs.org
https://github.com/bertonha (factory_rest)
titansgroup.com.br
Titans está contratando! rh@titansgroup.com.br

Mais conteúdo relacionado

PPT
Tdc2014 - Guia do Tester Técnico das Galáxias
PPTX
Automatizando seus testes com robot framework
PPTX
Testes de integração em microservices
PPTX
Automatizando seus testes com Robot Framework
PDF
TDC2016POA | Trilha JavaScript - Porque eu deveria usar TypeScript?
PDF
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
PDF
Java7 tdc2011
PDF
Testes, deploy e integração continua com Python e Django
Tdc2014 - Guia do Tester Técnico das Galáxias
Automatizando seus testes com robot framework
Testes de integração em microservices
Automatizando seus testes com Robot Framework
TDC2016POA | Trilha JavaScript - Porque eu deveria usar TypeScript?
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
Java7 tdc2011
Testes, deploy e integração continua com Python e Django

Mais procurados (20)

ODP
PHPUnit e teste de software
PDF
TDD em django sem desculpas versao fisl
PDF
TDD com Python
PDF
Novidades do c#6
PDF
Novidades do C#6
PDF
Testando Aplicações Django: Quando, Como e Onde?
PDF
Tem que testar mesmo?
PDF
Como você testa seu software TDC 2017
PDF
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
PPT
Programação Funcional usando C#
PDF
Testes de unidade e TDD SoLiSC 2011
PDF
Tdd em django sem desculpas versao final
PPT
Abordagem Funcional para Gerenciamento de Erros em .NET
PDF
[Curso Java Basico] Aula 17: Loop for
PDF
Testes unitários como ferramentas de design de código
PPTX
Depuração de software
PPTX
TDC 2012 TDD e 20 coisas que você precisa saber
ODP
Qualidade no desenvolvimento de software com PHPUnit
PPTX
Tdd da teoria a pratica
PHPUnit e teste de software
TDD em django sem desculpas versao fisl
TDD com Python
Novidades do c#6
Novidades do C#6
Testando Aplicações Django: Quando, Como e Onde?
Tem que testar mesmo?
Como você testa seu software TDC 2017
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
Programação Funcional usando C#
Testes de unidade e TDD SoLiSC 2011
Tdd em django sem desculpas versao final
Abordagem Funcional para Gerenciamento de Erros em .NET
[Curso Java Basico] Aula 17: Loop for
Testes unitários como ferramentas de design de código
Depuração de software
TDC 2012 TDD e 20 coisas que você precisa saber
Qualidade no desenvolvimento de software com PHPUnit
Tdd da teoria a pratica
Anúncio

Semelhante a Como melhoramos a performance dos testes automatizados com py.test e factoryboy (20)

PDF
Introducao Spring ROO
PDF
JSF 2.0: Uma Evolução nas Interfaces Web com Java
PDF
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
PDF
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
PDF
Automação de testes em projetos ágeis
PDF
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
PDF
Testes de unidade na prática
PDF
Testes Funcionais com Selenium
ODP
TDC 2014 SP - E o DeltaSpike ?
PDF
TDC 2016 Trilha Testes - Floripa
PDF
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
PDF
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
PPT
TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
PDF
Android: testes automatizados e TDD
PDF
Demoiselle Behave - Parte 2
PPTX
Code Smells
PDF
Testes para Android de ponta a ponta
PDF
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
PDF
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
PDF
Dojo com Arduino e Program-ME
Introducao Spring ROO
JSF 2.0: Uma Evolução nas Interfaces Web com Java
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
Automação de testes em projetos ágeis
TDC2018SP | Trilha Python - Nao e magia, e tecnologia
Testes de unidade na prática
Testes Funcionais com Selenium
TDC 2014 SP - E o DeltaSpike ?
TDC 2016 Trilha Testes - Floripa
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
Android: testes automatizados e TDD
Demoiselle Behave - Parte 2
Code Smells
Testes para Android de ponta a ponta
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Dojo com Arduino e Program-ME
Anúncio

Último (20)

PDF
MIP - soja.- pragas da cultura e seu controle
PPT
1 - Introdução a disciplina ciencia o solo.ppt
PDF
Aspectos Gerais da area de Instrumentacao.pdf
PPTX
Física I - 01 e 02 - Introdução ao método Científico.pptx
PPT
Aula_2_Atomo distribuiçao eletronica.ppt
PDF
Maqinas1(ENCANAMENTOS E ACESSORIOS)2.pdf
PDF
Material referente a introdução a instr.
PDF
Aula 01 INT. EnnnnnnnnnnnnnnENF.pdf 2.pdf
PPTX
TREINAMENTO DE NORMA REGULAMENTADORA NR2
PPTX
erro balela so para baixar naã perca tempo.pptx
PDF
1 - Fundamentos Básicos da Transferência de Calor.pdf
PDF
Boas práticas em rebobinamento trifásico .pdf
PDF
Aula_04 gestão da manutenção _Custos da manutencão.pdf
PDF
2 - Equação de Condução de Calor - (Coordenadas Retangulares, Cilíndricas e E...
PDF
Análise do concreto permeável com adição de resíduos
PPTX
Fund-proc-moagem-carvaoerde_PPT_v007.pptx
PDF
Manutenção de motores de indução trifésicos.pdf
PPT
O gênero resumo O gênero resumo O gênero
PDF
eletronica-basica_capitulo_01_2017_1s.pdf
PPTX
Treinamento em powerpoint para integração de colaboradores em fábrica de pequ...
MIP - soja.- pragas da cultura e seu controle
1 - Introdução a disciplina ciencia o solo.ppt
Aspectos Gerais da area de Instrumentacao.pdf
Física I - 01 e 02 - Introdução ao método Científico.pptx
Aula_2_Atomo distribuiçao eletronica.ppt
Maqinas1(ENCANAMENTOS E ACESSORIOS)2.pdf
Material referente a introdução a instr.
Aula 01 INT. EnnnnnnnnnnnnnnENF.pdf 2.pdf
TREINAMENTO DE NORMA REGULAMENTADORA NR2
erro balela so para baixar naã perca tempo.pptx
1 - Fundamentos Básicos da Transferência de Calor.pdf
Boas práticas em rebobinamento trifásico .pdf
Aula_04 gestão da manutenção _Custos da manutencão.pdf
2 - Equação de Condução de Calor - (Coordenadas Retangulares, Cilíndricas e E...
Análise do concreto permeável com adição de resíduos
Fund-proc-moagem-carvaoerde_PPT_v007.pptx
Manutenção de motores de indução trifésicos.pdf
O gênero resumo O gênero resumo O gênero
eletronica-basica_capitulo_01_2017_1s.pdf
Treinamento em powerpoint para integração de colaboradores em fábrica de pequ...

Como melhoramos a performance dos testes automatizados com py.test e factoryboy

  • 1. Globalcode – Open4education Como melhoramos a performance dos testes automatizados com py.test e factoryboy por Leonardo Galani
  • 3. Globalcode – Open4education Era uma vez um contexto… Automação linda, rodando em ambiente de Integração Equipe de desenvolvimento usando python para desenvolvimento Testers usando usando linguagens diferentes para desenvolver testes “afastados" da equipe de desenvolvimento.
  • 7. Globalcode – Open4education Olhando mais de perto… Erros só eram encontrados quando eram executados pelo Jenkins Pessoal não dava muita bola e como não entendiam muito bem porque estava falhando, deixava de lado o problema. Muito teste e código duplicado em algumas equipes e métodos mirabolantes para validações simples.
  • 9. Globalcode – Open4education import unittest class SomethingTestCase(unittest.TestCase): def test_something(self): self.assertNotEqual('foo'.upper(), 'FOO')
  • 10. Globalcode – Open4education def test_something(): assert 'foo'.upper() != 'FOO'
  • 11. Globalcode – Open4education def test_something(): assert 'foo'.upper() == 'FOO' def test_something2(): assert 'foo'.upper() in ['FOO', ‘foo'] def test_zero_division(): with pytest.raises(ZeroDivisionError): 10 / 2 1 / 0
  • 12. Globalcode – Open4education import pytest @pytest.fixture def name(): return obj(first='Baltazar', last='Barata') @pytest.fixture def course(): return ‘desenvolvimento de sistemas' @pytest.fixture def student(name, course): return Student(first_name=name.first, last_name=name.last, couse=course) def test_student(student): assert student.first_name == 'Baltazar' assert student.last_name == 'Barata'
  • 14. Globalcode – Open4education import factory from . import models class StudentFactory(factory.Factory): class Meta: model = models.Student first_name = 'Baltazar' last_name = 'Barata' course = ‘Analise e desenvolvimento’ - - - import factory def some_test(): student = StudentFactory() otherStudent = StudentFactory(first_name=‘Leonardo’) assert otherStudent.first_name == ‘Leonardo’ #poderia também realizar um loop para gerar Jsons dinâmicos
  • 16. Globalcode – Open4education import factory from factory import fuzzy from factory_rest import RestFactory import requests class StudentFactory(RestFactory): class Meta: create_url = ‘http://api.endpoint.com/student' create_method = 'post' request_session = requests.session() code = fuzzy.FuzzyText() first_name = fuzzy.FuzzyText() last_name = fuzzy.FuzzyText() course = factory.SubFactory(CourseFactory) - - - Student = StudentFactory(course__course_name=‘marketing')
  • 18. Globalcode – Open4education Marca Pacote Licença Produto Produto Marca Sistema 1 Sistema 2
  • 19. Globalcode – Open4education Marca model no factory boy Pacote Licença model no factory boy Produto model no factory boy Produto model no factory boy Marca model no factory boy Sistema 1 Sistema 2 model no factory boy
  • 20. Globalcode – Open4education requests.session para sistema1 fixture requests.session para sistema2 fixture Tokens e Headers fixture Massa especifica para N cenários fixture
  • 21. Globalcode – Open4education Conclusão py.test é um incrível ferramenta de teste (“framework de automação") FactoryBoy é uma ótima opção para geração de dependências / massa de teste As duas ferramentas podem ser usadas tanto para teste de aceitação / funcional, quanto para testes unitários, logo a adoção do padrão por toda equipe é muito mais fácil e desenvolvedores conseguem extender testes funcionais se necessário.
  • 23. Globalcode – Open4education the end. agiletesters.com.br keeptesting.com.br lazytester.com factoryboy.readthedocs.org https://github.com/bertonha (factory_rest) titansgroup.com.br Titans está contratando! rh@titansgroup.com.br