Jmeter 壓力測(cè)試并輸出HTML報(bào)告

在進(jìn)行性能測(cè)試執(zhí)行之前锤灿,需要進(jìn)行場(chǎng)景的設(shè)計(jì):
以什么方式啟動(dòng),如何持續(xù)進(jìn)行昔期,直至測(cè)試結(jié)束

三部曲:?jiǎn)?dòng)---持續(xù)進(jìn)行---結(jié)束

  • 啟動(dòng)
    虛擬用戶(VR)如何進(jìn)入測(cè)試現(xiàn)場(chǎng)
    1)同時(shí)加載所有VR還是分階段逐漸加載驹尼?
    2)一次加載100個(gè)VR 還是 每2秒加載5個(gè)VR,40秒完成100個(gè)VR的加載尸执?
  • 持續(xù)時(shí)間
    在到達(dá)最大負(fù)載后,繼續(xù)運(yùn)行一段時(shí)間還是進(jìn)行多次循環(huán)
  • 結(jié)束
    和啟動(dòng)相對(duì)應(yīng)缓醋,某個(gè)時(shí)刻全部停止 或者分階段逐漸減少用戶如失,如2秒鐘停止10個(gè)用戶的操作,20秒后結(jié)束所有用戶的操作

PS:一般情況下送粱,建議限制Jmeter的的線程數(shù)在300及以內(nèi)褪贵,這樣能更好的發(fā)揮出jmeter的性能


本文模擬場(chǎng)景:
請(qǐng)求頁(yè)面:百度新聞頁(yè)、知道頁(yè)抗俄、音樂(lè)頁(yè)訪問(wèn)
100個(gè)線程竭鞍,循環(huán)20次,同時(shí)加載完結(jié)束后全部停止
指標(biāo):響應(yīng)時(shí)間以及錯(cuò)誤率

測(cè)試步驟:
測(cè)試計(jì)劃---線程組--HTTP請(qǐng)求---監(jiān)聽(tīng)器---運(yùn)行腳本---查看報(bào)告

PS:默認(rèn)情況下橄镜,JMeter運(yùn)行需要占用1 GB的內(nèi)存偎快,這可能還不夠,取決于你的測(cè)試計(jì)劃和需要運(yùn)行的線程數(shù)

一洽胶、創(chuàng)建測(cè)試計(jì)劃(Test plan building)

一個(gè)測(cè)試計(jì)劃描述了一系列Jmeter運(yùn)行時(shí)需要執(zhí)行的步驟晒夹,可以包含一個(gè)或者多個(gè)線程組,邏輯控制器姊氓,取樣發(fā)生控制丐怯,監(jiān)聽(tīng)器,定時(shí)器翔横,斷言和配置元件读跷。

啟動(dòng)JMeter,會(huì)出現(xiàn)一個(gè)空的測(cè)試計(jì)劃禾唁,此次練習(xí)通過(guò)手寫(xiě)腳本來(lái)實(shí)現(xiàn)
(不熟悉操作的效览,也可以通過(guò)模板的形式創(chuàng)建,在菜單欄文件--Templates荡短,下拉列表中選擇Recording丐枉,點(diǎn)擊Create,一個(gè)完整的Test Plan就生成了掘托,當(dāng)然我們可以刪除不需要的內(nèi)容)

測(cè)試計(jì)劃.png

二瘦锹、添加線程組

作用:模擬用戶個(gè)數(shù)、發(fā)送請(qǐng)求的頻率及次數(shù)
PS:設(shè)置合理的線程數(shù)對(duì)能否達(dá)到測(cè)試目標(biāo)有著決定性的影響,另外弯院,設(shè)置合理的循環(huán)次數(shù)也很重要

  • 線程數(shù):虛擬用戶數(shù)
  • Ramp-Up period :設(shè)置虛擬用戶數(shù)全部啟動(dòng)的時(shí)長(zhǎng)(多少秒內(nèi)完成所有線程的創(chuàng)建)
    如圖線程數(shù)為100辱士,準(zhǔn)備時(shí)長(zhǎng)為1秒,表示需要1秒鐘啟動(dòng)100個(gè)線程听绳,也就是平均每秒啟動(dòng)100個(gè)線程
  • 循環(huán)次數(shù):如果勾選了永遠(yuǎn)颂碘,那么它將永遠(yuǎn)發(fā)送下去,直到停止腳本辫红,循環(huán)數(shù)=20凭涂,則運(yùn)行100個(gè)線程*20次祝辣,即2000次
