↑↑↑

↓↓↓
Флаг России Флаг Великобритании
🏠 | 💻 PC | 🔨Тестирование ПО |

Использование 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

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

pipenv install requests

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

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

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

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

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

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

python post.py

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

Задача

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

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

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

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

PUT to http://device_manager.com:4880 / manager / rest /control / devices / Unique_ID / apps / Client_Name / status /$timestamp=Some_value

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

{"status":
    {"clientStatusData":
        {"message":"Everything is OK",
       "status":"OK"
       },
      "itemsStatuses":
      [{
      "message":"URN.SU Server simulated",
      "status":"ENABLED",
      "name":"Connection",
      "Number":"0"
      },
      {
      "message":"ASKQA.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":"ASKQA.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)

Clumsy 0.2 Soap UI
Тестирование с помощью Python 🖄Postman
Nmap Webservices
Тестирование API Testlink
Pivotal Tracker
Вы нашли то, что искали на моём сайте?

ДА НЕТ

Или оцените по десятибальной шкале

10  9  8  7  6  5  4  3  2  1  0

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

Например: у меня есть статья про аэропорт Хельсинки и про аэропорт Риги но в выдаче по Риге всё равно статья про Хельсинки.

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

Занятно наблюдать в вебвизоре, как люди копируют текст, например вежливого отказа в трудоустройстве на английском но игнорируют кнопку ДА.

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