RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何通過ApiFox來構(gòu)建 API 場(chǎng)景測(cè)試

Android編程精選 ? 來源:Android編程精選 ? 作者:Android編程精選 ? 2022-09-01 10:49 ? 次閱讀

目錄

簡介

Postman 遷移至 ApiFox

結(jié)構(gòu)對(duì)比

變量控制

ApiFox 導(dǎo)入 Postman

ApiFox 展示 API 調(diào)用場(chǎng)景

請(qǐng)求的后置腳本

增加斷言驗(yàn)證 API

使用測(cè)試執(zhí)行場(chǎng)景 API 序列

總結(jié)

簡介

在開發(fā)前后臺(tái)分離項(xiàng)目并且通過不同團(tuán)隊(duì)來實(shí)現(xiàn)的時(shí)候,如何將后臺(tái)設(shè)計(jì)的 API 準(zhǔn)確的傳達(dá)到前臺(tái),是一個(gè)非常重要的工作。為了簡化這個(gè)過程,開源社區(qū)做了很多努力,比如 protobuf技術(shù),swagger 的誕生, 以及后面 openapi 的演化,都在試圖解決 API 描述和文檔的問題。這些標(biāo)準(zhǔn)某些程度上大大簡化了 API 文檔的撰寫和維護(hù),但是API設(shè)計(jì)往往比較復(fù)雜,所以另外還有一些痛點(diǎn)沒有解決:

若干 API 的調(diào)用順序是有要求的

若干 API 的輸入和輸出是相互關(guān)聯(lián)的

若干 API 需要重復(fù)調(diào)用達(dá)到不同的效果

舉了具體的例子, 某后端小伙伴X和前端小伙伴Y合作開發(fā)一款游戲, X 設(shè)計(jì)好 API 然后 Y 來調(diào)用實(shí)現(xiàn):

Y: API1 根本調(diào)用不成功, 得不到我想要的數(shù)據(jù)?X: balabala 介紹了一遍. (X 默默地完善了文檔)Y: 如何觸發(fā)這個(gè)游戲邏輯啊?X: 可以參考我的文檔 (自信的說)Y: 這個(gè)文檔根本看不懂啊, 還是給我舉個(gè)例子吧?X: ... balabala 溝通半天

過了幾天來了一個(gè)新的前端開發(fā) Z:

Z: 如何觸發(fā)這個(gè)游戲邏輯啊X: ...

有時(shí)候我們會(huì)發(fā)現(xiàn)很多時(shí)候 API 文檔不足以完成前后端 API 設(shè)計(jì)的交流, 更多的時(shí)間用在相互溝通中. API 管理平臺(tái)的誕生,可以說解決了這些痛點(diǎn). 說起 API 管理平臺(tái)首先最成功的的要數(shù) Postman 了,筆者是 Postman 早期用戶,基本使用了大部分的高級(jí)功能,近幾年開始推廣 Team 概念. ApiFox 作為中國的一體化 API 協(xié)作平臺(tái),從一開始就定位于團(tuán)隊(duì)協(xié)作,可以說目標(biāo)十分明確. 目前在嘗試從 Postman 遷移至 ApiFox,發(fā)現(xiàn)過程非常流暢,涵蓋了所有目前我們使用功能.

本文主要介紹兩方面內(nèi)容:

如何從 Postman 遷移至 ApiFox

如何使用 ApiFox 實(shí)現(xiàn)展示后臺(tái) API 的調(diào)用場(chǎng)景

在介紹第二個(gè)方面內(nèi)容時(shí),盡可能介紹 Postman 對(duì)應(yīng)的功能名稱,從而給那些熟悉 Postman 的開發(fā)者以參考.

Postman 遷移至 ApiFox

結(jié)構(gòu)對(duì)比

首先我們先了解一下 Postman 和 ApiFox 的管理控制結(jié)構(gòu),

Postman: Team → Workspace → Collections → Any Level Folders → Request

73d2d96e-2922-11ed-ba43-dac502259ad0.png

ApiFox: Team → Project → Any Level Folders → Request

73e768ca-2922-11ed-ba43-dac502259ad0.png

變量控制

兩者類似:

支持全局變量

支持環(huán)境變量及切換

73ef9450-2922-11ed-ba43-dac502259ad0.png73fe0d00-2922-11ed-ba43-dac502259ad0.png

ApiFox 導(dǎo)入 Postman

通過上面的管理控制結(jié)構(gòu),我們可以明確知道,我們只需要將對(duì)應(yīng)的 Postman 的 Collection 導(dǎo)入 ApiFox 的 Project 中即可.

7421ff08-2922-11ed-ba43-dac502259ad0.png74301ee4-2922-11ed-ba43-dac502259ad0.png

其中 ApiFox 提供了詳細(xì)的文檔介紹 Postman 的導(dǎo)出以及 ApiFox 導(dǎo)入. 通過測(cè)試,目前的 Postman 可以支持所有的數(shù)據(jù)映射,包含了 Postman 中的 Pre-req 和 test 腳本.

7447a29e-2922-11ed-ba43-dac502259ad0.png

導(dǎo)入完成后兩者對(duì)比,可以發(fā)現(xiàn) Postman 的 Collection 映射到 Project 的 Root Folder 之后的結(jié)構(gòu)完全是相同的:

74583b2c-2922-11ed-ba43-dac502259ad0.png

這里唯一美中不足的是, 目前無法導(dǎo)入環(huán)境變量, 應(yīng)該還在開發(fā)中.

關(guān)于 Script 的導(dǎo)入

這里需要注意的一點(diǎn)是,在 Postman 中我們可以直接在 Request 上進(jìn)行編輯 pre-req 和 test 來控制 Request 的 Response. 在導(dǎo)入后,ApiFox 把默認(rèn)的數(shù)據(jù)創(chuàng)建出一個(gè) API Case,這個(gè) Case 包含了 Postman 的 script 數(shù)據(jù).

舉個(gè)例子:

這是 Postman 中的一個(gè) API,其中包含 Test script

746c684a-2922-11ed-ba43-dac502259ad0.png

在 ApiFox 中,Request 本身并沒有包含這個(gè) Script

747b7038-2922-11ed-ba43-dac502259ad0.png

ApiFox 創(chuàng)建了一個(gè)默認(rèn)的 Passed API Case,然后在這個(gè) API Case 中加入了這個(gè) Script

749cc652-2922-11ed-ba43-dac502259ad0.png

ApiFox 展示 API 調(diào)用場(chǎng)景

介紹完導(dǎo)入工作,下面就開始重點(diǎn)介紹使用 ApiFox 來模擬 API 使用場(chǎng)景. 實(shí)現(xiàn)這個(gè)目標(biāo)是基于如下功能:

無限級(jí)別目錄

動(dòng)態(tài)更新環(huán)境變量

每個(gè)請(qǐng)求支持 pre-processer 和 post-processer 來處理返回?cái)?shù)據(jù),理論上支持任何操作

測(cè)試用例支持添加某個(gè)目錄來執(zhí)行

總的來說,通過 ApiFox 的腳本引擎,來模擬客戶端的一些操作,從而達(dá)到展示 API 使用場(chǎng)景的目的. 本文針對(duì)筆者目前使用經(jīng)驗(yàn)介紹若干腳本的使用方法,如果需要深入了解腳本系統(tǒng),請(qǐng)參考官方文檔:

https://www.apifox.cn/help/app/scripts/

ApiFox 提供了比 Postman 更加強(qiáng)大的腳本系統(tǒng),除了 Javascript,還支持其他語言的調(diào)用.

請(qǐng)求的后置腳本

下面我們通過一個(gè)簡單的游戲 API 案例來介紹以上功能的使用.

API 接口定義很簡單,只包含兩個(gè) API

Game_init: 初始化用戶數(shù)據(jù)

Game_round: 游戲的玩法很簡單,玩家只需要點(diǎn)擊一個(gè)按鈕來進(jìn)行抽獎(jiǎng),抽獎(jiǎng)的結(jié)果是隨機(jī)的,并且可能觸發(fā)特殊游戲: 比如更換更高級(jí)的獎(jiǎng)品. API 本身支持調(diào)試,就是通過輸入參數(shù)來返回特定的抽獎(jiǎng)結(jié)果.

