Тестирование интеграций 1С-Битрикс со службами доставки

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Тестирование интеграций 1С-Битрикс со службами доставки
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Тестирование интеграций 1С-Битрикс со службами доставки

Интеграция со службами доставки в Битрикс — это не только красивая форма выбора пункта выдачи. Это цепочка: расчёт стоимости → создание заказа в ЛК службы → печать накладной → трекинг. Любое звено может ломаться тихо, без явных ошибок на сайте. Покупатель оформляет заказ, менеджер уходит создавать отправление — и тут выясняется, что адрес не прошёл валидацию в CDEK или ПВЗ DHL уже закрыт. Тестирование интеграций доставки направлено именно на выявление таких сценариев до продакшна.

Архитектура интеграции доставки в Битрикс

Службы доставки подключаются через модуль sale как обработчики доставки (\Bitrix\Sale\Delivery\Services\Base). Для каждой службы есть отдельный класс с реализацией:

  • calculateConcrete() — расчёт стоимости
  • createShipment() — создание отправления во внешней системе (если реализовано)
  • getTrackingInfo() — получение статуса трекинга

Кастомные обработчики размещаются в /local/php_interface/include/sale_delivery/. Стандартные модули служб доставки (CDEK, DHL, DPD, Boxberry, PickPoint, СДЭК) устанавливаются из Маркетплейса.

Что тестировать

Расчёт стоимости доставки — первая и самая частая точка отказа. Проверяют:

  1. Корректность расчёта для разных габаритов товара (нужны товары с заполненными WEIGHT, WIDTH, HEIGHT, DEPTH в каталоге)
  2. Работу при отсутствии габаритов у части товаров в корзине
  3. Корректность зон доставки — тариф для Москвы не должен применяться к Владивостоку
  4. Кэширование расчётов: повторный запрос той же корзины должен возвращать результат из кэша, не дёргая внешний API
// Проверяем кэш расчёта доставки
$cacheManager = \Bitrix\Main\Data\Cache::createInstance();
$cacheKey = 'delivery_calc_' . md5(serialize($basketItems) . $cityCode);
if ($cacheManager->initCache(3600, $cacheKey, '/sale/delivery/calc')) {
    $cachedResult = $cacheManager->getVars();
} else {
    $result = $deliveryService->calculate($shipmentItemCollection, $extraServices);
    $cacheManager->startDataCache();
    $cacheManager->endDataCache($result);
}

Выбор ПВЗ — виджеты CDEK, Boxberry, PickPoint грузят карту через JS. Тестируют:

  • Загрузку виджета на всех целевых браузерах
  • Корректную передачу выбранного ПВЗ в форму оформления
  • Сохранение выбранного ПВЗ при обновлении страницы
  • Поведение при недоступности JS (graceful degradation)

Создание отправления — проверка того, что заказ корректно регистрируется в ЛК службы доставки при смене статуса в Битрикс:

// Обработчик события смены статуса заказа
AddEventHandler('sale', 'OnOrderStatusChange', function(\Bitrix\Main\Event $event) {
    $order = $event->getParameter('ORDER');
    $newStatus = $event->getParameter('NEW_STATUS');

    if ($newStatus === 'PROCESSING') {
        foreach ($order->getShipmentCollection() as $shipment) {
            if (!$shipment->isSystem()) {
                $deliveryService = $shipment->getDelivery();
                // Тест: проверяем что createShipment возвращает трек-номер
                $result = $deliveryService->createShipment($shipment);
                // result должен содержать tracking_number
            }
        }
    }
});

Кейс: CDEK + Битрикс

Типичная проблема при тестировании официального модуля CDEK: расчёт стоимости возвращает 0 или пустой массив тарифов. Причины в порядке частоты:

  1. Не заполнены габариты товаров — CDEK API v2 при отсутствии weight/length возвращает 400, модуль молча возвращает 0
  2. Неверный код города — CDEK использует собственные коды городов (не КЛАДР, не ФИАС); проверяют через POST /v2/location/cities
  3. Тариф не активирован в договоре — попытка рассчитать тариф 136 (Посылка склад-склад) при неподключённой услуге даёт ошибку авторизации, не 403
  4. Sandbox vs Production — тестовые credentials CDEK: EMscd6r9JnFiQ3bLoyjJY6eM, PjLZkKBHEiLK3YsjtNrt7ZpUWSrTJtp6

Для проверки raw-запросов к API CDEK v2 в тестовом окружении:

# Получить токен
curl -X POST https://api.edu.cdek.ru/v2/oauth/token \
  -d "grant_type=client_credentials&client_id=EMscd6r9JnFiQ3bLoyjJY6eM&client_secret=PjLZkKBHEiLK3YsjtNrt7ZpUWSrTJtp6"

# Рассчитать доставку
curl -X POST https://api.edu.cdek.ru/v2/calculator/tariff \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"tariff_code":136,"from_location":{"code":44},"to_location":{"code":270},"packages":[{"weight":1000,"length":20,"width":15,"height":10}]}'

Если raw-запрос проходит, а модуль Битрикс не работает — проблема в адаптере модуля.

Трекинг тестируют на реальных трек-номерах (у CDEK есть тестовые трек-номера в документации sandbox) с проверкой обновления поля UF_TRACKING в b_sale_shipment.

Автоматизация

Для регрессионного тестирования расчётов доставки пишут unit-тесты на PHPUnit с мокированием HTTP-клиента:

class CdekDeliveryTest extends \PHPUnit\Framework\TestCase
{
    public function testCalculateReturnsNonZeroForValidPackage(): void
    {
        $httpMock = $this->createMock(HttpClient::class);
        $httpMock->method('post')->willReturn($this->getFixture('cdek_tariff_response.json'));

        $service = new CdekDeliveryService(['http_client' => $httpMock]);
        $result = $service->calculate($this->buildShipment(weight: 1000, city: 'SPB'));

        $this->assertGreaterThan(0, $result->getPrice());
        $this->assertNotEmpty($result->getPeriodMin());
    }
}

Сроки

Конфигурация Срок
Тестирование 1 службы (расчёт + ПВЗ) 1–2 дня
Тестирование 2–3 служб + трекинг 3–5 дней
Полный цикл + автотесты 6–10 дней