невозможно отправить запрос HTTP Post в Jmeter с использованием Javascript в качестве выбранного языка в сэмплере BSF - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь вызвать HTTP-пост-запрос с использованием BSF Sampler, и выбранный язык - JavaScript. И я использую Jmter 2.13 в качестве инструмента для отправки моего запроса. Ниже приведен фрагмент кода, который я использую.

    var http = new XMLHttpRequest();
    var url = "https://localhost/oauth/token";
    var params = "client_id=api_client&client_secret=sade1!&response_type=token&grant_type=client_credentials";
    http.open("POST", url, true);


    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    http.onreadystatechange = function() {
        if(http.status == 200) {
            alert(http.responseText);
        }
    }

Но я получил ответное сообщение об ошибке:

"org.apache.bsf.BSFException: JavaScript Error: Internal Error: org.mozilla.javascript.EcmaError: ReferenceError: "XMLHttpRequest" is not defined."

Может кто-нибудь предложить мне, если какой-либо импорт отсутствует или если что-то не так в коде.

Заранее спасибо.

С уважением, Хари

1 Ответ

0 голосов
/ 16 мая 2018

XMLHttpRequest - это нечто, реализованное в браузере , механизмы JavaScript, такие как Rhino или Nashorn , не имеют этого класса.

Из соображений производительности рекомендуется использовать JSR223 Sampler и Groovy язык, эквивалентный код будет выглядеть примерно так:

import org.apache.http.NameValuePair
import org.apache.http.client.entity.UrlEncodedFormEntity
import org.apache.http.client.methods.HttpPost
import org.apache.http.impl.client.HttpClientBuilder
import org.apache.http.message.BasicNameValuePair
import org.apache.http.util.EntityUtils

def client = HttpClientBuilder.create().build()
def post = new HttpPost('https://localhost/oauth/token')

def params = new ArrayList<NameValuePair>()
params.add(new BasicNameValuePair('client_id', 'api_client'))
params.add(new BasicNameValuePair('client_secret', 'sade1'))
params.add(new BasicNameValuePair('response_type','token'))
params.add(new BasicNameValuePair('grant_type','client_credentials'))
post.setEntity(new UrlEncodedFormEntity(params))

def response = client.execute(post)

if (response.getStatusLine().statusCode == 200) {
    log.info(EntityUtils.toString(response.getEntity()))
}
else {
    log.info('Error: ' + response.getStatusLine().getReasonPhrase())
}

Также помните, что вы можете добиться того же, используя обычный HTTP-запрос сэмплер, вы можете контролировать Content-Type заголовок, используя HTTP Header Manager

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...