Утв to end error count что это
Перейти к содержимому

Утв to end error count что это

  • автор:

Как исправить ошибку S.M.A.R.T. 0xB8: End-to-End error

S.M.A.R.T. ошибка «0xB8 End-to-End error» появляется на жестком диске или твердотельном накопителе при загрузке компьютера/ноутбука? После этой ошибки производительность вашего компьютера ухудшилась, и вы беспокоитесь о сохранности своих данных? Допустимые значения атрибута «End-to-End error» могут различаться в зависимости от производителя жесткого диска — WD (Western Digital), Samsung, Seagate, HGST (Hitachi) или Toshiba.

Что делать с «0xB8 End-to-End error»?

  • Прекратите использование сбойного HDD
  • Восстановите удаленные данные диска
  • Просканируйте диск на наличие «битых» секторов
  • Снизьте температуру диска
  • Произведите дефрагментацию жесткого диска
  • Ошибка «End-to-End error» для SSD диска
  • Сбросьте ошибку «0xB8 End-to-End error»
  • Приобретите новый жесткий диск
    • Целесообразен ли ремонт HDD?
    • Как выбрать новый накопитель?

    Узнайте как исправить «0xB8 End-to-End error» в Windows 11, Windows 10, Windows 8.1, Windows Server 2012, Windows 8, Windows Home Server 2011, Windows 7 (Seven), Windows Small Business Server, Windows Server 2008, Windows Home Server, Windows Vista, Windows XP, Windows 2000, Windows NT.

    Прекратите использование сбойного HDD

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

    Необходимо побеспокоится о сохранности ваших данных, создать резервную копию или перенести файлы на другой носитель информации. Одновременно с сохранностью ваших данных, необходимо предпринять действия по замене жесткого диска. Жесткий диск, на котором были определены S.M.A.R.T. ошибки нельзя использовать – даже если он полностью не выйдет из строя он может частично повредить ваши данные.

    Конечно же, жесткий диск может выйти из строя и без предупреждений S.M.A.R.T. Но данная технология даёт вам преимущество предупреждая о скором выходе диска из строя.

    Восстановите удаленные данные диска

    В случае возникновения SMART ошибки не всегда требуется восстановление данных с диска. В случае ошибки рекомендуется незамедлительно создать копию важных данных, так как диск может выйти из строя в любой момент. Но бывают ошибки при которых скопировать данные уже не представляется возможным. В таком случае можно использовать программу для восстановления данных жесткого диска — Hetman Partition Recovery.

    Ошибка HDD End To End Error Count что это?

    2151452ac63142d891f773d7bf5c2742.png

    Внезапно при работе винды пропало все с рабочего стола и перестали работать ярлыки.
    На этом диске был MBR. Я перекинул MBR на другой HDD. (У меня GRUB)
    И смог загрузиться.
    Проверил СМАРТ. И вот такая ошибка.
    Насколько опасные значения и что можно сделать?

    • Вопрос задан более трёх лет назад
    • 36347 просмотров

    Комментировать
    Решения вопроса 0
    Ответы на вопрос 2

    loly_girl

    Верстальщица, дизайнер, ретушёр

    Данный атрибут — часть технологии HP SMART IV — означает, что после передачи данных через кэш-память чётность данных между хостом и жестким диском не совпадает.

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

    Ответ написан более трёх лет назад
    Комментировать
    Нравится 4 Комментировать

    Neuroware

    Программист в свободное от работы время

    Однозначно проблемы, если есть чтото важное нужно не тянуть и перекинуть все нужное на другой диск. С этим диском можно попробовать следующие манипуляции:
    1. Удалить все разделы
    2. Пересоздать разделы со смещением, мб 500 в начале диска и в конце оставить пустыми
    3. Отформатировать
    4. Залить весь диск чем ни будь большим, например фильмами под завязку
    5. Удалить все и залить еще раз.
    6. Пользоваться для не очень важных вещей таких как фильмы и т.п. Потому как после п.1-5 диск обычно восстановится, но не факт, что не умрет в самый ответственный момент.

    Утв to end error count что это

    Есть диск и его SMART следующий:
    —————————————————————————-
    Model : ST3500418AS
    Firmware : CC37
    Serial Number : 6VM6SYRJ
    Disk Size : 500.1 GB (8.4/137.4/500.1/500.1)
    Buffer Size : 16384 KB
    Queue Depth : 32
    # of Sectors : 976773168
    Rotation Rate : 7200 RPM
    Interface : Serial ATA
    Major Version : ATA8-ACS
    Minor Version : ATA8-ACS version 4
    Transfer Mode : SATA/300
    Power On Hours : 15811 час.
    Power On Count : 931 раз
    Temparature : 47 C (116 F)
    Health Status : Хорошее
    Features : S.M.A.R.T., AAM, 48bit LBA, NCQ
    APM Level : —-
    AAM Level : FEFEh [ON]

    — S.M.A.R.T. —————————————————————
    ID Cur Wor Thr RawValues(6) Attribute Name
    01 115 _99 __6 00000556D548 Read Error Rate
    03 _98 _97 __0 000000000000 Spin-Up Time
    04 _99 _99 _20 0000000007AA Start/Stop Count
    05 100 100 _36 000000000000 Reallocated Sectors Count
    07 _80 _60 _30 0001068ACE2B Seek Error Rate
    09 _82 _82 __0 000000003DC3 Power-On Hours
    0A 100 100 _97 000000000000 Spin Retry Count
    0C 100 100 _20 0000000003A3 Power Cycle Count
    B7 _78 _78 __0 000000000016 Unknown
    B8 _99 _99 _99 000000000001 End-to-End Error
    BB 100 100 __0 000000000000 Reported Uncorrectable Errors
    BC 100 _97 __0 000F000F0067 Command Timeout
    BD 100 100 __0 000000000000 High Fly Writes
    BE _53 _47 _45 00002F23002F Airflow Temperature
    C2 _47 _53 __0 00110000002F Temperature
    C3 _40 _21 __0 00000556D548 Hardware ECC recovered
    C5 100 100 __0 000000000000 Current Pending Sector Count
    C6 100 100 __0 000000000000 Uncorrectable Sector Count
    C7 200 _48 __0 000000000C25 UltraDMA CRC Error Count
    F0 100 253 __0 AA9600004548 Head Flying Hours
    F1 100 253 __0 0000FF7491F7 Total Host Writes
    F2 100 253 __0 00006CF8AD33 Total Host Reads

    CrystalDiskInfo говорит, что все хорошо, в то же время SpeedFan
    утверждает, что диску пришел конец:
    Troubled attributes:
    Attribute End To End Error Count is failing now! Its current value is
    99, the worst value was 99 and the threshold is 99. According to the
    manufacturer, this is an advisory condition.

    NOTE : your hard disk Power On Hours Count attribute current value (82)
    is below the normal range (100 — 100) reported for your specific hard
    disk model. Basically your hard disk was powered on for more than the
    maximum time the average user did. This means that either all of the
    reports collected are from hard disks that were not powered on for too
    long (this is realistic for recent models) or that your hard disk is
    becoming old. Usually this is not considered as a pre-failure advisory,
    but you should check whether you want to replace the hardware or keep an
    eye on its performances over time.

    The overall fitness for this drive is 50%.
    The overall performance for this drive is 95%.

    Теперь вопрос. Сколько нам жить осталось?
    И реально это диск помирает, или что-то со шлейфом там, питанием,
    перегревом или еще чем подобным?

    Posted via RSDN NNTP Server 2.1 beta
    Re: SMART и сколько жить осталось.

    От: Хреннос
    Дата: 18.01.14 10:02
    Оценка:

    Здравствуйте, Vzhyk, Вы писали:

    V> Temparature : 47 C (116 F)

    Высоковасто.

    V>09 _82 _82 __0 000000003DC3 Power-On Hours

    15811 часов работы — это два года не выключаясь. Сурово.

    V>B8 _99 _99 _99 000000000001 End-to-End Error

    Непонятный какой-то атрибут. Но мне вот тут википедия подсказывает, что есть в нем нечто страшное:

    184 0xB8 End-to-End error / IOEDC
    This attribute is a part of Hewlett-Packard’s SMART IV technology, as well as part of other vendors’ IO Error Detection and Correction schemas, and it contains a count of parity errors which occur in the data path to the media via the drive’s cache RAM.

    То есть, по ходу, это сколько раз взглючил кэш в дисковом контроллере.
    Я бы для начала этот диск погонял-потестировал на предмет его надежности, и если все пока хорошо — помониторил бы ему СМАРТ месяцок-другой.
    Если этот атрибут еще вырастет — похоже, пора пристраивать старичка на покой.

    V>C7 200 _48 __0 000000000C25 UltraDMA CRC Error Count

    А вот этот как раз понятный атрибут: это количество ошибок при передаче данных по кабелю.
    Растет, когда шлейф отваливается.

    V>NOTE : your hard disk Power On Hours Count attribute current value (82)
    V>is below the normal range (100 — 100) reported for your specific hard
    V>disk model. Basically your hard disk was powered on for more than the
    V>maximum time the average user did. This means that either all of the
    V>reports collected are from hard disks that were not powered on for too
    V>long (this is realistic for recent models) or that your hard disk is
    V>becoming old. Usually this is not considered as a pre-failure advisory,
    V>but you should check whether you want to replace the hardware or keep an
    V>eye on its performances over time.

    Пугают.
    На самом деле время работы не столь важно — важнее оценить износ механики диска.
    Это неплохо бывает видно по атрибутам 03 (Spin Up Time) и 0A (Spin Retry Count).
    Когда время раскрутки блина становится больше 5000 миллисекунд — понятно, что смазка загустела или высохла, и есть ненулевая вероятность, что однажды диск просто не раскрутится.
    Spin Retry Count растет, когда диску не удалось раскрутиться с первого раза (что само по себе уже хреново).
    Подозрительно, что у тебя и там, и там нули в данных.

    V>Теперь вопрос. Сколько нам жить осталось?

    Вопрос не по окладу.
    Возможно, диск еще лет пять проживет без проблем (а End-to-End error случился из-за космических лучей или токопроводящих земных тараканов, которые ему микруху на контроллере замкнули). А может, завтра сдохнет.

    V>И реально это диск помирает, или что-то со шлейфом там, питанием,
    V>перегревом или еще чем подобным?

    Кстати да — питание проверь на всякий случай.
    А так — тестирование (чтобы удостовериться, что диск полностью жив) и мониторинг СМАРТа (чтобы удостовериться, что диску не плохеет). Ну и на всякий случай уже можно замену подыскивать.

    Re[2]: SMART и сколько жить осталось.

    От: Vzhyk
    Дата: 18.01.14 19:43
    Оценка:

    Здравствуйте, Хреннос, Вы писали:

    Х>Высоковасто.
    Сдуру купил когда-то корпус Корпус Arctic Cooling Silentium T (http://www.ixbt.com/news/hard/index.shtml?09/41/96), хотел тихий, он и оказался тихим. Но горячим для HDD.
    Ну и последнее время, подглючивать начало чуть, причем не понятно, блок питания (550Вт почти честных и дурачкой форму, так что заменить сложно) или мамка (asus M34A78Pro).

    Х>15811 часов работы — это два года не выключаясь. Сурово.
    Ну да, лет 5 ему уже или более.

    V>>B8 _99 _99 _99 000000000001 End-to-End Error
    Х>Непонятный какой-то атрибут. Но мне вот тут википедия подсказывает, что есть в нем нечто страшное:
    Вот посему я здесь и спросил, может кто больше в курсе этого атрибута. Причем такое впечатление, что у него только два значения.

    Х>Я бы для начала этот диск погонял-потестировал на предмет его надежности, и если все пока хорошо — помониторил бы ему СМАРТ месяцок-другой.
    Может какой Викторией имеет смысл или чем попроще?

    Х>Кстати да — питание проверь на всякий случай.
    А как?
    Speedfan от одного контроллера все правильные напряжения показывает, а от другого прыгают странным образом.

    Re[3]: SMART и сколько жить осталось.

    От: Хреннос
    Дата: 21.01.14 11:49
    Оценка:

    Здравствуйте, Vzhyk, Вы писали:

    V>>>B8 _99 _99 _99 000000000001 End-to-End Error
    Х>>Непонятный какой-то атрибут. Но мне вот тут википедия подсказывает, что есть в нем нечто страшное:
    V>Вот посему я здесь и спросил, может кто больше в курсе этого атрибута. Причем такое впечатление, что у него только два значения.

    В смысле — ноль и единица? Нет, я в процессе поисков наткнулся на форум, где интеловские SSD обсуждали — там у народа гораздо больше единицы вылезало.

    Х>>Я бы для начала этот диск погонял-потестировал на предмет его надежности, и если все пока хорошо — помониторил бы ему СМАРТ месяцок-другой.
    V>Может какой Викторией имеет смысл или чем попроще?

    Я бы просто позаливал на него данные и почитал бы их потом обратно. Если под виндой, то неплохо работает такая связка:
    — в Total Commander создаем файл с чексуммами (*.sfv) для всего, что заливаем на диск.
    — заливаем
    — проверяем чексуммы у залитого.

    Х>>Кстати да — питание проверь на всякий случай.
    V>А как?
    V>Speedfan от одного контроллера все правильные напряжения показывает, а от другого прыгают странным образом.

    Если прыгают — возможно, с питанием проблемы.
    Еще, возможно, шалит сетевой фильтр.

    Помнится, был у нас чудесный компьютер, у которого были симптомы барабашки: самопроизвольно елозила (точнее, скакала по всему экрану) и кликала мышь, печатала хрень клавиатура, окна в винде сами растягивались-сворачивались. Поиски вирусни закончились ничем — все чисто.
    Принесли пациента к себе для разбирательств — все чисто, все работает, никаких барабашек.
    Принесли обратно, включили — снова здорова: мышка скачет, клава глючит.

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

    Re[4]: SMART и сколько жить осталось.

    От: Vzhyk
    Дата: 21.01.14 12:11
    Оценка:

    Здравствуйте, Хреннос, Вы писали:

    Х>В смысле — ноль и единица? Нет, я в процессе поисков наткнулся на форум, где интеловские SSD обсуждали — там у народа гораздо больше единицы вылезало.
    Думаю, это от прошивки зависит. У меня сложилось такое впечатления, что в моем случае это булево значение. Ну и погонял диск HDDscan — все хорошо. Так что ничего пока не понятно, где глюк.

    Х>Заземления у нас, ясен пень, не было, вот он и свистел в блок питания.
    Сеть с заземлением, никаких фильтров нет, но или мамка или блок питания меня смущают, но не понятно что. Та же PCI-USB3 карточка под юнихом типа живет, а под виндой отваливалась (ей дополнительное питание надо).

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

    Re[2]: SMART и сколько жить осталось.

    От: About Blank Хороший укроп — мертвый укроп!
    Дата: 08.02.14 12:44
    Оценка:

    Здравствуйте, Хреннос, Вы писали:

    Х>15811 часов работы — это два года не выключаясь. Сурово.

    ---------------------------------------------------------------------------- CrystalDiskInfo 6.0.4 (C) 2008-2013 hiyohiyo Crystal Dew World : http://crystalmark.info/ ---------------------------------------------------------------------------- OS : Windows 8.1 Pro [6.3 Build 9600] (x64) Date : 2014/02/08 16:42:28 -- Controller Map ---------------------------------------------------------- - Microsoft Storage Spaces Controller [SCSI] + Intel(R) Desktop/Workstation/Server Express Chipset SATA RAID Controller [SCSI] - Intel Raid 0 Volume - Intel Raid 0 Volume - PLEXTOR BD-R PX-B920SA -- Disk List --------------------------------------------------------------- (1) Hitachi HUA721010KLA330 : 1000.2 GB [X/0/0, cs] (2) WDC WD3000GLFS-01F8U0 : 300.0 GB [X/0/1, cs] - wd (3) WDC WD3000GLFS-01F8U0 : 300.0 GB [X/0/2, cs] - wd (4) Hitachi HUA721010KLA330 : 1000.2 GB [X/0/3, cs] ---------------------------------------------------------------------------- (1) Hitachi HUA721010KLA330 ---------------------------------------------------------------------------- Model : Hitachi HUA721010KLA330 Firmware : GKAOAB0A Serial Number : GTF002PAJ61UKF Disk Size : 1000.2 GB (8.4/137.4/1000.2/----) Buffer Size : 31157 KB Queue Depth : 32 # of Sectors : 1953525168 Rotation Rate : Unknown Interface : Serial ATA Major Version : ATA/ATAPI-7 Minor Version : ATA/ATAPI-7 T13 1532D version 1 Transfer Mode : ---- | SATA/300 Power On Hours : 36396 hours Power On Count : 1162 count Temparature : 48 C (118 F) Health Status : Good Features : S.M.A.R.T., APM, AAM, 48bit LBA, NCQ APM Level : 0000h [OFF] AAM Level : 80FEh [ON] -- S.M.A.R.T. -------------------------------------------------------------- ID Cur Wor Thr RawValues(6) Attribute Name 01 _99 _99 _16 000000010001 Read Error Rate 02 130 130 _54 000000000098 Throughput Performance 03 172 172 _24 000701A80184 Spin-Up Time 04 100 100 __0 00000000051E Start/Stop Count 05 100 100 __5 000000000000 Reallocated Sectors Count 07 100 100 _67 000000000000 Seek Error Rate 08 134 134 _20 000000000020 Seek Time Performance 09 _95 _95 __0 000000008E2C Power-On Hours 0A 100 100 _60 000000000000 Spin Retry Count 0C 100 100 __0 00000000048A Power Cycle Count C0 _99 _99 __0 000000000703 Power-off Retract Count C1 _99 _99 __0 000000000703 Load/Unload Cycle Count C2 125 125 __0 004200050030 Temperature C4 100 100 __0 000000000000 Reallocation Event Count C5 100 100 __0 000000000000 Current Pending Sector Count C6 100 100 __0 000000000000 Uncorrectable Sector Count C7 200 200 __0 000000000000 UltraDMA CRC Error Count

    Hitachi рулят. тьфу тьфу тьфу.

    Как проводить сквозное (end-to-end) тестирование вашего приложения используя Cypress.io

    Изображение от https://unsplash.com/@kellysikkema

    Чтобы протестировать свои приложения, вам потребуется сделать следующие шаги:

    • Запустить приложение
    • Подождать пока сервер запустится
    • Провести ручное тестирование приложения(нажать на кнопки, ввести случайные текст в поля ввода или отправить форму)
    • Проверить, что результат вашего теста корректен(изменения заголовка, части текста и т.д.)
    • Повторить эти шаги ещё раз после простых изменений кода

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

    Именно здесь в игру вступает Cypress. При использовании Cypress единственное, что вам нужно сделать, это:

    • Написать код вашего теста(нажатие на кнопку, ввод текста в поля ввода и т.п.)
    • Запустить сервер
    • Запустить или перезапустить тест

    Только и всего! Библиотека Cypress выполняет все тесты за вас. И самое приятное, что она не только сообщает вам все ли ваши тесты успешны или нет, но также сообщает вам, какой тест не удался.

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

    Теперь, когда мы обсудили преимущества Cypress, давайте узнаем об основах этой библиотеки.

    Начало

    Установка и настройка Cypress

    Сначала создайте отдельную папку для вашего проекта, а затем инициализируйте ее:

    Инициализация проекта

    Наконец, чтобы установить библиотеку Cypress:

    Установка Cypress

    Примечание . Если вы используете дистрибутив Linux, перейдите к этим инструкциям, прежде чем продолжить установку Cypress через NPM.

    Теперь, когда Cypress установлен, попробуйте запустить его с помощью следующей команды:

    Открытие Cypress

    Она открывает запускалку тестов(Test Runner):

    Интерфейс Test Runner

    А теперь давайте перейдём к написанию тестов.

    Основы Cypress

    Создание файла

    Cypress требует, чтобы все наши тесты находились в каталоге cypress/integration . Сначала перейдите в этот каталог:

    Переход к cypress/integration

    Теперь создайте файл JavaScript с именем basicTest.js :

    Создание JavaScript файла

    Если вы не отключили сервер Cypress, ваши новые файлы появятся в Test Runner в реальном времени:

    Теперь давайте напишем наш первый тест.

    Простые тесты с утверждением и ожиданием значения

    В вашем файле /cypress/integration/basicTest.js напишите следующий код:

    Код к файлу basicTest.js

    • Строка 1: Функция describe сообщает Cypress название набора наших тестов.
    • Строка 2: Функция it , обозначает название теста.
    • Строка 3: Создаём утверждение. Здесь мы подтверждаем, что 2 + 2 равно 4. Если тест вернёт false , то он будет немедленно остановлен.

    Чтобы запустить вашу программу, щёлкните по basicTest.js в вашем сервере Cypress.

    Щелчок по basicTest.js в Test Runner

    Результат запуска теста

    Отлично! Значит, наше утверждение было успешным.

    Что, если мы сделаем заведомо ложное утверждение? Теперь в /cypress/integration/basicTest.js добавьте следующий код в пределах функции describe :

    Код для добавление в basicTest.js

    • Строка 2: Если сумма 4 и 5 равна 10, тест будет пройден. В противном случае, незамедлительно остановлен.

    Снова запустите код. Результат будет:

    Результат нашего второго теста

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

    Давайте больше поиграем с утверждениями. Добавьте в basicTest.js следующий код:

    Код для добавления в basicTest.js

    • Строка 2: Если сумма 5 и 5 не равна 100, то тест должен пройти.

    Результат выполнения теста:

    Результат теста: успешно!

    Отлично! Наш тест прошел. Функция expect выполняет BDD (behavior-driven) утверждения. В следующем разделе мы выполним утверждения, основанные на тестировании(test-driven assertions).

    Сейчас /cypress/integration/basicTest.js должен выглядеть так:

    Написание утверждений основанных на тестировании(test-driven assertions) с явным использованием assert

    Мы даже можем писать утверждения на основе TDD с использованием assert .

    В вашем файле basicTest.js напишите следующий код:

    • Строка 2: Создаём объект со свойствами name и age .
    • Строка 6: Функция isObject подтверждает, что переменная person является объектом. Если результат true , то будет напечатано value is object . В противном случае будет показано, что этот тест не прошел.
    • Строка 10: Убеждаемся, что переменная name содержит строковое значение.
    • Строка 14: Убеждаемся, что переменная name не является целым числом.

    Запустите код. Результатом будет:

    Результат запуска нашего теста

    Отлично! Наш код работает. В следующем разделе мы научимся работать с сайтами через Cypress.

    Сейчас наш basicTest.js должен выглядеть так:

    Запуск веб-сайтов

    Здесь мы попробуем запустить Demoblaze , сайт, созданный для проведения тестов.

    В своей папке /cypress/integration/ создайте файл с именем basicCommandsTest.js . В этом файле напишите следующий код:

    Код для basicCommandsTest.js

    • Строка 3: Используем метод visit , чтобы сообщить Cypress о переходе на веб-сайт Demoblaze.

    Сохраните свой код и нажмите на basicCommandsTest.js в меню Test Runner:

    Клик по basicCommandsTest.js вTest Runner

    Отлично! Наш код работает. В следующем разделе мы более глубоко погрузимся в тестирование с помощью Cypress.

    В итоге basicCommandsTest.js должен выглядеть так:

    Cypress: Расширенные команды

    В этом разделе мы попытаемся взаимодействовать с элементами на странице. Однако, прежде чем продолжить этот процесс, нам нужно сначала научиться идентифицировать элементы HTML в Cypress.

    Как идентифицировать элементы

    Cypress использует селекторы JQuery для идентификации компонентов на веб-странице.

    Например, чтобы получить элемент myButton используя id , мы должны написать следующий код:

    Получение элемента через id элемента

    В качестве альтернативы, чтобы идентифицировать элемент myButton используя имя класса, могли бы использовать следующую строку:

    Получение элемента через имя класса

    Давайте теперь поработаем с взаимодействием с пользовательским интерфейсом нашего сайта.

    Нажатие кнопки

    В этом разделе мы будем использовать страницу The-Internet для запуска наших тестов. На этом веб-сайте мы будем использовать раздел добавления/удаления элементов.

    Давайте сначала попробуем идентифицировать нашу кнопку «Добавить элемент».

    Страница для тестирования

    Используя DevTools, заметьте, что у button есть свойство onclick , имеющее значение addElement() .

    Скриншот из DeveloperTools

    Соответствующий селектор для этой кнопки будет выглядеть так:

    Идентификация элемента

    В папке /cypress/integration создайте файл с именем runningClickCommand.js . В этом файле напишите следующий код:

    • Строка 2: Переходим на веб-страницу.
    • Строка 6: Связываем в одну цепочку получение элемента button и нажатие на эту кнопку.

    Запустите код. Результат:

    Отлично, наш код работает! Обратите внимание, что как только страница загрузилась, в нашем тесте автоматически происходит нажатие на кнопку Add Element .

    Давайте теперь поработаем с вводом текста в текстовое поле.

    Ввод текста

    В этом разделе мы будем использовать страницу The-Internet’s login. Нам нужен способ сначала идентифицировать элементы.

    Скриншот сайта для тестированияСкриншот из DeveloperToolsСкриншот из DeveloperTools

    Поле username имеет id равное username , а поле password имеет id равное password . Кроме того, кнопка Login имеет свойство type равное submit . Таким образом, для определения полей username и password , нам понадобится селектор JQuery id :

    Идентификация элемента через его id

    Более того, чтобы получить кнопку button , нам понадобится селектор атрибутов , например:

    В своей папке /cypress/integration создайте файл с именем runningTypeCommand.js . В этом файле напишите следующий код:

    • Строка 3: Переходим на страницу входа в систему.
    • Строка 6: Переходим в поле username и добавляем метод type в цепочку вызовов, чтобы напечатать в этом текстовом поле значение tomsmith .
    • Строка 7: Переходим в поле password и вводим SuperSecretPassword .
    • Строка 10: Нажимаем на кнопку «Отправить».

    Запустите код. Результатом будет:

    И мы закончили! В следующем разделе мы узнаем о работе с чекбоксами.

    Переключение чекбоксов

    Давайте сначала посмотрим на DevTools:

    Developer Tools

    Оба этих чекбокса имеют свойство type со значением checkbox . Кроме того, они также являются дочерними элементами для элемента form с id равным checkboxes . В этом случае мы бы использовали селектор JQuery родитель-потомок:

    Идентификация наших чекбоксов

    В каталоге /cypress/integration/ создайте файл с именем runningCheckCommand.js и напишите следующий код:

    • Строка 4: Находим обе группы чекбоксов, а затем используем метод check , чтобы отметить их выбранными.
    • Строка 7: Просим Cypress приостановить процесс тестирования на одну секунду.
    • Строка 8: Получаем список отмеченных чекбоксов. Затем используем метод uncheck , чтобы снять выбор.

    Запустите код. Результат:

    Отлично! Наш код работает. Давайте теперь поработаем над неявными утверждениями с помощью Cypress.

    Неявные утверждения

    Ранее мы выполняли утверждения для переменных и объектов. Однако в реальном мире мы хотели бы выполнять утверждения для текста, расположенного в нашем элементе HTML, или проверять, есть ли у нашего элемента ul дочерние элементы li или нет.

    Для выполнения таких утверждений мы будем использовать ключевое слово should . В этом разделе мы будем делать неявные утверждения на странице добавления элемента — The-Internet’s Add Element

    Скриншот тестируемой страницыDeveloper Tools

    Наша кнопка Delete имеет класс added-manually . Мы хотим выполнить следующее утверждение для этого элемента button :

    Наше утверждение

    Для этого мы должны использовать следующий синтаксис:

    Получение элемента и за тем утверждение

    Альтернативно, можем выполнить такое утверждение:

    Наше утверждение

    Мы можем использовать эту строку кода:

    Получение элемента и затем утверждение

    Перейдите в /cypress/integration/runningClickCommand.js и добавьте следующий код:

    Код для runningClickCommand.js

    • Строка 1: Получаем элементы с классом added-manually . Затем проверяем, что их количество( have.length) равно единице.
    • Строка 3: Получаем кнопку Add Element , а затем проверяем, что текст на кнопке( have.text) действительно будет Add Element .

    Запустите код. Результат в конце теста должен быть следующим:

    Результат запуска

    Отлично! Наш код работает. Теперь перейдем к изучению команды each .

    В итоге cypress/integration/runningClickCommand.js должен выглядеть так:

    Команда each

    Скриншот тестового сайта

    Чтобы удалить все эти элементы, мы можем вручную прокликать все кнопки Delete . Это возможно; однако рассмотрим ситуацию, когда кнопок Delete больше сотни. Следовательно, удаление всех их вручную займет много времени.

    Вот здесь-то и появляется команда each . Она позволяет вам перебирать серию элементов, а затем выполнять любую функцию для каждого из них. В этом случае мы хотим перебрать все наши кнопки Delete и запустить функцию click на всех них.

    Откройте Developer Tools:

    Все наши кнопки Delete имеют свойство class равное added-manually . В этом случае мы будем использовать селектор классов и соединять его с командой each , например:

    Получение элемента и использование each затем

    Перейдите в /cypress/integration/runningClickCommand.js и добавьте следующий фрагмент кода:

    Код для runningClickCommand.js

    • Строка 2: Получаем все элементы, у которых есть класс .added-manually . Каждый элемент в серии будет представлен параметром $el .
    • Строка 3: Обёртываем этот элемент, чтобы мы могли выполнять с ним команды Cypress. Здесь мы отправляем команду щёлкнуть по этим элементам.

    Результат выполнения кода должен быть следующим:

    Наш код работает! Поскольку наш тест был быстрым, давайте попробуем добавить на страницу больше элементов.

    Найдите следующий фрагмент кода:

    Измените это так:

    • Строка 2: Запускаем цикл, чтобы сообщить Cypress, что нужно нажать кнопку Add Element 20 раз.

    Запустите код еще раз. Результат должен быть таким:

    Как видите, наша программа автоматически удалила все элементы на странице без каких-либо ручных усилий. Отлично!

    В следующей части статьи мы узнаем о том, что можно и чего нельзя делать при тестировании с Cypress.

    В итоге cypress/integration/runningClickCommand.js должен выглядеть так:

    Лучшие практики

    Держите тесты изолированными

    Рассмотрим ситуацию, когда вы тестируете свое приложение. Структура вашего проекта будет выглядеть примерно так:

    Не самая лучшая структура

    В вашем Test Runner это будет выглядеть так:

    Отображение тестовой структуры в Test Runner

    Команда Cypress утверждает, что структура вашего проекта должна быть организована как можно лучше. Лучше всего перегруппировать ваши файлы проекта в другие папки, например:

    Хорошая структура проекта

    Следовательно, это выглядело бы так:

    По возможности используйте собственные команды

    Взгляните на этот фрагмент кода:

    Пример кода

    Обратите внимание, что мы вынуждены многократно использовать команды get и type . Здесь мы можем реализовать собственные команды, чтобы сделать их короче.

    В вашем cypress/support/commands.js напишите этот код:

    • Строка 1: Создаём собственную команду, которая будет иметь два параметра identifier и data .
    • Строка 2: Получаем элемент с соответствующим идентификатором, а затем вводим в него данные.

    Примечание . Считается хорошей практикой записывать свои собственные команды в файл /cypress/support/commands.js .

    Теперь вернитесь в свой тестовый файл и замените его вот так:

    Пример кода

    Как видите, наш код выглядит значительно короче.

    Избегайте «атомарных» тестов

    Взгляните на этот фрагмент кода:

    Здесь мы повторно выполняем тесты на HTML элементе с id равным first .

    Cypress не одобряет такого поведения. Это неэффективно, и есть способ лучше переписать этот код, например:

    Мы можем использовать метод and для связывания дополнительных команд should с нашим элементом.

    Не запускайте сервер в Cypress

    Команда exec присутствует для запуска команд в терминале. Но запускать сервер с помощью этой команды крайне не рекомендуется.

    Если вы хотите протестировать свое приложение на localhost , сначала запустите сервер, а затем запустите свой тест Cypress.

    Команды терминала

    Репозиторий GitHub и дополнительные ресурсы

    Код GitHub

    Дальнейшее чтение

    • Cypress Tutorial Videos
    • End-To-End Testing With Cypress by codedamn
    • Real Confidence With Cypress
    • Best practices with Cypress: AssertJS Conference

    Заключение

    Тестирование — ключевой шаг в процессе разработки, поскольку он обеспечивает правильную работу вашего приложения. Некоторые программисты предпочитают вручную тестировать свои программы, поскольку написание тестов требует значительного количества времени и энергии. К счастью, Cypress решил эту проблему, позволив разработчику писать тесты в короткие сроки.

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

    • cypress
    • тестирование
    • автоматизация тестирования
    • Тестирование IT-систем
    • JavaScript
    • Тестирование веб-сервисов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *