Как дифференцировать каждый экземпляр одного и того же теста - PullRequest
1 голос
/ 01 мая 2019

Чего я пытаюсь достичь?

Я сделал тест, который входит в веб-приложение, завершает экзамен и передает его.Поскольку я симулирую несколько пользователей, сдающих экзамен для проверки того, сколько сервер может обработать, мне нужен способ указать каждому экземпляру моего теста, чтобы он выбирал другого пользователя для входа в систему.

Пока япытаясь сохранить учетные данные в текстовом файле, и перед выполнением теста заставьте его взять пару учетных данных из файла и удалить эту строку, но я не уверен, является ли это наиболее реальным подходом.

Это код, который я сделал (внутри самого теста):

public function _before(AcceptanceTester $I)
    {
        $file = fopen("trainees.txt", "a+") or die("Unable to open file!");
        flock($file, LOCK_EX);
        $credentials = fgets($file);
        $trainee = $credentials;
        $credentials = '';
        fwrite($file, $credentials);

        flock($file, LOCK_UN);
        fclose($file);

        return $trainee;
    }
// test
    public function loginSuccessfully(AcceptanceTester $I,$trainee)
    { 

        $credentials = explode(':',$trainee,2);


        $I->amOnPage('');
        $I->wait(2.5);
        $I->fillField('username',$credentials[0]);
        $I->wait(1);
        $I->fillField('password',$credentials[1]);
        $I->wait($speed[0]);
        $I->click('Login');
    }

Запуск этого дает мне эту ошибку:

[PHPUnit\Framework\Exception] explode() expects parameter 2 to be string, object given

Это текстовый файл, где я хранюучетные данные:

008C108:8706405
008C408:1776723
008B108:9315051

Это мой RoboFile:

require_once 'vendor/autoload.php';

class RoboFile extends \Robo\Tasks
{
    use \Codeception\Task\MergeReports;
    use \Codeception\Task\SplitTestsByGroups;

    public function parallelSplitTests()
    {
        // Split your tests by files
        $this->taskSplitTestFilesByGroups(5)
            ->projectRoot('.')
            ->testsFrom('tests/acceptance')
            ->groupsTo('tests/_data/paracept_')
            ->run();
    }

    public function parallelRun()
    {
        $parallel = $this->taskParallelExec();

            for ($i = 1; $i <= 12; $i++) {

                $parallel->process(
                $this->taskCodecept() // use built-in Codecept task
                    ->suite('acceptance') // run acceptance tests
                    ->group("paracept_$i") // for all paracept_* groups
                    ->xml("tests/_log/result_$i.xml") // save XML results
                );
            }

    return $parallel->run();
    }

    public function parallelMergeResults()
    {
          $merge = $this->taskMergeXmlReports();
        for ($i=1; $i<=5; $i++) {
            $merge->from("tests/_output/result_paracept_$i.xml");
        }
        $merge->into("tests/_output/result_paracept.xml")->run();
    }
}

Это была только моя идея, но я не знаю, является ли это лучшим подходом.

...