提交 fcb8eeed 编写于 作者: C chenjianxing

feat(接口测试): 支持Beanshell脚本

上级 163fae2e
......@@ -140,11 +140,6 @@
</dependency>
<!-- jmeter -->
<!-- <dependency>-->
<!-- <groupId>org.apache.jmeter</groupId>-->
<!-- <artifactId>ApacheJMeter_core</artifactId>-->
<!-- <version>${jmeter.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.apache.jmeter</groupId>
......
package io.metersphere.api.dto.scenario.processor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class BeanShellPostProcessor extends BeanShellProcessor {
}
package io.metersphere.api.dto.scenario.processor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class BeanShellPreProcessor extends BeanShellProcessor {
}
package io.metersphere.api.dto.scenario.processor;
import lombok.Data;
@Data
public class BeanShellProcessor {
private String script;
}
......@@ -6,6 +6,8 @@ import io.metersphere.api.dto.scenario.Body;
import io.metersphere.api.dto.scenario.KeyValue;
import io.metersphere.api.dto.scenario.assertions.Assertions;
import io.metersphere.api.dto.scenario.extract.Extract;
import io.metersphere.api.dto.scenario.processor.BeanShellPostProcessor;
import io.metersphere.api.dto.scenario.processor.BeanShellPreProcessor;
import lombok.Data;
import java.util.List;
......@@ -35,4 +37,8 @@ public class HttpRequest implements Request {
private Assertions assertions;
@JSONField(ordinal = 10)
private Extract extract;
@JSONField(ordinal = 11)
private BeanShellPreProcessor beanShellPreProcessor;
@JSONField(ordinal = 12)
private BeanShellPostProcessor beanShellPostProcessor;
}
Subproject commit 8de0d4e47675bd1a5a8ea4c99e1a2b76e53ebc08
Subproject commit b86032cbbda9a9e6028308aa95a887cff2192f1c
......@@ -23,9 +23,6 @@
},
beanShellProcessor: {
type: Object,
default() {
return {}
}
}
},
}
......
......@@ -405,12 +405,40 @@ export class ResponseHeadersAssertion extends ResponseAssertion {
}
}
export class BeanShellProcessor extends DefaultTestElement {
constructor(tag, guiclass, testclass, testname, processor) {
super(tag, guiclass, testclass, testname);
this.processor = processor || {};
this.boolProp('resetInterpreter', false);
this.stringProp('parameters');
this.stringProp('filename');
this.stringProp('script', processor.script);
}
}
export class BeanShellPreProcessor extends BeanShellProcessor {
constructor(testName, processor) {
super('BeanShellPreProcessor', 'TestBeanGUI', 'BeanShellPreProcessor', testName, processor)
}
}
export class BeanShellPostProcessor extends BeanShellProcessor {
constructor(testName, script) {
let processor = {
script: script,
};
super('BeanShellPostProcessor', 'TestBeanGUI', 'BeanShellPostProcessor', testName, processor)
}
}
export class HeaderManager extends DefaultTestElement {
constructor(testName, headers) {
super('HeaderManager', 'HeaderPanel', 'HeaderManager', testName);
this.headers = headers || [];
let collectionProp = this.collectionProp('HeaderManager.headers');
this.headers.forEach(header => {
let elementProp = collectionProp.elementProp('', 'Header');
elementProp.stringProp('Header.name', header.name);
......
import {
Arguments,
Arguments, BeanShellPreProcessor,
CookieManager,
DubboSample,
DurationAssertion,
......@@ -302,6 +302,8 @@ export class HttpRequest extends Request {
this.environment = undefined;
this.useEnvironment = undefined;
this.debugReport = undefined;
this.beanShellPreProcessor = undefined;
this.beanShellPostProcessor = undefined;
this.set(options);
this.sets({parameters: KeyValue, headers: KeyValue}, options);
......@@ -313,6 +315,8 @@ export class HttpRequest extends Request {
options.body = new Body(options.body);
options.assertions = new Assertions(options.assertions);
options.extract = new Extract(options.extract);
options.beanShellPreProcessor = new BeanShellProcessor(options.beanShellPreProcessor);
options.beanShellPostProcessor = new BeanShellProcessor(options.beanShellPostProcessor);
return options;
}
......@@ -352,6 +356,7 @@ export class HttpRequest extends Request {
showMethod() {
return this.method.toUpperCase();
}
}
export class DubboRequest extends Request {
......@@ -564,6 +569,14 @@ export class AssertionType extends BaseConfig {
}
}
export class BeanShellProcessor extends BaseConfig {
constructor(options) {
super();
this.script = undefined;
this.set(options);
}
}
export class Text extends AssertionType {
constructor(options) {
super(ASSERTION_TYPE.TEXT);
......@@ -818,6 +831,7 @@ class JMXGenerator {
} else {
this.addRequestBody(sampler, request);
}
this.addBeanShellProcessor(sampler, request);
}
this.addRequestAssertion(sampler, request);
......@@ -886,6 +900,16 @@ class JMXGenerator {
}
}
addBeanShellProcessor(httpSamplerProxy, request) {
let name = request.name;
if (request.beanShellPreProcessor && request.beanShellPreProcessor.script) {
httpSamplerProxy.put(new BeanShellPreProcessor(name, request.beanShellPreProcessor));
}
if (request.beanShellPostProcessor && request.beanShellPostProcessor.script) {
httpSamplerProxy.put(new BeanShellPreProcessor(name, request.beanShellPostProcessor));
}
}
addBodyFormat(request) {
let bodyFormat = request.body.format;
if (bodyFormat) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册