Android開(kāi)發(fā)者如何模擬接口獲得自己想要的數(shù)據(jù)進(jìn)行測(cè)試?

最近自己寫(xiě)了一個(gè)Rxjava + Retrofit + okhttp網(wǎng)絡(luò)請(qǐng)求框架,想測(cè)試一下效果脂矫,但是卻沒(méi)有接口來(lái)提供給自己測(cè)試恩沛。這下就尷尬了在扰,雖然可以自己去寫(xiě)一個(gè)后臺(tái),但是這樣做起來(lái)未免太麻煩雷客,費(fèi)時(shí)費(fèi)力芒珠。我是拒絕這么做的,大家應(yīng)該也是拒絕的吧搅裙!那有什么方便快捷的方法來(lái)獲得我們想要的返回?cái)?shù)據(jù)呢皱卓?最好是還能有一個(gè)網(wǎng)絡(luò)請(qǐng)求的過(guò)程。接下來(lái)我們就來(lái)看看如何使用node.js來(lái)快速搭建自己想要的測(cè)試數(shù)據(jù)呈宇。

不知道或者想了解node.js的小伙伴麻煩自行百度一下哈好爬。

首先我們需要先搭建好環(huán)境:先把node.js下載

Node.js安裝包及源碼下載地址為:https://nodejs.org/en/download/。大家根據(jù)自己的系統(tǒng)選擇下載就行

Node.js下載界面

下載后安裝甥啄,安裝過(guò)程非常簡(jiǎn)單存炮,直接下一步,在第五步時(shí)選擇第三個(gè)選項(xiàng)即可蜈漓,

大家也可以按照這個(gè)Node.js安裝教程過(guò)程來(lái)穆桂,安裝完成后,我們來(lái)到cmd命令行工具中融虽,進(jìn)入安裝目錄下(直接打開(kāi)安裝的文件路徑享完,然后在地址欄輸入cmd就直接進(jìn)入了當(dāng)前目錄下)

node安裝目錄

如上兩圖所示:第一個(gè)為node安裝目錄,找到后再上方地址欄中輸入cmd(如第二圖)然后回車有额,就會(huì)進(jìn)入dos命令窗口般又,并且在node安裝路徑下。

為了檢查node是否安裝成功巍佑,我們可以再dos中輸入 node -v 查看版本號(hào)茴迁,如果能成功查看表明安裝成功。

然后我們?nèi)职惭bnpm: dos窗口中輸入??npm install -g npm? 回車

成功安裝圖

然后在輸入?npm install -g cnpm? 回車

成功安裝圖

成功安裝后再安裝? express 應(yīng)用程序生成器

dos窗口中 輸入npm install -g express-generator? 回車

成功安裝后截圖

接下來(lái)就是重點(diǎn)了:這一步我們會(huì)安裝一個(gè)express應(yīng)用程序萤衰,你可以先選好安裝在什么位置堕义,取什么名字

比如我這里安裝在D盤(pán)node文件夾下的express文件夾中,取名為yinl脆栋。那么首先我們需要在dos中進(jìn)入D:\node\express目錄

到這個(gè)目錄后我們輸入命令:express --view=pug yinl 回車倦卖,等待成功后,在dos窗口中會(huì)看到如下輸出信息


這時(shí)候我們看文件夾,你會(huì)看到你選擇的安裝目錄下多了個(gè)yinl文件(如下圖)

我們切換到dos窗口椿争,你會(huì)看到下方提示我們安裝東西怕膛,我們按照提示安裝即可

先在dos窗口中輸入cd yinl? 回車

然后 輸入 npm install 回車

然后就可以啟動(dòng)項(xiàng)目了:輸入 npm start? 回車

啟動(dòng)

這個(gè)時(shí)候你就可以在瀏覽器中輸入localhost/3000,見(jiàn)證神奇的時(shí)候到了

看到這個(gè)就證明你成功啦!開(kāi)不開(kāi)心丘薛!哈哈嘉竟,別著急,我們還有事情需要做。

打開(kāi)yinl項(xiàng)目舍扰,你看到的目錄如下圖所示:

yinl項(xiàng)目原始目錄

這個(gè)時(shí)候倦蚪,瀏覽器打開(kāi)localhost:3000/users,可以看到頁(yè)面顯示respond with a resource

我們好奇找到users文件,在routes目錄下边苹,然后打開(kāi)陵且,

routes/users.js文件

我們可以在routes/users.js文件中自定自己想要得到的返回?cái)?shù)據(jù)

修改

var express = require('express');

var router = express.Router();

//新增數(shù)據(jù)

