Подсистема X тестового набора (XTS) включает набор сертификационных тестовых сценариев OpenHarmony, включающий текущую поддерживаемую тестовую систему совместимости приложений (ACTS) и будущую тестовую систему совместимости устройств (DCTS).
Эта подсистема содержит пакет программного обеспечения ACTS и инструменты.- Директория acts хранит исходный код и конфигурационные файлы тестовых сценариев ACTS. ACTS помогает производителям устройств выявлять проблемы совместимости программного обеспечения как можно раньше и гарантирует его совместимость на всех этапах разработки OpenHarmony.
OpenHarmony поддерживает следующие типы систем:
Мини-система
Мини-система запускается на устройствах с памятью размером от 128 КБ и оборудованием микроконтроллерами, такими как ARM Cortex-M и 32-битный RISC-V. Эта система предоставляет множество легковесных сетевых протоколов и графических фреймворков, а также широкий спектр компонентов чтения/записи для шины IoT. Примеры продуктов включают модули связи, датчики и носимые устройства для умного дома.
Маленькая система
Маленькая система работает на устройствах с памятью объемом не менее 1 МБ и оборудованных процессорами приложений, такими как ARM Cortex-A. Эта система обеспечивает более высокие возможности безопасности, стандартные графические фреймворки и возможности кодирования и декодирования видео. Типичные продукты включают умные домашние IP-камеры, электронные глаза для кошек, маршрутизаторы и устройства записи событий (EDR) для умной мобильности.
Стандартная система Стандартная система работает на устройствах с памятью объёма не менее 128 МБ и оборудованных процессорами, такими как ARM Cortex-A. Эта система предоставляет полный набор прикладных компонентов, поддерживающих улучшенное взаимодействие, 3D графический процессор (GPU), аппаратный композитор, различные компоненты и богатые анимации. Эта система применима к высокотехнологичным мониторам холодильников.
/test/xts
├── acts # Код тестов
│ └── subsystem # Исходный код тестовых случаев для стандартной системы
│ └── subsystem_lite # Исходный код тестовых случаев для мини-систем и малых систем
│ └── BUILD.gn # Конфигурация сборки тестовых случаев для стандартной системы
│ └── build_lite
│ └── BUILD.gn # Конфигурация сборки тестовых случаев для мини-систем и малых систем
└── tools # Код тестовых инструментов
Тестовые случаи для мини-систем должны разрабатываться на C, а тестовые случаи для малых систем — на C++.
Проверяет соответствие отраслевым и специфическим стандартам компании, протоколам и спецификациям. В данном контексте стандарты не включают никакие стандарты безопасности, которые следует классифицировать в тестирование безопасности.
Проверяет безопасность проверяемого объекта для предотвращения возможных опасностей для личной безопасности, здоровья и самого объекта.
Проверяет свойство устойчивости проверяемого объекта, чтобы гарантировать, что он способен выдерживать и поддерживать определённое состояние работы (включая понижение уровня), когда подвергается атакам, а также восстанавливаться и адаптировать защиту в ответ на эти атаки с целью обеспечения выполнения задач.
Перевод:
Вы должны выбрать подходящий язык программирования и тестовой framework для разработки тестовых случаев.Таблица 4 Тестовые фреймворки и языки для тестовых случаев различных систем
Фреймворк HCTest используется для поддержки тестовых случаев, разработанных с использованием языка C. HCTest был улучшен и адаптирован на основе открытого источника фреймворка тестирования Unity.
├── acts
│ └── subsystem_lite
│ │ └── module_hal
│ │ │ └── BUILD.gn
│ │ │ └── src
│ └── build_lite
│ │ └── BUILD.gn
Напишите тестовый случай в директории src.
#include "hctest.h"
/**
* @brief Регистрирует набор тестов с названием IntTestSuite.
* @param test Имя подсистемы
* @param example Имя модуля
* @param IntTestSuite Имя набора тестов
*/
LITE_TEST_SUIT(test, example, IntTestSuite);
Формат: имя_набора_тестов + Setup, имя_набора_тестов + TearDown.
Функции Setup и TearDown должны существовать, но их тела могут быть пустыми.
Участвуют три параметра: имя набора тестов, имя тестового случая и свойства тестового случая (включая тип, гранулярность и уровень).
LITE_TEST_CASE(IntTestSuite, TestCase001, Function | MediumTest | Level1)
{
// Выполните действия
};
``` 5. Используйте макрос **RUN_TEST_SUITE** для регистрации набора тестов.
RUN_TEST_SUITE(IntTestSuite);
Создайте конфигурационный файл (BUILD.gn) для тестового модуля.
Создайте файл сборки BUILD.gn (пример) в каждом каталоге тестового модуля. Укажите имя создаваемой статической библиотеки и зависящие от неё заголовочные файлы и библиотеки в файле сборки. Формат следующий:
import("//test/xts/tools/lite/build/suite_lite.gni")
hctest_suite("ActsDemoTest") {
suite_name = "acts"
sources = [
"src/test_demo.c",
]
include_dirs = []
cflags = ["-Wno-error"]
}
Добавьте варианты сборки в файл BUILD.gn в директории acts.
Вам потребуется добавить тестовый модуль в скрипт test/xts/acts/build_lite/BUILD.gn в директории acts.
lite_component("acts") {
...
if(board_name == "liteos_m") {
features += [
...
"//xts/acts/subsystem_lite/module_hal:ActsDemoTest"
]
}
}
Выполните команды сборки.
Наборы тестов собираются вместе с версией сборки. ACTS собирается вместе с отладочной версией.
Примечание: Средство сборки ACTS — это статическая библиотека, которая будет связана с образом.
Выполнение тестовых случаев для мини-системы
Запишите образ на разработочную плату.
Выполнение теста1. Используйте утилиту последовательного порта для входа в разработочную плату и сохранения информации о последовательном порту. 2. Перезапустите устройство и просмотрите логи последовательного порта.Анализ результатов тестирования
Просмотрите логи последовательного порта, формат которых следующий:
Лог каждого набора тестов начинается со строки Начало выполнения набора тестов: и заканчивается строкой xx Тестов xx Ошибок xx Пропущено.
Разработка тестовых случаев для устройств малых систем (Для примеров стандартной системы обратитесь в директорию global/i18n_standard.)
Фреймворк HCPPTest был улучшен и адаптирован на основе открытого источника Google Test.
Доступ к репозиторию test/xts/acts, где будут храниться тестовые случаи.
├── acts
│ └── subsystem_lite
│ └── module_posix
│ └── BUILD.gn
│ └── src
│ └── build_lite
│ └── BUILD.gn
Напишите тестовый случай в директории src.
Импортируйте заголовочный файл фреймворка тестирования.
В следующем заявлении включена gtest.h.
#include "gtest/gtest.h"
Определите методы Setup
и TearDown
.
using namespace std;
using namespace ::testing;
class TestSuite : public ::testing::Test {
protected:
// Предварительное действие тестового набора, которое выполняется перед первым тестовым случаем
static void SetUpTestCase() {
}
// Очистка тестового набора, которая выполняется после последнего тестового случая
static void TearDownTestCase() {
}
};
``````markdown
virtual void SetUp() {
}
virtual void TearDown() {
}
Используйте макрос HWTEST или HWTEST_F для записи тестового случая.
Вовлекаются три параметра: имя тестовой группы, имя тестового случая и свойства тестового случая (включая тип, гранулярность и уровень).
HWTEST_F(TestSuite, TestCase_0001, Function | MediumTest | Level1) {
// Выполняйте какие-либо действия
}
Создайте файл сборки BUILD.gn в каждом каталоге модуля тестирования. Укажите имя создаваемой статической библиотеки и зависящие от неё заголовочные файлы и библиотеки в файле сборки. Каждый модуль тестирования независимо собирается в исполняемый файл .bin, который можно напрямую загрузить на платформу разработки для тестирования.
import("//test/xts/tools/lite/build/suite_lite.gni")
hcpptest_suite("ActsDemoTest") {
suite_name = "acts"
sources = [
"src/TestDemo.cpp"
]
include_dirs = [
"src",
...
]
deps = [
...
]
cflags = [ "-Wno-error" ]
}
Добавьте модуль тестирования в скрипт файла сборки **test/xts/acts/build_lite/BUILD.gn** в директории **acts**.
```markdown
lite_component("acts") {
...
else if (board_name == "liteos_a") {
features += [
...
"//xts/acts/subsystem_lite/module_posix:ActsDemoTest"
]
}
}
```
5. Выполните команды сборки.
Тестовые группы собираются вместе с версией сборки. ACTS собирается вместе с отладочной версией.
> **Примечание:**
>ACTS для малых систем независимо собирается в исполняемый файл (.bin) и архивируется в директорию **suites\acts** результата сборки.
### Выполнение тестовых случаев на основе C++ (для стандартных и малых систем)<a name="section128222336544"></a>
**Выполнение тестовых случаев для малых систем** В настоящее время тестовые случаи совместно используются NFS и монтируются на платформу разработки для выполнения.
**Настройка среды**
1. Используйте сетевой кабель или беспроводную сеть для подключения платформы разработки к вашему компьютеру.
2. Настройте IP-адрес, маску подсети и шлюз для платформы разработки. Убедитесь, что платформа разработки и компьютер находятся в одной сети.
3. Установите и зарегистрируйте сервер NFS на компьютере и запустите службу NFS.
4. Выполните команду `mount` для платформы разработки, чтобы убедиться, что платформа разработки может получить доступ к общим файлам NFS на компьютере. Формат: `mount` _IP-адрес сервера NFS_:/**_общий каталог NFS_**/**_каталог платформы разработки_** nfs
Пример:
```
mount 192.168.1.10:/nfs /nfs nfs
```
### Выполнение тестовых случаев
Запустите **ActsDemoTest.bin**, чтобы запустить выполнение тестовых случаев, и проанализируйте журналы последовательного порта, сгенерированные после завершения выполнения.
### Разработка тестовых случаев на основе JavaScript (для стандартной системы) <a name="section159801435165220"></a>
Фреймворк HJSUnit используется для автоматизации тестирования приложений OpenHarmony, созданных на языке JavaScript на основе JS-фреймворка.
**Основные синтаксические конструкции тестовых случаев**
Тестовые случаи создаются на языке JavaScript и должны соответствовать спецификациям программирования этого языка.
**Таблица 5**<a name="table13980103565212"></a><table>
<thead align="left">
<tr id="row1098093545218">
<th class="cellrowborder" valign="top" width="17.92179217921792%" id="mcps1.2.4.1.1">
<p id="p49811235135214"><a name="p49811235135214"></a><a name="p49811235135214"></a>Синтаксис</p>
</th>
<th class="cellrowborder" valign="top" width="68.88688868886888%" id="mcps1.2.4.1.2">
<p id="p898183565220"><a name="p898183565220"></a><a name="p898183565220"></a>Описание</p>
</th>
<th class="cellrowborder" valign="top" width="13.19131913191319%" id="mcps1.2.4.1.3">
<p id="p17981143512526"><a name="p17981143512526"></a><a name="p17981143512526"></a>Обязательность</p>
</th>
</tr>
</thead>
<tbody>
<tr id="row1598183515528">
<td class="cellrowborder" valign="top" width="17.92179217921792%" headers="mcps1.2.4.1.1">
<p id="p139810358527"><a name="p139810358527"></a><a name="p139810358527"></a>beforeAll</p>
</td>
<td class="cellrowborder" valign="top" width="68.88688868886888%" headers="mcps1.2.4.1.2">
<p id="p198111352526"><a name="p198111352526"></a><a name="p198111352526"></a>Устанавливает действие уровня тестового набора, которое выполняется только один раз до выполнения всех тестовых случаев. Вы можете передать функцию действия как единственный параметр.</p>
</td>
<td class="cellrowborder" valign="top" width="13.19131913191319%" headers="mcps1.2.4.1.3">
<p id="p298114355529"><a name="p298114355529"></a><a name="p298114355529"></a>Нет</p>
</td>
</tr>
<tr id="row11981103512529">
<td class="cellrowborder" valign="top" width="17.92179217921792%" headers="mcps1.2.4.1.1">
<p id="p20981135135215"><a name="p20981135135215"></a><a name="p20981135135215"></a>afterAll</p>
</td>
<td class="cellrowborder" valign="top" width="68.88688868886888%" headers="mcps1.2.4.1.2">
<p id="p39811935115217"><a name="p39811935115217"></a><a name="p39811935115217"></a>Устанавливает очистку уровня тестового набора, которая выполняется только один раз после выполнения всех тестовых случаев. Вы можете передать функцию очистки как единственный параметр.</p>
</td>
<td class="cellrowborder" valign="top" width="13.19131913191319%" headers="mcps1.2.4.1.3">
<p id="p49811435125210"><a name="p49811435125210"></a><a name="p49811435125210"></a>Нет</p>
</td>
</tr>
</tbody>
</table>19131913191319%" headers="mcps1. 2. 4. 1. 3 ">
<p id="p998110354527"><a name="p998110354527"></a><a name="p998110354527"></a>Нет</p>
</td>
</tr>
<tr id="row1298116359526">
<td class="cellrowborder" valign="top" width="17. 92179217921792%" headers="mcps1. 2. 4. 1. 1 ">
<p id="p898112359526"><a name="p898112359526"></a><a name="p898112359526"></a>beforeEach</p>
</td>
<td class="cellrowborder" valign="top" width="68. 88688868886888%" headers="mcps1. 2. 4. 1. 2 ">| Действие | Описание | Обязательность |
| --- | --- | --- |
| beforeEach | Выполняется перед каждым тест-кейсом. Это действие уровня тест-кейса, которое выполняется перед каждым тестом. Количество вызовов равно количеству определённых тест-кейсов. Вы можете передать функцию действия как единственный параметр. | Нет |
| afterEach | Выполняется после каждого тест-кейса. Это действие уровня тест-кейса, которое выполняется после каждого теста. Количество вызовов равно количеству определённых тест-кейсов. Вы можете передать функцию очистки как единственный параметр. | Нет |
| describe | Определяет набор тестов. Вы можете передать два параметра: имя набора тестов и функцию набора тестов. Утверждение `describe` поддерживает вложенность. |Примечание: В таблице выше используется структура данных для представления информации, аналогичной исходному тексту, но адаптированной для удобства восприятия на русском языке. Вы можете использовать `<strong id="b138214222410"><a name="b138214222410"></a><a name="b138214222410"></a>beforeall</strong>`, `<strong id="b18677102314115"><a name="b18677102314115"></a><a name="b18677102314115"></a>beforeEach</strong>`, `<strong id="b1353142514113"><a name="b1353142514113"></a><a name="b1353142514113"></a>afterEach</strong>` и `<strong id="b131041629204111"><a name="b131041629204111"></a><a name="b131041629204111"></a>afterAll</strong>` в каждом `<strong id="b590433484116"><a name="b590433484116"></a><a name="b590433484116"></a>describe</strong>` утверждении.
</p>
</td>
<td class="cellrowborder" valign="top" width="13.19131913191319%">
<p id="p898217352527"><a name="p898217352527"></a><a name="p898217352527"></a>Да</p>
</td></td>
</tr>
<tr id="row6982113518526">
<td class="cellrowborder" valign="top" width="17.92179217921792%" headers="mcps1.2.4.1.1">
<p id="p17982123510526"><a name="p17982123510526"></a><a name="p17982123510526"></a>it</p>
</td>
<td class="cellrowborder" valign="top" width="68.88688868886888%" headers="mcps1.2.4.1.2">
<p id="p598211352522"><a name="p598211352522"></a><a name="p598211352522"></a>Определяет тестовый случай. Можно передать три параметра: имя тестового случая, параметр фильтрации и функция тестового случая.</p>
<p id="p5205769588"><a name="p5205769588"></a><a name="p5205769588"></a>Использование параметра фильтрации:</p>
<p id="p1545919528618"><a name="p1545919528618"></a><a name="p1545919528618"></a>Значение параметра фильтра — это 32-битное целое число. Установка различных битов на <strong id="b045919521765"><a name="b045919521765"></a><a name="b045919521765"></a>1</strong> означает различные конфигурации:</p>
<a name="ul6932113319395"></a><a name="ul6932113319395"></a>
<ul id="ul6932113319395">
<li>бит 0: действует ли параметр фильтрации. <strong id="b1193293318395"><a name="b1193293318395"></a><a name="b1193293318395"></a>1</strong> означает, что тестовый случай используется для функционального тестирования и другие настройки параметров не применяются.</li>
<li>Биты 0-10: категории тестовых случаев</li>
<li>Биты 16-18: масштабы тестовых случаев</li>
<li>Биты 24-28: уровни тестирования</li>
</ul>
<p id="p7965165151011"><a name="p7965165151011"></a><a name="p7965165151011"></a><strong id="b15148755145114"><a name="b15148755145114"></a><a name="b15148755145114"></a>Категории тестовых случаев</strong>: Биты 0-10 указывают на ФУНКЦИЮ (тест функциональности), ПЕРФОРМАНС (тест производительности), ПОВЕР (тест потребления энергии), РЕЛІАБІЛЬІТЕ (тест надёжности), СЕКЮРІТЬ (тест соответствия требованиям безопасности), ГЛОБАЛ (тест целостности), КОМПАТАБІЛІТЬ (тест совместимости), ЮЗЕР (тест пользователя), СТАНДАРТ (стандартный тест), СЭФТИ (тест функций безопасности) и РЕЗИЛЕНС (тест устойчивости), соответственно.</p>
<p id="p199651555102"><a name="p199651555102"></a><a name="p199651555102"></a><strong id="b135908568519"><a name="b135908568519"></a><a name="b135908568519"></a>Масштабы тестовых случаев</strong>: Биты 16-18 указывают на МАЛ (малый масштаб тестирования), МЕДИУМ (средний масштаб тестирования) и ЛАРГ (большой масштаб тестирования), соответственно.</p>
<p id="p296545151020"><a name="p296545151020"></a><a name="p296545151020"></a><strong id="b12181058125111"><a name="b12181058125111"></a><a name="b12181058125111"></a>Уровни тестирования</strong>: Биты 24-28 указывают на ЛЕВЕЛ0 (уровень-0 тестирования), ЛЕВЕЛ1 (уровень-1 тестирования), ЛЕВЕЛ2 (уровень-2 тестирования), ЛЕВЕЛ3 (уровень-3 тестирования) и ЛЕВЕЛ4 (уровень-4 тестирования), соответственно.</p>
</td>
<td class="cellrowborder" valign="top" width="13. 19131913191319%" headers="mcps1. 2. 4. 1. 3">
<p id="p17601752115716"><a name="p17601752115716"></a><a name="p17601752115716"></a>Да</p>
</td>
</tr>
</tbody>
</table>
Используйте стандартный синтаксис Jasmine для написания тестовых случаев. Поддерживается спецификация ES6.1. Храните тестовые случаи в директории **entry/src/main/js/test**, которая имеет следующую структуру:
├── BUILD.gn
│ └── entry
│ └── src
│ └── main
│ └── js
│ └── default
│ └── pages
│ └── index
│ └── index.js # Входной файл
│ └── test # Код тестов
│ └── resources # Ресурсы HAP
│ └── config.json # Конфигурационный файл HAP
2. Начните JS-тестовый фреймворк и загрузите тестовые случаи. Ниже приведён пример для файла **index.js**.
// Начало JS-тестового фреймворка и загрузка тестовых случаев. import {Core, ExpectExtend} from 'deccjsunit/index'
export default { data: { title: '' }, onInit() { this.title = this.$t('strings.world') }, onShow() { console.info('onShow finish') const core = Core.getInstance() const expectExtend = new ExpectExtend({ 'id': 'extend' }) core.addService('expect', expectExtend) core.init() const configService = core.getDefaultService('config') configService.setConfig(this) require('../../../test/List.test') core.execute() }, onReady() { } }
3. Напишите единичный тестовый случай, используя следующий пример:
// Используйте HJSUnit для выполнения единичного теста.
describe('appInfoTest', function () {
it('app_info_test_001', function () {
var info = app.getInfo()
expect(info.versionName).toEqual('1.0')
expect(info.versionCode).toEqual(3)
})
})
### Упаковка тестовых случаев на основе JavaScript (для стандартной системы) <a name="section445519106559"></a>Для получения подробностей о том, как создать HAP, см. руководство по разработке приложений на JavaScript стандартной системы [Создание и сборка HAP](https://developer.harmonyos.com/ru/docs/documentation/doc-guides/build_overview-0000001055075201).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )