移動(dòng)應(yīng)用測(cè)試方法與思路

文章內(nèi)容來源于《軟件測(cè)試52講》

移動(dòng)端應(yīng)用可以細(xì)分為三大類:Web App、Native App 和 Hybrid App

一厌漂、Web App(移動(dòng)端的 Web 瀏覽器)

也就是用H5開發(fā)的app斟珊,依附的操作系統(tǒng)是iOS和Android

Web App 采用的技術(shù)主要是,傳統(tǒng)的 HTML雏节、JavaScript高职、CSS 等 Web 技術(shù)棧怔锌,當(dāng)然現(xiàn)在 HTML5 也得到了廣泛的應(yīng)用变过。另外媚狰,Web App 所訪問的頁面內(nèi)容都是放在服務(wù)器端的阔拳,本質(zhì)上就是 Web 網(wǎng)頁,所以天生就是跨平臺(tái)的辨宠。

其本質(zhì)就是 Web 瀏覽器的測(cè)試货裹,所有 GUI 自動(dòng)化測(cè)試的方法和技術(shù)弧圆,比如數(shù)據(jù)驅(qū)動(dòng)、頁面對(duì)象模型霹期、業(yè)務(wù)流程封裝等拯田,都適用于 Web App 的測(cè)試

如果Web 頁面是基于自適應(yīng)網(wǎng)頁設(shè)計(jì)(即符合 Responsive Web 設(shè)計(jì)的規(guī)范)勿锅,而且你的測(cè)試框架如果支持 Responsive Page,那么原則上你之前開發(fā)的運(yùn)行在 PC Web 端的 GUI 自動(dòng)化測(cè)試用例垮刹,不做任何修改就可以直接在移動(dòng)端的瀏覽器上直接執(zhí)行张弛,當(dāng)然運(yùn)行的前提是你的移動(dòng)端瀏覽器必須支持 Web Driver吞鸭。

其中,自適應(yīng)網(wǎng)頁設(shè)計(jì)(Responsive Web Design)是指遮咖,同一個(gè)網(wǎng)頁能夠自動(dòng)識(shí)別屏幕分辨率造虏、并做出相應(yīng)調(diào)整的網(wǎng)頁設(shè)計(jì)技術(shù)。
比如陶珠,下圖所示的例子就是同一個(gè)網(wǎng)頁在不同分辨率下的不同展示效果揍诽。

自適應(yīng)網(wǎng)頁設(shè)計(jì)實(shí)例.png

二暑脆、Native App (移動(dòng)端的原生應(yīng)用)

對(duì)于 Android 是 apk,對(duì)于 iOS 就是 ipa。
Native App 是一種基于手機(jī)操作系統(tǒng)(iOS 和 Android)根资,并使用原生程序編寫運(yùn)行的第三方應(yīng)用程序同窘。

Native App 的開發(fā),Android 使用的語言通常是 Java裤纹,iOS 使用的語言是 Objective-C鹰椒。
通常來說呕童,Native App 可以提供比較好的用戶體驗(yàn)以及性能夺饲,而且可以方便地操作手機(jī)本地資源。

對(duì) Native App 的測(cè)試擂找,雖然不同的平臺(tái)會(huì)使用不同的自動(dòng)化測(cè)試方案(比如浩销,iOS 一般采用 XCUITest Driver慢洋,而 Android 一般采用 UiAutomator2 或者 Espresso 等)欢唾,但是數(shù)據(jù)驅(qū)動(dòng)礁遣、頁面對(duì)象以及業(yè)務(wù)流程封裝的思想依舊適用肩刃,完全可以把這些方法應(yīng)用到測(cè)試用例設(shè)計(jì)中。

三沸呐、Hybrid App

俗稱:混血應(yīng)用崭添,介于 Web App 和 Native App 兩者之間的一種 App 形式叛氨。

Hybrid App 利用了 Web App 和 Native App 的優(yōu)點(diǎn)寞埠,通過一個(gè)原生實(shí)現(xiàn)的 Native Container 展示 HTML5 的頁面。更通俗的講法可以歸結(jié)為蓝角,在原生移動(dòng)應(yīng)用中嵌入了 Webview饭冬,然后通過該 Webview 來訪問網(wǎng)頁昌抠。

Hybrid App 具有維護(hù)更新簡單,用戶體驗(yàn)優(yōu)異以及較好的跨平臺(tái)特性麦乞,是目前主流的移動(dòng)應(yīng)用開發(fā)模式姐直。