添加線程組.png

三贴妻、添加HTTP請(qǐng)求

此處添加3個(gè)HTTP請(qǐng)求

請(qǐng)求頁(yè)面.png

四、添加監(jiān)聽(tīng)器

1蝙斜、添加響應(yīng)斷言:設(shè)置響應(yīng)碼為200

響應(yīng)斷言.png

2名惩、查看結(jié)果樹(shù),驗(yàn)證請(qǐng)求
調(diào)試時(shí)線程數(shù)和循環(huán)次數(shù)設(shè)為1就可以了孕荠,記得調(diào)試好之后再改回去

查看結(jié)果樹(shù).png

3娩鹉、禁用查看結(jié)果樹(shù),命令行執(zhí)行腳本
我們?cè)趩?dòng)Jmeter時(shí)就會(huì)看到命令行的提示信息稚伍,進(jìn)行負(fù)載測(cè)試時(shí)請(qǐng)不要使用GUI模式弯予,也就是用命令行模式運(yùn)行 JMeter 測(cè)試腳本,這樣可以大大縮減所需要的系統(tǒng)資源

備注:GUI 即圖形用戶界面模式个曙,只應(yīng)用于創(chuàng)建測(cè)試腳本锈嫩、調(diào)試腳本

提示語(yǔ).png

圖中也給出了命令格式:jmeter -n -t [jmx file] -l [result file] -e -o [Path to output folder],JMeter 默認(rèn)去當(dāng)前目錄尋找腳本文件垦搬,并把日志記錄在當(dāng)前目錄呼寸,當(dāng)然也可以使用絕對(duì)路徑來(lái)執(zhí)行

  • jmx file:測(cè)試計(jì)劃的文件名稱
  • result file:輸出文件路徑,可以是結(jié)果日志名稱
  • Path to output folder:要保存的report文件路徑

參數(shù)說(shuō)明:

  • -n:非GUI模式執(zhí)行JMeter
  • -t:執(zhí)行測(cè)試文件所在的位置
  • -l:指定生成測(cè)試結(jié)果的保存文件猴贰,jtl文件格式
  • -e:測(cè)試結(jié)束后对雪,生成測(cè)試報(bào)告
  • -o:指定測(cè)試報(bào)告的存放位置

(1)直接生成HTML報(bào)告
PS:輸出文件(-l后的文件)必須是不存在的,report文件夾為空文件夾或者不存在(-o后面的)米绕,不然無(wú)法生存報(bào)告
啟動(dòng)CMD窗口瑟捣,輸入以下命令:
jmeter -n -t C:\Users\zhangXXX\Desktop\baidu.jmx -l C:\Users\zhangXXX\Desktop\html.csv -e -o C:\Users\zhangXXX\Desktop\baidu-reports

文件內(nèi)容不為空時(shí)報(bào)錯(cuò).png

(2)使用之前的測(cè)試結(jié)果,生成測(cè)試報(bào)告
啟動(dòng)CMD窗口栅干,先生成測(cè)試結(jié)果蝶柿,再生成報(bào)告,輸入以下命令:

  • jmeter -n -t C:\Users\zhangXXX\Desktop\baidu.jmx -l 201804020001.jtl
非GUI模式執(zhí)行.png
結(jié)果文件.png
  • jmeter -g 201804020001.jtl -o C:\Users\zhangXXX\Desktop\baidu-reports
報(bào)告.png

PS:-g 指定已存在的測(cè)試結(jié)果文件

以上兩種方法非驮,其實(shí)最終都依賴生成的測(cè)試報(bào)告交汤。雙擊報(bào)告文件夾中的index.html就可以查看報(bào)告

報(bào)告詳解

Dashboard:
Test and Report informations:指的是測(cè)試和報(bào)告信息

  • File:測(cè)試結(jié)果的保存文件名稱
  • Start Time:測(cè)試開(kāi)始時(shí)間
  • End Time:測(cè)試結(jié)束時(shí)間
  • Filter for display展示過(guò)濾器

APDEX(Application Performance Index):應(yīng)用程序性能滿意度的標(biāo)準(zhǔn),范圍在0-1之間,1表示達(dá)到所有用戶均滿意芙扎,越接近1滿意度越高

