zoukankan      html  css  js  c++  java
  • 通过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来获取数据。

  • 相关阅读:
    shell预备知识
    php session和cookie
    php数据库访问抽象层PDO
    递归求斐波那契数
    SqlDataReader的使用
    DataAdapter与DataSet的使用
    CLR
    Android Studio javadoc 生成注释文档
    MySQL教程之concat以及group_concat的用法
    一文读懂MQTT协议
  • 原文地址:https://www.cnblogs.com/goldenRazor/p/5111574.html
Copyright © 2011-2022 走看看