<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Автоматизация тестирования</title><generator>teletype.in</generator><description><![CDATA[Автоматизированное тестирование решений на платформе 1С:Предприятие 8.3]]></description><image><url>https://teletype.in/files/18/00/1800412b-28e8-49cf-9b5b-7b663bafd292.jpeg</url><title>Автоматизация тестирования</title><link>https://teletype.in/@autotestfor1c</link></image><link>https://teletype.in/@autotestfor1c?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/autotestfor1c?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/autotestfor1c?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sat, 04 Apr 2026 12:01:14 GMT</pubDate><lastBuildDate>Sat, 04 Apr 2026 12:01:14 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@autotestfor1c/F2QW-qLIMlZ</guid><link>https://teletype.in/@autotestfor1c/F2QW-qLIMlZ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c</link><comments>https://teletype.in/@autotestfor1c/F2QW-qLIMlZ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c#comments</comments><dc:creator>autotestfor1c</dc:creator><title>Тестирование прав доступа</title><pubDate>Sat, 29 Jul 2023 15:53:02 GMT</pubDate><category>Тестирование базы данных</category><description><![CDATA[Важная функция &quot;большой&quot; системы - ограничение доступа к данным. На этапе разработки тестирование можно выполнить вручную. Но в работающей системе, которая активно развивается, ручное тестирование прав очень трудоемкое и его очень не интересно делать. Особенно это касается регресса. Не буду говорить, что если у пользователя после обновления исчезли права, это стресс только для пользователя. Тогда как в ситуации когда пользователь вдруг получил дополнительный доступ к чувствительным данным, у всех будет стресс.]]></description><content:encoded><![CDATA[
  <p id="Duzr">Важная функция &quot;большой&quot; системы - ограничение доступа к данным. На этапе разработки тестирование можно выполнить вручную. Но в работающей системе, которая активно развивается, ручное тестирование прав очень трудоемкое и его очень не интересно делать. Особенно это касается регресса. Не буду говорить, что если у пользователя после обновления исчезли права, это стресс только для пользователя. Тогда как в ситуации когда пользователь вдруг получил дополнительный доступ к чувствительным данным, у всех будет стресс.</p>
  <p id="PUN8">С важностью тестирования определились теперь рассмотрим, что можно тестировать. Рассмотрим 2 крупные возможности платформы: доступ к объектам и доступ на уровне записи.</p>
  <p id="06sF"><strong>Доступ к объектам</strong></p>
  <p id="QLKV">Важно проверить возможность/не возможность создания и записи нужных объектов. Запись справочников  и проведение документов приводят к записи вспомогательные данных, доступ к которым тоже важно проверить.</p>
  <p id="UeRU">Тестовые сценарии будут содержать позитивные сценарии, которые проверяют доступ ко всем разрешенным объектам, и негативные сценарии, которые проверят запрет доступа к ключевым объектам, все запрещенные объекты проверять нет смысла.</p>
  <p id="cukX"><strong>Доступ на уровне записи</strong></p>
  <p id="2Pbo">В данном случае недостаточно проверить доступен ли объект, нужно проверить состав разрешенных данных и соответствуют ли они разрешению. Как правило доступ к объектам ограничиваться по ключевым аналитикам. Состав данных можно проверить через формы списков. Тест открывает форму списка и проверят, что в нем есть все разрешенные объекты и отсутствуют запрещенные. </p>
  <p id="HRSn">Подошли к тому, как провести тестирование и какое требуется тестовое окружение. В первую очередь должно быть создано нужное количество пользователей. Количество пользователей должно соответствовать количеству профилей доступа. Данную информацию можно взять из матрицы доступа.</p>
  <p id="Ehhq">Рассмотрим гипотетический пример торговой системы в которой есть профили:</p>
  <ul id="SEjQ">
    <li id="kGTr">менеджер по закупкам (МЗ) - пользователи с профилем МЗ должны видеть все документы Заказы поставщикам и Поступления товаров.</li>
    <li id="59rj">менеджер по продажам (МП) - пользователи с профилем МП должны видеть все документы Заказы покупателей и  Реализация товаров.</li>
    <li id="6iMe">бухгалтер (БУ) - пользователи с профилем БУ должны видеть все документы, но с ограничением по Организации.</li>
  </ul>
  <p id="s33U">Тестовое окружение будет выглядеть так:</p>
  <ul id="xlD4">
    <li id="S98n">3 пользователя: МЗ, МП, БУ</li>
    <li id="NUvw">2 Организации</li>
    <li id="F0sL">профилю БУ дать разрешение на 1 Организацию</li>
    <li id="aobI">создать по 1 одному документу с &quot;запрещенной&quot; Организацией</li>
    <li id="TqhS">создать по 1 одному документу с &quot;разрешенной&quot; Организацией</li>
  </ul>
  <p id="J2I4">Тестовые сценарии будут следующими:</p>
  <p id="rLaI">Сценарии для проверки доступа  МЗ</p>
  <ul id="jVtb">
    <li id="Lhza">Позитивный: создать, записать и провести документ Заказы поставщикам</li>
    <li id="YFjp">Позитивный: создать, записать и провести документ Поступления товаров</li>
    <li id="ZyEx">Негативный: создать документ Заказы покупателей</li>
    <li id="iNpW">Негативный: создать документ Реализация товаров</li>
  </ul>
  <p id="8zdi">Сценарии для проверки доступа  МП</p>
  <ul id="jVtb">
    <li id="4PUH">Позитивный: создать, записать и провести документ Заказы покупателей </li>
    <li id="MqXO">Позитивный: создать, записать и провести документ Реализация товаров</li>
    <li id="XOOI">Негативный: создать документ Заказы поставщикам</li>
    <li id="PN2D">Негативный: создать документ Поступления товаров</li>
  </ul>
  <p id="pVPJ">Сценарии для проверки доступа  БУ</p>
  <ul id="m85r">
    <li id="82EM">Позитивный: список документов Заказы поставщикам содержит все документы с разрешенной Организацией </li>
    <li id="509G">Позитивный: список документов Поступления товаров содержит все документы с разрешенной Организацией </li>
    <li id="AFOi">Позитивный: список документов Заказы покупателей содержит все документы с разрешенной Организацией </li>
    <li id="jm56">Позитивный: список документов Реализация товаров содержит все документы с разрешенной Организацией </li>
    <li id="8ksi">Негативный: список документов Заказы поставщикам НЕ содержит документов с запрещенной Организацией </li>
    <li id="kEKx">Негативный: список документов Поступления товаров НЕ содержит документов с запрещенной Организацией </li>
    <li id="kaTY">Негативный: список документов Заказы покупателей НЕ содержит документов с запрещенной Организацией </li>
    <li id="ebK5">Негативный: список документов Реализация товаров НЕ содержит документов с запрещенной Организацией </li>
  </ul>
  <p id="G4OS">Далее запуск каждого сценария выполняется под пользователем, для которого предназначен сценарий. </p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@autotestfor1c/IRbXzTow2UP</guid><link>https://teletype.in/@autotestfor1c/IRbXzTow2UP?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c</link><comments>https://teletype.in/@autotestfor1c/IRbXzTow2UP?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c#comments</comments><dc:creator>autotestfor1c</dc:creator><title>Инструмент для создания сложного тестового окружения</title><pubDate>Tue, 14 Feb 2023 15:11:27 GMT</pubDate><description><![CDATA[<img src="https://img3.teletype.in/files/ee/f2/eef2b161-599c-46e3-8ece-d1a80b27e8e5.png"></img>В предыдущих заметках: заметка один, заметка два теоретически рассуждал про принципы создания сложного окружения. В этой заметке перейду к практической части и создам окружение с помощью существующих open source инструментов. Воспользуемся vanessa automation single версии 1.2.040.1.]]></description><content:encoded><![CDATA[
  <p id="VFHt">В предыдущих заметках: <a href="https://teletype.in/@autotestfor1c/XIzVdpD5y0E" target="_blank">заметка один</a>, <a href="https://teletype.in/@autotestfor1c/r7C2-f1nGzZ" target="_blank">заметка два</a> теоретически рассуждал про принципы создания сложного окружения. В этой заметке перейду к практической части и создам окружение с помощью существующих open source инструментов. Воспользуемся vanessa automation single версии 1.2.040.1.</p>
  <p id="pL2L">Мне нужно чтобы инструмент позволил создать объекты метаданных по &quot;человекочитаемому&quot; описанию. Нужен интерактивный помощник, в котором бы я мог выбрать создаваемые объекты и он бы сгенерировал их описания, чтобы минимизировать ручной труд. При неоднократном создании объекты не должны дублироваться, а должны обновляться созданные ранее объекты. Интерактивное создание объектов не требуется, они могут создаваться без запуска тест-клиента.  </p>
  <p id="9FTT">Для примера возьмем функционал зарплаты типовой конфигурации Бухгалтерия предприятия КОРП 3.0. Для тестирования функционала зарплаты мне нужен принятый на работу сотрудник, чтобы в каждом сценарии не дублировать шаги по созданию справочников и прием сотрудника на работу. Создание такого окружения описываю в отдельном сценарии, который будет запускаться один раз при подготовке новой тестовой базы. Сценарий должен создать документ Прием на работу и необходимые справочные данные.</p>
  <p id="7biP">В панели vanessa automation single есть инструмент Подготовка и загрузка данных. Это интерактивный помощник, который позволяет сгенерировать текст сценария. Форма состоит из 3-х закладок: </p>
  <ul id="nB8s">
    <li id="7sOc">Отбор по метаданным - содержит дерево метаданных конфигурации, позволяет выбрать нужные метаданные и сгенерировать сценарий выгрузки всех данных выбранных объектов</li>
    <li id="rWEN">Отбор по ссылкам - содержит таблицу, в которую можно подобрать  нужные ссылки и сгенерировать сценарий только для выбранных данных</li>
    <li id="kwnJ">Фича - текст сгенерированного сценария</li>
  </ul>
  <p id="LHp7">Основная особенность инструмента, что он умеет собирать связанные объекты и включает их в состав сценария. Иногда это полезно.</p>
  <p id="sPZs">Так как мне нужен только один документ Прием на работу, то на закладке Отбор по ссылкам выбираю документ, который будет служить прототипом документа для окружения.</p>
  <figure id="0HZo" class="m_original">
    <img src="https://img3.teletype.in/files/ee/f2/eef2b161-599c-46e3-8ece-d1a80b27e8e5.png" width="595" />
  </figure>
  <p id="9Wqe">Генерирую текст сценария и получаю достаточно много связанных объектов,  справочников и регистров сведений, универсальный алгоритм отработал правильно. После удаления лишних строк сценарий получается рабочим. Меня не устраивает только один момент, что все объекты идентифицируются ссылками, а мне нужно чтобы часть объектов идентифицировалась пользовательским представлением.</p>
  <p id="JheO">Для этого есть неочевидная комбинация настроек, которая приводит к нужному результату. Устанавливаются в такой последовательности:</p>
  <ol id="jR0G">
    <li id="YRmg">параметр Заменять ссылку на реквизит ставим в положение &quot;Да&quot;,</li>
    <li id="pXIn">в дереве метаданных в строке объекта устанавливаем флаг Искать по атрибуту и в поле Атрибут поиска вводим имя атрибута.</li>
  </ol>
  <figure id="dGN8" class="m_original">
    <img src="https://img4.teletype.in/files/b9/3f/b93f3566-d547-4faa-a695-632e6200b3d3.png" width="549" />
  </figure>
  <p id="OiEe">Генерирую текст кнопкой на вкладке Отбор по ссылкам, но в тесте сценария ничего не меняется, везде, где используется справочник Банки остаются ссылки. Оказывается магия происходит только после нажатия кнопки <u>Заменить ссылки реквизитами</u>. Вместо внутренней ссылки на элемент справочника Банки во всем сценарии появляется такая строка <code>FindByAttribute:Catalog.Банки;Наименование;ПАО СБЕРБАНК</code></p>
  <p id="Sj4w">В таком сценарии можно заменить наименование справочника и получить новые объекты при выполнении сценарии. Пробую на своем примере для справочников Сотрудники и Физические лица. Из сгенерированного сценария копирую строки шагов для справочников Сотрудники и Физические лица. Вставляю строки в новый feature-файл, из таблиц реквизитов удаляю Код (чтобы создался новый элемент с новым кодом) и заменяю наименование. Запускаю полученный сценарий, возникает ошибка, шаг из библиотеки не понимает<code>FindByAttribute</code>, сценарий не выполнен, данные не созданы. </p>
  <p id="bdIR">Исправляю ошибку, т.к. все необходимое уже есть, запускаю сценарий, справочники создались, открываются, значит все корректно. Повторный запуск не приводит к созданию дубля элементов. Перехожу к финальному этапу создание документа Прием на работу. Переношу строки из заготовки сценария в основной feature-файл, в данном случае будет 2 шага с таблицами реквизитов шапки и табличной части.  Удаляю из реквизитов шапки колонку Номер, чтобы документ был с новым номером. Чтобы проверить создание документа нужно выполнить сценарий в отдельной базе, т.к. документ идентифицируется по внутренней ссылке, его точно не должно быть. Обновление реквизитов можно проверить в той же базе, изменить значение в таблице реквизитов и выполнить сценарий. </p>
  <p id="9P8x">Идентификация документа по ссылке не очень красиво выглядит в тексте  сценарии. Идеальным было бы если все объекты окружения идентифицировались как-то однообразно, например по ФИО сотрудника. Задаем для справочников Сотрудники и Физические лица одно наименование, а документ Прием на работу ищем по реквизиту Сотрудник. Это можно выделить, как общий подход  для построения тестового окружения - все объекты окружения идентифицируются наименованием ключевой аналитики. </p>
  <p id="7KiR">Однако базовые шаги не могут искать объект по реквизиту ссылочного типа в <code>FindByAttribute.</code> Существующий алгоритм позволяет искать только по одному реквизиту примитивного типа. В данном случае, да и в общем случае тоже, не получится однозначно идентифицировать документ по одному реквизиту примитивного типа. </p>
  <p id="ZXkO">Сходу не получилось создать окружение с помощью готового инструмента, но путем несложных доработок инструмента результат есть. Также можно сделать вывод, что данный инструмент практически полностью удовлетворяет моим требованиям.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@autotestfor1c/XIzVdpD5y0E</guid><link>https://teletype.in/@autotestfor1c/XIzVdpD5y0E?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c</link><comments>https://teletype.in/@autotestfor1c/XIzVdpD5y0E?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c#comments</comments><dc:creator>autotestfor1c</dc:creator><title>Сложное тестовое окружение</title><pubDate>Wed, 08 Feb 2023 16:48:15 GMT</pubDate><category>Тестирование базы данных</category><description><![CDATA[Под сложным тестовым окружением я понимаю ситуацию когда у тестируемых объектов сложная история . Под историей подразумеваю последовательность операций, которые приводят базу и объекты в ней в нужное тестовое состояние. Тестируемый объект - это уникальный объект тестируемой системы, как правило элемент справочника, обладающий уникальными свойствами, с точки зрения предметной области. Это еще означает, что в типовых конфигурациях большое количество бизнес-логики, которая контролирует операции с данными объектами. ]]></description><content:encoded><![CDATA[
  <p id="DtN4">Под сложным тестовым окружением я понимаю ситуацию когда у тестируемых объектов сложная история . Под историей подразумеваю последовательность операций, которые приводят базу и объекты в ней в нужное тестовое состояние. Тестируемый объект - это уникальный объект тестируемой системы, как правило элемент справочника, обладающий уникальными свойствами, с точки зрения предметной области. Это еще означает, что в типовых конфигурациях большое количество бизнес-логики, которая контролирует операции с данными объектами. </p>
  <p id="CZy8">Самыми яркими примерами таких объектов является основное средство и сотрудник. Например, невозможно несколько раз принять к учету одно основное средство.</p>
  <p id="TSMp">Чтобы протестировать продажу основного средства нужно как минимум выполнить следующие операции: </p>
  <ul id="WAet">
    <li id="6Ukx">создать элемент справочника номенклатура или объекты строительства,</li>
    <li id="LDju">провести документы закупки,</li>
    <li id="Gm67">создать элемент справочника основные средства,</li>
    <li id="Lubz">провести документ принятие к учету основного средства,</li>
    <li id="X72I">начисли амортизацию.</li>
  </ul>
  <p id="wcwY">Для более сложного тестового примера, потребуется провести модернизацию,  перемещение или другие подобные операции, изменяющие состояние и параметры основного средства.</p>
  <p id="qBJV">Для тестирования функционала зарплаты, потребуется создать элементы справочников физические лица и сотрудники, провести документ принятия сотрудника на работу. </p>
  <p id="KdaG">Возникает вопрос, как сформировать нужное тестовое окружение и состояние для подобных тестовых объектов. В этой <a href="https://teletype.in/@autotestfor1c/gn31k1iY0#GIUx" target="_blank">заметке</a> рекомендовал в общем случае использовать подход с созданием окружения при запуске каждого теста. В таком случае получаем большой объем подготовительной работы, которая резко увеличивает длительность выполнения тестового сценария.</p>
  <p id="HzJR">Допустим есть следующие сценарии и в каждом сценарии будет создаваться уникальное тестовое окружение:</p>
  <ol id="TUXu">
    <li id="nO3Y">списание ос после модернизации</li>
    <li id="RXKg">продажа ос после модернизации</li>
    <li id="YfIF">амортизация ос после модернизации</li>
    <li id="Yp7K">амортизация ос после списания ос</li>
    <li id="YiRD">амортизация ос после продажи ос </li>
  </ol>
  <p id="TGar">При этом нужно либо дублировать алгоритмы создания окружения, либо выносить все в отдельный сценарий и вызывать с параметрами, но в любом  случае получаем большое количество однотипных повторяющихся операций. Побочный эффект такого подхода, это в случае ошибки при создании окружения, не получается выполнить сам сценарий и проверить работу тестируемых объектов.</p>
  <p id="vCFz">Получается, что более эффективным подходом является создание <a href="https://teletype.in/@autotestfor1c/jWXBz8NGj" target="_blank">глобального окружения</a>. Таким образом нужно один раз, при подготовке начальной тестовой базы, создать несколько вариантов окружения и использовать объекты в сценариях. Побочный эффект такого подхода, это необходимость отменять проведение документов, сформированных в сценарии, чтобы не нарушать исходное состояние созданного окружения.</p>
  <p id="aPz3">Преимуществом такого подхода является то, что мы тестируем только те объекты, которые нужно и не тестируем лишнее. В результате тесты проходят быстрее и меньше ломаются, т.к. в сценарии задействовано мало объектов.</p>
  <p id="Rrqx">К недостаткам можно отнести усложнение понимания кода сценария, т.к. в нем нет информации об используемом окружении. Можно решить с помощью комментария. Хрупкость окружения, т.к. к базе есть доступ пользователей, то состояние тестового окружения может быть нарушено.</p>
  <p id="ovrV">Примеры окружений могут быть следующими:</p>
  <ul id="KmuA">
    <li id="Atji">модернизированное основное средство</li>
    <li id="drSU">списанное основное средство</li>
    <li id="oOrI">проданное основное средство</li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@autotestfor1c/GhbAxXykaqo</guid><link>https://teletype.in/@autotestfor1c/GhbAxXykaqo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c</link><comments>https://teletype.in/@autotestfor1c/GhbAxXykaqo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c#comments</comments><dc:creator>autotestfor1c</dc:creator><title>Передача таблицы из основного в экспортный сценарий</title><pubDate>Tue, 27 Dec 2022 15:29:01 GMT</pubDate><category>vanessa</category><description><![CDATA[<img src="https://img1.teletype.in/files/c1/9a/c19a281f-b4c6-41a6-b689-f3b439e42b4d.png"></img>Недавно в VA появилась возможность передавать в экспортные сценарии таблицы как параметры. Это позволяет полноценно отделить тестовые данные от описания интерфейса, применив паттерн &quot;Page Object&quot;. Писал про него здесь и здесь.]]></description><content:encoded><![CDATA[
  <p id="4nwW">Недавно в VA появилась возможность передавать в экспортные сценарии таблицы как параметры. Это позволяет полноценно отделить тестовые данные от описания интерфейса, применив паттерн &quot;Page Object&quot;. Писал про него <a href="https://teletype.in/@autotestfor1c/jlJb_tIKH" target="_blank">здесь</a> и <a href="https://teletype.in/@autotestfor1c/MYIJ_iGLqEG" target="_blank">здесь</a>.</p>
  <p id="MgYe">Синтаксис получился достаточно простой. </p>
  <p id="23ym">В основном сценарии &quot;вызываем&quot; экспортный сценарий и под вызовом описываем таблицу со значениями.     </p>
  <figure id="WZlx" class="m_original">
    <img src="https://img1.teletype.in/files/c1/9a/c19a281f-b4c6-41a6-b689-f3b439e42b4d.png" width="444" />
  </figure>
  <p id="A2J7">В экспортном сценарии таблица может быть описана без подробностей просто строкой &#x27;| Таблица |&#x27; и больше подробностей не требуется. </p>
  <figure id="tW8C" class="m_original">
    <img src="https://img3.teletype.in/files/29/bb/29bb2a42-5e9c-438d-b71c-2c63ae2bb28f.png" width="437" />
  </figure>
  <p id="TbeG">Типовой шаг-цикл &quot;И для каждой строки таблицы я выполняю&quot; превращает каждую колонку таблицы в переменную и вызывает вложенные действия для каждой строки таблицы.</p>
  <p id="Ol0x">При этом нет никаких ограничений по использованию данного механизма в собственных шагах. Таблица полностью передается в процедуру-снипет, как параметр, и ее можно обработать любым способом.  </p>
  <p id="eV81">Обращения к переменным в экспортном сценарии происходит через обрамление имени колонки долларами. Если колонка называется &#x27;Имя&#x27;, то обращение к значению происходит $Имя$.</p>
  <p id="qfRu">VA сама определяет какую таблицу куда подставить, но чтобы убедится в корректности подстановки лучше использовать Vanessa Editor, включив опцию  &quot;Показывать строки подсценариев&quot;. Тогда в основном сценарии будут видны строки  экспортного сценария и таблицы основного сценария. На скрине ниже показано отображение таблицы основного сценария в строках экспортного сценария.</p>
  <p id="5eFX">Ограничения и особенности данного механизма:</p>
  <ul id="8XLm">
    <li id="GzQw">таблиц в основном сценарии может быть несколько, но порядок их вызова экспортным сценарием должен строго соответствовать порядку описания в основном сценарии, также в основном сценарии таблицы должны быть разделены пустой строкой</li>
    <li id="F6Pg">в экспортном сценарии не должно других шагов с таблицами Gherkin, например шаг &quot;И в таблице &#x27;Список&#x27; я перехожу к строке:&quot; приводит к такому эффекту</li>
  </ul>
  <figure id="E74R" class="m_original" data-caption-align="center">
    <img src="https://img2.teletype.in/files/53/97/53971e8f-adc0-4043-8e9b-02112714e0d0.png" width="470" />
    <figcaption>экспортный</figcaption>
  </figure>
  <figure id="ZFRx" class="m_original" data-caption-align="center">
    <img src="https://img3.teletype.in/files/e3/47/e34736b8-6d27-4325-a80e-2992e14a6a14.png" width="480" />
    <figcaption>подставилась таблица</figcaption>
  </figure>
  <ul id="yltA">
    <li id="ovk6">шаги обработки строк должны быть &quot;вложены&quot; в шаг-цикл, ниже показано как должен выглядеть сценарий с включенной опцией @tree</li>
  </ul>
  <figure id="JlBd" class="m_original">
    <img src="https://img3.teletype.in/files/a2/80/a2802080-f9cf-493c-a3e0-7382956780aa.png" width="563" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@autotestfor1c/r7C2-f1nGzZ</guid><link>https://teletype.in/@autotestfor1c/r7C2-f1nGzZ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c</link><comments>https://teletype.in/@autotestfor1c/r7C2-f1nGzZ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c#comments</comments><dc:creator>autotestfor1c</dc:creator><title>Тестирование отчетов. Подготовка источника данных.</title><pubDate>Thu, 01 Dec 2022 13:50:42 GMT</pubDate><category>UI-тестирование</category><description><![CDATA[<img src="https://img4.teletype.in/files/7f/1c/7f1c6b8f-89ab-4613-a5f0-98f963bc926b.png"></img>В предыдущей заметке описал, что такое отчет и обобщил структуру отчетов и тестовых сценариев. ]]></description><content:encoded><![CDATA[
  <p id="CUBq"><a href="https://teletype.in/@autotestfor1c/WyTvRVq5IHe" target="_blank">В предыдущей заметке</a> описал, что такое отчет и обобщил структуру отчетов и тестовых сценариев. </p>
  <p id="3plu">Чтобы подготовить тестовые данные для отчета нужно понимать алгоритм его заполнения. Без разработчика не получится создать тестовый сценарий для отчета. Он должен сообщить из какого источника получаются данные, особенности их обработки и вывода в выходную форму. Далее будем рассматривать случай когда источник данных регистр накопления или регистр бухгалтерии, т.е. таблица с обязательным документом-регистратором. </p>
  <p id="RNBt">После этого нужно решить как создавать данные в источнике. Есть несколько вариантов: </p>
  <ul id="l5ec">
    <li id="lWYI">&quot;пользовательскими&quot; документами;</li>
    <li id="BP7b">&quot;специальным&quot; документом.</li>
  </ul>
  <p id="wWSr">&quot;Пользовательские&quot; документы это документы, с которыми взаимодействуют пользователи. </p>
  <p id="Mc5G">&quot;Специальные&quot; документы это сервисные документы, с помощью которых можно сделать записи только в нужные регистры.</p>
  <p id="j39U">Основное достоинство &quot;специального&quot; документа это возможность создать любое состояние данных, отсутствие контролей позволит это сделать.</p>
  <p id="j2gf">Недостаток &quot;специальных&quot; документов - обращение к технической реализации. Изменение структуры регистра повлечет изменение кода сценария, который создает данные.</p>
  <p id="zvhq">С &quot;пользовательскими&quot; документами все наоборот - техническая реализация скрыта, изменения структуры источников данных поддерживаются разработчиками конфигурации, а наличие контрольных функций может не позволить создать нужное состояние. Кроме этого они делают движения, во множество других &quot;не нужных&quot; для теста регистров.</p>
  <p id="5uVa">Пи выборе варианта можно руководствоваться следующими правилами:</p>
  <ul id="Ouo9">
    <li id="Mdam">использовать &quot;пользовательские&quot; документы - если у документов нет контролей, мешающих создать нужный тестовый набор данных и есть готовые сценарии, которые создают нужные документы;</li>
    <li id="W756">использовать &quot;специальные&quot; документы - если нет другой возможности создать нужный тестовый набор данных.</li>
  </ul>
  <p id="J79J">Процедуру создания и заполнения источника данных выносим в отдельный сценарий и запускаем его один раз при заполнении новой тестовой базы.</p>
  <p id="M4r4">С созданием определились теперь переходим к составу тестовых данных. </p>
  <p id="2uXm">Тестовые данные должны учитывать <u>периодичность</u>. Записи регистров должны быть распределены по периодам так, чтобы получить все возможные комбинации остатков и оборотов. </p>
  <p id="pJD4">Тестовые данные должны учитывать <u>аналитику</u>. Количество аналитик, входящих в состав тестовых данных, должен быть достаточным для того чтобы иметь возможность проверить фильтр и группировку по аналитике. На мой взгляд, каждой аналитики должно быть минимум 2. </p>
  <p id="UU9f">Очень желательно чтобы значения каждой ячейки формы отчета были различные. Это позволит убедится, что данные из источника корректно попали в соответствующие показатели отчета.</p>
  <p id="KZP6">Для примера, рассмотрим гипотетический отчет &quot;Оборотная ведомость по товару на складе&quot;, который показывает количественные остатки и обороты товаров по складам.</p>
  <p id="tJS4">Следующий тестовый набор данных:</p>
  <p id="2lv2">Приход от 22.11.ХХ на Склад1: Товар1 3 шт., Товар2 4 шт.  </p>
  <p id="2InY">Приход от 23.11.ХХ на Склад2: Товар1 5 шт.</p>
  <p id="TNMP">Приход от 23.11.ХХ на Склад1: Товар1 6 шт.</p>
  <p id="v6Ox">Расход от 23.11.ХХ со Склад 1: Товар1 2 шт.</p>
  <p id="DocP">Позволит получить следующие тестовые сценарии:</p>
  <p id="BTdQ">Период отчета: 23.11.ХХ</p>
  <figure id="tmBH" class="m_original">
    <img src="https://img4.teletype.in/files/7f/1c/7f1c6b8f-89ab-4613-a5f0-98f963bc926b.png" width="599" />
  </figure>
  <p id="G0qF">Период отчета: 23.11.ХХ</p>
  <p id="Rv6S">Отбор по складу: Склад1</p>
  <figure id="xjnd" class="m_original">
    <img src="https://img4.teletype.in/files/bb/46/bb461456-e40c-48c3-aee6-6ccfd296c6cb.png" width="600" />
  </figure>
  <p id="pL7M">Период отчета: 23.11.ХХ</p>
  <p id="7InA">Отбор по товару: Товар1</p>
  <figure id="WYng" class="m_original">
    <img src="https://img3.teletype.in/files/a0/49/a049505c-4a8a-40b9-8ccf-c20b5b614341.png" width="599" />
  </figure>
  <p id="LIqI">Этого набора сценариев достаточно чтобы убедиться, что данный отчет работает корректно.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@autotestfor1c/WyTvRVq5IHe</guid><link>https://teletype.in/@autotestfor1c/WyTvRVq5IHe?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c</link><comments>https://teletype.in/@autotestfor1c/WyTvRVq5IHe?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c#comments</comments><dc:creator>autotestfor1c</dc:creator><title>Тестирование отчетов. Часть 1.</title><pubDate>Fri, 22 Jul 2022 10:51:32 GMT</pubDate><category>Тестирование базы данных</category><description><![CDATA[Самым сложным и трудоемким для тестирования является функционал отчетности. Под отчетностью подразумеваю набор связанных отчетов, каждый отчет это двумерная таблицу со столбцами и строками, в которых размещаются аналитические и числовые значения. Каждый отчет имеет возможность гибких настроек - фильтрация данных, изменение структуры - группировки, итоги, состав показателей. Показатели отчета в 1С могут быть расшифрованы, т.е. по двойному клику на ячейку откроется другой отчет и покажет из чего состоит расшифровываемый показатель. Пользовательский интерфейс отдельного отчета 1С:Предприятия 8 не сложен и содержит унифицированные элементы. Основная сложность скрыта &quot;под капотом&quot; в алгоритме получения данных из источника и вывод результата...]]></description><content:encoded><![CDATA[
  <p id="Cgl0">Самым сложным и трудоемким для тестирования является функционал  отчетности. Под отчетностью подразумеваю набор связанных отчетов, каждый отчет это двумерная таблицу со столбцами и строками, в которых размещаются аналитические и числовые значения. Каждый отчет имеет возможность гибких настроек - фильтрация данных, изменение структуры - группировки, итоги, состав показателей. Показатели отчета в 1С могут быть расшифрованы, т.е. по двойному клику на ячейку откроется другой отчет и покажет из чего состоит расшифровываемый показатель. Пользовательский интерфейс отдельного отчета 1С:Предприятия 8 не сложен и содержит унифицированные элементы. Основная сложность скрыта &quot;под капотом&quot; в алгоритме получения данных из источника и вывод результата в форму.    </p>
  <p id="haXw">Декомпозировав функционал отчета на части получим: </p>
  <ul id="iTe4">
    <li id="PRYE">алгоритм получения данных из источника</li>
    <li id="SkvI">алгоритм формирования результирующей формы</li>
    <li id="XJh6">настройки получения данных (фильтры и отборы) </li>
    <li id="Llyb">настройки структуры отчета (группировки и показатели)</li>
    <li id="gd9B">расшифровка ячеек отчета</li>
  </ul>
  <p id="vqpp">В общем случае тестовый сценарий будет следующим:</p>
  <ol id="7EaY">
    <li id="bQFF">подготовка источника данных</li>
    <li id="MHbx">настройка параметров отчета </li>
    <li id="kAOe">вывод результата в форму</li>
    <li id="Wm5b">сравнения результата с эталоном</li>
  </ol>
  <p id="kfO7">Рассмотрим каждую часть сценария подробнее.</p>
  <p id="9zrZ">Подготовка тестовых данных самый сложный процесс. С одной стороны нужно обеспечить повторяемость теста, поэтому данные должны быть неизменными. С другой стороны генерация большого количества данных при каждом запуске может неприемлемо увеличить время исполнения теста. Еще одна сложность с которой приходится сталкиваться - в 1С источниками данных для отчетов как правило являются регистры накопления и регистры бухгалтерии, записи которых обязательно подчиняются регистратору-документу. Таким образом, чтобы подготовить источник данных для отчета, нужно сформировать документ и провести его, чтобы он сделал движения в нужные регистры. Поэтому данные готовим один раз и обеспечиваем их неизменность. Точно это делаем вне алгоритма тестового сценария.</p>
  <p id="ezy0">Настройка параметров отчета и Сравнения результата с эталоном связанны между собой. От настроек будет зависеть результирующая форма. Каждая комбинация настройка-результат будет являться отдельным тестовым сценарием. Основная задача проектирования тестов - обеспечить достаточное (не избыточное) количество комбинаций чтобы покрыть ключевые особенности данных отчета. Тем самым получив оптимальное время выполнения набора   тестовых сценариев и гарантируя их корректную работу.</p>
  <p id="BkTo">Вывод результата в форму. Основная неприятная особенность этого этапа в том, что невозможно заранее определить его длительность и прописать ее в алгоритме теста. Скорость выполнения может зависеть, как от загруженности оборудования, на котором выполняется запуск, так и от изменений которые внесли в структуру источника данных отчета. Поэтому алгоритм тестового сценария должен уметь ждать заполнение выходной формы отчета, чтобы сверить его с эталоном.</p>
  <p id="r8QZ">Сравнение с эталоном может быть выполнена несколькими способами: проверка всей формы или же проверка значимой части/области отчета.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@autotestfor1c/113RBSnUBdE</guid><link>https://teletype.in/@autotestfor1c/113RBSnUBdE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c</link><comments>https://teletype.in/@autotestfor1c/113RBSnUBdE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c#comments</comments><dc:creator>autotestfor1c</dc:creator><title>Что выбрать для проверки результата проведения документов - движения или отчет?</title><pubDate>Fri, 18 Feb 2022 13:25:32 GMT</pubDate><category>Тестирование базы данных</category><description><![CDATA[В предыдущей части рассмотрели вариант проверки набора движений документа. Эталон - сохраненный набор движений, результат - движения сформированные в тестовой базе. ]]></description><content:encoded><![CDATA[
  <p id="zsIw">В <a href="https://teletype.in/@autotestfor1c/7eh5Y5sUIkL" target="_blank">предыдущей части</a> рассмотрели вариант проверки набора движений документа. Эталон - сохраненный набор движений, результат - движения сформированные в тестовой базе. </p>
  <p id="90uH">Есть другой вариант проверки это формирование отчетов после проведения документа. Эталон - сохраненный отчет, результат - отчет сформированный в тестовой базе.</p>
  <p id="zP8Z">Теоретически использование отчета предпочтительней чем анализ движений, т.к. движения более технический вид и могут чаще изменяться. Отчет это пользовательское представление данных, может скрывать техническую реализацию и особенности структуры данных. Еще одним достоинством отчета можно назвать возможность получения информации не только по движениям, но и по остаткам. </p>
  <p id="kVgs">Попробую структурировать требования к такому отчету:</p>
  <ul id="yw0x">
    <li id="qIZ9">набор фильтров, достаточный для того чтобы отобрать такой набор данных, чтобы проверить только результаты теста</li>
    <li id="MqCH">возможности агрегации и детализации данных отчет </li>
    <li id="EotF">простая структура выходной формы чтобы иметь возможность сравнивать ячейки между собой</li>
  </ul>
  <p id="BKhq">Однако сразу возникают вопросы: </p>
  <ul id="9UYR">
    <li id="AxJK">какой отчет использовать стандартный или специализированный?</li>
    <li id="Y3eD">какая детализация должна быть в отчете?</li>
    <li id="NaQ7">нужно ли проверять остатки начальные и/или конечные?</li>
  </ul>
  <p id="z7FJ">Попробую ответить на вопросы.</p>
  <p id="m0wj">Под стандартным отчетом подразумеваю отчет, который используют пользователи в работе. Достоинство, что параллельно проверяем его работоспособность. Однако такой отчет может иметь ограничения, которые усложнят его проверку в тестом. Итак имеем потраченное время на поиск отчета и подгонку его под нужды теста. </p>
  <p id="FJCJ">Под специализированным отчетом подразумеваю отчет, который разработан специально для целей тестирования. С ним возникают свои особенности. Вряд ли сразу получиться сделать отчет, удовлетворяющий всем требованиям, поэтому получаем бесконечную доработку и улучшение такого отчета. Тоже получаем затраты на разработку. </p>
  <p id="ZFOv">Главное достоинство отчета это возможность получения набора информации разной детализации и состава. И такие широкие возможности сразу ставят новые вопросы. </p>
  <p id="I94d">Использовать отчет с высокой детализацией, но чем это отличается от проверки движений. Единственное что можно выделить как преимущество, возможность одним отчетом проверить результаты проведения всех документов тестового сценария. Пример, проверка проводок отчетом Карточка счета.</p>
  <p id="59Aw">Использовать агрегированный отчет без всех или некоторых аналитик, проверяя сводные показатели. Ценность такой проверки в том, что она более статична и более устойчива к внутренним изменениям тестируемой системы. Снижаются трудозатраты на поддержку и актуализацию тестов, но при этом появляется вероятность пропуска ошибок, которые возникают на уровне аналитик. Сводным отчетом имеет смысл проверять итоговые результаты проведения документа и значения остатков в двигаемых регистрах.</p>
  <p id="GonP">К недостаткам проверки отчетом можно отнести и более низкую скорость работы, чем получение движений под одному документу. Чем больше регистров и сложнее запрос к данным тем медленнее он будет работать.  </p>
  <p id="eLmB">Итого, отчет можно использовать для проверки в следующих случаях:</p>
  <ul id="q2Os">
    <li id="tDq5">проверяем результат проведения цепочки документов</li>
    <li id="seQu">проверяем специальным отчетом, который позволит себя полностью настроить из кода сценария</li>
    <li id="ZwWY">проверяем агрегированным отчетом итоговые показатели и остаточные ресурсы</li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@autotestfor1c/7eh5Y5sUIkL</guid><link>https://teletype.in/@autotestfor1c/7eh5Y5sUIkL?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c</link><comments>https://teletype.in/@autotestfor1c/7eh5Y5sUIkL?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c#comments</comments><dc:creator>autotestfor1c</dc:creator><title>Тестирование результата проведения документов</title><pubDate>Thu, 03 Feb 2022 16:18:19 GMT</pubDate><category>Тестирование базы данных</category><description><![CDATA[Одна из задач, которую нужно решить тестированием это проверить результат работы документа. Как минимум нужно проверить, что документ сделал движения по нужным регистрам, а как максимум движения нужно сверить с эталоном.]]></description><content:encoded><![CDATA[
  <p id="MuBN">Одна из задач, которую нужно решить тестированием это проверить результат работы документа. Как минимум нужно проверить, что документ сделал движения по нужным регистрам, а как максимум движения нужно сверить с эталоном.</p>
  <p id="fwRX">Сразу возникает вопрос, что есть эталон, как его правильно подготовить и сохранить чтобы тест смог его использовать.</p>
  <p id="rfDj">Определить эталон задача решаемая на этапе анализа тестируемой системы, сейчас рассматривать ее не будем. </p>
  <p id="5Tno">Рассмотрим технический аспект подготовки эталонных движений для проверки результата проведения документа в тестовом сценарии. Под движениями мы понимаем комбинацию записей в различные регистры системы, которые выполняет алгоритм проведения документа.  </p>
  <p id="6cYw">Основная проблема, которая возникает в данном случае - это большое количество комбинаций как самих записей, так и значений реквизитов каждой из записей. Следующие общие характеристики определяют такую вариативность: </p>
  <ol id="tOsi">
    <li id="Oeyr">Настройки системы. Например, при различных методах списания стоимости товара получается различная стоимость, состав аналитики и количество  движений в документах выбытия товаров со склада. </li>
    <li id="OIha">Состояние системы на момент проведения документа. При выполнении теста необходимо обеспечить состояние системы сопоставимое с состоянием, при котором был подготовлен эталон. Например, задолженность клиента на разные моменты времени может быть различной и еще содержать различные комбинации аналитик.</li>
  </ol>
  <p id="9yHB">Общий подход к решению проблемы &quot;простое&quot;. Настройки сохранить в тестовой базе и поддерживать их актуальность. Состояние системы обеспечивать в самом тестовом сценарии.</p>
  <p id="GUFj">При подготовке эталона возникают вопросы:</p>
  <ol id="cjm4">
    <li id="7x9z">все записи включать в эталон или отдельные?</li>
    <li id="vqzf">все реквизиты записей включать в эталон или часть?</li>
    <li id="bjUz">значения реквизитов фиксировать или параметризировать?</li>
  </ol>
  <p id="3k8T">Состав записей и их реквизитов, включаемых в эталон, должен зависеть от того какую функциональность проверяет тестовый сценарий. Нет смысла фиксировать и проверять, то чего нет в сценарии. Также нет смысла проверять в одном сценарии все возможные комбинации движений.  Для регистра бухгалтерии отобрать записи можно по одному счету или по паре счетов. Для регистра накопления отбираем по комбинации значений измерений и виду движений. </p>
  <p id="sxJ3">Со значениями реквизитов сложнее. С одной стороны нужно проверить, что все реквизиты документа попали в соответствующие реквизиты регистра. С другой стороны значения реквизитов регистров не всегда соответствуют значению документа-регистратора. Некоторые значения можно получить только вычислением, хотя вычисления еще больше усложняют код сценария.</p>
  <p id="KTMM">Переменные можно использовать во всех частях сценария, и как значение реквизита документа, и как значение для сверки с эталоном движений. И если впоследствии потребуется изменить значение переменной, то автоматически значение изменится везде где используется. Чтобы обеспечить читаемость кода переменным нужно давать &quot;говорящие&quot; имена, которые позволять понять код сравнения актуальных значений с эталоном без полного сканирования кода.  Например, так:</p>
  <p id="yQAN"><code>Проверить равенство значения реквизита документа ИмяРеквизитаДокумента эталонному значению реквизита регистра ИмяРеквизитаРегистра</code></p>
  <p id="BlWZ"><code>Проверить равенство значения переменной ИмяПеременной эталонному значению реквизита регистра ИмяРеквизитаРегистра</code></p>
  <p id="KF3L"><code>ИмяРеквизитаДокумента == ИмяРеквизитаРегистра</code></p>
  <p id="tTxk"><code>ИмяПеременной == ИмяРеквизитаРегистра</code></p>
  <p id="z4LM">Использование фиксированных значений в эталоне делает код сценария более читаемым и наглядным. Не нужно искать по коду какое значение присваивается переменной, что особенно важно для больших сценариев. Но такой сценарий сложнее поддерживать и развивать. </p>
  <p id="v5Bl">Получаем следующую классификацию переменных сценария:</p>
  <ul id="ufcU">
    <li id="E1gw">константы для реквизитов документов</li>
    <li id="VgK5">константы для реквизитов эталона</li>
    <li id="z1A1">переменные для реквизитов эталона = значениям реквизитов документа</li>
    <li id="V8pt">вычисляемые переменные для реквизитов эталона </li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@autotestfor1c/MYIJ_iGLqEG</guid><link>https://teletype.in/@autotestfor1c/MYIJ_iGLqEG?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c</link><comments>https://teletype.in/@autotestfor1c/MYIJ_iGLqEG?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c#comments</comments><dc:creator>autotestfor1c</dc:creator><title>Борьба с интерфейсом в UI-тестировании</title><pubDate>Thu, 11 Nov 2021 12:38:59 GMT</pubDate><category>UI-тестирование</category><description><![CDATA[Первая проблема была озвучена здесь: Борьба со сложностью кода UI-тестов ]]></description><content:encoded><![CDATA[
  <p id="4F2n">Первая проблема была озвучена здесь: <a href="https://teletype.in/@autotestfor1c/q94sN7u4sez" target="_blank">Борьба со сложностью кода UI-тестов</a> </p>
  <p id="n0IM">Вторая проблема возникает при взаимодействии кода теста с элементами интерфейса. Именно изменения элементов интерфейса серьезно влияют на работу UI-тестов. От того как реализовано взаимодействие кода теста с интерфейсом зависит насколько &quot;хрупким&quot; будет тест и как много потребуется изменений кода при изменении одного элемента интерфейса. </p>
  <p id="Ua77">Например, недавно в типовой БП3 в форме списка спр. Контрагенты изменилось название колонки &quot;Наименование&quot; на &quot;Наименование в программе&quot;. В результате упали все тесты, которые пытались найти элемент спр. Контрагенты по наименованию. Таких упавших тестов было много, т.к. этот справочник используется в большом количестве документов. От того насколько правильно спроектированы тесты зависит скорость и трудозатраты на восстановление системы автотестирования после подобных изменений. Если код выбора элемента описан в каждом сценарии, то  править придется каждый сценарий. Если же код выбора локализован в процедуре, а сценарии его вызывают, то исправление займет минимум времени.</p>
  <p id="I1YG">Для решения второй проблемы есть стандартный подход - отделение кода шагов тестового сценария от кода взаимодействия с интерфейсом, используя паттерны Page Object или Page Element. Одним из положительных побочных эффектов паттернов является снижение дублирование кода. Отрицательным эффектом является усложнение кодовой базы за счет увеличения уровней вложенности кода. Однако бездумное использование паттерна может привести к созданию суперпроцедур со сложнейшим кодом, которая  содержит условия и пытается обработать все возможные варианты. </p>
  <p id="26Vy">Например, документ БП3 &quot;Списание с расчетного счета&quot; имеет около 20 видов операций, которые значительно влияют на состав элементов формы документа. Кроме этого есть опция &quot;Редактировать платежи в списке&quot;, которая &quot;включает&quot; отображение на форме табличной части. Таким образом процедура, описывающая форму документа, будет содержать больше десяти условий по каждому виду операций. Внутри этих условий будут еще условия и циклы, обрабатывающие строки табличной части. В данном случае паттерн Page Object нужно использовать осторожно.</p>
  <p id="IF0Y">Некоторые изменения можно предусмотреть. Как правило изменяется текст заголовков элементов формы или заголовок самой формы, т.е. то что видно пользователю. При этом практически не изменяются имена элементов формы. Поэтому в коде нужно использовать имена элементов управления, а не текст заголовка.</p>
  <p id="HHhQ">В тех случаях кода невозможно использовать имени элемента, нужно вынести текст заголовка в процедуру и вызывать ее из сценария. Также можно воспользоваться паттерном Page Element и вынести весь код обработки поиска нужного элемента в списке в отдельную процедуру, которая будет позиционироваться на нужной строке списка и заполнять элемент. Это решит проблему с поиском строки в списке где метод ПерейтиКСтроке может использовать только текст заголовка. </p>
  <p id="GLD3">Для документа &quot;Списание с расчетного счета&quot; паттерн Page Object можно применить так: вынести код работы с формой в отдельные процедуры, сгруппировав по видам операций с одинаковым составом реквизитов. Получиться несколько процедур, они будут линейными и дублирования практически не будет, т.к. состав элементов формы будет различен. </p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@autotestfor1c/q94sN7u4sez</guid><link>https://teletype.in/@autotestfor1c/q94sN7u4sez?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c</link><comments>https://teletype.in/@autotestfor1c/q94sN7u4sez?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=autotestfor1c#comments</comments><dc:creator>autotestfor1c</dc:creator><title>Борьба со сложностью кода UI-тестов</title><pubDate>Thu, 11 Nov 2021 11:58:39 GMT</pubDate><category>UI-тестирование</category><description><![CDATA[<img src="https://img2.teletype.in/files/16/99/16999716-5102-4524-9528-98e446d458f2.png"></img>Одна из проблем автоматизированного тестирования это поддержка код автотестов. Зачастую исходный код сценария пишут одни люди, а поддерживают и запускают другие. Сложный и запутанный код теста сложно поддерживать и развивать. Поэтому при проектировании и разработке автотестов необходимо придерживаться определенных правил.  ]]></description><content:encoded><![CDATA[
  <p id="6DI8">Одна из проблем автоматизированного тестирования это поддержка код автотестов. Зачастую исходный код сценария пишут одни люди, а поддерживают и запускают другие. Сложный и запутанный код теста сложно поддерживать и развивать. Поэтому при проектировании и разработке автотестов необходимо придерживаться определенных правил.  </p>
  <p id="TFSW">Один из способов снижения сложности кода тестов делать все возможное чтобы код был линейным без ветвлений и циклов. Но жизнь вносит свои коррективы. Тестируемые системы становятся все более параметризованным. При необходимости тестировать функционал с разными настройками возникает дилемма нужно ли делать один сценарий, обрабатывающий все варианты настроек, или же несколько более простых сценариев. В первом случае получаем сложный код с ветвлением, а во втором дублирование кода. Например, проверка функционала для организаций с разной системой налогообложения, при котором формы документов будут различаться составом реквизитов. </p>
  <p id="IZnp">Однозначного решения не существует. Каждый раз приходится  выбирать решение между плохим и очень плохим. Разделим код тестового сценария на этапы  Подготовка, Шаги или Проверка и определим на каком из этапов возникает ветвление. </p>
  <p id="6MTi">Вариант 1. На всех этапах есть условие, связанное с одной опцией. В таком случае можно смело создавать копию сценария и убирать условия. Получаем, отдельный сценарий под каждое условие. Для упрощения дальнейшей поддержки можно обоим сценариям дать одно имя добавив префикс, по которому можно понять суть различий или поместить оба сценария в один модуль.</p>
  <p id="I5pV">Вариант 2. Условие возникает на одном из этапов. Сложный случай и однозначного решения нет. В данном случае оставляем условие, но  придерживаемся правила - условие должно быть простым (без И/ИЛИ) и не должно содержать вложенных условий. Если правило соблюсти не получается, тогда скорее всего это попытка &quot;впихнуть невпихуемое&quot; и нужно рассматривать разделение на несколько сценариев.  </p>
  <p id="HSsf">Рассмотрим пример, в табличной части документа ПТиУ для организации с системой УСН появляется поле &quot;Расходы (НУ)&quot; (картинки ниже). Для сценария, который проверяет заполнение формы документа для всех видов организации, нужно обработать появление этого поля. В таком случае без условия не обойтись. А можно поступить по другому - в одном сценарии проверить заполнение общих полей для всех видов организаций, а в другом сценарии проверить заполнение поля &quot;Расходы (НУ)&quot; во всех документах конфигурации. Таким образом получается исключить условия и упростить код сценария.</p>
  <figure id="WMmK" class="m_original" data-caption-align="center">
    <img src="https://img2.teletype.in/files/16/99/16999716-5102-4524-9528-98e446d458f2.png" width="584" />
    <figcaption>Организация с УСН</figcaption>
  </figure>
  <figure id="5G7c" class="m_original" data-caption-align="center">
    <img src="https://img4.teletype.in/files/76/b8/76b8fd3a-c6f6-4ee3-a8f4-ba2270734438.png" width="579" />
    <figcaption>Организация с ОСНО</figcaption>
  </figure>

]]></content:encoded></item></channel></rss>