現(xiàn)在我們的目標(biāo)就是模擬一次用戶開始抽獎(jiǎng)并且觸發(fā)了特殊游戲獲取高級(jí)獎(jiǎng)勵(lì),并繼續(xù)抽獎(jiǎng)最后獲取獎(jiǎng)勵(lì)的游戲場(chǎng)景. 通過 API 的接口定義,我們可以看到 API 的調(diào)用邏輯應(yīng)該是:

調(diào)用 Game_init 一次

調(diào)用 Game_round 多次,直到游戲結(jié)束

所以游戲場(chǎng)景的 API 結(jié)構(gòu)如下圖:

74a7e28a-2922-11ed-ba43-dac502259ad0.png

我們使用 Scene1 來表示上述演示的調(diào)用場(chǎng)景. 下面我們開始對(duì)每個(gè) API 的 Request 進(jìn)行處理,從而達(dá)到模擬 API 連續(xù)調(diào)用.

Game_init API的輸入和輸出很簡單:

輸入:

{
"gameId":"{{fe}}",
"player":{
"isDummy":true
}
}

輸出

{
"player":{
"playerId":"Demo",
"name":"Demo",
"balance":"1000000",
"balanceRate":"100",
"currency":"FUN",
"isDummy":true
}
}

Game_init API 調(diào)用完成后,我們需要持續(xù)追蹤玩家數(shù)據(jù)的變化,所以這里我們需要將返回的用戶信息儲(chǔ)存在環(huán)境變量中,我們可以通過 Post-processors,添加一個(gè) Custom Script 來實(shí)現(xiàn):

pm.test("GetResponse",function(){
varjsonData=pm.response.json();
console.log(jsonData)
//weupdateplayerDataintheenvironment
pm.environment.set('playerData',JSON.stringify(jsonData.player))
});

這段代碼有兩個(gè)關(guān)鍵點(diǎn):

將 API 的返回結(jié)果解析為 JSON 數(shù)據(jù): pm.response.json()

將 JSON 數(shù)據(jù)中的 player 信息出處到環(huán)境變量中,并且命名為 playerData: pm.environment.set('playerData',JSON.stringify(jsonData.player))

完成這腳本后,我們可以執(zhí)行這個(gè) Request,然后查看我們的環(huán)境變量信息,playerData 動(dòng)態(tài)添加進(jìn)來:

74c9582a-2922-11ed-ba43-dac502259ad0.png

Game_round API的輸入輸出

輸入:

{
"gameId":"{{fe}}",
"cheat":{
"cheatId":1
},
"player":{{playerData}},
"betContext":{{betContextData}}
}

輸出

{
"player":{
"playerId":"Demo",
"name":"Demo",
"balance":"1015000",
"balanceRate":"100",
"currency":"FUN",
"isDummy":true
},
"betContext":{
"roundsAwarded":1,
"currentBetMode":"A",
"nextBetMode":"B"
},
"gameRoundResult":{}
}

我們?cè)谔幚?Game_round API 的時(shí)候和 Game_init 類似,每次得到 Game Round 的返回的 JSON 后,更新 playerData 和 betContextData. 同時(shí)我們還發(fā)現(xiàn),該請(qǐng)求的輸入數(shù)據(jù)同樣使用了環(huán)境變量 playerData 和 betContextData,從而多次調(diào)用 Game_round API 后,玩家數(shù)據(jù)和游戲數(shù)據(jù)是不斷進(jìn)行更新的.

pm.test("GetResponse",function(){
varjsonData=pm.response.json();
console.log(jsonData)
//weupdateplayerDataandgamecontextintheenvironment
pm.environment.set('playerData',JSON.stringify(jsonData.player))
pm.environment.set('betContextData',JSON.stringify(jsonData.betContext))
});

通過這種方法在執(zhí)行這 3 個(gè) API的過程中,就可以查看用戶數(shù)據(jù)的變化以及每次游戲結(jié)果,從而幫助前端開發(fā)者理解和使用 API.

