SlideShare uma empresa Scribd logo
Testing with PHPT
Você sabe o que a sua aplicação está fazendo?
Who Am I?
[ presentation ]$ who
Sidney Souza <sidneysase@gmail.com>
Analista de Sistema formado pela faculdade FTEC.
Trabalho com software livre desde 2008 quando iniciei minha carreira como instrutor de
telecentro e desde então o Linux nunca mais saiu da minha vida.
Atualmente sou programador na empresa OpServices IT onde tive oportunidade de
contribuir com projetos como nagios-plugins e desenvolver outros agentes para as mais
diversas finalidades
[ presentation ]$
TESTS?
Tests improve security when you:
❖Modifica o seu código
❖Adiciona novas features
❖Altera funcionalidades já implementadas
❖Corrige bugs
❖Altera a API/Framework usand@
❖…
Test helps you to:
❖Criar código reutilizável
❖Criar código testável
❖Validar suas profecias/convicções
❖Evitar efeitos colaterais
❖Evitar nomes que podem induzir ao erro
➢ Exemplo
function returnSomething(&$var)
{
$var = ‘AnyThing’;
}
Frequent “Mimimis”
❖Mais eu não vou gastar mais tempo? (É verdade)
❖Sou bom no que faço e garanto a qualidade do meu código! (Até
pode ser verdade)
❖Aaa mas nem tudo precisa ser testado. (Também é verdade)
❖Mas eu sou desenvolvedor não testador.
❖…
A resposta para isso é sempre a mesma: NÃO INTERESSA!
Integration tests?
É um tipo de teste que pode mostrar-nos como as partes do sistema
trabalham em conjunto e são comumente utilizados para testar todo o
sistema e não partes dele (testes unitários).
Como todo teste, é de suma importância que seja descritivo e o mais
simples possível. Caso o algoritmo do teste fique muito complexo é
sinal que as partes testadas não foram bem projetadas/implementadas.
What is PHPT?
É uma forma de testar a sua aplicação usando a linguagem PHP e um
script simples. Este método é utilizado pelo pessoal que desenvolve o
php para testar a própria linguagem.
Você lembra aquele arquivo que você SEMPRE cria para validar algo?
Agora você pode utilizá-lo para algo mais nobre(útil).
What is PHPT?
What do we need?
❖PHPUnit => Vai rodar os testes
❖PHP-Cli => Vai rodar o phpunit
❖Willpower => Vai criar os testes :)
❖A aplicação
➢ It is obvious!
Script Structure
Cada arquivo de teste é composto por diversas seções, mas apenas três são necessárias.
Nos testes que fiz nunca consegui utilizar as seções opcionais. Parece que o phpunit não as
entende, mas nada nos impede de usar o mesmo script que o pessoal do php para rodar os
testes: run_tests.php[1]
--TEST--
[--DESCRIPTION--]
[--CREDITS--]
[--SKIPIF--]
[--REQUEST--]
[--POST-- | --PUT-- | --POST_RAW-- | --GZIP_POST-- | --DEFLATE_POST-- | --GET--]
[--COOKIE--]
[--STDIN--]
[--INI--]
[--ARGS--]
[--ENV--]
--FILE-- | --FILEEOF-- | --FILE_EXTERNAL-- | --REDIRECTTEST--
[--HEADERS--]
[--CGI--]
[--XFAIL--]
[--EXPECTHEADERS--]
--EXPECT-- | --EXPECTF-- | --EXPECTREGEX-- | --EXPECT_EXTERNAL-- | --EXPECTF_EXTERNAL-- | --EXPECTREGEX_EXTERNAL--
[--CLEAN--]
[1] https://github.com/php/php-src/blob/master/run-tests.php
Simple Test File
--TEST--
Simple file
--FILE--
<?php echo "Hello World"; ?>
--EXPECT--
Hello World
Running Test and Fail
--TEST--
Simple file
--FILE--
<?php
var_dump(
"Hello World",
(int) 1>12,
(bool) 0);
?>
--EXPECT--
string(11) "Hello World"
int(0)
bool(false)
Running Test and Pass
--TEST--
Simple file
--FILE--
<?php
var_dump(
"Hello World",
(int) (1>12),
(bool) 0);
?>
--EXPECT--
string(11) "Hello World"
int(0)
bool(false)
Naming Conventions
●Tests for bugs
○ bug<bugid>.phpt (bug17123.phpt)
●Tests for a function's basic behaviour
○ <functionname>_basic.phpt (dba_open_basic.phpt)
●Tests for a function's error behaviour
○ <functionname>_error.phpt (dba_open_error.phpt)
●Tests for variations in a function's behaviour
○ <functionname>_variation.phpt (dba_open_variation.phpt)
●General tests for extensions
○ <extname><no>.phpt (dba_003.phpt)
More Tests
EXPECTF
--TEST--
Testing str_shuffle.
--FILE--
<?php
$s = '123';
var_dump(str_shuffle($s));
var_dump($s);
?>
--EXPECTF--
string(3) "%s"
string(3) "123"
EXPECTREGEX
--TEST--
Test whether strstr() is binary safe.
--FILE--
<?php
$s = "alabala nica".chr(0)."turska panica";
var_dump(strstr($s, "nic"));
?>
--EXPECTREGEX--
string(18) "nicax00turska panica"
Amazing !!!!
Can I test my software using phpt only?
Of Course NOT!
More motivations
Quiz: Do You know how php behaves?
●echo (int) ((0.1 + 0.7) * 10);
●echo ((0.1 + 0.7) * 10);
●$a = 'fact_2'; echo ++$a;
●$a = '2nd_fact'; echo ++$a;
●$a = 'a_fact'; echo ++$a;
●$a = 'a_fact?'; echo ++$a;
●var_dump(5 == '5jklhhfkjlhlfksfs');
●var_dump(0 == 'jklhhfkjlhlfksfs');
●$a = array('a' => 1, 'b' => 0); var_dump(in_array('hello', $a));
Conclusion
Há somente duas espécies de código, os testáveis e os detestáveis by
@alganet
Qual destes tipos de código você produz?
Tenha em mente: Você é o que você faz!
References
❖The need for Speed, ERM Testing presentation
➢ http://somabo.de/talks/
❖PHPT Documentation
➢ http://qa.php.net/write-test.php
➢ https://qa.php.net/phpt_details.php (Sections)
❖PHPUnit
➢ https://phpunit.de/
❖PHP Strange Behaviour
➢ https://www.sitepoint.com/3-strange-php-facts-you-may-not-know/

