通过Rest service获取后台数据的多种方法

开发在开发网页的时候用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来获取数据。

posted on 2016-01-07 22:44  GoldenRazor  阅读(779)  评论(0编辑  收藏  举报

导航