我正在尝试使用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."
如果有任何导入丢失或代码中有任何错误,有人可以建议我。
提前致谢。
此致 哈
答案 0 :(得分:0)
XMLHttpRequest是在浏览器中实现的,Rhino或Nashorn等JavaScript引擎没有此类。
出于性能原因is recommended to use 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 Request采样器实现相同功能,您可以使用Content-Type控制HTTP Header Manager标头