Mais conteúdo relacionado

Mais procurados

TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
Osvaldo Santana Neto
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em python
Paula Grangeiro
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
ricardophp
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
pugpe
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
Francisco Santos
 
JUnit Sample
JUnit SampleJUnit Sample
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
William G. Comnisky
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress
Rudá Almeida
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
Osvaldo Santana Neto
 
Criando testes com Plone
Criando testes com PloneCriando testes com Plone
Criando testes com Plone
Ramiro Luz
 
Selenium ide
Selenium ideSelenium ide
Selenium ide
Adelino Primo Mazuti
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
Bernardo Fontes
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
Rafael Fuchs, PMP, MBA
 
Testes de integração em microservices
Testes de integração em microservicesTestes de integração em microservices
Testes de integração em microservices
Claudenir Freitas
 
Assespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkAssespro pr-workshop-robot framework
Assespro pr-workshop-robot framework
Mayara Fernandes
 
Teste de aplicações web com selenium
Teste de aplicações web com seleniumTeste de aplicações web com selenium
Teste de aplicações web com selenium
Mayron Cachina
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
cejug
 
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustTDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
Mayara Fernandes
 
Testes em go
Testes em goTestes em go
Pdo Apresentação Básica
Pdo Apresentação BásicaPdo Apresentação Básica
Pdo Apresentação Básica
andreandrade17
 

Mais procurados (20)

TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em python
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Criando testes com Plone
Criando testes com PloneCriando testes com Plone
Criando testes com Plone
 
Selenium ide
Selenium ideSelenium ide
Selenium ide
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Testes de integração em microservices
Testes de integração em microservicesTestes de integração em microservices
Testes de integração em microservices
 
Assespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkAssespro pr-workshop-robot framework
Assespro pr-workshop-robot framework
 
Teste de aplicações web com selenium
Teste de aplicações web com seleniumTeste de aplicações web com selenium
Teste de aplicações web com selenium
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustTDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
 
Testes em go
Testes em goTestes em go
Testes em go
 
