Впервые я познакомился с платформой Liuma в мае этого года. Когда я впервые услышал это имя, я подумал, что оно довольно интересное, и предположил, что его название должно быть взято из «Коровьей лошади Мулиу» Чжугэ Ляна. Позже я подтвердил автору, что это действительно так. Чжугэ Лян изначально изобрел Му Лю Ню Ма для повышения эффективности транспортировки, а испытательная платформа Му Лю Ма должна была повысить эффективность испытаний. Можно сказать, что название было «в самый раз».
В этой статье около 12 000 слов, и я писал ее много дней. Возможно, эта статья заняла у меня больше всего времени. На самом деле написание статей – не самое сложное – это учиться, исследовать, наступать на подводные камни, решать задачи, писать статьи, записывать и подводить итоги. Поэтому написание довольно тщательное и в целом достаточно подробное. Чтение может занять немного много времени, поэтому вы можете сначала уделить внимание сборнику, а затем внимательно изучить содержание статьи, когда у вас будет время позже. Содержание примерно разделено на следующие четыре части:
【Введение】
【Развертывание】
【Использование】
【Краткое содержание】
Следующий обзор проекта и описание функций взяты с официального сайта и из описания проекта GitHub.
Liuma — это платформа автоматического тестирования с низким уровнем кода, целью которой является использование простейшей архитектуры для единой поддержки автоматического тестирования API/WebUI/AppUI. Платформа использует модель проектирования с низким уровнем кода и реализует традиционные тестовые сценарии настраиваемым образом, что позволяет пользователям с более слабыми способностями к программированию быстро приступить к автоматизированному тестированию. В то же время платформа также поддерживает реализацию пользовательских компонентов посредством простого написания кода, что позволяет пользователям гибко реализовывать свои собственные потребности.
Проект разделен на сторону платформы и движка. Он использует распределенное исполнение, а узел выполнения теста (т. е. движок) может быть зарегистрирован на любой машине в любой среде, что позволяет преодолеть ограничения ресурсов и сети. В то же время, запустив движок на локальном ПК, пользователям удобно быстро отлаживать тестовые случаи и просматривать процесс выполнения в режиме реального времени, обеспечивая то же удобство, что и при традиционном написании скриптов.
Официальный сайт: http://www.liumatest.cn/ Адрес кода: https://github.com/Chras-fu/Liuma-platform Документация по развертыванию: https://docs.qq.com/doc/p/c989fa8bf467eca1a1e0fa59b32ceab017407168. Руководство пользователя: https://docs.qq.com/doc/p/1e36932d41b40df896c1627a004068df9a28fc3f Стек технологий платформы: интерфейсная часть VUE+ElementUI, серверная часть Java+SpringBoot и механизм тестирования Python.
Официальный адрес документа по развертыванию: https://docs.qq.com/doc/p/c989fa8bf467eca1a1e0fa59b32ceab017407168. Предусмотрено два метода развертывания: один — развертывание контейнера, а другой — обычное развертывание. Преимущество развертывания контейнера заключается в том, что оно простое и быстрое. Преимущество обычного развертывания заключается в том, что по сравнению с контейнерами проблемы легче устранять. Недостаток — более громоздкие шаги. Оба метода имеют свои преимущества и недостатки, поэтому вы можете свободно выбирать в соответствии со своими предпочтениями. В этой статье используется обычный метод развертывания.
Машина/Система | Среда развертывания | иллюстрировать |
---|---|---|
192.168.1.123,CentOS7 | JDK8MySQL8Nginx | Сервер интрасети CentOS7: используется для запуска фоновой службы Java + внешний интерфейс Nginx для перенаправления прокси-сервера. MySQL в качестве базы данных фонового хранилища. |
192.168.1.131,Windows10 | GitJDK8MavenIDEA EditorNodeJS | Персональный офисный компьютер с Windows 10: Git используется для клонирования кода клиентской части, серверной части и ядра в локальный редактор IDEA для изменения файла конфигурации. Maven автоматически загружает пакеты зависимостей и упаковывает программы Java, которые NodeJS компилирует и упаковывает клиентские программы. |
192.168.1.188,Windows7 | Python3SeleniumChromeChromeDriver | Другие хосты Windows в той же интрасети: Python3 — среда механизма выполнения, Selenium — инструмент веб-автоматизации, Chrome Google Chrome ChromeDriver Драйвер Google Chrome |
192.168.1.131, Windows10Git JDK8 Мавен редактор ИДЕИ Персональный офисный компьютер NodeJS с ОС Windows 10:
192.168.1.188, Windows7Python3 Селен Хром ChromeDriver для других хостов Windows в той же интрасети:
Что касается механизма выполнения, вы также можете продолжать использовать свой персональный офисный компьютер в качестве механизма выполнения. Учитывая, что персональные компьютеры часто выключаются и перезагружаются, им необходимо запускать механизм выполнения взад и вперед, что хлопотно, поэтому я выбрал локальный. Хост Windows. Конечно, его также можно развернуть в системе Linux, но для автоматизированного тестирования пользовательского интерфейса нет визуального отображения интерфейса, что делает отладку относительно затруднительной.
На серверах CentOS и персональных компьютерах Windows необходимо установить JDK соответственно. В CentOS рекомендуемый метод развертывания сценария:
Скачать скрипт установки: https://share.weiyun.com/6JMLvSyK Адрес загрузки пакета JDK: https://share.weiyun.com/mKDxXd1x
source jdk_install.sh # Установите с помощью команды source, устраняя необходимость настройки переменных среды.
Установка под CentOS. На этот раз для быстрой установки используется docker. Если mysql уже установлен на сервере или другом компьютере во внутренней сети, просто подключитесь напрямую и можете проигнорировать этот шаг. Обратите внимание, что вам необходимо использовать версию MySQL 8.0+. Я использую версию 5.7.33. При запуске будет сообщено об ошибке, и она не поддерживается.
docker run -d --restart always --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 mysql:8.0.28
Введите контейнер MySQL
docker exec -it mymysql sh
подключить MySQL
mysql -uroot -p # Войдите в MySQL и введите пароль 123456, как будет предложено.
Введите командную строку MySQL для выполнения:
mysql> create database liuma character set utf8 collate utf8_general_ci;
Установка под CentOS, рекомендуемый метод развертывания скриптом
Адрес загрузки скрипта установки nginx: https://share.weiyun.com/HLuVRTO2 Адрес загрузки установочного пакета nginx: https://share.weiyun.com/uhffdijl
Загрузите его, загрузите на сервер и выполните следующую команду для его установки:
source nginx_install.sh
Установка под Windows используется для извлечения кода проекта. После загрузки дважды щелкните мышью и следуйте инструкциям для пошаговой установки.
Адрес загрузки: https://share.weiyun.com/NJBlZGmE
Установка под Windows используется для установки внешних зависимостей, упаковки и компиляции.
Адрес загрузки: https://share.weiyun.com/2PpWyXkz
После загрузки дважды щелкните, чтобы установить и заменить источник изображения Taobao:
npm --registry https://registry.npm.taobao.org install node-sass (модуль, который необходимо установить)
npm config set registry https://registry.npm.taobao.org
npm config get registry # Проверьте, прошла ли замена успешно
npm install -g cnpm --registry=https://registry.npm.taobao.org
Может быть установлен под CentOS или Windows.,Исполнитель будет установлен, под какой системой он выбран. Если это система Linux,Вы можете обратиться к предыдущим статьям《LinuxДалее нажмите установкуPython3&Изменить источник изображения&Навыки управления виртуальной средой》,Если это система Windows,Затем установите python3 в системе Windows.
git clone https://github.com/Chras-fu/Liuma-platform.git # Клонировать код платформы
git clone https://github.com/Chras-fu/Liuma-engine.git # Клонировать код двигателя
Каталог кода платформы:
Войдите в каталог файлов внешнего интерфейса, установите соответствующие зависимости и выполните сборку.
npm install # Установите связанные зависимости
npm run build # строить
Появится сообщение «Сборка завершена», указывающее, что сборка прошла успешно:
После успешной сборки в каталоге будет создан каталог dist-файла, который можно будет упаковать в формат .zip и загрузить на сервер, а затем распаковать.
Используйте IDEA, чтобы открыть liuma-platform/LiuMa-backend, и используйте maven для установки зависимостей.
Расположение файла: liuma-platform/LiuMa-backend/src/main/resources/application.properties, конфигурация следующая:
# database
spring.datasource.password=123456
spring.datasource.username=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3307/liuma?serverTimezone=UTC&characterEncoding=utf-8
Что следует отметить:
Расположение файла: liuma-platform/LiuMa-backend/src/main/resources/application.properties, конфигурация следующая:
# aliyun Алибаба Облако
# Алибаба Облакопочтаkey,Измените его на свой
aliyun.email.accessKey = xxxxx
# Алибаба Облакопочтаsecret,Измените его на свой
aliyun.email.accessSecret = xxxxx
# Измените адрес электронной почты отправителя на свой собственный.
aliyun.email.runnerSenderAddress = xxxxx
aliyun.email.runnerSenderName = Запуск бота уведомлений
Расположение файла: liuma-platform/LiuMa-backend/src/main/resources/application.properties, конфигурация следующая:
# qiniuyun Конфигурация облака Циню, поменяй их всех на свои
# Цинююн ак
qiniu.cloud.ak = xxxx
# Цинююнск
qiniu.cloud.sk = xxxx
# Название пространства Цинюйюнь
qiniu.cloud.bucket = xxxx
# Ускоренное доменное имя Qiniu Cloud
qiniu.cloud.downloadUrl = xxxx
qiniu.cloud.uploadUrl = xxxx
Подсказка «BUILD SUCCESS» означает, что упаковка прошла успешно, и в каталоге будет дополнительный jar-пакет LiuMa-1.0.3.jar (последний код, который я сейчас извлек, упакован в 1.0.3, а также есть LiuMa -1.0.0 Пакет .jar был упакован два месяца назад)
Загрузите упакованную папку внешнего интерфейса dist в: каталог установки nginx /usr/local/nginx/html/.
Вы можете создать новую папку liuma в каталоге /home для хранения ранее упакованного файла пакета jar: LiuMa-1.0.3.jar. Выполните команду, чтобы запустить службу в фоновом режиме:
nohup java -jar LiuMa-1.0.3.jar > logs.log 2>&1 &
После запуска вы можете проверить файл журнала logs.log, чтобы увидеть, был ли запуск успешным и успешно ли он подключен к базе данных. После успешного подключения будет автоматически создана соответствующая таблица данных:
① Создайте новый nginx_liuma.conf.
Создайте новый файл nginx_liuma.conf в каталоге /usr/local/nginx/conf nginx. nginx используется для настройки перенаправления прокси-сервера. Подробная конфигурация выглядит следующим образом:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8888;
server_name 192.168.1.122;
location / {
index index.html index.htm;
root /usr/local/nginx/html/dist;
}
location /autotest {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin "";
}
location /openapi {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin "";
}
access_log /usr/local/nginx/html/wwwlogs/access.log;
}
}
② Тестовая конфигурация
nginx -t -c /usr/local/nginx/conf/nginx_liuma.conf
Во время теста может появиться сообщение об ошибке «nginx: [emerg] open() «/usr/local/nginx/html/wwwlogs/access.log» не удалось (2: нет такого файла или каталога)». Причина в том, что. каталог html. Если путь к файлу wwwlogs/access.log отсутствует, просто создайте новый каталог wwwlogs и файл access.log.
③ Укажите файл конфигурации для запуска nginx.
nginx -c /usr/local/nginx/conf/nginx_liuma.conf
Посетите интерфейс: http://192.168.1.122:8888/, учетная запись администратора: LMadmin, пароль: Liuma@123456.
Страница после входа в систему выглядит следующим образом:
Поскольку Liuma — это проект разделения фронтенда и бэкэнда, тот факт, что фронтенд имеет к нему доступ, не означает, что бекенд тоже нормальный. Если при входе в систему вы видите ошибку 502, это означает, что внутренний сервер не запущен. Вероятно, это проблема с базой данных. Устранить неполадки можно следующими способами:
Кроме того, если доступ к внешней странице невозможен, вероятно, у брандмауэра нет разрешений на открытие. Вам необходимо открыть порт 8888, настроенный в приведенном выше файле конфигурации, в брандмауэре:
firewall-cmd --permanent --add-port=8888/tcp
firewall-cmd --reload
Если интерфейсная и серверная службы развернуты на облачном сервере, в группе безопасности необходимо открыть порт 8888.
Под механизмом тестирования можно понимать рабочую среду для тестирования интерфейса и тестирования автоматизации пользовательского интерфейса. Механизм тестирования можно развернуть в системе Linux или на персональном компьютере под управлением Windows, желательно в той же локальной сети. Конечно, если сервер развернут в облачной службе и имеет общедоступный IP-адрес, Windows также может быть персональным офисным компьютером, если основной компьютер может подключаться к серверу, на котором развернута серверная служба. Ниже приведен процесс развертывания механизма:
Код движка клонирован через "git clone https://github.com/Chras-fu/Liuma-engine.git" и загружен напрямую на соответствующий сервер. Например, если я выберу в качестве движка Windows, то напрямую Just. скопируйте его в Windows.
В предыдущем развертывании среды зависимостей был установлен Python3, а также создана и активирована виртуальная среда. Затем перейдите непосредственно в каталог liuma-engine, где находится проект, и установите зависимости.
pip install -r requirements.txt
Сравните версию движка браузера Chrome, загрузите соответствующий драйвер и сохраните его в каталоге /browser.
① Механизм регистрации
Центр среды платформы Liuma-Управление двигателем-Регистрация двигателя, введите имя двигателя, любое имя, которое вы можете идентифицировать, например: engine-192.168.1.188, после подтверждения появится всплывающее окно с подсказкой, скопируйте код двигателя и секретный код двигателя внутри ключа. , который будет использоваться позже.
② Настройка сервера движка
Отредактируйте файл конфигурации config.ini в каталоге liuma-engine/config и настройте его следующим образом.
[Platform]
url = http://192.168.1.122:8888
enable-proxy = false
enable-stderr = true
[Engine]
engine-code = 9d4358f0c8a34a2ab7e4c297949149fa
engine-secret = 86a2f8f8bd654e03a60da9f19cdec017
[Header]
content-type = application/json;charset=utf-8
token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjI2Mjk4OTQsImVuZ2luZVNlY3JldCI6IjVhM2ZhYzdlYzJiODQ4NDlhYzJhNjY4ZGRlNjRhMDk0IiwiaWF0IjoxNjYyMDI1MDk0LCJlbmdpbmVJZCI6ImU3ZWMzOTllZDdkZDRkMmFiZWIxNGNiNTE2NGNiNGVkIn0._LVsCKIauFxV4IKAUNgYS1lVbD5twO_2E39QCOufKH8
[WebDriver]
options = normal
path = chromedriver.exe
[PlatformProxy]
url = http://0.0.0.0:80
username = ****
password = ****
python startup.py
После успешного запуска двигателя вы можете проверить его онлайн-статус в Центре среды платформы Liuma — Управление двигателем. Сервер может запускать несколько ядер. Обычно по умолчанию существует четыре системных ядра, которые не влияют друг на друга после запуска.
Прежде чем приступить к созданию теста интерфейса, нам необходимо выполнить некоторые базовые приготовления, такие как регистрация проекта, добавление или регистрация учетной записи и добавление вновь зарегистрированной учетной записи в проект. Во-первых, давайте взглянем на введение в официальном документе, посвященное взаимоотношениям между проектами, ролями и пользователями:
Страница входа для регистрации новой учетной записи
После завершения регистрации войдите в учетную запись администратора и вы сможете увидеть зарегистрированных пользователей в [Управление системой - Управление пользователями]:
При создании проекта,Вы можете выбрать вновь зарегистрированную учетную запись в качестве администратора.,Вы сможете увидеть этот элемент, когда позже войдете в систему под этой учетной записью.
Самая большая функция этой платформы — автоматическое тестирование, и наша цель на этот раз — проверить, просты ли в использовании функции этой платформы, связанные с автоматизацией, поэтому основное внимание будет уделено автоматизированному тестированию интерфейса и автоматизированному тестированию пользовательского интерфейса. Что касается других сопутствующих функций, то в официальном руководстве пользователя написано очень подробно, поэтому я не буду здесь вдаваться в подробности.
При тестировании интерфейса необходимо сначала создать интерфейс. Перед созданием интерфейса необходимо создать среду выполнения каждого интерфейса, то есть имя домена или URL-адрес:
① Добавьте новый идентификатор доменного имени.
Прежде чем добавить среду, вам необходимо сначала добавить идентификатор доменного имени, в противном случае при добавлении среды никто «идентификатор доменного имени» будет доступен для выбора.
В правом верхнем углу центра конфигурации - Идентификация доменного имени - добавьте новую идентификацию, заполните идентификационное имя и описание идентификации и подтвердите.
② Добавить среду
Добавьте логотип доменного имени, и вы сможете Добавить среду Понятно,Целью добавления среды является главным образом определение того, какую среду использовать при последующем запуске тестовых случаев.,Например, тот же проект,Может быть среда разработки, тестовая среда、Предварительная версия среды и т. д.:
Экологический Центр-Экологический менеджмент-Добавить среду,Введите имя среды и описание среды.,подтверждать.
③ Добавьте новое доменное имя.
Добавьте новое доменное имя во вновь созданную среду, выберите «Идентификатор доменного имени» в качестве типа соответствия, выберите имя идентификатора доменного имени, созданного на первом этапе, в качестве соответствующего идентификатора и введите URL-адрес, запрошенный интерфейсом. для доменного имени. Подобно управлению средой Metersphere, после того, как среда создана здесь, запрос на тестирование интерфейса, инициированный позже, инициируется на основе URL-адреса этой среды.
① Создать модуль
Поскольку это тест интерфейса, вам необходимо сначала создать интерфейс. Прежде чем добавлять интерфейс, вам необходимо создать каждый модуль для классификации и управления интерфейсами в каждом модуле.
② Новый интерфейс
Вы можете добавить новый интерфейс вручную или импортировать его. Метод импорта поддерживает импорт файлов, импорт почтальона и Swagger. Здесь я решил добавить его вручную. В качестве примера возьмем интерфейс входа в систему:
Основная информационная часть — это адрес интерфейса, описание, имя и другая информация. Каждое поле является кратким и понятным и не будет описываться подробно; часть параметров запроса в основном включает заголовок запроса, тело запроса интерфейса и т. д. Чтобы удовлетворить потребности разных пользователей в входе в систему, параметры запроса моего интерфейса передаются в виде ссылочных переменных. При упоминании переменных мы должны упомянуть следующие общедоступные параметры.
① Различия в дизайне общедоступных параметров между Liuma и Metersphere.
Целью добавления новых общедоступных параметров является, главным образом, их дальнейшее использование в интерфейсе, аналогично глобальным переменным. И Metersphere, и Liuma управляют своими средами и переменными на основе проектов, причем проект находится наверху. Публичные параметры Metersphere управляются в среде. Это концепция размещения нескольких переменных в одной среде. В Liuma среда отделена от переменных. Один проект может добавить несколько сред, а один проект может добавить несколько общедоступных параметров. параметры среды и общества не мешают друг другу.
общедоступные компоненты-общедоступные параметры-Пользовательские параметры-Добавить пользовательские параметры,Введите имя параметра、тип、Значения параметров и т. д.。Уведомление:Имена переменных не могут повторяться в одном проекте.Например,Добавьте новое имя пользователя для входаобщедоступные параметры:
②Справочник по общедоступным параметрам Liuma
Metersphereдляобщедоступные Ссылка параметров соответствует Jmeter.,Все принятыВ форме {name}, в Люме, это через {{username}}цитата в форме,Похоже на: почтальон,Но есть больше, чем почтальон
Подобно Jmeter, Liuma имеет встроенный помощник по функциям и предоставляет множество функций на выбор.
Например, если для одного из параметров моего интерфейса требуются случайные числа указанной длины, вы можете использовать функцию random_number. См. следующий значок для эталонного метода:
В некоторых случаях встроенные Если функция не может удовлетворить потребности в генерации параметров, то вы можете создать некоторые собственные функции. Согласно официальной документации сайта, платформа поддерживает Python. Метод библиотеки Faker (ведь механизм исполнения — Python),Затем мы можем создать метод Python для настройки некоторых параметров. Но есть одна вещь, которую следует отметить,Возвращаемое значение функции должно быть возвращено с использованием sys_return(value)。
① Создайте пользовательскую функцию
Например, если я хочу сгенерировать случайный номер мобильного телефона, я могу сделать это следующим образом: Публичные компоненты-Управление функциями-Добавить функцию, содержимое будет следующим:
Видно, что синтаксис на самом деле является синтаксисом Python, за исключением того, что окончательное возвращаемое значение заменяется на sys_return.
② Ссылка на пользовательские функции
После добавления пользовательской функции вы можете ссылаться на нее в параметрах интерфейса: {{@function()}}
Фактически, я сгенерировал три вышеуказанных параметра: имя, номер мобильного телефона и идентификационный номер с помощью пользовательских функций. Когда запрос наконец сделан, вы можете увидеть сгенерированные значения параметров через журнал:
Есть очень важная деталь, на которую следует обратить внимание, которая также является одним из подводных камней, с которыми я столкнулся во время использования:
Кавычки необходимы при ссылке на общедоступные параметры строкового типа при передаче параметров интерфейса.
При определении параметров, если это переменная строкового типа:
Пример может сделать это более простым:
Если нашему интерфейсу входа необходимо передать параметр пароля, и мы заранее определили эту переменную пароль в публичном параметре, значением будет e10adc3949ba59abbe56e057f20f883e, которое является строковым типом, как показано на следующем рисунке:
Если значение не заключено в двойные кавычки, кавычки не будут автоматически включаться при передаче параметров (что можно увидеть, выполнив результат печати, даже если при определении выбран тип строки, под которым находится сервер интерфейса). test подумает, что это не строковый тип.
Если мы вручную добавим двойные кавычки к общедоступному параметру, механизм выполнения Python сообщит об ошибке JSONDecodeError:
Решение состоит в том, чтобы определить общедоступные параметры без кавычек, а при цитировании параметров в интерфейсе добавлять кавычки.
На этом этапе оно будет распознано как допустимое значение строкового типа:
Добавьте модуль и создайте новую страницу варианта использования:
Вариант использования состоит из одного или нескольких интерфейсов для формирования бизнес-потоков в различных сценариях. После создания нового интерфейса в предыдущем управлении интерфейсом вы можете добавить интерфейс в вариант использования. Вы можете выбрать один или несколько интерфейсов одновременно.
Существует много типов утверждений. Например, для интерфейса, который добавляет пользователя, возвращаемое значение после успешного добавления равно {"a":"200","d":"30200"}, где a фиксировано, что равно значению. код ответа интерфейса. Значение d, идентификатор пользователя, не фиксировано, поэтому здесь вы можете сначала извлечь значение узла d через экстрактор jsonpath и использовать «целое число» для создания утверждения:
Если некоторые интерфейсы используют пользовательские функции (встроенные функция Нет необходимости импортировать)、общедоступные параметры、общественныйheaderждать,Затем вам нужно выбрать и импортировать их один за другим в варианте использования.,В противном случае ссылка в интерфейсе не вступит в силу. много раз,Выполнение варианта использования отличается, поскольку эти элементы не импортируются:
Обычно вариант использования может содержать несколько интерфейсов, и параметры интерфейса могут быть связаны друг с другом. Например, если входные параметры интерфейса B используют выходные параметры интерфейса A, вам необходимо сначала извлечь выходные параметры интерфейса A. , а затем использовать их в интерфейсе B. Сделайте ссылку.
① Извлечение возвращаемого значения
Как и Jmeter и Metersphere, извлечение возвращаемых значений поддерживает методы извлечения как регулярных выражений, так и jsonpath. В отличие от Jmeter и Metersphere, когда Flow Horse извлекает возвращаемые значения, к выражению не требуется добавлять знак $:
② Возвращаемое опорное значение
В отличие от предыдущей ссылки на общедоступные параметры, нет необходимости добавлять символ $ в {{}} возвращаемого значения ссылки, просто введите имя переменной напрямую:
Информация об интерфейсе в управлении интерфейсами и управлении вариантами использования не синхронизирована.
Если к варианту использования добавляется интерфейс A, то:
Например, мы создали вариант использования, в котором был добавлен интерфейс A, а в этом варианте использования к интерфейсу A был добавлен параметр заголовка запроса. В настоящее время, если вы просматриваете интерфейс A в управлении интерфейсом, параметр заголовка запроса не будет. синхронизировано; во время управления интерфейсом Добавленные параметры заголовка запроса не будут синхронизированы с вариантом использования, что эквивалентно изоляции управления вариантами использования и управления интерфейсом. В это время обеим сторонам необходимо один раз изменить интерфейс A или изменить его в управлении интерфейсом, а затем снова добавить в вариант использования.
Честно говоря, я думаю, что этот дизайн очень сложен в использовании, потому что в реальном использовании будет много тест-кейсов, использующих один и тот же интерфейс. Например, если я добавляю или изменяю заголовок запроса определенного интерфейса только в тестовом примере A, то остальные тестовые сценарии B, C и D необходимо изменить один за другим.
Я сначала подумал, что это баг, но позже специально спросил у автора. Не то чтобы это нельзя изменить, но разобраться с этим будет очень хлопотно. Тем более, что на многих других платформах тоже. разработаны таким образом, и в будущем они будут постепенно оптимизированы.
В качестве примера приведен общий сценарий бизнес-процесса при тестировании.,Чтобы объединить ранее упомянутые общедоступные параметры, пользовательские функции, Связанные параметры и т. д.,Процесс заключается в следующем:Вход пользователя->Добавить продукт->Получить подробную информацию о продукте->Удалить продукт,От добавления до удаления,Это образует небольшой замкнутый цикл бизнес-процессов.,Это также не позволяет нам вручную удалять данные в базе данных позже.,Сейчас это также обычная практика при тестировании процессов интерфейса.
Полный тестовый пример бизнес-процесса обычно требует следующей работы:
Посмотрите на результаты выполнения каждого интерфейса отдельно и сделайте несколько простых интерпретаций, чтобы увидеть, соответствуют ли они исходному дизайну процесса:
① Интерфейс входа в систему
Вход в учетную запись успешен, и получено возвращаемое значение, которое возвращает идентификатор пользователя и информацию токена учетной записи.
② Добавить новые продукты
Если продукт добавлен успешно, возвращаемый узел d является идентификатором продукта.
интерфейсутверждениевозвращаемое значениеdУзел является целым числом,Утверждение имеет успех. Связанные параметры извлекут значение узла d.,В качестве входного параметра для последующего интерфейса.
③ Получить подробную информацию о продукте
Идентификатор продукта, извлеченный предыдущим интерфейсом, был передан в тело запроса, и были получены сведения о продукте.
Интерфейс утверждает, что узел aa узла d возвращаемого значения численно равен переменной идентификатора продукта, и утверждение успешно.
④ Удалить товар
Передаваемый здесь параметр интерфейса также использует идентификатор продукта, возвращаемый вновь добавленным продуктом, в качестве входного параметра. Если удаление прошло успешно, возвращаемое значение узла d равно 1.
Интерфейс утверждает, что номер узла d возвращаемого значения всегда равен 1, и утверждение успешно.
Я действительно мало изучал автоматизированное веб-тестирование. Я думаю, что его концепция дизайна должна быть похожа на тестирование интерфейсов, например:
Возьмите домашнюю страницу Baidu в качестве примера и добавьте некоторые элементы домашней страницы Baidu, такие как окно поиска и кнопку нажатия Baidu. Метод позиционирования поддерживает восемь методов позиционирования элементов Selenium.
Выражение напрямую заполняет значение атрибута элемента, например, позиционирование идентификатора. Значение атрибута идентификатора поля поиска — kw.
Если вы выбираете позиционирование имени, введите wd для выражения
список элементов Управляйте всеми элементами,Рекомендуется управлять разными страницами с помощью разных модулей.,Это также соответствует очень важному принципу проектирования в шаблоне проектирования PO для автоматизации пользовательского интерфейса: одна и та же страница,Управляйте только объектами элементов страницы на этой странице.
Добавить операцию в основном охватывает все возможные операции, которые могут использоваться в Автоматизированное тестирование пользовательского интерфейса, такие как: развернуть браузер、утверждение、IF...ELSE、Переключение кадров и т.д.
Вот небольшой момент, который вам нужен особенный внимание,Согласно моему первоначальному мнению при написании тестовых сценариев, следующее::Сначала объявите объект элемента>>Добавить действие элемента,Например, щелчок, двойной щелчок, слайд, длительное нажатие и т. д.,Поэтому я принял как должное, что приеду сюда первым.,После долгих поисков я так и не смог найти вход. Но на самом деле сначала нужно выбрать действие,Такие как ввод、щелкнуть>>Затем выберите предварительно введенные элементы, которыми хотите управлять.:
Конечно, после работы со страницей настроек и проверки кнопки позади элемента вы также можете создать новый объект элемента страницы:
Здесь мы используем поиск Baidu в качестве небольшого тестового сценария.,Чтобы подключить ранее упомянутое позиционирование элемента, Добавить элемент и т.д.,Ход сцены следующий:
Открыть браузер>>Открыть домашнюю страницу Baidu>>Развернуть окно браузера>>Ввод поля ввода“бродячая лошадь”>>Отправить поиск>>утверждение В заголовке страницы содержится“бродячая лошадь”>>ждать Подожди три секунды>>Закрыть браузер
план Функция испытаний — определить все варианты использования для выполнения теста и управлять ими, используя коллекцию тестов в качестве измерения. Кроме того, план испытания поддерживает запланированные задачи и периодическое выполнение. В то же время план испытания управляются в соответствии с версиями, а также поддерживают интеграцию в конвейер исследований и разработок.
Набор тестов можно рассматривать как совокупность нескольких тестовых случаев, каждый из которых независим друг от друга и не влияет друг на друга. Заполните соответствующую информацию о коллекции и обратите внимание, что версию необходимо заранее создать в центре конфигурации.
При добавлении тестовых случаев вы можете выбрать каждый ранее созданный тестовый пример. Тестовые сценарии API и тестовые сценарии пользовательского интерфейса могут быть выбраны одновременно и выполняться последовательно.
Созданная коллекция,Можно выполнить вручную,Вы также можете создать план испытания Выполняется регулярно или периодически
Вручную выполнять коллекции тестов и создавать отчеты о тестировании.
Введите имя, выберите версию, механизм выполнения и установите время выполнения.
Существует множество способов выбрать частоту выполнения, аналогично запланированным задачам Jenkins или crontab Linux:
план испытаниям необходимо выбрать тестовую коллекцию. Здесь будет выбрана ранее созданная коллекция, план. испытания могут содержать несколько наборов тестов
Я также столкнулся с некоторыми проблемами во время использования. Некоторые из них были решены мной, некоторые были решены с помощью руководства пользователя, а некоторые были решены путем консультации в группе обмена пользователями. Я думаю, что должен быть кто-то, кто сталкивался с такой же проблемой. или опыт использования как я. Ниже приведены некоторые предложения по оптимизации, которые я суммировал и представляю собой только мое личное мнение:
В настоящее время управление вариантами использования поддерживает повторное использование вариантов использования, то есть функцию копирования, но управление интерфейсами ее не поддерживает. Если в настоящее время существуют интерфейсы со схожим содержимым и их можно использовать, просто изменив адрес интерфейса и отдельные параметры, то это возможно. добавить эту функцию будет очень сложно.
Это также проблема, с которой я столкнулся во время использования. Например, я извлек возвращаемое значение user_id из интерфейса A, и мне нужно было передать его в заголовок запроса следующего интерфейса B. Извлеченное значение user_id имеет тип int, и запрос прошел. к интерфейсу B В заголовке требуется строковый тип:
① Если на извлеченное значение переменной ссылаются через {{user_id}}, при запросе интерфейса B будет сообщено об ошибке типа;
② Если на извлеченное значение переменной ссылаются через '{{user_id}}', при запросе интерфейса B будет сообщено об ошибке 502;
Текущее решение, данное автором, — обработать его в предварительном сценарии или написать собственную функцию преобразования.
Было бы здорово, если бы вы могли напрямую выбирать тип при редактировании вариантов использования — добавляя заголовки запросов, аналогично этому при редактировании управления интерфейсом:
В настоящее время только «домашняя страница» заголовков первого уровня поддерживает переход, а второй и третий уровни не поддерживают гиперссылки. Если текущая страница находится на очень глубоком уровне, то переход по заголовку, очевидно, будет более свободным и гибким, чем переход. браузер назад и вперед.
В настоящее время после обновления страницы боковая панель автоматически сжимается. Рекомендуется использовать аналогичные методы, такие как окна чата Metersphere и WeChat, и добавить кнопку закрепления для закрепления/открепления боковой панели.
В настоящее время вам нужно выбрать механизм выполнения один раз для каждого выполнения. Будет сложнее работать большее количество раз. Рекомендуется установить механизм выполнения по умолчанию или изменить порядок списка механизмов выполнения.
Нажатие на имя модуля приведет к запросу интерфейсов текущего модуля. Однако, когда вы находитесь в определенном модуле и переходите на новую страницу интерфейса, вам все равно необходимо выбрать модуль, к которому он принадлежит. Рекомендуется добавить модуль автоматического заполнения. классификационная функция.
Предположим, я редактирую всплывающее окно и отредактировал много контента. Если я случайно щелкну мышью по другому пустому месту, всплывающее окно автоматически исчезнет, и первоначально отредактированные поля также необходимо будет отредактировать заново. . Если вы нажмете на другое пустое место, появится всплывающее окно вторичного подтверждения, что позволит избежать многих ошибок.
Выше приведены краткие сведения о моем личном опыте использования. Как говорится: «Практика — единственный критерий проверки истины». Полезен ли инструмент/платформа или нет, зависит не от того, что говорят другие, а от того, попробуете ли вы его сами.
Как упоминалось в предыдущем обзоре проекта“Проект разделен на сторону платформы и движка. Он использует распределенное исполнение, а узел выполнения теста (т. е. движок) может быть зарегистрирован на любой машине в любой среде, что позволяет преодолеть ограничения ресурсов и сети. В то же время, запустив движок на локальном ПК, пользователям удобно быстро отлаживать тестовые случаи и просматривать процесс выполнения в режиме реального времени, обеспечивая то же удобство, что и при традиционном написании скриптов.”
Другими словами, механизм выполнения, а также внешние и внутренние службы независимы. Механизм выполнения можно развернуть в Linux, Windows или на персональном офисном компьютере для быстрой отладки.
Еще одна умная вещь: я не думаю, что существует так много процедур. В принципе, вы можете разобраться с правилами, как только начнете. Например, как упоминалось ранее: вариант использования содержит несколько интерфейсов. Соответственно, вы можете придумать планы. содержащие коллекции, коллекции, содержащие варианты использования, и варианты использования, содержащие объект интерфейса или элемента.
Поддерживает тестирование интерфейса, веб-тестирование, тестирование приложений, а также запланированные задачи, периодическое выполнение и одновременное выполнение.
Стек технологий платформы: интерфейсная часть VUE+ElementUI, серверная часть Java+SpringBoot, механизм тестирования Python, поддерживает пользовательские функции Python, относительно удобен для инженеров по тестированию, которые понимают кодирование Python, и будет более гибким в использовании.
Некоторые детали неполны или сложны в использовании. Например, предложения по оптимизации, упомянутые ранее, а также некоторые меры предосторожности я встречаю и суммирую во время использования.
Liuma позиционируется как платформа для тестирования с низким уровнем кода, призванная помочь инженерам по тестированию, которые не понимают код, свободно выполнять различные типы автоматизированных тестов. Думаю, я немного разбираюсь в коде и видел некоторые платформы с открытым исходным кодом, но мне потребовалось несколько дней, чтобы его использовать. Обратите внимание, что здесь речь идет о реальном тестовом бизнесе компании, а не о запросе интерфейса Baidu или открытии страницы Baidu для демонстрации. Чтобы иметь возможность перенести бизнес компании на платформу и успешно запустить ее, это означает, что так и будет. определенно потребуется определенное количество времени, чтобы изучить, изучить и решить проблемы, возникающие во время использования.
По сравнению с Metersphere, содержание руководства пользователя действительно недостаточно подробное. Многие из них представляют собой краткие описания без конкретных примеров использования, что приводит к меньшему количеству информации, к которой можно обратиться при возникновении некоторых проблем. Но это и понятно, ведь МС - коммерческая компания, имеющая достаточную рабочую силу для ведения и обновления документов. Насколько я знаю, Лиума поддерживается только автором.
Из-за ограничений места, личного времени и возможностей перечислены только ограниченные функции и подробности использования, упомянутые выше. Более интересные функции необходимо развернуть и испытать лично. Как обычно, я просто приведу краткий обзор рейтингов Люмы. Процесс рейтингования может быть немного субъективным. В конце концов, я тоже пользователь, но постараюсь быть объективным и публичным. Оценка по-прежнему основывается на размерах из предыдущего трейлера.
Специальное заявление: поскольку у всех разные проблемы, критерии оценки также могут быть предвзятыми.。
Размеры оценки | подробныйиллюстрировать | Рейтинг (чем выше звездный рейтинг, тем выше оценка) |
---|---|---|
Настройка среды | 1. Зависимая среда: больше, поддерживает контейнерное развертывание, традиционное развертывание относительно громоздко. 2. Сложность сборки (чем выше сложность, тем ниже звездный рейтинг): новичкам будет сложнее, поскольку используемые инструменты и сервисы относительно невелики. . много | ☆☆☆ |
Управление вариантами использования | 1. Поддерживать ли импорт вариантов использования: поддерживается импорт с нескольких платформ и форматов. 2. Порядок последовательности выполнения вариантов использования: поддерживается, можно перетаскивать. | ☆☆☆☆☆ |
Тестирование интерфейса | 1.один Тестирование Интерфейс: поддерживается, но я не видел запись импорта в формате CSV. Параметризация и поддержка на основе данных неизвестна. 2. Тестирование процесса интерфейса: поддерживается, несколько методов извлечения параметров, поддержка сбора тестов, план. испытаний,Может выполняться регулярно или периодически. 3. Автоматическое создание отчетов об испытаниях: поддержка.,краткий | ☆☆☆☆☆ |
Автоматизированное тестирование пользовательского интерфейса | 1. Приложение: Поддержка 2. Интернет: Поддержка | ☆☆☆☆☆ |
Тестирование производительности | Не поддерживается | никто |
Расширенные функции | 1. Поддерживать ли двойное открытие: Да 2. Поддерживать ли запланированные задачи: Поддержка 3. Поддерживать ли доступ к CICD: Поддержка 4. Поддерживать ли измерение результатов теста: Поддержка 5. Конфигурация разрешений пользователя: Поддержка, разные пользователи имеют разные разрешения 6. Управление тестированием :Не нарушения, неправильное позиционирование платформы 7. Отслеживание дефектов: Нет почему-то расположение платформы не такое | ☆☆☆☆☆ |
другой | 1. Документационная поддержка (руководство по развертыванию, руководство по эксплуатации): недостаточно подробно 2. Частота обновления кода и обслуживания: долгосрочное обслуживание 3. Активность сообщества: средняя 4. Простота использования: стоимость начала работы немного выше 5. Стабильность : Ошибок пока не обнаружено | ☆☆☆☆ |
Итоговое резюме: Liuma обладает мощными функциями, поддерживает несколько типов автоматизированного тестирования и может удовлетворить различные потребности в автоматизированном тестировании; платформа позиционируется как простая в использовании и может помочь инженерам по тестированию, не имеющим навыков программирования, быстро проводить автоматическое тестирование. Однако использование платформы. Этот процесс требует определенных затрат на обучение и исследование, а некоторые подробные функции все еще необходимо оптимизировать и улучшать. Как потоковая платформа, разработанная отдельным разработчиком, она действительно очень эффективна для достижения текущих результатов. Она заслуживает похвалы и обучения! Любой проект с открытым исходным кодом должен принимать критику, сомнения, мнения и предложения со стороны пользователей, но также нуждается в терпимости, поощрении и поддержке со стороны пользователей. При наличии определенной базы пользователей и совместной работе всех проект будет становиться все лучше и лучше и приносить больше пользы. !