三類移動(dòng)應(yīng)用的架構(gòu)原理.png

對(duì) Hybrid App 的測(cè)試蒋畜,情況會(huì)稍微復(fù)雜一點(diǎn),對(duì) Native Container 的測(cè)試愿棋,可能需要用到 XCUITest 或者 UiAutomator2 這樣的原生測(cè)試框架均牢,而對(duì) Container 中 HTML5 的測(cè)試徘跪,基本和傳統(tǒng)的網(wǎng)頁測(cè)試沒什么區(qū)別,所以原本基于 GUI 的測(cè)試思想和方法都能繼續(xù)適用松邪。

唯一需要注意的是哨查,Native Container 和 Webview 分別屬于兩個(gè)不同的上下文(Context)
1寒亥、Native Container 默認(rèn)的 Context 為“NATIVE APP"
2、Webview 默認(rèn)的 Context 為“WEBVIEW_+ 被測(cè)進(jìn)程名稱”挟纱。

所以,當(dāng)需要操作 Webview 中的網(wǎng)頁元素時(shí)檀轨,需要先切換到 Webview 的 Context 下

四参萄、移動(dòng)應(yīng)用專項(xiàng)測(cè)試的思路和方法

對(duì)于移動(dòng)應(yīng)用,順利完成全部業(yè)務(wù)功能測(cè)試往往是不夠的校赤。
如果關(guān)注點(diǎn)只是業(yè)務(wù)功能測(cè)試马篮,那么怜奖,當(dāng)移動(dòng)應(yīng)用被大量用戶安裝和使用時(shí)歪玲,就會(huì)暴露出很多之前完全沒有預(yù)料到的問題掷匠。比如:
1讹语、流量使用過多
2幅狮、耗電量過大
3崇摄、在某些設(shè)備終端上出現(xiàn)崩潰或者閃退的現(xiàn)象
4、多個(gè)移動(dòng)應(yīng)用相互切換后鸠儿,行為異常
5厕氨、在某些設(shè)備終端上無法順利安裝或卸載
6命斧、弱網(wǎng)絡(luò)環(huán)境下,無法正常使用
7贤徒、Android 環(huán)境下接奈,經(jīng)常出現(xiàn) ANR(Application Not Responding)
8通孽、......等等

4.1 交叉事件測(cè)試

交叉事件測(cè)試也叫中斷測(cè)試背苦,是指 App 執(zhí)行過程中,有其他事件或者應(yīng)用中斷當(dāng)前應(yīng)用執(zhí)行的測(cè)試秕噪。

比如巢价,App 在前臺(tái)運(yùn)行過程中,突然有電話打進(jìn)來城菊,或者收到短信凌唬,再或者是系統(tǒng)鬧鐘等情況漏麦。所以撕贞,在 App 測(cè)試時(shí),就需要把這些常見的中斷情況考慮在內(nèi)秧均,并進(jìn)行相關(guān)的測(cè)試目胡。

注:此類測(cè)試目前基本還都是采用手工測(cè)試的方式链快,并且都是在真機(jī)上進(jìn)行域蜗,不會(huì)使用模擬器。
1炉峰、采用手工測(cè)試的原因是,此類測(cè)試往往場景多半夷,而且很多事件很難通過自動(dòng)化的方式來模擬迅细,比如呼入電話茵典、接收短信等,這些因素都會(huì)造成自動(dòng)化測(cè)試的成本過高彩倚,得不償失帆离,所以工程實(shí)踐中哥谷,交叉事件測(cè)試往往全是基于手工的測(cè)試。
2猜扮、之所以采用真機(jī)破镰,是因?yàn)楹芏鄦栴}只會(huì)在真機(jī)上才能重現(xiàn)压储,采用模擬器測(cè)試沒有意義集惋。

需要覆蓋的場景主要包括:
1、多個(gè) App 同時(shí)在后臺(tái)運(yùn)行喉祭,并交替切換至前臺(tái)是否影響正常功能
2泛烙、要求相同系統(tǒng)資源的多個(gè) App 前后臺(tái)交替切換是否影響正常功能
比如兩個(gè) App 都需要播放音樂蔽氨,那么兩者在交替切換的過程中帆疟,播放音樂功能是否正常
3踪宠、App 運(yùn)行時(shí)接聽電話
4、App 運(yùn)行時(shí)接收信息
5绍妨、App 運(yùn)行時(shí)提示系統(tǒng)升級(jí)
6润脸、App 運(yùn)行時(shí)發(fā)生系統(tǒng)鬧鐘事件
7、App 運(yùn)行時(shí)進(jìn)入低電量模式
8他去、App 運(yùn)行時(shí)第三方安全軟件彈出告警
9津函、App 運(yùn)行時(shí)發(fā)生網(wǎng)絡(luò)切換
比如,由 Wifi 切換到移動(dòng) 4G 網(wǎng)絡(luò)孤页,或者從 4G 網(wǎng)絡(luò)切換到 3G 網(wǎng)絡(luò)等尔苦;
10、......還有很多