Pdo Apresentação Básica
Pdo Apresentação BásicaPdo Apresentação Básica
Pdo Apresentação Básica
 

Destaque

Tecnologia de la educacion
Tecnologia de la educacionTecnologia de la educacion
Tecnologia de la educacion
marielbisono
 
g3jn2.docx
g3jn2.docxg3jn2.docx
g3jn2.docx
Jeff Smith
 
A Sensor-based Telemonitoring and Home Support System to Improve Quality of L...
A Sensor-based Telemonitoring and Home Support System to Improve Quality of L...A Sensor-based Telemonitoring and Home Support System to Improve Quality of L...
A Sensor-based Telemonitoring and Home Support System to Improve Quality of L...
Eloisa Vargiu
 
เรื่อง บริการต่างๆบนอินเทอร์เน็ต
เรื่อง บริการต่างๆบนอินเทอร์เน็ตเรื่อง บริการต่างๆบนอินเทอร์เน็ต
เรื่อง บริการต่างๆบนอินเทอร์เน็ตAtiyurat Croasia
 
Störmer presentacion Terracucina
Störmer presentacion TerracucinaStörmer presentacion Terracucina
Störmer presentacion Terracucina
Cocinas Ricardo
 
Crystals12
Crystals12Crystals12
Crystals12
Rowan Medhurst
 
Presentación1
Presentación1Presentación1
Presentación1
Tatiana Ariza
 
News SSL 47 2016
News SSL 47 2016News SSL 47 2016
News SSL 47 2016
Roberta Culiersi
 
Introducción a la Tecnología Educativa
 Introducción a la Tecnología Educativa Introducción a la Tecnología Educativa
Introducción a la Tecnología Educativa
Daniel Rodriguez
 
Central American Minor Refugee Program
Central American Minor Refugee ProgramCentral American Minor Refugee Program
Central American Minor Refugee Program
TOP Legal Management Services
 
El microprocesador
El microprocesadorEl microprocesador
El microprocesador
Nuria García Mairena
 
Origen y evolucion de la tecnologia educativa
Origen y evolucion de la tecnologia educativaOrigen y evolucion de la tecnologia educativa
Origen y evolucion de la tecnologia educativa
Mayerling Moreta
 

Destaque (14)

Tecnologia de la educacion
Tecnologia de la educacionTecnologia de la educacion
Tecnologia de la educacion
 
g3jn2.docx
g3jn2.docxg3jn2.docx
g3jn2.docx
 
E4
E4E4
E4
 
A Sensor-based Telemonitoring and Home Support System to Improve Quality of L...
A Sensor-based Telemonitoring and Home Support System to Improve Quality of L...A Sensor-based Telemonitoring and Home Support System to Improve Quality of L...
A Sensor-based Telemonitoring and Home Support System to Improve Quality of L...
 
เรื่อง บริการต่างๆบนอินเทอร์เน็ต
เรื่อง บริการต่างๆบนอินเทอร์เน็ตเรื่อง บริการต่างๆบนอินเทอร์เน็ต
เรื่อง บริการต่างๆบนอินเทอร์เน็ต
 
Störmer presentacion Terracucina
Störmer presentacion TerracucinaStörmer presentacion Terracucina
Störmer presentacion Terracucina
 
Crystals12
Crystals12Crystals12
Crystals12
 
Katalog Product Nochrida
Katalog Product NochridaKatalog Product Nochrida
Katalog Product Nochrida
 
Presentación1
Presentación1Presentación1
Presentación1
 
News SSL 47 2016
News SSL 47 2016News SSL 47 2016
News SSL 47 2016
 
Introducción a la Tecnología Educativa
 Introducción a la Tecnología Educativa Introducción a la Tecnología Educativa
Introducción a la Tecnología Educativa
 
Central American Minor Refugee Program
Central American Minor Refugee ProgramCentral American Minor Refugee Program
Central American Minor Refugee Program
 
El microprocesador
El microprocesadorEl microprocesador
El microprocesador
 
Origen y evolucion de la tecnologia educativa
Origen y evolucion de la tecnologia educativaOrigen y evolucion de la tecnologia educativa
Origen y evolucion de la tecnologia educativa
 

Semelhante a Testando Aplicações com PHPT

Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Domingos Teruel
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de Selenium
Autotic
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSS
Thiago Rodrigues
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
Thiago Ghisi
 