Requests Summary:請(qǐng)求的通過(guò)率(OK)與失敗率(KO)星岗,百分比顯示

Statistics:數(shù)據(jù)分析,基本將Summary Report和Aggrerate Report的結(jié)果合并

Errors:錯(cuò)誤情況戒洼,依據(jù)不同的錯(cuò)誤類型俏橘,將所有錯(cuò)誤結(jié)果展示

Dashboard.png

Charts:用圖表的形式展示測(cè)試數(shù)據(jù),讓測(cè)試報(bào)告更加直觀**
主要有如下特點(diǎn):
(1)將測(cè)試過(guò)程中經(jīng)常使用的數(shù)據(jù)圈浇,用圖表的形式展示寥掐,讓測(cè)試結(jié)果更加直觀
(2)每個(gè)圖表數(shù)據(jù),有兩種展示形式
(3)支持請(qǐng)求樣例過(guò)濾顯示
(4)支持導(dǎo)出PNG圖片格式

Over Time Charts:

  • Response Times Over Time:每秒鐘響應(yīng)時(shí)間磷蜀,X軸表示的是系統(tǒng)運(yùn)行的時(shí)刻召耘,Y軸表示的是響應(yīng)時(shí)間,F(xiàn)(X,Y)表示系統(tǒng)隨著時(shí)間的推移褐隆,系統(tǒng)的響應(yīng)時(shí)間的變化污它,可以看出響應(yīng)時(shí)間穩(wěn)定性
  • Bytes Throughput Over Time:字節(jié)接收與發(fā)送的數(shù)量,每秒傳輸字節(jié)吞吐量庶弃,表明Jmeter在測(cè)試時(shí)衫贬,隨著時(shí)間推移發(fā)送和接收的字節(jié)數(shù)
  • Latencies Over Time:延遲時(shí)間
over time.png

Throughput Charts:

  • Hits Per Second: 每秒點(diǎn)擊率
  • Codes Per Second:每秒狀態(tài)碼數(shù)量
  • Transactions Per Second:每秒事務(wù)量
  • Response Time Vs Request:響應(yīng)時(shí)間點(diǎn)請(qǐng)求的成功與失敗數(shù)
  • Latency Vs Request:延遲時(shí)間點(diǎn)請(qǐng)求的成功與失敗數(shù)
Throughput Charts.png

Response Times Charts:

  • Response Time Percentiles:響應(yīng)時(shí)間百分比
  • Active Threads Over Time:激活線程數(shù)
  • Time Vs Threads:響應(yīng)時(shí)間用戶數(shù), X軸表示的是活動(dòng)線程數(shù)歇攻,也就是并發(fā)訪問(wèn)的用戶數(shù)固惯,Y軸表示的是響應(yīng)時(shí)間,F(xiàn)(X,Y)表示在某種并發(fā)量的情況下缴守,系統(tǒng)的響應(yīng)時(shí)間是多少
  • Response Time Distribution:響應(yīng)時(shí)間分布
Response Times Charts.png

4葬毫、添加所需監(jiān)聽(tīng)器,導(dǎo)入日志文件即可查看
在性能測(cè)試過(guò)程中斧散,我們往往需要將測(cè)試結(jié)果保存在一個(gè)文件當(dāng)中供常,也可以為日后的性能測(cè)試報(bào)告提供更多的素材

在Jmeter中,結(jié)果都存放在 .jtl 文件中鸡捐,格式有很多種栈暇,可以根據(jù)需要進(jìn)行更愛(ài),選擇某個(gè)監(jiān)聽(tīng)器箍镜,在configure頁(yè)面進(jìn)行相應(yīng)配置源祈,讓我們來(lái)查看下保存后的文件有哪些內(nèi)容:

日志文件內(nèi)容.png
  • timeStamp:請(qǐng)求發(fā)出的絕對(duì)時(shí)間
  • elapsed:響應(yīng)時(shí)間
  • label:HTTP請(qǐng)求名稱
  • responseCode:請(qǐng)求返回碼
  • responseMessage:請(qǐng)求返回消息
  • threadName:請(qǐng)求所屬的線程名稱
  • dataType:數(shù)據(jù)類型
  • success:是否成功
  • failureMessage:失敗信息
  • bytes:字節(jié)
  • sentBytes:發(fā)送字節(jié)數(shù)
  • grpThreads:
  • allThreads:
  • Latency:延遲
  • IdleTime:思考時(shí)間
  • Connect:連接