這些需要覆蓋的場景行施,也是我們今后測(cè)試的測(cè)試用例集允坚,每一場景都是一個(gè)測(cè)試用例的集合蛾号。

交叉事件測(cè)試稠项,不管是移動(dòng)端還是 PC 端,都是非常關(guān)鍵的鲜结,畢竟用戶環(huán)境是千奇百怪的展运,而且并不是所有用戶都是按設(shè)計(jì)好的流程去操作,這個(gè)地方很考驗(yàn)測(cè)試人員的從用戶角度考慮問題的思想精刷。

4.2 兼容性測(cè)試

確保 App 在各種終端設(shè)備棠众、各種操作系統(tǒng)版本胆数、各種屏幕分辨率王带、各種網(wǎng)絡(luò)環(huán)境下享言,功能的正確性。

常見的往往需要覆蓋以下的測(cè)試場景:
1纫事、不同操作系統(tǒng)的兼容性勘畔,包括主流的 Andoird 和 iOS 版本
2、主流的設(shè)備分辨率下的兼容性
3丽惶、主流移動(dòng)終端機(jī)型的兼容性
4炫七、同一操作系統(tǒng)中,不同語言設(shè)置時(shí)的兼容性
5钾唬、不同網(wǎng)絡(luò)連接下的兼容性万哪,比如 Wifi、GPRS知纷、EDGE壤圃、CDMA200 等
6陵霉、在單一設(shè)備上琅轧,與主流熱門 App 的兼容性,比如微信踊挠、抖音乍桂、淘寶等冲杀;

兼容性測(cè)試,通常都需要在各種真機(jī)上執(zhí)行相同或者類似的測(cè)試用例睹酌,所以往往采用自動(dòng)化測(cè)試的手段权谁, 同時(shí),由于需要覆蓋大量的真實(shí)設(shè)備憋沿,除了大公司會(huì)基于 Appium + Selenium Grid + OpenSTF 去搭建自己的移動(dòng)設(shè)備私有云平臺(tái)外旺芽,其他公司一般都會(huì)使用第三方的移動(dòng)設(shè)備云測(cè)平臺(tái)完成兼容性測(cè)試。

4.3 流量測(cè)試

由于 App 經(jīng)常需要在移動(dòng)互聯(lián)網(wǎng)環(huán)境下運(yùn)行辐啄,而移動(dòng)互聯(lián)網(wǎng)通常按照實(shí)際使用流量計(jì)費(fèi)采章,所以如果你的 App 耗費(fèi)的流量過多,那么一定不會(huì)很受歡迎壶辜。

通常需要覆蓋以下幾個(gè)方面的內(nèi)容:
1悯舟、App 執(zhí)行業(yè)務(wù)操作引起的流量
2、App 在后臺(tái)運(yùn)行時(shí)的消耗流量
3砸民、App 安裝完成后首次啟動(dòng)耗費(fèi)的流量
4抵怎、App 安裝包本身的大小
5、App 內(nèi)購買或者升級(jí)需要的流量

流量測(cè)試岭参,往往借助于 Android 和 iOS 自帶的工具進(jìn)行流量統(tǒng)計(jì)反惕,也可以利用 tcpdump、Wireshark 和 Fiddler 等網(wǎng)絡(luò)分析工具演侯。

Android 系統(tǒng):網(wǎng)絡(luò)流量信息通常存儲(chǔ)在 /proc/net/dev 目錄下承璃,也可以直接利用 ADB 工具獲取實(shí)時(shí)的流量信息。另外蚌本,推薦一款 Android 的輕量級(jí)性能監(jiān)控小工具 Emmagee盔粹,類似于 Windows 系統(tǒng)性能監(jiān)視器,能夠?qū)崟r(shí)顯示 App 運(yùn)行過程中 CPU程癌、內(nèi)存和流量等信息舷嗡。