PHPHEDERAL - Desenvolvimento Orientado a Testes com PHP
PHPHEDERAL - Desenvolvimento Orientado a Testes com PHPPHPHEDERAL - Desenvolvimento Orientado a Testes com PHP
PHPHEDERAL - Desenvolvimento Orientado a Testes com PHP
Marcelo Rodrigues
 
PHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e SeguraPHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e Segura
Kleber Silva
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Alvaro Oliveira
 
PHPSP TestFest 2010
PHPSP TestFest 2010PHPSP TestFest 2010
PHPSP TestFest 2010
Rafael Dohms
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando selenium
Sandy Maciel
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Python com TDD
Python com TDDPython com TDD
Python com TDD
Rodrigo Alves Vieira
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Luís Cobucci
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
Rodrigo Alves Vieira
 
Palestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwarePalestra DevOps para Teste de Software
Palestra DevOps para Teste de Software
Júlio de Lima
 
Guia php
Guia phpGuia php
DEV-OPS para teste de software
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de software
Qualister
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
Alvaro Oliveira
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
Bruno Tanoue
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
Denis Ferrari
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
Douglas V. Pasqua
 

Semelhante a Testando Aplicações com PHPT (20)

Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de Selenium
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSS
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
PHPHEDERAL - Desenvolvimento Orientado a Testes com PHP
PHPHEDERAL - Desenvolvimento Orientado a Testes com PHPPHPHEDERAL - Desenvolvimento Orientado a Testes com PHP
PHPHEDERAL - Desenvolvimento Orientado a Testes com PHP
 
PHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e SeguraPHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e Segura
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
PHPSP TestFest 2010
PHPSP TestFest 2010PHPSP TestFest 2010
PHPSP TestFest 2010
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando selenium
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
Python com TDD
Python com TDDPython com TDD
Python com TDD
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
 
Palestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwarePalestra DevOps para Teste de Software
Palestra DevOps para Teste de Software
 
Guia php
Guia phpGuia php
Guia php
 
DEV-OPS para teste de software
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de software
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 

