再度尝试
接着就想尝试不通过https接口,通过直接访问web页的形式,获取cookie,首先当然想到了很熟悉的selenium,可是selenium需要打开浏览器,不是很方便。后来就想到了htmlunit ,这是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,是个没有界面的浏览器,运行速度也是非常迅速。
使用Htmlunit非常简单:
首先在Maven项目中添加配置项:
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.15</version>
</dependency>
<dependency>
使用Htmlunit提取cookie:
final WebClient webClient = new WebClient(BrowserVersion.CHROME); webClient.getOptions().setUseInsecureSSL(true); webClient.getOptions().setJavaScriptEnabled(false); webClient.getOptions().setCssEnabled(false); HtmlPage page = null; page = webClient.getPage(loginUrl); HtmlElement corpid = (HtmlElement) page.getElementById("id_corpid"); HtmlElement corppw = (HtmlElement) page.getElementById("id_corppw"); corpid.click(); String username = ph.readValue("userName"); corpid.type(username); corppw.click(); String password = new String(dec.decodeBuffer(ph.readValue("password"))); corppw.type(password); List<HtmlButton> loginBtn = (List<HtmlButton>) page.getByXPath("//div[@id='corp']/form/div[@class='span2 offset7 controls']/button"); Page resultPage = loginBtn.get(0).click(); String EHRCookie = HtmlUnitUtil.getCookieHeader(webClient); logger.info("获得openidpage cookie值: "+cookie); return cookie; |
执行会发现已经将cookie提取出来:
[INFO ]13:29:15,882,main,[Class]LoginUtil, [Method]getEHRCookie, 获得openidpage cookie值: JSESSIONID=8A1979AC21C24DD8622E41D89ABFF6F3.classa-***.org-8010; sessionid=23d2b3e737c34cb8d8898bbec94c6a11
接着在Httpclient中加载提取的cookie访问http接口:
//加载cookie
httpGet.addHeader(new BasicHeader("Cookie",cookie));
接着就可以不用管登录的过程用通常的方法继续进行接口测试了。
总结
在Https验证跳转到http的web系统的接口测试中,如果将Htmlunit和httpclient结合起来会简化登录验证过程,方便进行测试代码编写。