接下來(lái)添加一個(gè)聚合報(bào)告,然后導(dǎo)入日志文件色迂,查看結(jié)果香缺,還可以添加其他的監(jiān)聽(tīng)器,操作方法一樣

導(dǎo)入日志文件.png

PS:如果測(cè)試計(jì)劃中增加了監(jiān)聽(tīng)器(生成概要結(jié)果)歇僧,在執(zhí)行命令時(shí)就可以看到每個(gè)線程的執(zhí)行情況

查看每個(gè)線程的執(zhí)行情況.png

PS:設(shè)置好線程數(shù)图张、循環(huán)次數(shù)锋拖、集合點(diǎn)、事務(wù)祸轮、斷言兽埃、關(guān)聯(lián)等等后即可執(zhí)行壓力測(cè)試



最后,大并發(fā)下還是需要進(jìn)行分布式性能測(cè)試

原理和LR的agent差不多适袜,因?yàn)閖meter由Java開(kāi)發(fā)柄错,耗內(nèi)存、cpu苦酱,所以需要采用分布式

步驟:
1售貌、關(guān)閉防火墻
2、在所要運(yùn)行jmeter并作為負(fù)載生成器的機(jī)器上安裝jmeter(確保在所有系統(tǒng)中使用了相同版本號(hào)的Jmeter和jdk)
PS:目標(biāo)服務(wù)器需要在相同網(wǎng)段疫萤,確保Jmeter可以訪問(wèn)目標(biāo)服務(wù)器
3颂跨、確定其中一臺(tái)機(jī)器作為主controller,其他的機(jī)器作為agent给僵,然后運(yùn)行所有agent機(jī)器上的jmeter-server文件
4毫捣、在controller機(jī)器的jmeter中bin目錄下详拙,找到j(luò)meter.properties文件帝际,添加節(jié)點(diǎn)IP,修改localhost為壓力機(jī)IP

image.png

5饶辙、啟動(dòng)conttoller機(jī)子上的jmeter應(yīng)用蹲诀,選擇菜單【運(yùn)行】---遠(yuǎn)程啟動(dòng)來(lái)分別啟動(dòng)agent,也可以直接選擇【遠(yuǎn)程全部啟動(dòng)】來(lái)將所有個(gè)agent啟動(dòng)

在性能測(cè)試過(guò)程中弃揽,我們通常需要將測(cè)試結(jié)果保存在一個(gè)文件當(dāng)中脯爪,既可以保存測(cè)試結(jié)果,也可以為日后的性能測(cè)試報(bào)告提供更多的素材

Jmeter中矿微,結(jié)果都存放在.jtl文件痕慢,一般以csv文件格式記錄,只需要選擇某個(gè)監(jiān)聽(tīng)器涌矢,點(diǎn)擊頁(yè)面的configure按鈕掖举,建議勾選如下項(xiàng):Save Field Name,Save Assertion Failure Message



Jmeter的應(yīng)用場(chǎng)景:性能測(cè)試(接口層)

技術(shù)點(diǎn):HTTP相關(guān)設(shè)置+參數(shù)化+斷言+關(guān)聯(lián)+簡(jiǎn)單控制器+查看結(jié)果樹(shù)
關(guān)聯(lián):通過(guò)Json控件或正則表達(dá)式獲取
(1)線程組建議替換為jp@gc - Stepping Thread Group娜庇,功能比線程組多很多

線程
  • this group will start N threads:相當(dāng)于LR中的并發(fā)數(shù)
  • First塔次,wait for N seconds:?jiǎn)?dòng)第一個(gè)線程之前,需要等待N秒
  • Then start N threads:設(shè)置最開(kāi)始啟動(dòng)N個(gè)線程
  • Next,add N1 threads every N2 seconds,using ramp-up N3 seconds:在N3秒內(nèi)啟動(dòng)N1個(gè)線程名秀,啟動(dòng)的策略為每隔N2秒啟動(dòng)一個(gè)
  • Then hold load for N seconds:并發(fā)數(shù)全部達(dá)到后再運(yùn)行多久
  • Finally,stop N1 threads every N2 seconds:每隔N2秒停止N1個(gè)

