2017-01-31 4 views
1

Ich schreibe Automatisierungstests mit Codeception-Framework. Ich habe einen Testfall, der einige Funktionen nach der Anmeldung des Benutzers überprüft. Es gibt etwa 20 Testfälle mit unterschiedlichen Funktionen. Alle Testfälle benötigen einen Benutzer, um sich am System anzumelden, also habe ich eine Login-Funktionalität unter _vor dem Rückruf geschrieben. Wenn ich alle Testfälle ausführe, wird vor jeder Testfall-Login-Funktion geprüft, was viel Zeit in Anspruch nimmt. Können wir Login-Funktionalität als Vorbedingung schreiben und wenn der Benutzer eingeloggt ist, sollten alle Testfälle ausgeführt werden?Codeception Testfälle Voraussetzung

Antwort

1

Sie können sogenannte Helfer in der Codeception verwenden. Sie können einen Helfer mit dem folgenden Befehl erzeugen:

<?php 
namespace Helper; 

// here you can define custom actions 
// all public methods declared in helper class will be available in $I 

class Login extends \Codeception\Module 
{ 
    public function login($username, $password) 
    { 
     /** @var \Codeception\Module\WebDriver $webDriver */ 
     $webDriver = $this->getModule('WebDriver'); 
     // if snapshot exists - skipping login 
     if ($webDriver->loadSessionSnapshot('login')) { 
      return; 
     } 
     // logging in 
     $webDriver->amOnPage('/login'); 
     $webDriver->submitForm('#loginForm', [ 
      'login' => $username, 
      'password' => $password 
     ]); 
     $webDriver->see($username, '.navbar'); 
     // saving snapshot 
     $webDriver->saveSessionSnapshot('login'); 
    } 
} 

Siehe http://codeception.com/docs/06-ReusingTestCode#session-snapshot für weitere Informationen über Schnappschüsse:

vendor/bin/codecept generate:helper Login

Dann sind Sie in einem Benutzer wie so ein Verfahren in die Klasse für die Protokollierung setzen könnten .

Ihre acceptance.suite.yml sollte wie folgt aussehen:

# Codeception Test Suite Configuration 
# 
# Suite for acceptance tests. 
# Perform tests in browser using the WebDriver or PhpBrowser. 
# If you need both WebDriver and PHPBrowser tests - create a separate suite. 

class_name: AcceptanceTester 
modules: 
    enabled: 
     # Note we must use WebDriver for us to use session snapshots 
     - WebDriver: 
      url: http://localhost/myapp 
      browser: chrome 

     - \Helper\Acceptance 

     # Note that we must add the Login Helper class we generated here 
     - \Helper\Login 

Jetzt haben wir eine Hilfsklasse, die in allen unseren Tests wiederverwendet werden können. Lassen Sie uns ein Beispiel an:

<?php 


class UserCest 
{ 
    // tests 
    public function testUserCanLogin(AcceptanceTester $I) 
    { 
     $I->login('username', 'password'); 
    } 

    public function testUserCanCarryOutTask(AcceptanceTester $I) 
    { 
     $I->login('username', 'password'); 
     $I->amOnPage('/task-page'); 
     $I->see('Task Page'); 
     // other assertions below 
    } 

    public function testUserCanCarryOutAnotherTask(AcceptanceTester $I) 
    { 
     $I->login('username', 'password'); 
     $I->amOnPage('/another-task-page'); 
     $I->see('Another Task Page'); 
     // other assertions below 
    } 
} 

Nun, wenn die UserCest Test läuft, ist es nur ein einziges Mal den Benutzer anmelden sollte.