GameInit游戲初始化

Round1進(jìn)入特殊游戲

Round2特殊游戲獎(jiǎng)勵(lì)

增加斷言驗(yàn)證 API

我們?cè)谠O(shè)計(jì) API 使用場(chǎng)景的時(shí)候,可以同時(shí)對(duì) API 進(jìn)行測(cè)試. 在不同場(chǎng)景下 API 的返回可能是不同的,所以這里進(jìn)行測(cè)試斷言可以更精確的定位問題.

比如我們上述的案例,第二個(gè)請(qǐng)求需要觸發(fā)用戶進(jìn)入特殊的游戲模式,這里需要后臺(tái) API 支持特殊的測(cè)試參數(shù),通過這個(gè)參數(shù)可以跳過隨機(jī)結(jié)果直接獲取需要的結(jié)果.

"cheat":{
"cheatId":1
}

也就是說如果 Game_round 請(qǐng)求的輸入數(shù)據(jù)中包含如下數(shù)據(jù),那么這個(gè)請(qǐng)求的數(shù)據(jù)一定是進(jìn)入了特殊模式. 在這個(gè)案例中就是說,輸出的nextBetMode 一定是模式 SpeicalMode

"betContext":{
"roundsAwarded":1,
"currentBetMode":"A",
"nextBetMode":"SpeicalMode"
}

這時(shí)候我們就可以斷言: $.betContext.nextBetMode equl SpeicalMode

如果我們?cè)趫?zhí)行 request 的時(shí)候斷言出錯(cuò),就會(huì)得到一個(gè) Error,如下圖 (這里是故意配置錯(cuò)誤的斷言結(jié)果)

74d3bacc-2922-11ed-ba43-dac502259ad0.png

在 Postman 中這個(gè)功能是通過 test 腳本來實(shí)現(xiàn)的, 比如 pm.expect(pm.response.json()).to.deep.include("xx");, ApiFox 提供的方式更加人性化.

使用測(cè)試執(zhí)行場(chǎng)景 API 序列

目前我們上述場(chǎng)景構(gòu)建的 3 個(gè) API 是手動(dòng)依次執(zhí)行的,我們還可以創(chuàng)建一個(gè) Test Case 可以一次性執(zhí)行多個(gè) API. (該功能在 Postman 中是在各級(jí)文件夾下的 Run 功能)

首先創(chuàng)建一個(gè)新的 Test Case

750df674-2922-11ed-ba43-dac502259ad0.png751a770a-2922-11ed-ba43-dac502259ad0.png

然后導(dǎo)入我們之前創(chuàng)建的一組 API Case, 注意這里選擇 API Case, 也就是帶有后置腳本的請(qǐng)求.

7528cc60-2922-11ed-ba43-dac502259ad0.png75373282-2922-11ed-ba43-dac502259ad0.png

最后執(zhí)行 Run,可以看到最后返回的結(jié)果

7548468a-2922-11ed-ba43-dac502259ad0.png

通過這個(gè)功能, 后續(xù)如果 API 出現(xiàn)變更, 可以直接運(yùn)行這個(gè) Test Case 來進(jìn)行回歸測(cè)試.

另外類似于 Postman 的 newman 命令行工具, ApiFox 也有自己的 CLI 工具, 通過 CLI 工具, 我們還可以使用我們自己的 CI/CD 系統(tǒng)自動(dòng)執(zhí)行這個(gè) Test Case, 從而將 API 測(cè)試深入的融合到整個(gè)開發(fā)生命周期中.

75564280-2922-11ed-ba43-dac502259ad0.png

apifoxrunhttps://api.apifox.cn/api/v1/api-test/ci-config/349571/detail?token=xxxx-rhtml,cli

總結(jié)

這篇文章主要介紹如何通過 ApiFox 來構(gòu)建 API 場(chǎng)景測(cè)試,通過后置腳本可以將多個(gè) API 的輸入和輸出進(jìn)行串聯(lián),從而達(dá)到模擬客戶端行為的目的. 同時(shí)本文還對(duì)照了 Postman 的相應(yīng)的功能,幫助熟悉 Postman 的開發(fā)者快速上手.

