开发在开发网页的时候用Rest service来获取Json数据,然后对数据进行组织后显示在网页上,那我们在做自动化测试的时候对这种情况需要验证的有以下2点:
1. Service的数据可以正常被获取到
2. 数据都正确的被网页显示出来并且显示在正确的地方
那么要做这2点验证,自动化测试的具体步骤如下
1. 通过方法获取到这个service中的数据(json,xml)
2、通过解析json或xml来对数据进行整理和提取
3. 验证这些整理过的数据都显示在正确的地方
后面2点再说,对于第一点获取的方法我自己总结的如下:
1. Selenium执行javascript的get来获取
public String retrieveService(String svcURL) throws Exception{ String js_GetResponsData = "var request = new XMLHttpRequest();"+ "var ansyType = false;"+ "request.open('GET', '"+svcURL+"',ansyType);"+ "request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');"+ "request.send(null);"+ "if (request.readyState == 4){" + " if (request.status == 200){" + " return request.responseText;}" + "} "; Log.info("Javascript ready to execute:"+js_GetResponsData); pause(2000); String responseData = (String)jsReturner(js_GetResponsData); return responseData; }
以上这段代码针对可以直接获取,不需要身份验证的地址,如果需要身份验证的话,那么在Selenium开启网页的时候,用Selenium来登录后再运行这段代码,或者可以用Selenium运行javascript的Post之后再运行,但是针对不同的验证方式(Basic,NTLM) 需要选择不同的验证方式。
2. 用java.net.URL来获取,这个方式的好处在于不需要jar包,直接运行就可,对身份验证的方式也没有特别要求,这里我贴一段对NTLM的验证:
public String getDataFromNTLM(String Url,String user,String password) { String str = null; try { CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL)); Authenticator.setDefault(new MyAuthenticator(user, password)); URL url = new URL(Url); URLConnection connection = url.openConnection(); InputStream is = connection.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); while (true) { str = br.readLine(); if (str == null) { break; }else{ return str; } } } catch (Exception ex) { ex.printStackTrace(); } return str; }
3. 用Httpclient来获取数据,这个需要获取jar包,直接贴代码
DefaultHttpClient hclient = new DefaultHttpClient(); NTCredentials creds = new NTCredentials("hwpmgr10@XX.XX.com", "tenp1108", "BasicRegistry", "etpb-dev.w3ibm.mybluemix.net"); System.out.println(creds.getUserPrincipal().getName()); System.out.println(creds.getPassword()); ((AbstractHttpClient) hclient).getCredentialsProvider().setCredentials(AuthScope.ANY, creds); HttpHost target = new HttpHost("etpb-dev.w3ibm.mybluemix.net", 80, "http"); HttpContext localContext = new BasicHttpContext(); HttpGet httpget = new HttpGet("/ntlm-protected/info"); HttpResponse response = hclient.execute(target, httpget, localContext); HttpEntity entity1 = response.getEntity();
以上代码是用来pass掉验证NTLM来获取数据的。
当然在以上方法都不奏效的时候,还有最原始的一种方法,就是直接Selenium打开service URL,通过xpath来获取数据。