Methoden und Beispiele zum Testen von PHP-Skripten

墨辰丷
Freigeben: 2023-03-30 15:22:01
Original
4434 Leute haben es durchsucht

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

Hinweis: Die Ausgabepufferung unterstützt mehrere Verschachtelungsebenen in PHP, sodass die meisten Fälle erfasst werden, auch wenn das Skript den ob_*-Aufruf selbst verwendet.

3. Das Testskript sollte die internen Methoden des Transaktionsskripts enthalten, damit alle Methoden im Rahmen dieses Skripts aufgerufen werden können. Beispiel:
1. Die vom Skript benötigten Variablen können als lokale Variablen definiert und gekapselt werden, z. B. $connection als Datenbankverbindung.
2. Es handelt sich nicht um die ursprüngliche integrierte Funktion von PHP. Sie sollte mit einem Objekt aufgerufen werden. Beispiel: header() wird als $this->header() 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 &#39;forum/post_new_copy.php&#39;;
    $content = ob_get_clean();
    return array(
      &#39;content&#39; => $content,
      &#39;headers&#39; => $this->headers
    );
  }
 
  private function header($headerLine)
  {
    $this->headers[] = $headerLine;
  }
   
  ...
}
Nach dem Login kopieren

Das ist unser Testcode:

 public function testANewPostIsCreated()
{
  $action = new ForumPosting();
  $response = $action->handleRequest(array(
    &#39;id_thread&#39; => 42,
    &#39;text&#39; => &#39;Hello, world&#39;,
    ...
  ));
  $this->assertEquals(&#39;...&#39;, $response[&#39;content&#39;]);
  $this->assertContains(&#39;Content-type: text/html&#39;, $response[&#39;headers&#39;]);
}
Nach dem Login kopieren

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");
Nach dem Login kopieren

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 :.");
  }
}
Nach dem Login kopieren

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());
Nach dem Login kopieren

下边是运行结果:

如果测试出错则会出现下边的界面:

到这里一个简单的测试就算完成了。

实战演习 – 一个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
  }
}
Nach dem Login kopieren

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐:

PHP实现获取上月、本月、近15天、近30天的方法

PHP+Ajax实现的无刷新分页功能的方法

PHP 实现返回数组后的处理方法

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!