Тестирование с помощью Python

Содержание
Введение
Документация
Подготовка рабочей среды
Учебный пример
Реальный пример 1
Фреймворки: Unittest, PyTest
Связанные статьи

Введение

Про выполнение запросов к API с помощью Python вы можете прочитать в статье «Тестирование API с помощью Python»

В этой статье Вы узнаете о том как можно тестировать ПО с помощью Python .

Я начну с подготовки рабочей среды, затем перейдём к простым заданиям, которые могут поручить начинающему тестировщику.

На следующем этапе рассмотрим библиотеку unittest и изучим немного теории.

Статья рассчитана на начинающих тестировщиков. Для лучшего понимания некоторых частей желательно базовое знание Python

Использование Python для тестирования ПО.

docs.python-requests

programcreek.com/python

Подготовка рабочей среды

Отдельную статью про установку Python в Linux читайте здесь про установку Python в Windows - здесь

Если у вас Debian , Ubuntu или их производные:

sudo apt install -y python3
python3 --version

Допустим установился Python 3.12. В вашем случае версия может быть новее

Python 3.12.3

Прежде чем устанавливать что-либо с помощью pip убедитесь в том, что Вы знакомы с работой в виртуальном окружении .

Установите venv

sudo apt install -y python3.12-venv

Перейдите в директорию с вашим проектом и создайте виртуальное окружение

python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip

Обратите внимание на то, что после активации виртуального окружения нужно писать не python3 а просто python, так как мы теперь используем не системный Python а Pytho из venv

Чтобы отправлять POST , GET и другие HTTP запросы с помощью Python нужно в текст программы добавить строчку

import requests

requests сперва нужно установить

python -m pip install requests

В качестве альтернативы можно использовать pipenv, а для установки pipenv нужен pip

sudo apt install python-pip

Если нужно обновить pip

pip install --upgrade pip

Устанавливаем pipenv

pip install pipenv

Устанавливаем requests

pipenv install requests

Теперь наше python окружение готово к тестированию интерфейсов .

На вашем компьютере может быть установлено несколько версий Python. Чтобы узнать какую версию используют ваши программы перейдтие по ссылке

Примеры программ

Создаем файл post.py и пишем следующий код

import requests r = requests.post('http://url.html', data = {'site':'andreyolegovich.ru'})

Запускаем скрипт

python post.py

Изображение баннера

Реальный пример 1

Задача

Есть сервер, на котором отображаются подключённые устройства. Назовем его Менеджер_Устройств

Задача - заселить сервер новыми устройствами, количество - 1000 устройств.

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

Познакомившись с API этого сервера можно узнать, что запрос, которым добавляется новое устройство, выглядит следующим образом:

Метод: PUT

Endpoint: http://devm.com:4880/manager/rest/control/devices/Unique_ID/apps/Client_Name/status/$timestamp=Some_value

Также из документации к API известно, что в этом запросе передаётся JSON

payload = { "status": { "clientStatusData": { "message": "Everything is OK", "status": "OK" }, "itemsStatuses": [{ "message": "URN.SU Server simulated", "status": "ENABLED", "name": "Connection", "Number": "0" }, { "message": "TopBicycle.RU Power: 250[mW], Session: 1", "status": "OK", "name": "AndreyOlegovih.ru", "Number": "1" }], "runningStatus": { "restarted": "true", "uptimeMSec": 10000 } }, "clientInfo": { "applicationInfo": { "applicationVersion": "19.61.04.12" }, "deviceInfo": { "itemDescription": "Good Device Number 1", "itemModelId": "Model ID 1", "statusUpdateIntervalMSec": "30000" } } }

По заданию: itemModelId, itemDescription и uptime нужно делать уникальными.

Таким образом уникальных величины должно быть четыре.

Можно, конечно, посылать запросы из SOAP UI по одному, вручную изменяя Unique_ID, но это будет очень долго.

Изображение баннера

Решение. Часть 1 - Комментарии

Пишем скрипт на Python, используя знания, полученные в начале этой статьи и в статье Python. Сначала импортируем нужные библиотеки.

Затем делим URL на три части: первая и третья остаются неизменными, а между ними мы будем вставлять переменую.

После этого запускаем цикл от 1 до 1000. Значения переменной i мы будем использовать для создания уникальных ID. С этой целью создадим три переменные: для наглядности они все будут заканчиваться на _var а затем я выделю их зелёным цветом.

И, наконец, создаём переменную json_string, в которую запишем нужный нам JSON с небольшими изменениями. Вместо статичных itemModelId, itemDescription, uptime вставляем переменные заданные на предыдущем шаге.

Внимательно следим за отступами, т.к. отступ обозначает тело цикла.

Решение. Часть 2 - Код

import requests import json headers = {"Content-Type": "application/json"} base_url = "http://device_manager.com:4880/manager/rest/control/devices/" end_url = "/apps/Client_Name/status/$timestamp=1529086249" for i in range(1, 1000): c = str(i) item_model = "AASuperDevice" + c item_description = "Andrei" + c uptime = i * 50 unique_id = "Unique_ID" + c url = base_url + unique_id + end_url json_string = { "status": { "clientStatusData": {"message": "Everything is OK", "status": "OK"}, "itemsStatuses": [ { "message": "URN.SU Server simulated", "status": "ENABLED", "name": "Connection", "Number": "0", }, { "message": "TopBicycle.RU Power: 250[mW], Session: 1", "status": "OK", "name": "AndreyOlegovih.ru", "Number": "1", }, ], "runningStatus": {"restarted": "true", "uptimeMSec": uptime}, }, "clientInfo": { "applicationInfo": {"applicationVersion": "19.61.04.12"}, "deviceInfo": { "itemDescription": item_description, "itemModelId": item_model, "statusUpdateIntervalMSec": "30000", }, }, } data_json = json.dumps(json_string) r = requests.put(url, data=data_json, headers=headers)

Debugging

Если что-то пошло не так можно попробовать простейший способ отследить в какой момент появляется ошибка - добавить в конец кода

print("i =", i) print("i string=", c) print(item_model_var) print(u) print(uptime_var) print(r.text)

Но имейте в виду, что в серьёзном софте лучше делать отладку дебаггером.

Фреймворки
unittest
Теория unittest
pytest
Похожие статьи
Тестирование ПО
Разработка ПО
DevOps
IT
Кибербезопасность
RFID
Web
Список открытых API

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: