我试图将由Selenium(java绑定)驱动的UI测试与集成层隔离开来。我想截获通过浏览器进行的xhr调用并发回模拟响应。
我尝试配置代理(使用browsermob),可以看到请求通过它。但现在我不知道如何通过拦截xhr调用来返回模拟响应。
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
proxy.addRequestFilter((request, content, messageInfo) -> {
if (messageInfo.getOriginalUrl().contains("v1/listings/closing.json")) {
String messageContents = content.getTextContents();
System.out.println("messageContents:: " + messageContents);
}
return null;
});
try {
String hostIp = Inet4Address.getLocalHost().getHostAddress();
seleniumProxy.setHttpProxy(hostIp + ":" + proxy.getPort());
seleniumProxy.setSslProxy(hostIp + ":" + proxy.getPort());
} catch (UnknownHostException e) {
e.printStackTrace();
}
DesiredCapabilities seleniumCapabilities = new DesiredCapabilities();
seleniumCapabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
ChromeOptions options = new ChromeOptions();
options.merge(seleniumCapabilities);
webDriver = new ChromeDriver(options);
在针对真实/实时网站而非本地主机进行测试时,我希望得到对UI的模拟响应。
使用模拟响应短路请求,并使用Selenium不让其通过。
String stubResponse = { mocked json response body };
proxy.addRequestFilter(new RequestFilter() {
@Override
public HttpResponse filterRequest(HttpRequest request, HttpMessageContents contents, HttpMessageInfo messageInfo) {
if (request.getUri().contains("/v1/listings/closing.json")) {
//Use DefaultFullHttpResponse for posting the json body
HttpResponse httpResponse = new DefaultFullHttpResponse(request.getProtocolVersion(), HttpResponseStatus.OK);
//Close the connection so it doesn't pass through
httpResponse.headers().add("CONNECTION", "Close");
//Specify the content-type and charset
httpResponse.headers().add("Content-Type", "application/json; charset=UTF-8");
//other headers if necessary
httpResponse.headers().add("Access-Control-Allow-Headers", "");
httpResponse.headers().add("Access-Control-Allow-Origin", "*");
httpResponse.headers().add("Access-Control-Expose-Headers","");
//replace the body
HttpObjectUtil.replaceTextHttpEntityBody((FullHttpMessage) httpResponse, stubResponse);
return httpResponse;
}
return null;
}
});
使用代理。addResponseFilter((响应、内容、消息信息)方法
例子:
proxy.addResponseFilter((response, contents, messageInfo) -> {
if (/*...some filtering criteria...*/) {
contents.setTextContents("This message body will appear in all responses!");
}
});
参考博客和Github,您将获得模拟响应的示例。
您可以考虑Cypress将UI测试与集成测试隔离开来。使用Cypress-Fixture模拟响应很容易
包括StackTrace。我尝试用这个when(requestBodySpec.body(any())替换body mock。然后返回(requestHeadersSpec);也但是没有用。我认为问题在于模仿单声道。只是反对。不确定可能是什么问题。如果有不同的方法来模拟单声道。请分开反对并通过,请让我知道。
我提到了这个答案,我该如何模拟java。时间本地日期。now()关于如何模拟我的LocalDateTime。now()调用。我基本上遵循了所有步骤,但只使用了LocalDateTime而不是LocalDate。 我的代码的功能是这样的,它应该只在一小时的第15或45分钟运行。因此,我将LOCAL\u DATE\u TIME静态变量设置为: 然后在我的@Before测试方法中,我有以下内容: 这是2
我想在我的发票类中存根methot generateFerenceNumber():
问题内容: 使用Mockito间谍的用例是什么? 在我看来,每个间谍用例都可以使用callRealMethod进行模拟处理。 我可以看到的一个区别是,如果您希望大多数方法调用都是真实的,则可以节省一些代码行以使用模拟与间谍。是这样还是我错过了更大的前景? 问题答案: 答案在文档中: 真正的部分模拟(自1.8.0开始) 最后,在邮件列表上进行了许多内部辩论和讨论之后,Mockito添加了部分模拟支持
我使用appium和java自动化Android应用程序。作为一个初学者,我想知道TestNG和网格之间的区别。冲浪,但不能得到答案。
注: 在testng xml中,如果我将parallel=更改为类或方法,那么它可以很好地运行测试,但它不是并行地一个接一个地运行测试。 如果我保持parallel=“tests”,那么它会并行运行,但它会在同一个VM中打开同一个浏览器三次,这是不正确的。 我的设置: 我设置了11个虚拟机,每个盒子上的每个浏览器都初始化了Selenium网格节点。我已经创建了testng xml,以便在每个框上运