美文网首页pmAndroid知识Android开发
利用RAP实现android前后端接口简单mock测试

利用RAP实现android前后端接口简单mock测试

作者: the_q | 来源:发表于2017-03-29 21:52 被阅读368次

    RAP介绍

    用官方的话来说,RAP是一个可视化接口管理工具 通过分析接口结构,动态生成模拟数据,校验真实接口正确性, 围绕接口定义,通过一系列自动化工具提升我们的协作效率。简单来说就是用来mock后端的接口数据,实现前后端模拟联调。

    在我们平时的开发工作中,经常涉及到前后端的协同工作,往往前后端的进度不一致,导致联调的时间后延。当然我们可以通过搭建web服务器来模拟接口数据,这里介绍一种更简单的调试方式,即通过阿里的RAP接口服务来实现接口mock。

    RAP的简单配置和使用

    RAP官网 http://rap.taobao.org/org/index.do, RAP官网提供了非常详细的wiki和视频教程。

    1、注册登录

    2、创建项目

    QQ图片20170327221326.png

    3、创建好之后会在项目中建立一个默认的模块,点击编辑后可以修改模块、页面、接口名称

    QQ图片20170327221358.png

    4、界面操作也比较简单

    如下图所示,可以添加接口,并且设置接口的请求参数和响应参数,也可以直接导入json格式数据

    QQ图片20170327222105.png

    添加接口

    QQ图片20170327222447.png

    预览mock数据

    QQ图片20170327222208.png

    5、编辑好接口和参数之后,就可以点击page右侧的按钮进入控制台调试界面

    QQ图片20170327222415.png

    右下角会输出mock的接口地址,也就是前端可以直接访问的接口地址

    android客户端请求实现

    下面就来看看android客户端的请求实现

    其实也就是简单的网络请求代码

    //获取后端接口地址, 这里直接返回上面RAP控制台输出的接口地址
    private String getServerUrl() {
            Log.d(TAG, "getServerUrl " );
            return "http://rap.taobao.org/mockjs/15968/getUserInfo?ver=2";
    }
    

    通过AsyncTask来执行网络请求,适用于简单的网络请求场景

    //开始请求接口数据
    public void request() {
    
            asyncTask = new AsyncTask<Void, Void, Void>() {
                @Override
                protected Void doInBackground(Void... tempParams) {
                    HttpURLConnection connection = null;
                    InputStream inputStream;
                    OutputStream outputStream = null;
                    BufferedInputStream bufferedInputStream = null;
                    ByteArrayOutputStream baos = null;
                    try {
                        URL urlObj = new URL(getServerUrl());
                        connection = (HttpURLConnection) urlObj.openConnection();
                        connection.setRequestMethod("GET");
                        connection.setRequestProperty("Content-Type", "application/json");
                        connection.setDoInput(true);
                        connection.setDoOutput(true);
                        connection.setConnectTimeout(15000);
                        connection.setReadTimeout(15000);
                        connection.connect();
    //                    outputStream = connection.getOutputStream();
    //                    outputStream.flush();
    //                    outputStream.close();
                        int respCode = connection.getResponseCode();
                        if (respCode == HttpURLConnection.HTTP_OK) {
                            inputStream = connection.getInputStream();
                            bufferedInputStream = new BufferedInputStream(inputStream);
                            byte[] buffer = new byte[50 * 1024];
                            int length;
                            baos = new ByteArrayOutputStream();
                            while ((length = bufferedInputStream.read(buffer, 0, buffer.length)) != -1) {
                                baos.write(buffer, 0, length);
                            }
                            String result = new String(baos.toByteArray());
                            //结果解析
                            parseResult(result);
                            Log.d(TAG, "request result: " + result);
                        } else {
                            Log.d(TAG, "connect error " + respCode);
                        }
                    } catch (IOException e) {
                        Log.e(TAG, "", e);
                    } finally {
                        if (baos != null) {
                            try {
                                baos.close();
                            } catch (IOException e) {
                                Log.e(TAG, "error ", e);
                            }
                        }
                        if (bufferedInputStream != null) {
                            try {
                                bufferedInputStream.close();
                            } catch (IOException e) {
                                Log.e(TAG, "error ", e);
                            }
                        }
                        if (outputStream != null) {
                            try {
                                outputStream.close();
                            } catch (IOException e) {
                                Log.e(TAG, "error ", e);
                            }
                        }
                        if (connection != null) {
                            connection.disconnect();
                        }
                    }
                    return null;
                }
            };
            Log.d(TAG, "start request...");
            asyncTask.execute();
        }
    
    

    解析json数据

    //结果解析
     private void parseResult(String result){
            try {
                JSONObject jsonObject = new JSONObject(result);
                String name = jsonObject.optString("name");
                Log.d(TAG, "parseResult name " + name);
    
                String id = jsonObject.optString("id");
                Log.d(TAG, "parseResult id " + id);
                String url = jsonObject.optString("url");
                Log.d(TAG, "parseResult url " + url);
    
                //字符编码不一致则需要按指定格式解码
                // String strUTF8 = URLDecoder.decode(name, "UTF-8");
                // Log.d(TAG, strUTF8);
            }catch (Exception e){
    
            }
    }
    

    总结

    上述只是介绍了RAP接口工具的最简单用法以及与android端的简单联调方式,未涉及多线程请求、加密压缩、后端数据库等,关于RAP的高级用法可以参考官网介绍。

    相关文章

      网友评论

        本文标题:利用RAP实现android前后端接口简单mock测试

        本文链接:https://www.haomeiwen.com/subject/dgbyottx.html