Cet article présente principalement les méthodes de test et des exemples de scripts PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
1. Exemples de tests courants
Nous rencontrons souvent cette situation : réécrire et tester du code existant qui n'a été testé d'aucune façon, et même ces codes sont toujours écrits en utilisant l'orientation objet. Pour tester du code comme celui-ci, mon conseil est de diviser le code en morceaux afin qu'il soit plus facile à tester.
Cependant, ces codes hérités ne sont pas si faciles à refactoriser. Par exemple, vous ne pouvez pas réécrire le code avant de tester. Ceci afin d'éviter d'affecter le programme d'origine, et bien sûr, il n'est pas facile d'effectuer des tests unitaires.
Dans les programmes PHP, une partie du code est généralement écrite dans plusieurs fichiers index.php et script.php, et ces fichiers .php sont stockés dans plusieurs dossiers différents. Si leurs points d’entrée ne sont pas trouvés, ils ne sont pas accessibles directement par le serveur web.
Test de copie
Pour tester un script PHP, nous devons simuler une requête HTTP et vérifier si la réponse renvoyée est égale à la valeur attendue. Ce qu'il faut noter ici, c'est simuler une requête et définir la réponse et la requête. Non seulement les contenus sont différents, mais leurs en-têtes sont également différents.
De plus, si nous voulons tester un script de transaction qui manipule des données, nous voulons nous assurer que nous ne le laissons pas se connecter à la base de données réelle ou au reste de l'application.
En réalité, personne ne réécrira généralement directement le script PHP original à des fins de test. Parce que j'ai peur de rendre le code irrécupérable. Je recommande d'utiliser une copie du script PHP afin que nous puissions effectuer quelques opérations mineures sur le code PHP.
Comment apporter des modifications minimes au code : supprimez les instructions include et require (si elles ne sont pas utilisées), et modifiez la façon dont les fonctions internes sont appelées, par exemple : écrivez header() sous la forme $object-> en-tête() .
Enfin, testons ce script de transaction. Après les tests, nous pouvons les extraire du script en double et les placer dans un nouveau fichier de script.
Étapes spécifiques
1. Simulez une requête HTTP et redéfinissez les variables $_GET et $_POST, et modifiez également l'en-tête de $_SERVER.
2. Obtenez la réponse à la demande. Le corps de la réponse peut être capturé via ob_start() et ob_get_clean(). Il peut collecter chaque sortie de tampon (contenu du tampon) avec echo() ou avec balise php.
Remarque : la mise en mémoire tampon de sortie prend en charge plusieurs niveaux d'imbrication en PHP, donc la plupart des cas seront capturés, même si le script utilise l'appel ob_* lui-même.
3. Le script de test doit contenir les méthodes internes du script de transaction, afin que toutes les méthodes entrant dans la portée de ce script puissent être appelées. Par exemple :
1. Les variables requises par le script peuvent être définies comme variables locales et encapsulées, comme $connection en tant que connexion à une base de données.
2. Ce n'est pas la fonction intégrée d'origine de PHP. Elle doit être appelée avec un objet. Par exemple : header() s'écrit $this->header().
Code spécifique
Il s'agit de l'objet de script de transaction que nous voulons tester. Spécifique au script, nous devons également encapsuler :
<?php class ForumPosting { private $headers = array(); public function handleRequest($postRequest) { $_POST = $postRequest; $connection = $this->getAConnection(); ob_start(); include 'forum/post_new_copy.php'; $content = ob_get_clean(); return array( 'content' => $content, 'headers' => $this->headers ); } private function header($headerLine) { $this->headers[] = $headerLine; } ... }
public function testANewPostIsCreated() { $action = new ForumPosting(); $response = $action->handleRequest(array( 'id_thread' => 42, 'text' => 'Hello, world', ... )); $this->assertEquals('...', $response['content']); $this->assertContains('Content-type: text/html', $response['headers']); }
2. Boîte à outils de tests unitaires pour les développeurs PHP
require_once("../simpletest/unit_tester.php"); require_once("../simpletest/web_tester.php"); require_once("../simpletest/reporter.php");
class TestOfSite extends WebTestCase { function TestOfSite() { $this->WebTestCase("测试"); } function testSite() { $this->get("http://howgo.net/prettyface/display.php"); $this->assertTitle(".: facebook :."); } }
.
代码列表:
$test = &new TestOfSite(); $test->run(new HtmlReporter());
下边是运行结果:
如果测试出错则会出现下边的界面:
到这里一个简单的测试就算完成了。
实战演习 – 一个Login测试
下面我们进入实战,在这个基础上完成一个login的测试。这次我们先贴出完整的代码:
代码列表:
require_once("../simpletest/unit_tester.php"); require_once("../simpletest/web_tester.php"); require_once("../simpletest/reporter.php"); class TestOfLogin extends WebTestCase { function TestOfLogin() { $this->WebTestCase("Login测试"); } function testLoginOk() { // 取得页面 $this->get("http://howgo.net/prettyface/login.php"); // 添加测试表项 $this->setField("name","Easy"); $this->setField("pass","******"); // 提交 $this->clickSubmit("提交"); // 察看提交后返回页面是否正确 $this->assertWantedPattern("/成功登录/"); // 点击页面链接 $this->clickLink("点击这里进入管理页面"); // 察看指定页面标题和关键内容 $this->assertTitle("ADMINCP"); $this->assertWantedPattern("/请选择要进行的任务/"); // 退出登陆 $this->clickLink("退出管理"); $this->clickLink } }
总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。
相关推荐:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!