var data = {

? ? 'code':'200',

? ? 'message':'數(shù)據(jù)獲取成功',

? ? 'lists':[

? ? ? ? {

? ? ? ? ? 'name':'YinL',

? ? ? ? ? ? 'age': '23',

? ? ? ? ? ? 'sex':'男'

? ? ? ? },{

? ? ? ? ? 'name':'yinl',

? ? ? ? ? ? 'age': '20',

? ? ? ? ? ? 'sex':'女'

? ? ? ? }

? ? ]

}

/* GET users listing. */

router.get('/', function(req, res, next) {

? res.send(data);? //修改

});

module.exports = router;

改后之后,因?yàn)橛芯彺娴脑蚋鍪覀冃枰匦聠?dòng)node(dos進(jìn)入項(xiàng)目根目錄下慕购,重新運(yùn)行npm start),然后打開(kāi)

成功獲取數(shù)據(jù)

到這里就算基本完成啦,但是就這樣的話茬底,你會(huì)發(fā)現(xiàn)每次都要來(lái)修改這個(gè)文件沪悲,修改后都需要重新啟動(dòng),非常的不方便阱表。接下來(lái)我們就來(lái)繼續(xù)改進(jìn)殿如。在項(xiàng)目下新建一個(gè)config文件夾并新建一個(gè)api.js,配置一下:

api.js內(nèi)容如下:

var fs = require('fs');

/**

* 檢查請(qǐng)求的路徑是否存在

* @param apiName 請(qǐng)求路徑

* @param method? 請(qǐng)求方式

* @param params? 請(qǐng)求參數(shù)

* @param res 返回請(qǐng)求

*/

function getDataFromPath (apiName,method,params,res){

? ? if(apiName){

? ? ? ? fs.access(

? ? ? ? ? ? // 提取請(qǐng)求路徑中的js文件

? ? ? ? ? ? apiName.substring(1)+'.js',

? ? ? ? ? ? // 回調(diào)函數(shù),檢查請(qǐng)求的路徑是否有效失敗返回一個(gè)錯(cuò)誤參數(shù)

? ? ? ? ? ? function(err){

? ? ? ? ? ? ? ? if(!err){

? ? ? ? ? ? ? ? ? ? // 每次請(qǐng)求都清除模塊緩存重新請(qǐng)求

? ? ? ? ? ? ? ? ? ? delete require.cache[require.resolve('..'+apiName)];

? ? ? ? ? ? ? ? ? ? try{

? ? ? ? ? ? ? ? ? ? ? ? addApiResult(res,require('..'+apiName).getData(method,params));

? ? ? ? ? ? ? ? ? ? }catch(e){

? ? ? ? ? ? ? ? ? ? ? ? console.error(e.stack);

? ? ? ? ? ? ? ? ? ? ? ? res.status(500).send(apiName+' has an error,please check the code.');

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? addApiResult(res);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? );

? ? }else{

? ? ? ? addApiResult(res);

? ? }

};

/**

*? 響應(yīng)頭

* @param res

*/

function addApiHead(res){

? ? res.setHeader('Content-Type', 'application/json;charset=utf-8');

? ? // 跨域

? ? res.header('Access-Control-Allow-Origin', '*');

? ? res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');

? ? res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');

? ? // 控制http緩存

? ? res.header("Cache-Control", "no-cache, no-store, must-revalidate");

? ? res.header("Pragma", "no-cache");

? ? res.header("Expires", 0);

}

/**

* 返回參數(shù)最爬,如無(wú)返回參數(shù)返回404

* @param res

* @param result

*/

function addApiResult(res,result){

? ? if(result){

? ? ? ? res.send(result);

? ? }else{

? ? ? ? res.status(404).send();

? ? }

}

/*請(qǐng)求方式*/

// get

exports.get = function(req, res){

? ? addApiHead(res);

? ? getDataFromPath(req.path,'GET',req.query,res);

};

// post

exports.post = function(req, res){

? ? addApiHead(res);

? ? getDataFromPath(req.path,'POST',req.body,res);

};


然后打開(kāi)根目錄下app.js文件涉馁,在上面引入剛剛新建的文件api.js

//引入APIvarapi =require('./config/api');

并替換配置

/*配置請(qǐng)求*/

app.get('/',function(req, res){

?res.send('hello world');});

app.get('/api/*', api.get);

app.post('/api/*', api.post);

下方分別為修改之前和修改之后的內(nèi)容

原始app.js文件內(nèi)容


修改后app.js?文件內(nèi)容

然后我們?cè)诟夸浶陆╝pi文件夾,在其中新建test.js;

test.js文件中寫(xiě)上你想要的數(shù)據(jù)即可爱致。

exports.getData = function(method,data){

? ? var backData={

"success":'true',

? ? ? ? "code":'000',

? ? ? ? "message":"",

"data":{

"total":'2',

"users":[

{

? ? ? ? ? ? 'name':'YinL',

? ? ? ? ? ? 'age': '23',

? ? ? ? ? ? 'sex':'男'

},

? ? {

? ? ? ? ? ? 'name':'yinl',

? ? ? ? ? ? 'age': '20',

? ? ? ? ? ? 'sex':'女'

}

]}

? ? }

? ? return JSON.stringify(backData);

}

這里完成后烤送,你就可以重新運(yùn)行npm start,如果這個(gè)時(shí)候能成功運(yùn)行糠悯,在瀏覽器打開(kāi)http://localhost:3000/api/test帮坚,你就會(huì)看到返回的json。我這邊出現(xiàn)了錯(cuò)誤

這是因?yàn)闆](méi)有安裝這個(gè)依賴互艾,我們安裝就好了:npm install serve-favicon --save? 回車,安裝完成后如下圖所示

