Ответ 1
Вы можете попробовать http://www.hurl.it, который легко тестировать API.
Я тестирую Windows, пытаясь имитировать запросы POST (с различными переменными формы) для тестирования нагрузки. Я пробовал все виды программного обеспечения для тестирования нагрузки, но не смог заставить его работать.
Для запросов GET я знаю, что могу просто поместить параметры за URL
http://www.example.com?id=yyy&t=zzz
Но как я могу имитировать запрос POST?
У меня есть хром REST Client, но я не знаю, что помещать в заголовки и данные.
Вот что я пробовал до сих пор:
class Program
{
static void Main(string[] args)
{
string viewstateid = "/wEPDwUKLTY3NjEyMzE4NWRkK4DxZpjTmZg/RGCS2s13vkEWmwWiEE6v+XrYoWVuxeg=";
string eventid ="/wEdAAoSjOGPZYAAeKGjkZOhQ+aKHfOfr91+YI2XVhP1c/pGR96FYSfo5JULYVvfQ61/Uw4pNGL67qcLo0vAZTfi8zd7jfuWZzOhk6V/gFA/hhJU2fx7PQKw+iST15SoB1LqJ4UpaL7786dp6laCBt9ubQNrfzeO+rrTK8MaO2KNxeFaDhrQ0hxxv9lBZnM1SHtoODXsNUYlOeO/kawcn9fX0BpWN7Brh7U3BIQTZwMNkOzIy+rv+Sj8XkEEA9HaBwlaEjg=";
string username = "user1";
string password = "ttee";
string loginbutton = "Log In";
string URLAuth = "http://localhost/login.aspx";
string postString = string.Format("VIEWSTATE={0}&EVENTVALIDATION={1}&LoginUser_UserName={2}&LoginUser_Password={3}&LoginUser_LoginButton={4}",viewstateid,eventid, username, password,realm,otp,loginbutton);
const string contentType = "application/x-www-form-urlencoded";
System.Net.ServicePointManager.Expect100Continue = false;
CookieContainer cookies = new CookieContainer();
HttpWebRequest webRequest = WebRequest.Create(URLAuth) as HttpWebRequest;
webRequest.Method = "POST";
webRequest.ContentType = contentType;
webRequest.CookieContainer = cookies;
webRequest.ContentLength = postString.Length;
webRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1";
webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
webRequest.Referer = "http://localhost/login.aspx";
StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream());
requestWriter.Write(postString);
requestWriter.Close();
StreamReader responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
string responseData = responseReader.ReadToEnd();
Console.WriteLine(responseData);
responseReader.Close();
webRequest.GetResponse().Close();
}
}
Вы можете попробовать http://www.hurl.it, который легко тестировать API.
Было бы полезно, если бы вы предоставили дополнительную информацию - например, какую ОС вы используете, чего хотите достичь и т.д. Но, вообще говоря, cURL - очень мощный инструмент командной строки, который я часто использую (в linux) для имитации запросов HTML:
Например:
curl --data "post1=value1&post2=value2&etc=valetc" http://host/resource
ИЛИ, для API RESTful:
curl -X POST -d @file http://host/resource
Здесь вы можете посмотреть дополнительную информацию- > http://curl.haxx.se/
редактирует:
OK. Итак, в основном вы хотите провести тест на свой REST-сервер? Тогда cURL действительно не поможет, если вы не захотите написать свою собственную программу тестирования нагрузки, даже тогда сокеты станут для вас способом. Я предлагаю вам проверить Gatling. В документации Gatling объясняется, как настроить инструмент, и оттуда вы можете запускать все виды запросов GET, POST, PUT и DELETE.
К сожалению, за исключением написания вашей собственной программы, т.е. создания целого ряда потоков и наводнения вашего сервера REST с помощью разных типов запросов - вам действительно нужно полагаться на инструментарий для тестирования стресс-нагрузок. Просто использование клиента REST для отправки запросов не будет уделять много внимания вашему серверу.
Другие EDIT
Итак, чтобы смоделировать почтовый запрос в сокете, вам в основном нужно построить начальное соединение сокета с сервером. Я не парень на С#, поэтому я не могу точно сказать, как это сделать; Я уверен, что в Интернете есть 1001 учебник для сокетов С#. С большинством API RESTful вам обычно нужно предоставить URI, чтобы сообщить серверу, что делать. Например, скажем, ваш API управляет библиотекой, и вы используете запрос POST, чтобы сообщить серверу обновить информацию о книге с идентификатором "34". Ваш URI может быть
http://localhost/library/book/34
Следовательно, вы должны открыть подключение к localhost на порту 80 (или 8080 или любой другой порт, на котором работает ваш сервер) и передать заголовок HTML-запроса. Следуя приведенному выше примеру библиотеки, ваш заголовок запроса может выглядеть следующим образом:
POST library/book/34 HTTP/1.0\r\n
X-Requested-With: XMLHttpRequest\r\n
Content-Type: text/html\r\n
Referer: localhost\r\n
Content-length: 36\r\n\r\n
title=Learning+REST&author=Some+Name
Отсюда сервер должен отстреливать ответный заголовок, за которым следует все, что API запрограммировано для указания клиенту - обычно что-то сказать, что POST был успешным или неудачным. Чтобы подчеркнуть ваш API, вы должны делать это снова и снова, создавая процесс с резьбой.
Кроме того, если вы отправляете данные JSON, вам необходимо соответствующим образом изменить заголовок и содержимое. Честно говоря, если вы хотите сделать это быстро и чисто, я бы предложил использовать python (или perl), который имеет несколько библиотек для создания запросов POST, PUT, GET и DELETE, а также данных POSTing и PUTing JSON. В противном случае вы могли бы сделать больше программ, чем стресс-тестирование. Надеюсь, это поможет!
Postman - лучшее приложение для тестирования ваших API!
Вы можете импортировать или экспортировать свои маршруты и позволить ему помнить все ваши запросы тела!:)
https://chrome.google.com/webstore/detail/postman-rest-client-packa/fhbjgbiflinjbdggehcddcbncdddomop
Простым способом является использование curl
из командной строки, например:
DATA="foo=bar&baz=qux"
curl --data "$DATA" --request POST --header "Content-Type:application/x-www-form-urlencoded" http://example.com/api/callback | python -m json.tool
или вот пример отправки необработанного запроса POST с использованием оболочки Bash (запрос JSON):
exec 3<> /dev/tcp/example.com/80
DATA='{"email": "[email protected]"}'
LEN=$(printf "$DATA" | wc -c)
cat >&3 << EOF
POST /api/retrieveInfo HTTP/1.1
Host: example.com
User-Agent: Bash
Accept: */*
Content-Type:application/json
Content-Length: $LEN
Connection: close
$DATA
EOF
# Read response.
while read line <&3; do
echo $line
done
Если вы используете Chrome, используйте Postman.
https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en
Если вы используете Firefox, используйте RestEasy.
Это должно помочь, если вам нужен публично открытый веб-сайт, но вы находитесь на компьютере разработчика. Также ответить (еще не могу прокомментировать): "Как отправить сообщение на внутренний только запущенный сервер разработки с этим? - stryba"
NGROK создает безопасный общедоступный URL-адрес на локальном веб-сервере на вашей машине разработки (постоянные URL-адреса доступны за плату, временные бесплатно).
1) Запустите ngrok.exe, чтобы открыть командную строку (на рабочем столе)
2) Введите ngrok.exe http 80 для запуска туннеля,
3) проверьте, просматривая отображаемый веб-адрес, который будет пересылать и отображать локальную страницу по умолчанию 80 на вашем компьютере.
Затем используйте некоторые из рекомендованных выше инструментов для POST на ваш сайт ngrok ('https://xxxxxx.ngrok.io'), чтобы проверить ваш локальный код.