- Форум тестировщиков
- → Публикации Petrov.Sergey
Публикации Petrov.Sergey
8 публикаций создано Petrov.Sergey (учитываются публикации только с 25 сентября 2023)
По типу контента
По пользователю
#150314 Что проще: найти хорошего автоматизатора или вырасти своего?
Отправлено автор: Petrov.Sergey 12 апреля 2016 - 15:38 в Автоматизированное тестирование
На личном небольшом опыте выяснилось, что вырастить своего автоматизатора проще и дешевле, чем искать готового обученного
#147598 Тестирование метода с нативными функциями (phpunit)
Отправлено автор: Petrov.Sergey 07 января 2016 - 07:42 в Начинающему тестировщику
метод - это чёрный ящик.
Есть что-то на входе и есть что-то на выходе.
Тот факт, что в методе используются нативные функции, не должны волновать при тестировании метода (если, конечно, ты не знаешь особенности нативных функций, которые могут добавить кейсов).
Поэтому используй тест-анализ:
- какими могут быть входные данные? Есть ли "граничные" значения? Не забудь проверку на NULL. Не забудь про нетипизированность РНР.
- какими могут быть выходные данные? Разбей на классы эквивалентности и реализуй те тесты, которые на выходе дают объекты из каждого класса эквивалентности.
- не забудь проверки на исключения (ошибочные входные данные, например, на вход подаётся стринговый путь к файлу, а ты подай какую-нибудь стринговую абракадабру или путь к файлу, к которому нет прав)
- если знаешь особенности нативных функций, можешь попробовать использовать их (метод внутри себя должен уметь обрабатывать эти особенности и на выход кидать исключение или ещё какую-нибудь обработку).
#146373 Стандарты, если не хватает прав. А как у Вас?
Отправлено автор: Petrov.Sergey 23 ноября 2015 - 20:53 в Начинающему тестировщику
Кнопки лучше не прятать (style="display:none" или hide), а вообще выдавать в сорсах страницы только в случае наличия прав у роли пользователя.
Хайдить элементы страницы нужно только в одном случае: если права у роли есть, но спрятанный (хайдом) контент не относится к текущим действиям или не выполнены какие-то определённые условия.
Пример: если значение какого-то селектора = "Другое", то появляется <input type="text"> или <textarea>. В противном случае этот элемент должен быть скрыт от глаз (hide).
Второй пример: если пользователь с правами "Оператор", то пункт меню "Администратор" должен в принципе отсутствовать даже в сорсах страницы.
Мой комментарий относится не к разряду юзабилити, а к разряду безопасности веб-приложения. И рекомендую к этому относиться очень серьёзно.
#146649 Ожидание изменения текста в элементе
Отправлено автор: Petrov.Sergey 30 ноября 2015 - 17:28 в Selenium - Functional Testing
Предложение:
Фактически, топикстартер ожидает, что на странице через какое-то время будет конкретный элемент с текстом.
Повторюсь: не "элемент изменит текст на «...»", а "появится элемент с текстом «...»"
То есть достаточно в локатор передать дополнительное условие, что text() = '1', и использовать presenceOfElementLocated(By locator)
И не надо изобретать свои велосипеды — главное правильно задать вопрос.
#146696 Ожидание изменения текста в элементе
Отправлено автор: Petrov.Sergey 01 декабря 2015 - 18:05 в Selenium - Functional Testing
Попробуйте сделать ожидание на существование элемента с конкретным текстом или значением.
Например - ждем ссылку с текстом Save. Для этого просто пишем соответствующий локатор (Как написал все, заметил что Petrov.Sergey это и предлагает ):WebDriverWait waitLinkSave = new WebDriverWait(driver, TimeSpan.FromSeconds(30));//Ждем 30 секунд, например waitLinkSave.Until(ExpectedConditions.ElementExists(By.XPath(//a[contains(text(), 'Save')])));//Указываем что ждем ссылку с текстом "Save"
Хотите прикол? Вы ищете по ключевому слову contains(...)
Строка "10568" содержит строку "1".
То есть "10568".contains("1") = true
В Вашем примере ссылка с текстом "Save text" будет найдена (ожидание сработает), но это будет совершенно не тот элемент, который нужен.
Топикстартеру нужно точное совпадение.
Ну, возможно, я нечётко описал. У меня значения выдёргиваются из базы. Произвожу поиск, в основном, там 1 (но бывает 2 и 3). Элемент после первого появления есть всегда и не исчезает, меняю критерий, появляется большее число. Т.к. элемент не меняет никаких атрибутов, то я использую ожидания, чтобы убедиться, что поиск вернул результат, а потом проверяю. Время поиска 2-40 секунд.
1) "произвожу поиск, в основном, там 1 (но бывает 2 и 3)"
Вопрос: как производите поиск?
2) "Элемент после первого появления есть всегда и не исчезает. Меняю критерий, появляется большее число."
Вопрос: какой критерий меняете? На что? Откуда появляется большее число? На основании чего оно появляется?
3) "Т.к. элемент не меняет никаких атрибутов, то я использую ожидания".
Знаете, со стороны это звучит как "В огороде бузина, а в Киеве дядька"
4) "я использую ожидания, чтобы убедиться, что поиск вернул результат"
Ожидание может и не найти элемент, вылетев по таймауту. А точнее, по времени IMPLICITLYWAIT
5) "я использую ожидания, чтобы убедиться, что поиск вернул результат, а потом проверяю".
Что проверяете? Что поиск вернул результат? Так за Вас это уже сделало ожидание - либо вернёт найденный элемент (значит, результат есть), либо вылетет (значит, результата нет).
6) "Время поиска 2-40 секунд"
40 секунд время поиска?!
Переписывайте тест!
#146652 Нафига вы спрашиваете на чем написан был продукт?
Отправлено автор: Petrov.Sergey 30 ноября 2015 - 18:27 в Управление тестированием
@#$% чувак, ты огонь! Кланюсь в пол =))))
Но это же единичный случай, не? Большинство задач же на уровне интерфейса? Или это большинство задач только для джунов и мидлов, а крутые тестеры все подряд могут?
Нет, это не единичный случай.
Я тоже на 80-90% бэкендщик. И у меня тоже случаются различные детективчики.
А вопрос "на чём было написано тестируемое Вами приложение", например, может иметь такой подтекст: сумеешь ли ты читать код, чтобы получше разобраться в ошибке?
Или: Если знаешь, на чём было написано ПО, значит можешь знать тонкости языка => сможешь бить по "больным местам".
Например, РНР нетипизированный, в котором '' == null == 0 == false. И я своих коллег поначалу не раз на этом ловил.
Любой вопрос, даже если Вы не понимаете его смысла или "зачем его задали" имеет свою какую-то подоплёку.
#146645 Генератор кириллических тестовых данных (Java)
Отправлено автор: Petrov.Sergey 30 ноября 2015 - 15:55 в Начинающему тестировщику
Я у себя использую такой метод:
public static String getRandomWord(int length, String alphabet) { StringBuilder sb = new StringBuilder(Math.max(length, 16)); for (int i = 0; i < length; i++) { int len = alphabet.length(); int random = RND.nextInt(len); char c = alphabet.charAt(random); sb.append(c); } return sb.toString(); }
На выходе - произвольное слово длины LENGTH, построенное на входном алфавите.
Входной алфавит бывает совершенно любой: кириллица в нижнем регистре, кириллица в верхнем регистре, цифры, латинница, спецсимволы — любой алфавит, который можно задать обычным стрингом.
RND = new SecureRandom();
#146646 Save Data
Отправлено автор: Petrov.Sergey 30 ноября 2015 - 16:22 в Автоматизированное тестирование
Я бы рекомендовал Вам не пользоваться календарём в ущерб java.util.Date.
Во-первых, календарь занимает больше памяти.
Во-вторых, время создания объекта Calendar больше, чем обычного Date
В-третьих, Вам всё равно же приходится конвертировать в Date, т.к. методы класса SimpleDateFormat принимают на вход дату только в формате Date.
Достаточно убедительно?
В-четвёртых, календарь - неклонируемый статический объект с отложенной инициализацией.
Вы не сможете клонировать уже созданный календарь, и Вам придётся раз за разом инициализировать новый объект, т.к. вызовы методов календаря изменяют его содержимое.
Если очень нужно удобно манипулировать датой-временем, рекомендовал бы обратить внимание на joda.DateTime.
Объекты этого класса генерятся не статически => можно создать объект и много раз его переиспользовать. Его методы не изменяют сам объект, а возвращают новый объект с нужными свойствами.
- Форум тестировщиков
- → Публикации Petrov.Sergey
- Политика Конфиденциальности
- Правила форума ·