Тестирование с помощью Python
Введение | |
Документация | |
Подготовка рабочей среды | |
Учебный пример | |
Реальный пример 1 | |
Фреймворки: Unittest, PyTest | |
Связанные статьи |
Введение
Про выполнение запросов к API с помощью Python вы можете прочитать
в статье
«Тестирование API с помощью Python»
В этой статье Вы узнаете о том как можно тестировать ПО с помощью
Python
.
Я начну с подготовки рабочей среды, затем перейдём к простым заданиям, которые
могут поручить начинающему тестировщику.
На следующем этапе рассмотрим библиотеку unittest и изучим немного теории.
Статья рассчитана на начинающих тестировщиков. Для лучшего понимания некоторых
частей желательно базовое знание
Python
Статья нуждается в переработке, так как этот питон устраивал меня в самом начале, но сейчас уже страшно смотреть на код.
Использование Python для тестирования ПО.
docs.python-requests
programcreek.com/python
Подготовка рабочей среды
Чтобы отправлять POST , GET и другие HTTP запросы с помощью python нужно в текст программы добавить строчку import requests. Request сперва нужно установить, для этого нужен pipenv, а для установки pipenv нужен pip
sudo apt install python-pip
Если нужно обновить pip
pip install --upgrade pip
Устанавливаем pipenv
pip install pipenv
Прежде чем устанавливать что-либо кроме pip убедитесь в том, что Вы знакомы с работой в виртуальном окружении .
Устанавливаем 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
import urllib2
import uuid
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_var = "AASuperDevice" + c
item_description_var = "Andrei" + c
uptime_var = i * 50
Unique_ID_var = "Unique_ID" + c
url = base_url+str(Unique_ID_var) + 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_var}
},
"clientInfo":
{
"applicationInfo":{"applicationVersion":"19.61.04.12"
},
"deviceInfo":
{"itemDescription": item_description_var,
"itemModelId":item_model_var,
"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 |