iOS 系統(tǒng):可以使用 Xcode 自帶的性能分析工具集中的 Network Activity,分析具體的流量使用情況嵌莉。

但是进萄,流量測(cè)試的最終目的,并不是得到 App 的流量數(shù)據(jù)锐峭,而是要想辦法減少 App 產(chǎn)生的流量中鼠。雖然,減少 App 消耗的流量不是測(cè)試工程師的工作沿癞,但了解一些常用的方法援雇,也將有助于你的測(cè)試日常工作:
1、啟用數(shù)據(jù)壓縮椎扬,尤其是圖片
2惫搏、使用優(yōu)化的數(shù)據(jù)格式具温,比如同樣信息量的 JSON 文件就要比 XML 文件小
3、遇到既需要加密又需要壓縮的場景筐赔,一定是先壓縮再加密
4铣猩、減少單次 GUI 操作觸發(fā)的后臺(tái)調(diào)用數(shù)量
5、每次回傳數(shù)據(jù)盡可能只包括必要的數(shù)據(jù)
6茴丰、啟用客戶端的緩存機(jī)制
7达皿、......

4.4 耗電量測(cè)試

在目前的生態(tài)環(huán)境下,能提供類似服務(wù)或者功能的 App 往往有很多贿肩,如果在功能類似的情況下鳞绕,你的 App 特別耗電、讓設(shè)備發(fā)熱比較嚴(yán)重尸曼,那么你的用戶一定會(huì)卸載你的 App 而改用其他 App们何。
最典型的就是地圖等導(dǎo)航類的應(yīng)用,對(duì)耗電量特別敏感控轿。

通常從三個(gè)方面來考量:
1冤竹、App 運(yùn)行但沒有執(zhí)行業(yè)務(wù)操作時(shí)的耗電量
2、App 運(yùn)行且密集執(zhí)行業(yè)務(wù)操作時(shí)的耗電量
3茬射、App 后臺(tái)運(yùn)行的耗電量

耗電量檢測(cè)既有基于硬件的方法鹦蠕,也有基于軟件的方法。
Android 和 iOS 都有各自自己的方法:

  • Android 通過 adb 命令“adb shell dumpsys battery”來獲取應(yīng)用的耗電量信息在抛;
  • iOS 通過 Apple 的官方工具 Sysdiagnose 來收集耗電量信息钟病,然后,可以進(jìn)一步通過 Instrument 工具鏈中的 Energy Diagnostics 進(jìn)行耗電量分析刚梭。

推薦:Google推出的history batterian工具很好分析耗電情況

4.5 弱網(wǎng)測(cè)試

與傳統(tǒng)桌面應(yīng)用不同肠阱,移動(dòng)應(yīng)用的網(wǎng)絡(luò)環(huán)境比較多樣,而且經(jīng)常出現(xiàn)需要在不同網(wǎng)絡(luò)之間切換的場景朴读,即使是在同一網(wǎng)絡(luò)環(huán)境下屹徘,也會(huì)出現(xiàn)網(wǎng)絡(luò)連接狀態(tài)時(shí)好時(shí)壞的情況,比如時(shí)高時(shí)低的延遲衅金、經(jīng)常丟包噪伊、頻繁斷線,在乘坐地鐵氮唯、穿越隧道鉴吹,和地下車庫的場景下經(jīng)常會(huì)發(fā)生。

移動(dòng)應(yīng)用的測(cè)試需要保證在復(fù)雜網(wǎng)絡(luò)環(huán)境下的質(zhì)量惩琉。具體的做法就是:在測(cè)試階段豆励,模擬這些網(wǎng)絡(luò)環(huán)境,在 App 發(fā)布前盡可能多地發(fā)現(xiàn)并修復(fù)問題琳水。

推薦一款非常棒的開源移動(dòng)網(wǎng)絡(luò)測(cè)試工具:Facebook 的 Augmented Traffic Control(ATC)肆糕。

ATC 最好用的地方在于般堆,能夠在移動(dòng)終端設(shè)備上通過 Web 界面隨時(shí)切換不同的網(wǎng)絡(luò)環(huán)境在孝,同時(shí)多個(gè)移動(dòng)終端設(shè)備可以連接到同一個(gè) Wifi诚啃,各自模擬不同的網(wǎng)絡(luò)環(huán)境,相互之間不會(huì)有任何影響私沮。也就是說始赎,只要搭建一套 ATC 就能滿足你所有的網(wǎng)絡(luò)模擬需求。