Testando Aplicações com PHPT

  • 1. Testing with PHPT Você sabe o que a sua aplicação está fazendo?
  • 2. Who Am I? [ presentation ]$ who Sidney Souza <sidneysase@gmail.com> Analista de Sistema formado pela faculdade FTEC. Trabalho com software livre desde 2008 quando iniciei minha carreira como instrutor de telecentro e desde então o Linux nunca mais saiu da minha vida. Atualmente sou programador na empresa OpServices IT onde tive oportunidade de contribuir com projetos como nagios-plugins e desenvolver outros agentes para as mais diversas finalidades [ presentation ]$
  • 3.
  • 5.
  • 6. Tests improve security when you: ❖Modifica o seu código ❖Adiciona novas features ❖Altera funcionalidades já implementadas ❖Corrige bugs ❖Altera a API/Framework usand@ ❖…
  • 7. Test helps you to: ❖Criar código reutilizável ❖Criar código testável ❖Validar suas profecias/convicções ❖Evitar efeitos colaterais ❖Evitar nomes que podem induzir ao erro ➢ Exemplo function returnSomething(&$var) { $var = ‘AnyThing’; }
  • 8. Frequent “Mimimis” ❖Mais eu não vou gastar mais tempo? (É verdade) ❖Sou bom no que faço e garanto a qualidade do meu código! (Até pode ser verdade) ❖Aaa mas nem tudo precisa ser testado. (Também é verdade) ❖Mas eu sou desenvolvedor não testador. ❖… A resposta para isso é sempre a mesma: NÃO INTERESSA!
  • 9. Integration tests? É um tipo de teste que pode mostrar-nos como as partes do sistema trabalham em conjunto e são comumente utilizados para testar todo o sistema e não partes dele (testes unitários). Como todo teste, é de suma importância que seja descritivo e o mais simples possível. Caso o algoritmo do teste fique muito complexo é sinal que as partes testadas não foram bem projetadas/implementadas.
  • 10.
  • 11. What is PHPT? É uma forma de testar a sua aplicação usando a linguagem PHP e um script simples. Este método é utilizado pelo pessoal que desenvolve o php para testar a própria linguagem. Você lembra aquele arquivo que você SEMPRE cria para validar algo? Agora você pode utilizá-lo para algo mais nobre(útil).
  • 13.
  • 14. What do we need? ❖PHPUnit => Vai rodar os testes ❖PHP-Cli => Vai rodar o phpunit ❖Willpower => Vai criar os testes :) ❖A aplicação ➢ It is obvious!
  • 15. Script Structure Cada arquivo de teste é composto por diversas seções, mas apenas três são necessárias. Nos testes que fiz nunca consegui utilizar as seções opcionais. Parece que o phpunit não as entende, mas nada nos impede de usar o mesmo script que o pessoal do php para rodar os testes: run_tests.php[1] --TEST-- [--DESCRIPTION--] [--CREDITS--] [--SKIPIF--] [--REQUEST--] [--POST-- | --PUT-- | --POST_RAW-- | --GZIP_POST-- | --DEFLATE_POST-- | --GET--] [--COOKIE--] [--STDIN--] [--INI--] [--ARGS--] [--ENV--] --FILE-- | --FILEEOF-- | --FILE_EXTERNAL-- | --REDIRECTTEST-- [--HEADERS--] [--CGI--] [--XFAIL--] [--EXPECTHEADERS--] --EXPECT-- | --EXPECTF-- | --EXPECTREGEX-- | --EXPECT_EXTERNAL-- | --EXPECTF_EXTERNAL-- | --EXPECTREGEX_EXTERNAL-- [--CLEAN--] [1] https://github.com/php/php-src/blob/master/run-tests.php
  • 16. Simple Test File --TEST-- Simple file --FILE-- <?php echo "Hello World"; ?> --EXPECT-- Hello World
  • 17. Running Test and Fail --TEST-- Simple file --FILE-- <?php var_dump( "Hello World", (int) 1>12, (bool) 0); ?> --EXPECT-- string(11) "Hello World" int(0) bool(false)
  • 18. Running Test and Pass --TEST-- Simple file --FILE-- <?php var_dump( "Hello World", (int) (1>12), (bool) 0); ?> --EXPECT-- string(11) "Hello World" int(0) bool(false)
  • 19. Naming Conventions ●Tests for bugs ○ bug<bugid>.phpt (bug17123.phpt) ●Tests for a function's basic behaviour ○ <functionname>_basic.phpt (dba_open_basic.phpt) ●Tests for a function's error behaviour ○ <functionname>_error.phpt (dba_open_error.phpt) ●Tests for variations in a function's behaviour ○ <functionname>_variation.phpt (dba_open_variation.phpt) ●General tests for extensions ○ <extname><no>.phpt (dba_003.phpt)
  • 21. EXPECTF --TEST-- Testing str_shuffle. --FILE-- <?php $s = '123'; var_dump(str_shuffle($s)); var_dump($s); ?> --EXPECTF-- string(3) "%s" string(3) "123"
  • 22. EXPECTREGEX --TEST-- Test whether strstr() is binary safe. --FILE-- <?php $s = "alabala nica".chr(0)."turska panica"; var_dump(strstr($s, "nic")); ?> --EXPECTREGEX-- string(18) "nicax00turska panica"
  • 23. Amazing !!!! Can I test my software using phpt only?
  • 26. Quiz: Do You know how php behaves? ●echo (int) ((0.1 + 0.7) * 10); ●echo ((0.1 + 0.7) * 10); ●$a = 'fact_2'; echo ++$a; ●$a = '2nd_fact'; echo ++$a; ●$a = 'a_fact'; echo ++$a; ●$a = 'a_fact?'; echo ++$a; ●var_dump(5 == '5jklhhfkjlhlfksfs'); ●var_dump(0 == 'jklhhfkjlhlfksfs'); ●$a = array('a' => 1, 'b' => 0); var_dump(in_array('hello', $a));
  • 27. Conclusion Há somente duas espécies de código, os testáveis e os detestáveis by @alganet Qual destes tipos de código você produz? Tenha em mente: Você é o que você faz!
  • 28.
  • 29. References ❖The need for Speed, ERM Testing presentation ➢ http://somabo.de/talks/ ❖PHPT Documentation ➢ http://qa.php.net/write-test.php ➢ https://qa.php.net/phpt_details.php (Sections) ❖PHPUnit ➢ https://phpunit.de/ ❖PHP Strange Behaviour ➢ https://www.sitepoint.com/3-strange-php-facts-you-may-not-know/