我在从https://github.com/tomakehurst/wiremock/tree/master/sample-war
实现此项目的servlet上运行Wiremock我可以将它部署到Tomcat中并且可以正常工作。
现在,我想在此服务器上启用Response Templating,以便我可以使用车把模板调整响应正文。我看到了一些与Junit规则相关的解决方案,directly setting this up from the code以及独立服务器,但找不到解决方案来启用来自servlet的响应模板。
如何从wiremock servlet启用它?
答案 0 :(得分:1)
我通过扩展和覆盖 WireMockWebContextListener
来将 definitionTransformer 添加到 ServletListener这将尽可能保留配置库存,并使用Spring功能自动注册新的 Transformers ,而无需进行其他任何配置更改。使用最新的 wiremock 工件 2.26.3
下面是完整的设置配置和实施。
Stopwatch
答案 1 :(得分:0)
如果您想在docker中使用Wiremock,我这里有一个示例docker-compose.yaml,其中包含详细的日志记录和模板。
使用docker-compose up在Docker容器中启动Wiremock。
docker-compose.yaml示例:
version: "3"
services:
wiremock:
image: rodolpheche/wiremock:latest
ports:
- "8181:8080"
volumes:
- ./__files/:/./home/wiremock/__files/
- ./mappings/:/./home/wiremock/mappings/
command:
- -verbose
- -global-response-templating
docker-compose up(在保存yaml的目录中,并接受文件系统访问请求) 那么你应该准备好了。
Wiremock网址为http://localhost:8181
之后,使用真实数据(http://localhost:8181/__admin/recorder)进行记录
将正文拆分为单独的文件,并将其放置在__files文件夹中。 指向请求文件中的“ bodyFileName”文件(映射)
我在这里有一些建议。 mobileera_wiremock_kb
答案 2 :(得分:0)
好吧,终于找到了答案, 您需要创建扩展ServletContextListener的自定义列表器,然后以编程方式设置响应模板。
public class CustomListener implements ServletContextListener {
private static final String APP_CONTEXT_KEY = "WireMockApp";
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
boolean verboseLoggingEnabled = Boolean.parseBoolean(
firstNonNull(context.getInitParameter("verboseLoggingEnabled"), "true"));
WarConfiguration warConfiguration = new WarConfiguration(context);
warConfiguration.extensionsOfType(MockTokenTemplate.class);
final WireMockConfiguration wireMockConfiguration =WireMockConfiguration.wireMockConfig();
wireMockConfiguration.extensions("com.test.MockTokenTemplate","com.test.MockTokenInqTemplate");
//wireMockConfiguration.jettySettings();
wireMockConfiguration.containerThreads(Integer.valueOf(200));
wireMockConfiguration.disableRequestJournal()
.containerThreads(Integer.valueOf(200))
.jettyAcceptors(Integer.valueOf(-1))
.jettyAcceptQueueSize(Integer.valueOf(1000))
.jettyHeaderBufferSize(Integer.valueOf(8192));
String fileSourceRoot = context.getInitParameter("WireMockFileSourceRoot");
final FileSource fileSource = new ServletContextFileSource(context, fileSourceRoot);
wireMockConfiguration.fileSource(fileSource);
//wireMockConfiguration.usingFilesUnderDirectory("/WEB-INF/wiremock/");
//wireMockConfiguration =(WireMockConfiguration) warConfiguration;
WireMockApp wireMockApp = new WireMockApp(wireMockConfiguration, new NotImplementedContainer());
context.setAttribute(APP_CONTEXT_KEY, wireMockApp);
context.setAttribute(StubRequestHandler.class.getName(), wireMockApp.buildStubRequestHandler());
context.setAttribute(AdminRequestHandler.class.getName(), wireMockApp.buildAdminRequestHandler());
context.setAttribute(Notifier.KEY, new Slf4jNotifier(verboseLoggingEnabled));
}
/**
* @param context Servlet context for parameter reading
* @return Maximum number of entries or absent
*/
private Optional<Integer> readMaxRequestJournalEntries(ServletContext context) {
String str = context.getInitParameter("maxRequestJournalEntries");
if(str == null) {
return Optional.absent();
}
return Optional.of(Integer.parseInt(str));
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
让我知道在创建自定义响应模板时是否需要帮助。