這個(gè)時(shí)候我們?cè)趩?dòng)項(xiàng)目 npm start

成功啟動(dòng)

我們看到成功啟動(dòng)了叶沛,如果出現(xiàn)了錯(cuò)誤的話,大家對(duì)應(yīng)解決然后在啟動(dòng)就好忘朝。在瀏覽器打開(kāi)http://localhost:3000/api/test,會(huì)看到成功的出來(lái)數(shù)據(jù)啦判帮!哦也!

這個(gè)時(shí)候局嘁,你想添加其他數(shù)據(jù),只需要在api目錄下去新建其他.js文件就可以啦晦墙!添加后可以直接訪問(wèn)的哦悦昵。

如果你想完全模仿線上的接口,你只需要一層層的建立文件夾就ok啦晌畅!假如線上接口是?https://www.yinl.com/mydata/school/data,我們?cè)赼pi文件夾按照路徑新建文件夾和文件即可:api-->mydata-->school-->data.js

如果你想用android studio來(lái)測(cè)試下數(shù)據(jù)但指,你只需要把localhost替換成你本機(jī)電腦的ip就ok啦,例如:

http://192.168.x.xxx:3000/api/test? (把這個(gè)ip地址換成你本機(jī)的)

? 下方為我在android studio測(cè)試的數(shù)據(jù)返回(這是新寫(xiě)的請(qǐng)求框架,有想要的小伙伴嘛?)

可以看到我這里成功的通過(guò)android studio訪問(wèn)到我自定義的數(shù)據(jù)啦棋凳,這個(gè)log顯示的信息也一目了然拦坠,新寫(xiě)的這個(gè)Rxjava + Retrofit + okhttp 網(wǎng)絡(luò)請(qǐng)求框架有想要的小伙伴請(qǐng)留言哦,后續(xù)我也可能會(huì)寫(xiě)對(duì)應(yīng)的博客的剩岳!

希望這篇文章能夠給大家?guī)?lái)幫助贞滨,有啥問(wèn)題歡迎留言!感謝大家的閱讀拍棕!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晓铆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子绰播,更是在濱河造成了極大的恐慌骄噪,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蠢箩,死亡現(xiàn)場(chǎng)離奇詭異链蕊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)忙芒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)示弓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人呵萨,你說(shuō)我怎么就攤上這事奏属。” “怎么了潮峦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵囱皿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我忱嘹,道長(zhǎng)嘱腥,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任拘悦,我火速辦了婚禮齿兔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘础米。我一直安慰自己分苇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布屁桑。 她就那樣靜靜地躺著医寿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蘑斧。 梳的紋絲不亂的頭發(fā)上靖秩,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天须眷,我揣著相機(jī)與錄音,去河邊找鬼沟突。 笑死花颗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的事扭。 我是一名探鬼主播捎稚,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼求橄!你這毒婦竟也來(lái)了今野?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤罐农,失蹤者是張志新(化名)和其女友劉穎条霜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體涵亏,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宰睡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了气筋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拆内。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宠默,靈堂內(nèi)的尸體忽然破棺而出麸恍,到底是詐尸還是另有隱情,我是刑警寧澤搀矫,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布抹沪,位于F島的核電站,受9級(jí)特大地震影響瓤球,放射性物質(zhì)發(fā)生泄漏融欧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一卦羡、第九天 我趴在偏房一處隱蔽的房頂上張望噪馏。 院中可真熱鬧,春花似錦绿饵、人聲如沸逝薪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至步清,卻和暖如春要门,著一層夾襖步出監(jiān)牢的瞬間虏肾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工欢搜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留封豪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓炒瘟,卻偏偏與公主長(zhǎng)得像吹埠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疮装,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容