Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Прогнать весь массив значений, на наличие ошибок в цикле

codeception
Теги: #<Tag:0x00007f7b65b673e8>

(Serg Burya) #1

Всем привет.
grabMultiple - собираю массив значений и в цикле их проверяю на наличие ошибок, тест останавливается при первом failed, как прогнать весь полученный массив, для получения всего списка ошибок, а не только первой - try…catch может какие?


(Ray Romanov) #2

Включаем программиста, не используем в теле цикла явные проверки самого фреймворка, а используем проверки самого языка, собираем в массив все ошибки и после цикла ассертим что он пустой и все.


(Serg Burya) #3

В цикле у меня
$I->seeResponseCodeIs(200);
проходит по сгенереномым страницам Sitemap

хотел получить сразу весь список ошибок. а не по одной отправлять

у Rest особо и нет не явных проверок
или …


(Ray Romanov) #4

Странно, первый вопрос был связан grabMultiple который относится к WebDriver и PhpBrowser, тут вдруг вырастает откуда-то REST у которого нет grabMultiple. А если по поводу REST, то там есть доступ к такой переменной, как response, в ней содержится результат последнего запроса, вот его и ковыряй.


(Serg Burya) #5

Сорри что запутал, вопрос не был связан с grabMultiple он там только учавствовал, PhpBrowser & REST связка,

Я хочу понять как сделать так чтобы тест прошел все 100 значений из массива и показал на какой из страниц ошибка, а не выдал ошибку на 4-ом и остановился

      $I->amOnPage('/sitemap/');
      $aLinkShow = $I->grabMultiple(".class", 'href');

      foreach($aLinkShow as $key => $value)
      {
        $I->amOnPage($value);
        $I->seeResponseCodeIs(200);
      }
    

(Ray Romanov) #6

Если хочешь красивый отчет то можно через try … catch:

  $I->amOnPage('/sitemap/');
  $aLinkShow = $I->grabMultiple(".class", 'href');
  $errors = null;
  foreach($aLinkShow as $key => $value)
  {
    $I->amOnPage($value);
    try {
      $I->seeResponseCodeIs(200);
    } catch (Exception $e) {
      $errors[] = "URL '$value' dont work!!!";
    }
  }
  $I->assertNull($errors, print_r($errors, true));

(Serg Burya) #7

Кууул, смотрел в сторону Assert и try…catch крутил но все не то и не там ))
Thank!


(Bearded Bear) #8

Может заменить команды see* на canSee* - тогда даже при фэйле проверки, он проверит все остальные результаты.


(Serg Burya) #9

Да, но используется Rest module,
через webdriver очень нама долго


(Bearded Bear) #10

Но ведь у REST модуля тоже есть команды canSee*


(Serg Burya) #11

Можно поподробней, - я такого не видел
http://codeception.com/docs/modules/REST


(Bearded Bear) #12

На сайте codeception’a про это очень мало написано http://codeception.com/docs-2.0/04-AcceptanceTests#Conditional-Assertions , но можешь поискать эти методы у себя в сегенерых:
/tests/_support/_generated/{suiteName}TesterActions.php

По идее, в phpstrom’e у тебя должны подсасываться эти команды, когда ты начнёшь их вводить


(Ray Romanov) #13

canSee* и все методы кроме grab* и get* ничего не возвращают, это чистые Assert, так что они не подходят т.к. проверять нечего!!!


(Bearded Bear) #14

В смысле нечего? Грабить ссылки всё той же коммандой нужно, я говорю про команду, которой проверять респонс код.

  $I->amOnPage('/sitemap/');
  $aLinkShow = $I->grabMultiple(".class", 'href');

  foreach($aLinkShow as $key => $value)
  {
    $I->amOnPage($value);
    $I->canSeeResponseCodeIs(200);
  }

(Ray Romanov) #15

Хорошо, а каков будет итоговый результат теста??? Фейл или ОК ?


(Bearded Bear) #16

Если хотябы 1 canSee зафейлит - то и результат у самого теста будет фейл. Я же скидывал ссылку, где можно почитать про эти команды http://codeception.com/docs-2.0/04-AcceptanceTests#Conditional-Assertions


(Serg Burya) #17

Таки работает.
Спасибо