(2)可以加事務(wù)控制器
(3)查看結(jié)果樹(shù)替換為聚合報(bào)告或類似的報(bào)告励负,如果還是想看查看結(jié)果樹(shù)記得勾選僅日志錯(cuò)誤(查看結(jié)果樹(shù)打印的日志比較多,會(huì)影響性能)
(4)造數(shù)據(jù)

總結(jié):
一個(gè)子系統(tǒng)建議放在同一個(gè) “測(cè)試計(jì)劃”中匕得,流程測(cè)試可以通過(guò)“線程組”來(lái)區(qū)分继榆,這樣也便于設(shè)定不同的測(cè)試數(shù)據(jù)個(gè)數(shù)。
比較獨(dú)立的接口,可以統(tǒng)一放在一個(gè)線程組內(nèi)略吨,順序完成測(cè)試攒发。

流程性接口的測(cè)試:如果要測(cè)試的接口可以組成一個(gè)流程,只需要順序添加多個(gè)“HTTP 請(qǐng)求”的Sampler晋南,各請(qǐng)求之間可以提取需要在上下文傳遞的數(shù)據(jù)作為參數(shù)惠猿,以保證流程中數(shù)據(jù)的一致性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市负间,隨后出現(xiàn)的幾起案子偶妖,更是在濱河造成了極大的恐慌,老刑警劉巖政溃,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趾访,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡董虱,警方通過(guò)查閱死者的電腦和手機(jī)扼鞋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)愤诱,“玉大人云头,你說(shuō)我怎么就攤上這事∫耄” “怎么了溃槐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)科吭。 經(jīng)常有香客問(wèn)我昏滴,道長(zhǎng),這世上最難降的妖魔是什么对人? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任谣殊,我火速辦了婚禮,結(jié)果婚禮上牺弄,老公的妹妹穿的比我還像新娘姻几。我一直安慰自己,他們只是感情好猖闪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布鲜棠。 她就那樣靜靜地躺著,像睡著了一般培慌。 火紅的嫁衣襯著肌膚如雪豁陆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天吵护,我揣著相機(jī)與錄音盒音,去河邊找鬼表鳍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛祥诽,可吹牛的內(nèi)容都是我干的譬圣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼雄坪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼厘熟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起维哈,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绳姨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后阔挠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體飘庄,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年购撼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了跪削。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迂求,死狀恐怖碾盐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锁摔,我是刑警寧澤廓旬,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布哼审,位于F島的核電站谐腰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涩盾。R本人自食惡果不足惜十气,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望春霍。 院中可真熱鬧砸西,春花似錦、人聲如沸址儒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)莲趣。三九已至鸳慈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喧伞,已是汗流浹背走芋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工绩郎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翁逞。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓肋杖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親挖函。 傳聞我的和親對(duì)象是個(gè)殘疾皇子状植,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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

  • 主要文體來(lái)自 CDNS:https://www.cnblogs.com/ceshisanren/p/5639895...
    Amano閱讀 10,992評(píng)論 3 27
  • 在使用Jmeter進(jìn)行接口的性能測(cè)試時(shí),由于Jmeter 是JAVA應(yīng)用怨喘,對(duì)于CPU和內(nèi)存的消耗比較大浅萧,所以,當(dāng)需...
    燕京博士閱讀 4,167評(píng)論 0 16
  • getApplicationContext()返回的是整個(gè)應(yīng)用Application的context哲思,生命周期是整...
    拉格朗日閱讀 514評(píng)論 0 1
  • 舊文搬家系列之 我們踩著風(fēng) 有朋友對(duì)我說(shuō)洼畅,你好久不更新日志了。是啊棚赔。一年多沒(méi)寫(xiě)過(guò)了呢帝簇。原因之一是,其實(shí)我一直在默默...
    麥兜不是豬閱讀 623評(píng)論 0 0
  • 充實(shí)的一天過(guò)得很快靠益,早晨六點(diǎn)多我們準(zhǔn)時(shí)起床丧肴,簡(jiǎn)單的吃過(guò)早飯我們就出了門。在路上兒子一個(gè)勁的跟我說(shuō)中午不用做...
    健康快樂(lè)_4123閱讀 178評(píng)論 0 0