首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >协同欺骗:保持登录状态

协同欺骗:保持登录状态
EN

Stack Overflow用户
提问于 2013-12-03 00:37:47
回答 6查看 9.4K关注 0票数 23

我想在大多数测试之前保留或运行登录。但是如果我尝试将登录代码移到_before,它就不能工作了,因为我没有可用的webguy实例。

在多个测试之间保持会话的最佳方式是什么?这是我的代码到目前为止,很高兴收到一些帮助。我在谷歌上搜索并检查了文档,但我找不到任何关于会话的东西。

<?php
use \WebGuy;

class ProductCest
{

    private $product_id = '1';

    public function _before()
    {
    }

    public function _after()
    {
    }

    // tests
    public function login(WebGuy $I) {
        $I->seeInCurrentUrl('/auth/login');
        $I->fillField("//input[@type='email']", "username@email.com");
        $I->fillField("//input[@type='password']", "1234");
        $I->click('#signIn .submit');
        $I->wait(500);

        $I->seeInCurrentUrl('/account');
    }

    /**
     * @depends login
     */
    public function chooseProduct(WebGuy $I) {
        $I->wantTo('go to products and choose one');
        $I->amOnPage('/?product=' . $this->client_id);
    }

}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-08-28 19:04:00

我认为公认的答案是实现它的一种方式,但不是最好的。这样做,当您只需要共享用户会话时,您将始终必须重新执行登录到系统的所有步骤。我认为抓取会话cookie并将其通过所需的用户记录测试会更好。为此,您需要创建一个登录函数,获取cookie,并首先根据登录测试进行测试:

<?php
use \AcceptanceTester;

class testingCest
{
    private $cookie = null;

    public function _before(AcceptanceTester $I)
    {
    }

    public function _after(AcceptanceTester $I)
    {
    }


    // tests
    public function login(AcceptanceTester $I)
    {
        $I->wantTo('entrar al sistema');
        $I->amOnPage('/');
        $I->seeInCurrentUrl('/admin/login');
        $I->fillField('user','perry');
        $I->fillField('pass','pass-perry');
        $I->click('Login');
        $I->see('You\'re logged!');
        $this->cookie   = $I->grabCookie('your-session-cookie-name');
    }

    /**
     * @depends login
     */
    public function listUsers(AcceptanceTester $I)
    {
        $I->setCookie( 'your-session-cookie-name', $this->cookie );
        $I->amOnPage('/admin/users');
        $I->seeInCurrentUrl('/admin/users/1');
    }

    /**
     * @depends login
     */
    public function listRols(AcceptanceTester $I)
    {
        $I->setCookie( 'your-session-cookie-name', $this->cookie );
        $I->amOnPage('/admin/rols');
        $I->seeInCurrentUrl('/admin/rols/1');
    }
}

这样,如果登录测试失败,您将无法获得cookie,也无法通过其他测试。

我更喜欢这个@depends注释,而不是另一个答案中提出的@before,因为如果您使用@depends,您将始终执行之前测试中的代码,并且测试将仅在登录之后执行。

更新

下面还有另一个答案,https://stackoverflow.com/a/41109855/1168804也可能会对你有所帮助,因为自写这个答案以来,协同欺骗的框架已经发展起来。

票数 22
EN

Stack Overflow用户

发布于 2019-04-09 23:43:36

现在,多亏了saveSessionSnapshot和loadSessionSnapshot方法,Codeception才能解决这个问题。

<?php
// inside AcceptanceTester class:

public function login()
{
     // if snapshot exists - skipping login
     if ($I->loadSessionSnapshot('login')) return;

     // logging in
     $I->amOnPage('/login');
     $I->fillField('name', 'jon');
     $I->fillField('password', '123345');
     $I->click('Login');

     // saving snapshot
     $I->saveSessionSnapshot('login');
}
?>

然后在你的测试类中,你可以像这样做

public function _before(AcceptanceTester $I)
{
    $I->login();
}
票数 4
EN

Stack Overflow用户

发布于 2014-01-04 09:17:01

<?php
use \WebGuy;

class ProductCest
{

    private $product_id = '1';

    public function _before()
    {
    }

    public function _after()
    {
    }

    private function executeLogin(WebGuy $I){
        $I->seeInCurrentUrl('/auth/login');
        $I->fillField("//input[@type='email']", "username@email.com");
        $I->fillField("//input[@type='password']", "1234");
        $I->click('#signIn .submit');
        $I->wait(500);
        return $I;
    }

    // tests
    public function login(WebGuy $I) {
        $I = $this->executeLogin($I);

        $I->seeInCurrentUrl('/account');
    }

    /**
     * @depends login
     */
    public function chooseProduct(WebGuy $I) {
        $I = $this->executeLogin($I);
        $I->wantTo('go to products and choose one');
        $I->amOnPage('/?product=' . $this->client_id);
    }
}

这应该是可行的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20333240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档