Чего я пытаюсь достичь?
Я сделал тест, который входит в веб-приложение, завершает экзамен и передает его.Поскольку я симулирую несколько пользователей, сдающих экзамен для проверки того, сколько сервер может обработать, мне нужен способ указать каждому экземпляру моего теста, чтобы он выбирал другого пользователя для входа в систему.
Пока япытаясь сохранить учетные данные в текстовом файле, и перед выполнением теста заставьте его взять пару учетных данных из файла и удалить эту строку, но я не уверен, является ли это наиболее реальным подходом.
Это код, который я сделал (внутри самого теста):
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();
}
}
Это была только моя идея, но я не знаю, является ли это лучшим подходом.