基于強(qiáng)大的腳本引擎, 使用前置和后置腳本理論上可以模擬所有客戶端的行為. 當(dāng)然在進(jìn)行API 測(cè)試和場(chǎng)景模擬設(shè)計(jì)的過程中, 并不需要太復(fù)雜的控制, 只需要對(duì)關(guān)鍵數(shù)據(jù)和場(chǎng)景相關(guān)的數(shù)據(jù)進(jìn)行控制即可

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7002

    瀏覽量

    88940
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1499

    瀏覽量

    61960
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3309

    瀏覽量

    42471
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    api測(cè)試工具體會(huì)分享,apipost、apifox、postman

    API行業(yè)芯事經(jīng)驗(yàn)分享
    小凡
    發(fā)布于 :2022年09月07日 22:19:45

    API】多pk分組&用戶場(chǎng)景&通用定時(shí)任務(wù)api已經(jīng)發(fā)布

    多PK分組、用戶場(chǎng)景和通用定時(shí)任務(wù)接口已經(jīng)發(fā)布。以上OPEN API 用戶/廠商 可免費(fèi)使用。多PK分組:可讓用戶/廠商對(duì)不用產(chǎn)品的設(shè)備進(jìn)行歸類管理。接口兼容原有的單PK分組,不同點(diǎn)在于創(chuàng)建多 pk
    發(fā)表于 08-31 13:08

    阿里云啟動(dòng)API創(chuàng)新大賽 設(shè)視頻技術(shù)為場(chǎng)景賽題

    、數(shù)據(jù), 而是將API 作為云時(shí)代的紅細(xì)胞,邀請(qǐng)廣大參賽者通過API串聯(lián)產(chǎn)品和服務(wù),做自己的應(yīng)用創(chuàng)新。阿里云API大賽一直以踐行
    發(fā)表于 01-09 16:42

    高階API構(gòu)建模型和數(shù)據(jù)集使用

    圖,執(zhí)行計(jì)算圖方法運(yùn)行神經(jīng)網(wǎng)絡(luò),前文示例中也是先構(gòu)建計(jì)算圖即構(gòu)建神經(jīng)網(wǎng)絡(luò)隱藏層和輸出層,再啟動(dòng)會(huì)話執(zhí)行計(jì)算圖。TensorFlow上線至今發(fā)行了幾個(gè)API版本,每更新一次版本時(shí),
    發(fā)表于 11-04 07:49

    AD9446的采樣信號(hào),應(yīng)該通過什么構(gòu)建

    我的ADC為AD9446,16Bit?,F(xiàn)在想測(cè)試其采樣10MHz正弦信號(hào)的信噪比,但是我手頭只有Tektronix_AFG3252,其為14位分辨力,無法提供高精度的正弦信號(hào)。請(qǐng)問對(duì)于AD9446的采樣信號(hào),應(yīng)該通過什么
    發(fā)表于 12-15 07:10

    JavaScript API自動(dòng)化測(cè)試方案的管理設(shè)計(jì)與實(shí)現(xiàn)

    Logcat并寫入,最終寫成方案并測(cè)試,在應(yīng)用程序中,JavaScript API作為連接程序與web頁面的橋梁,擴(kuò)展了內(nèi)嵌web頁面的JavaScript的能力,為web應(yīng)用帶來更好的體驗(yàn),、所以本文使用本方案,測(cè)試人員編寫了
    發(fā)表于 11-07 11:10 ?5次下載
    JavaScript <b class='flag-5'>API</b>自動(dòng)化<b class='flag-5'>測(cè)試</b>方案的管理設(shè)計(jì)與實(shí)現(xiàn)

    如何使用WisePlay DRM API構(gòu)建DRM應(yīng)用

    介紹 WisePlay DRM demo展示了如何使用WisePlay DRM API構(gòu)建你的DRM應(yīng)用,主要提供了License獲取方面的代碼演示。WisePlay DRM提供了一種
    發(fā)表于 04-06 10:32 ?1次下載

    使用Postman成功實(shí)現(xiàn)API測(cè)試自動(dòng)化的最佳實(shí)踐

      API 測(cè)試自動(dòng)化支持兩個(gè)獨(dú)立軟件系統(tǒng)之間的通信和數(shù)據(jù)交換。實(shí)現(xiàn) API 的軟件系統(tǒng)包含可由另一個(gè)軟件系統(tǒng)執(zhí)行的功能/子例程。它通過增加測(cè)試
    的頭像 發(fā)表于 06-20 10:19 ?926次閱讀

    使用Postman成功實(shí)現(xiàn)API測(cè)試自動(dòng)化的最佳實(shí)踐

      API 測(cè)試自動(dòng)化支持兩個(gè)獨(dú)立軟件系統(tǒng)之間的通信和數(shù)據(jù)交換。實(shí)現(xiàn) API 的軟件系統(tǒng)包含可由另一個(gè)軟件系統(tǒng)執(zhí)行的功能/子例程。它通過增加測(cè)試
    的頭像 發(fā)表于 07-05 10:46 ?951次閱讀

    什么是API,不同場(chǎng)景中的API

    當(dāng)公司構(gòu)建他們的應(yīng)用時(shí),他們把它們?cè)O(shè)計(jì)成一組交互的API。最容易理解的例子是Lyft(或者Uber)。你可能想在Lyft應(yīng)用中做一些事情,它們?cè)谀缓蠖紩?huì)觸發(fā)不同的API。
    的頭像 發(fā)表于 08-10 11:20 ?2176次閱讀

    如何通過ApiFox構(gòu)建API場(chǎng)景測(cè)試

    在開發(fā)前后臺(tái)分離項(xiàng)目并且通過不同團(tuán)隊(duì)實(shí)現(xiàn)的時(shí)候,如何將后臺(tái)設(shè)計(jì)的 API 準(zhǔn)確的傳達(dá)到前臺(tái),是一個(gè)非常重要的工作。為了簡化這個(gè)過程,開源社區(qū)做了很多努力,比如 protobuf技術(shù),swagger
    的頭像 發(fā)表于 09-01 10:48 ?1622次閱讀

    Katalon:API測(cè)試

    API測(cè)試是一種直接測(cè)試API的軟件測(cè)試實(shí)踐——從功能、可靠性、性能到安全性,全部涵蓋。作為集成測(cè)試
    的頭像 發(fā)表于 04-18 09:55 ?1003次閱讀

    API測(cè)試框架Grillon概述

    API測(cè)試框架Grillon概述
    的頭像 發(fā)表于 09-08 10:22 ?2023次閱讀

    數(shù)字孿生場(chǎng)景構(gòu)建行業(yè)應(yīng)用和優(yōu)勢(shì)

    ,古河云科技今天就來給大家聊一聊數(shù)字孿生場(chǎng)景構(gòu)建行業(yè)應(yīng)用和優(yōu)勢(shì)。 數(shù)字孿生場(chǎng)景構(gòu)建的行業(yè)應(yīng)用 1.制造業(yè): - 數(shù)字孿生可用于監(jiān)測(cè)設(shè)備運(yùn)行狀態(tài)、預(yù)測(cè)設(shè)備故障,并優(yōu)化生產(chǎn)過程。 -
    的頭像 發(fā)表于 06-11 14:26 ?353次閱讀
    數(shù)字孿生<b class='flag-5'>場(chǎng)景</b><b class='flag-5'>構(gòu)建</b>行業(yè)應(yīng)用和優(yōu)勢(shì)

    華納云:使用 WireMock 在開發(fā)和測(cè)試中模擬 API 服務(wù)

    是 WireMock 發(fā)揮作用的地方。 WireMock 是一個(gè)開源工具,可以幫助開發(fā)人員創(chuàng)建模擬真實(shí) API 行為的模擬服務(wù)器,為開發(fā)和測(cè)試提供受控環(huán)境。 假設(shè)您有一個(gè) API 和一個(gè)前端應(yīng)用,并且想要
    的頭像 發(fā)表于 10-25 16:46 ?340次閱讀
    RM新时代网站-首页