4.6 邊界測(cè)試

邊界測(cè)試是指仔燕,移動(dòng) App 在一些臨界狀態(tài)下的行為功能的驗(yàn)證測(cè)試造垛,基本思路是需要找出各種潛在的臨界場景,并對(duì)每一類臨界場景做驗(yàn)證和測(cè)試晰搀。

主要的場景有:
1五辽、系統(tǒng)內(nèi)存占用大于 90% 的場景
2、系統(tǒng)存儲(chǔ)占用大于 95% 的場景
3外恕、飛行模式來回切換的場景
4杆逗、App 不具有某些系統(tǒng)訪問權(quán)限的場景,比如 App 由于隱私設(shè)置不能訪問相冊(cè)或者通訊錄等
5鳞疲、長時(shí)間使用 App罪郊,系統(tǒng)資源是否有異常,比如內(nèi)存泄漏尚洽、過多的鏈接數(shù)等
6悔橄、出現(xiàn) ANR 的場景
7、操作系統(tǒng)時(shí)間早于或者晚于標(biāo)準(zhǔn)時(shí)間的場景
8腺毫、時(shí)區(qū)切換的場景

總結(jié)

從業(yè)務(wù)功能測(cè)試的角度看癣疟,移動(dòng)應(yīng)用的測(cè)試用例設(shè)計(jì)和傳統(tǒng) PC 端的 GUI 自動(dòng)化測(cè)試策略比較類似,只是測(cè)試框架不同潮酒,數(shù)據(jù)驅(qū)動(dòng)争舞、頁面對(duì)象模型和業(yè)務(wù)流程封裝依舊適用;

各種專項(xiàng)測(cè)試是移動(dòng)應(yīng)用的測(cè)試重點(diǎn)澈灼,也有別于傳統(tǒng) GUI 測(cè)試竞川。專項(xiàng)測(cè)試包括:交叉事件測(cè)試、兼容性測(cè)試叁熔、流量測(cè)試委乌、耗電量測(cè)試、弱網(wǎng)絡(luò)測(cè)試和邊界測(cè)試荣回。

延伸:
問:耗電量測(cè)試遭贸,流量測(cè)試,以及app性能測(cè)試心软,怎么界定數(shù)據(jù)是否正常呢壕吹,比如說流量消耗是到哪個(gè)值覺得有優(yōu)化空間著蛙,內(nèi)存CPU到哪個(gè)值不正常需要優(yōu)化

答:其實(shí)并沒有明確的標(biāo)準(zhǔn),主要基于一些歷史統(tǒng)計(jì)數(shù)據(jù)耳贬,我們主要的做法是和現(xiàn)有版本踏堡,以及同類app做比較。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咒劲,一起剝皮案震驚了整個(gè)濱河市顷蟆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腐魂,老刑警劉巖帐偎,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蛔屹,居然都是意外死亡削樊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門兔毒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漫贞,“玉大人,你說我怎么就攤上這事眼刃∪葡剑” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵擂红,是天一觀的道長仪际。 經(jīng)常有香客問我,道長昵骤,這世上最難降的妖魔是什么树碱? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮变秦,結(jié)果婚禮上成榜,老公的妹妹穿的比我還像新娘。我一直安慰自己蹦玫,他們只是感情好赎婚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著樱溉,像睡著了一般挣输。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上福贞,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天撩嚼,我揣著相機(jī)與錄音,去河邊找鬼。 笑死完丽,一個(gè)胖子當(dāng)著我的面吹牛恋技,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逻族,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蜻底,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了瓷耙?” 一聲冷哼從身側(cè)響起朱躺,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤刁赖,失蹤者是張志新(化名)和其女友劉穎搁痛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宇弛,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸡典,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了枪芒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彻况。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舅踪,靈堂內(nèi)的尸體忽然破棺而出纽甘,到底是詐尸還是另有隱情,我是刑警寧澤抽碌,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布悍赢,位于F島的核電站,受9級(jí)特大地震影響货徙,放射性物質(zhì)發(fā)生泄漏左权。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一痴颊、第九天 我趴在偏房一處隱蔽的房頂上張望赏迟。 院中可真熱鬧,春花似錦蠢棱、人聲如沸锌杀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糕再。三九已至,卻和暖如春饰豺,著一層夾襖步出監(jiān)牢的瞬間亿鲜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒿柳,地道東北人饶套。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像垒探,于是被迫代替她去往敵國和親妓蛮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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