Использование arduino для автоматизации тестирования устройств

    Наша компания «RTL Service» занимается разработкой системы локального позиционирования, с помощью которой можно точно определить, где в помещении находится определенный человек. Помимо этого, наша система позволяет связаться с этим человеком с помощью собственных коммуникаторов (рисунок 1) по защищенному каналу связи.


    Рис. 1 — коммуникатор

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

    В качестве тестировщика была выбрана плата Arduino UNO. Она достаточно проста и удобна в использовании, имеет встроенный микроконтроллер ATMega328, 14 цифровых входов/выходов (при чем 6 из них могут использоваться как выходы ШИМ), кварцевый генератор на 16 МГц и разъем USB.

    Итак, приступим.

    Плата кнопок подключается по шлейфу к плате коммуникатора. В шлейфе присутствует четыре линии, три из которых отвечают за 3 кнопки, и четвертая отвечает за землю. Для тестирования была сделана своя платка для подключения разъема кнопок коммуникатора (рис. 2) к Arduino. На ней присутствует, соответственно, шлейф для подключения к плате устройства связи, 4 провода на пины контроллера и оптопары, чтобы отвязать кнопки от земли.


    Рис. 2 – плата соединения


    Рис.3 – как всё это выглядит

    Далее дело за программой.

    У коммуникатора есть 3 кнопки: кнопка запроса среды/ответа, кнопка смены канала, на котором будет производиться связь, кнопка включения/выключения устройства. Также, например, одновременное зажатие нижней и верхней кнопок приводит к увеличению громкости коммуникатора, а зажатие нижней и средней – к уменьшению.

    Чтобы нажать какую-либо кнопку, нужно послать на соответствующий пин 5 В (т.е. перевести пин в состояние HIGH). Таким образом, чтобы её отпустить, нужно перестать подавать 5 В (перевести в состояние LOW). Например, функция включения устройства:
    void switching(){ 
        Serial.println("ON/OFF");
        delay(70);
        digitalWrite(low_button, HIGH);
        delay(7000);
        digitalWrite(low_button, LOW);
        delay(500); 
      };
    

    В этой функции на пин, отвечающий за нижнюю кнопку, в течение 7 секунд (соответствует времени включения/выключения устройства связи) посылается 5 В. После этого, посылается 0 В, что означает отжатие клавиши.

    Примерно таким же образом можно реализовать и процесс зажатия одной клавиши и нажатия/зажатия в этот момент другой:
    void buttDelay_Press(int pin_1, int pin_2){
        digitalWrite(pin_1, HIGH);
        delay(100);
        buttPress(1, pin_2,0,0,10);//press button
        buttPress(1, pin_2,0,0,60);
        digitalWrite(pin_2, HIGH); delay(10000); 									
        digitalWrite(pin_2, LOW);
        if (pin_2 == low_button )
          {
            switching();
            }
            
        digitalWrite(pin_2, HIGH);
        tDelay(60000); //change pin status to LOW
        if (pin_2 == low_button )
          {
            switching();
            } 
        };
    

    В этой функции зажимается кнопка pin_1. В этот же момент времени нажимается кнопка pin_2 10 и 60 раз подряд, после чего зажимается на 10 и 60 секунд. Помимо этого, здесь присутствует проверка на зажатие нижней кнопки. Выше было указано, что при зажатии этой кнопки более 7 секунд коммуникатор выключается/включается, следовательно, если это происходит, устройство нужно вернуть в исходное состояние.

    Присутствуют и случайные нажатия и зажатия клавиш:
     // Random pressing
      void buttRandPress(int ncount){
        for (int i = 0; i < ncount; i++) {
        rbutton = buttons[random(3)];
        buttPress(1, rbutton,0,0, 1);
        }
      };
      
      // Random holding
       void buttRandDelay(int ncount, int dtime){
        for (int i = 0; i < ncount; i++) {
          rbutton = buttons[random(3)];
          buttDelay(1, rbutton,0,0);
          tDelay(dtime);
        }
       };
    

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

    В тестах также проверяется и зажатие всех клавиш. Проверяются все комбинации с разными задержками между нажатиями, потому что и такое в жизни бывает.

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

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

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

    Автор: Федор Талаев
    RealTrac Technologies
    51,21
    Разработчик системы локального позиционирования
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 5

      0
      Вы уверены, что это тестирование устройств, а не программного обеспечения?
        0
        Да, это тестирование именно устройства
          0
          То есть при тестировании конкретного устройства вы проверяете реакцию на каждое сочетание клавиш?
          Мне почему то кажется, что было бы достаточно проверить принципиальную нажимаемость клавиш по одной, хотя, конечно, у Вас может быть более сложный случай в смысле аппаратуры.
          0
          Расскажите лучше про ваш коммуникатор. Какое шифрование применяется(ГОСТ или нет?), какое железо шифрует трафик и тд. Про это будет гораздо интереснее прочитать.
            0
            Одна из следующих статей планируется именно на эту тему.

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

          Самое читаемое