Heim > Artikel > Backend-Entwicklung > Methoden und Beispiele zum Testen von PHP-Skripten
In diesem Artikel werden hauptsächlich die Testmethoden und Beispiele von PHP-Skripten vorgestellt. Ich hoffe, dass er für alle hilfreich ist.
1. Häufige Testbeispiele
Wir stoßen oft auf die folgende Situation: Schreiben und testen Sie einige Legacy-Codes, die in keiner Weise getestet wurden, und sogar diese Codes werden immer noch mit Objektorientierung geschrieben. Um Code wie diesen zu testen, empfehle ich, den Code in Abschnitte aufzuteilen, damit er einfacher getestet werden kann.
Diese Legacy-Codes sind jedoch nicht so einfach umzugestalten. Sie können den Code beispielsweise nicht neu schreiben, um eine Beeinträchtigung des Originalprogramms zu vermeiden, und natürlich ist es nicht einfach, Unit-Tests durchzuführen.
In einem PHP-Programm ist normalerweise ein Teil des Codes in mehreren index.php- und script.php-Dateien geschrieben, und diese .php-Dateien werden in mehreren verschiedenen Ordnern gespeichert. Wenn ihre Einstiegspunkte nicht gefunden werden, kann der Webserver nicht direkt auf sie zugreifen.
Testkopie
Um ein PHP-Skript zu testen, müssen wir eine HTTP-Anfrage simulieren und prüfen, ob die zurückgegebene Antwort dem erwarteten Wert entspricht. Hier ist zu beachten, dass eine Anfrage simuliert und Antwort und Anfrage definiert werden müssen. Nicht nur die Inhalte sind unterschiedlich, sondern auch ihre Header.
Wenn wir außerdem ein Transaktionsskript testen möchten, das Daten manipuliert, möchten wir sicherstellen, dass es keine Verbindung zur realen Datenbank oder zum Rest der Anwendung herstellt.
In der Realität wird normalerweise niemand das ursprüngliche PHP-Skript zum Testen direkt neu schreiben. Weil ich Angst habe, dass der Code nicht mehr wiederhergestellt werden könnte. Ich empfehle die Verwendung einer Kopie des PHP-Skripts, damit wir kleinere Eingriffe am PHP-Code durchführen können.
So nehmen Sie minimale Änderungen am Code vor: Löschen Sie die Anweisungen include und require (falls sie nicht verwendet werden) und ändern Sie die Art und Weise, wie interne Funktionen aufgerufen werden, zum Beispiel: Schreiben Sie header() als $object-> header() .
Abschließend testen wir dieses Transaktionsskript. Nach dem Testen können wir sie aus dem duplizierten Skript extrahieren und in einer neuen Skriptdatei ablegen.
Spezifische Schritte
1. Simulieren Sie eine HTTP-Anfrage und definieren Sie die Variablen $_GET und $_POST neu und ändern Sie auch den Header von $_SERVER.
2. Der Antworttext kann über ob_start() und ob_get_clean() erfasst werden. Es kann jede Pufferausgabe (Pufferinhalt) mit echo() oder mit 7d367878140b8c7a08fe29a1da48459aheader() geschrieben.
Spezifischer Code
Dies ist das Transaktionsskriptobjekt, das wir testen möchten. Spezifisch für das Skript müssen wir es auch kapseln:
<?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; } ... }
Das ist unser Testcode:
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']); }
Die Testkopie ist nur vorübergehend! Es ermöglicht uns, Tests zu schreiben, die sich nicht ändern. Abschließend werden wir die PHP-Skripte, die den Test bestanden haben, umgestalten, um redundanten Code zu entfernen.
Wenn unser Test abgeschlossen ist, kann der Inhalt von handleRequest() durch echten Logikcode ersetzt werden. Wenn Sie viele solcher Testskripte schreiben möchten, können Sie ein allgemeines Testobjekt schreiben, das Ihren Testanforderungen entspricht.
2. Unit-Testing-Toolkit für PHP-Entwickler
Im PHP-Bereich gibt es drei Haupt-Unit-Test-Tools: PHPUNIT, PHPUNIT2 und SimpleTest. Unter anderem ist PHPUNIT in seiner Funktion sehr einfach und nicht perfekt; PHPUNIT2 ist ein speziell für PHP5 geschriebenes Unit-Test-Tool, das in Struktur und Funktion mit Junit übereinstimmt, und SimpleTest ist ein sehr praktisches Test-Tool, und webTest unterstützt das Testen von Die Webprogrammoberfläche ist das am häufigsten empfohlene Testtool von Easy. In diesem Artikel wählen wir SimpleTest als Einführung.
Verwandtes Wissen: PHPUNIT2 ist auch ein sehr gutes Tool, insbesondere die Architektur. Es gibt viele Dinge, die es wert sind, in Zukunft hervorgehoben zu werden.
SimpleTest: Es ist einfach so einfach
Die Installation von SimpleTest ist sehr einfach. Laden Sie ein Quellcodepaket von sf.net herunter, entpacken Sie es dann in das Webverzeichnis und Sie können es verwenden. Ich gehe hier nicht auf Details ein.
Schauen wir uns zunächst ein Beispiel an: Schreiben Sie einen Test, um zu prüfen, ob eine Website erreichbar ist.
Zuerst stellen wir die zu verwendenden Dateien vor:
Codeliste:
require_once("../simpletest/unit_tester.php"); require_once("../simpletest/web_tester.php"); require_once("../simpletest/reporter.php");
Dann erstellen wir eine Testklasse:
Codeliste:
class TestOfSite extends WebTestCase { function TestOfSite() { $this->WebTestCase("测试"); } function testSite() { $this->get("http://howgo.net/prettyface/display.php"); $this->assertTitle(".: facebook :."); } }
Zuerst erweitern wir die webTestCase-Klasse, damit wir das Web automatisch testen können. Anschließend verwenden wir im Konstruktor direkt die Basisklasse und übergeben ihr einfach den Titel. Dann sollten wir die Testmethode schreiben. Alle Testmethoden beginnen mit „test“, um zu identifizieren, welche Methoden in der Klasse aufgerufen werden müssen, wenn wir den Test ausführen.
Und $this-> get ruft das ab Um den Inhalt der Webseite anzuzeigen, geben wir den Titel als „.: facebook:.“ an, und dann müssen wir nur noch das Objekt dieser Klasse instanziieren und ausführen
.代码列表:
$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 } }
总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。
相关推荐:
Das obige ist der detaillierte Inhalt vonMethoden und Beispiele zum Testen von PHP-Skripten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!