SimpleTest WebTestCases влияют друг на друга, а не на детерминированный вывод - PullRequest
1 голос
/ 27 декабря 2010

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

Тесты выглядят как влияющие друг на друга. Довольно часто, когда все идет хорошо, я имею в виду, например, 100 пройденных тестов, но когда я пишу новый метод тестирования, который не проходит, то несколько других тестов также терпят неудачу. Но часто после исправления проблемы в моем неудачном тестовом примере и повторный запуск всего набора тестов 2-3 раза весь набор снова дает пропуск.

Это обычно происходит с WebTestCases.

Ты хоть представляешь, в чем может быть проблема?

Я не изменяю переменные класса, которые являются общими и т. Д.

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

Самое странное, что после повторного запуска некоторые ошибки исчезают, и, наконец, все они. Есть ли какое-то кеширование?

Буду благодарен за подсказки, так как на самом деле не так много документации / записей в блогах / сообщений на форуме о SimpleTest в Интернете, кроме его API на сайте.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2011

(редактировать: перенес ответ в виде отдельного сообщения)

Да, я провел довольно тщательное расследование, и похоже, что в библиотеке SimpleTest есть ошибка.

Они используют fsockopenдля открытия соединения отправьте запрос через fwrite, а затем неверно получите ответ из сокета.Что я имею в виду: может случиться так, что мы будем читать 0 байтов из сокета, но мы этого не сделали, как мы ошибочно полагаем, потому что сервер может быть занят и отправить данные позже, пока мы преждевременно закончили чтение.Таким образом, мы не прочитали весь ответ, и мы проверяем только частичный ответ, что приводит к его отказу.

0 голосов
/ 27 декабря 2010

Вещи это может быть:

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