29
Testing with PHPT Você sabe o que a sua aplicação está fazendo?

Testando Aplicações com PHPT

Embed Size (px)

Citation preview

Testing with PHPT

Você sabe o que a sua aplicação está fazendo?

Who Am I?[ presentation ]$ who

Sidney Souza <[email protected]>

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 StructureCada 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--<?phpvar_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--<?phpvar_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\) \"nica\x00turska 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/