无法使用Javascript作为BSF采样器中的选定语言在Jmeter中发送HTTP Post请求

时间:2018-05-16 06:36:20

标签: javascript jmeter

我正在尝试使用BSF Sampler调用HTTP post请求,并且所选语言是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 :(得分:0)

XMLHttpRequest是在浏览器中实现的,RhinoNashorn等JavaScript引擎没有此类。

出于性能原因is recommended to use JSR223 SamplerGroovy语言,等效代码如下:

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 Request采样器实现相同功能,您可以使用Content-Type控制HTTP Header Manager标头