QA The Other WayОбеспечение качества в эпоху тестов, написанных искусственным интеллектом. QA The Other Way.
Практичный QA

Проверьте контракт загрузки, а не путь к файлу.

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

7 мин. чтенияQA The Other Way
Авторская схема выбора, приема и обработки файлов.
Авторская редакционная иллюстрация.
Иллюстративное видео к этой статье. английский экранный текст; выберите субтитры для этого языка.

Переведенное издание. Технические идентификаторы остаются в своей первоначальной форме.

Используйте небольшой придуманный файл для проверки выбора и принятия, а затем храните доказательства обработки сервером отдельно.
Иллюстративная локальная демонстрация с придуманными входами, а не интерфейсом клиента или поставщика.

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

В этом руководстве используется входная документация Playwright для создания крошечного локального текстового файла. Файл содержит придуманный контент. Это не приложение к клиенту, документ, удостоверяющий личность, или образец продукта. Мы отделяем контракт ввода браузера от любой обработки, которую приложение выполняет впоследствии.

Придаем прибору читаемый идентификатор

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

await page.getByLabel('Demo attachment').setInputFiles({
  name: 'demo-note.txt',
  mimeType: 'text/plain',
  buffer: Buffer.from('Invented demo note\n', 'utf8')
});
await expect(page.getByRole('status')).toHaveText('Selected: demo-note.txt');

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

Playwright документирует пути, несколько файлов, объекты полезной нагрузки и очищает выбор через setInputFiles. Выберите наименьшую форму ввода, соответствующую регистру. Для многофайлового теста необходимы требования к порядку, ограничениям и отдельным ошибкам; это не просто та же самая проверка счастливого пути, повторяемая с большим количеством имен.

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

Некоторые интерфейсы создают ввод динамически после нажатия кнопки. Руководство по вводу описывает ожидание события выбора файла перед действием, а затем вызов setFiles для возвращенного средства выбора. Сначала поставьте ожидание события, чтобы средство быстрого выбора все еще было подключено к инициирующему элементу управления.

const pendingChooser = page.waitForEvent('filechooser');
await page.getByRole('button', { name: 'Choose demo file' }).click();
const chooser = await pendingChooser;
await chooser.setFiles({
  name: 'demo-note.txt',
  mimeType: 'text/plain',
  buffer: Buffer.from('Invented demo note\n', 'utf8')
});

Это альтернативные подходы к выбору для разных интерфейсов, а не два обязательных шага за одну загрузку. Не автоматизируйте собственный диалог операционной системы с помощью угадываемых координат экрана, если документированный ввод или граница выбора могут напрямую выражать действие.

Выбор, принятие и обработка - отдельные состояния

После выбора приложение может проверить файл, отправить его на сервер и запустить фоновый процессор. Напишите ожидаемое состояние для каждого соответствующего слоя. Сообщение о принятии, обращенное к пользователю, должно означать то, что в нем говорится. Если обработка еще не завершена, тест не должен считать всю функцию завершенной.

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

Имя файла и тип MIME являются входными данными, а не независимым подтверждением содержимого файла. Текстовые полезные данные с именем image.png не являются допустимым изображением. Выбирайте заведомо недействительные образцы при тестировании на отбраковку и действительные образцы при тестировании на приемку. Объясните, какой контракт должен выполнять каждый образец.

Сохраняйте недопустимые случаи небольшими и полезными

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

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

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

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

Общие вопросы

Подтверждает ли выбор файла завершение загрузки?

Нет. Выбор, приемка и окончательная обработка на сервере являются отдельными доказательствами.

Может ли прибор использовать настоящий документ клиента?

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

Источники