我正在使用 JAVA DSL 通过 Wiremock 录制应用程序,我们可以选择自定义映射文件名吗?而不是获取从wiremock生成的文件名..
示例:searchpanel_arrivalairport_th-72f9b8b7-076f-4102-b6a8-aa38710fde1b.json (使用 java 生成形式的wiremock)我期望上面的文件名具有我想要的命名约定,例如
seacrpanel_airport_LGW.json
我正在使用 JAVA DSL 通过 Wiremock 录制应用程序,我们可以选择自定义映射文件名吗?而不是获取从wiremock生成的文件名..
示例:searchpanel_arrivalairport_th-72f9b8b7-076f-4102-b6a8-aa38710fde1b.json (使用 java 生成形式的wiremock)我期望上面的文件名具有我想要的命名约定,例如
seacrpanel_airport_LGW.json
可以通过自定义 StubMappingJsonRecorder 来添加自定义文件名。
我添加了 CustomStubMappingJsonRecorder 并覆盖 writeToMappingAndBodyFile 方法。
if(fileName!=null && !fileName.equals("")){
mappingFileName=fileName+"-mapping.json";
bodyFileName=fileName+"-body.json";
}else {
mappingFileName = UniqueFilenameGenerator.generate(request.getUrl(),
"mapping", filed);
bodyFileName = UniqueFilenameGenerator.generate(request.getUrl(), "body",
fileId, ContentTypes.determineFileExtension(request.getUrl(),
response.getHeaders().getContentTypeHeader(), body));
}
目前没有简单的方法可以做到这一点。然而这是可能的。正如@santhiya-ps 所说,您需要编写自己的RequestListener实现,可能使用StubMappingJsonRecorder作为模板。
您不能扩展它并覆盖它,writeToMappingAndBodyFile
因为该方法是私有的,但这是您可能想要更改的方法。
import com.github.tomakehurst.wiremock.common.*;
import com.github.tomakehurst.wiremock.core.*;
import com.github.tomakehurst.wiremock.http.*;
import java.util.List;
import static com.github.tomakehurst.wiremock.core.WireMockApp.*;
class NameTemplateStubMappingJsonRecorder implements RequestListener {
private final FileSource mappingsFileSource;
private final FileSource filesFileSource;
private final Admin admin;
private final List<CaseInsensitiveKey> headersToMatch;
private final IdGenerator idGenerator = new VeryShortIdGenerator();
public NameTemplateStubMappingJsonRecorder(Admin admin) {
this.mappingsFileSource = admin.getOptions().filesRoot().child(MAPPINGS_ROOT);
this.filesFileSource = admin.getOptions().filesRoot().child(FILES_ROOT);
this.admin = admin;
this.headersToMatch = admin.getOptions().matchingHeaders();
}
@Override
public void requestReceived(Request request, Response response) {
// TODO copy StubMappingJsonRecorder changing as required...
}
}
然后,您可以这样注册RequestListener
:
WireMockServer wireMockServer = new WireMockServer();
wireMockServer.addMockServiceRequestListener(
new NameTemplateStubMappingJsonRecorder(wireMockServer)
);
wireMockServer.start();
只要您仍然将映射文件存储在预期的目录中(存储在FileSource mappingsFileSource
上面,这将是${rootDir}/mappings
,按照配置 - 文件位置rootDir
中的说明进行配置),它们应该被成功加载,因为该目录中具有扩展名的所有文件都被加载为映射.json
如果采用生成这些名称的策略会容易得多StubMappingJsonRecorder
- 可能值得在 WireMock 存储库上创建一个问题,以寻求一种更简单的方法来做到这一点。不过,我建议在提出 PR 之前就基本设计达成协议。