老司機帶你玩轉(zhuǎn)APP的Monkey測試

1帜消,解壓ADB壓縮包,在cmd窗口下浓体,啟動adb服務(wù):

image.png

image.png

2泡挺,使用USB將手機和電腦連接,并將手機設(shè)置為開發(fā)者模式命浴,使用adb devices命令查看當(dāng)前連接設(shè)備:

image.png

3娄猫,執(zhí)行monkey命令

monkey是只皮猴子,是安卓中的一個UI壓力測試工具生闲,重在測試穩(wěn)定性媳溺。但是在運用monkey測試app,深受其亂點的煩惱碍讯,雖然在指定app的情況下悬蔽,依然會隨機點到app外面,然后再也回不來了捉兴,大大降低了其作用蝎困。

查閱了網(wǎng)上不少文章,在看這篇文章的時候倍啥,突然有了點啟發(fā)https://blog.csdn.net/liyu520131414/article/details/6935777

這篇文章的思路就是在monkey在執(zhí)行時候禾乘,另外開啟一個程序?qū)ζ溥M行輪詢,如果不在指定的頁面虽缕,就隨機將它拉到app里指定的頁面始藕。

當(dāng)然java我不太懂,只是大致看了下氮趋,在執(zhí)行的時候也沒有達到理想的效果伍派,也許是我執(zhí)行的方式不對,因此參照他的思路凭峡,用python寫了個輪詢腳本拙已,當(dāng)然功能上也比他寫的縮減了不少,暫時只是對連接在電腦上一臺手機進行此操作摧冀,詳細優(yōu)化步驟如下。

1.monkey腳本

先來看下原先我們執(zhí)行的腳本

adb shell monkey -p cn.citytag.mapgo -s 2333 --pct-touch 70 --pct-motion 30 --ignore-crashes --ignore-timeouts --monitor-native-crashes --throttle 200 -v -v 500000 >E:\logs\monkey0903.txt

monkey命令的含義就不細說了系宫,網(wǎng)上有超多文章進行了詳細解釋索昂,綠色--pct-touch 70 --pct-motion 30這兩個命令是后面增加的,一個代表點擊扩借,一個代表滑動椒惨,兩個加起來是100,代表不會進行其他事件操作潮罪,如軌跡事件康谆,導(dǎo)航事件等等并齐,指定這兩種操作后诈火,就極大的降低了monkey點到被測app外面的概率

另外還是會有在執(zhí)行向下滑動的命令時,打開了通知欄,然后又開始了瞎點的操作号涯。這時可在執(zhí)行monkey命令之前,先執(zhí)行禁用通知欄的命令

adb shell settings put global policy_control immersive.full=*

解禁命令:adb shell settings put global policy_control null

這里對monkey的參數(shù)做一個注解:
命令參數(shù)
可以使用命令 adb shell monkey -help 查看命令參數(shù)

1咐汞、參數(shù): -p

用于約束限制引有,用此參數(shù)指定一個或多個應(yīng)用。指定應(yīng)用之后惜辑,monkey將只允許系統(tǒng)啟動指定的app唬涧;如果不指定應(yīng)用,將允許系統(tǒng)啟動設(shè)備中的所有應(yīng)用盛撑。

指定一個應(yīng)用: adb shell monkey -p com.ifeng.news2 100

指定多個應(yīng)用:adb shell monkey -p com.ifext.news –p com.ifeng.news2 100

不指定應(yīng)用:adb shell monkey 100

2碎节、參數(shù):-c

用于約束限制,用此參數(shù)指定了一個或幾個類別抵卫,Monkey將只允許系統(tǒng)啟動被這些類別中的某個類別列出的Activity钓株。如果不指定任何類別,Monkey將選擇下列類別中列出的Activity:Intent.CATEGORY.LAUNCHER 或 Intent.CATEGORY.MONKEY陌僵。要指定多個類別轴合,需要使用多個-c選項,每個-c選項只能用于一個類別碗短。

3受葛、參數(shù):-v

用于指定反饋信息級別(信息級別就是日志的詳細程度),總共分3個級別:

默認級別 Level 0:-v

adb shell monkey -p com.ifeng.news2 –v 100:說明僅提供啟動提示偎谁、測試完成和最終結(jié)果等少量信息

日志級別 Level 1:-v -v

adb shell monkey -p com.ifeng.news2 –v -v 100:說明提供較為詳細的日志总滩,包括每個發(fā)送到Activity的事件信息

日志級別 Level 2:-v -v -v

adb shell monkey -p com.ifeng.news2 –v -v –v 100:說明最詳細的日志,包括了測試中選中/未選中的Activity信息

4巡雨、參數(shù): -s

偽隨機數(shù)生成器的seed值闰渔。如果用相同的seed值再次運行Monkey,它將生成相同的事件序列

Monkey 測試1:adb shell monkey -p com.ifeng.news2 -s 10 100

Monkey 測試2:adb shell monkey -p com.ifeng.news2 –s 10 100

兩次測試的效果是相同的铐望,因為模擬的用戶操作序列(每次操作按照一定的先后順序所組成的一系列操作冈涧,即一個序列)是一樣的。

5正蛙、參數(shù): --throttle<毫秒>

用于指定用戶操作(即事件)間的延時督弓,單位是毫秒

adb shell monkey -p com.ifeng.news2 --throttle 5000 100

6、參數(shù): --ignore-crashes

用于指定當(dāng)應(yīng)用程序崩潰時(Force& Close錯誤)乒验,Monkey是否停止運行愚隧。如果使用此參數(shù),即使應(yīng)用程序崩潰锻全,Monkey依然會發(fā)送事件狂塘,直到事件計數(shù)完成录煤。

adb shellmonkey -p com.ifeng.news2 --ignore-crashes 1000

測試過程中即使程序崩潰,Monkey依然會繼續(xù)發(fā)送事件直到事件數(shù)目達到1000為止

adb shellmonkey -p com.ifeng.news2 1000

測試過程中荞胡,如果acg程序崩潰妈踊,Monkey將會停止運行

7、參數(shù): --ignore-timeouts

用于指定當(dāng)應(yīng)用程序發(fā)生ANR(Application No Responding)錯誤時硝训,Monkey是否停止運行响委。如果使用此參數(shù),即使應(yīng)用程序發(fā)生ANR錯誤窖梁,Monkey依然會發(fā)送事件赘风,直到事件計數(shù)完成。

adb shellmonkey -p com.ifeng.news2--ignore-timeouts 1000

8纵刘、參數(shù): --ignore-security-exceptions

用于指定當(dāng)應(yīng)用程序發(fā)生許可錯誤時(如證書許可邀窃,網(wǎng)絡(luò)許可等),Monkey是否停止運行假哎。如果使用此參數(shù)瞬捕,即使應(yīng)用程序發(fā)生許可錯誤,Monkey依然會發(fā)送事件舵抹,直到事件計數(shù)完成肪虎。

adb shellmonkey -p com.ifeng.news2 --ignore-security-exception 1000

9、參數(shù): --kill-process-after-error

用于指定當(dāng)應(yīng)用程序發(fā)生錯誤時惧蛹,是否停止其運行扇救。如果指定此參數(shù),當(dāng)應(yīng)用程序發(fā)生錯誤時香嗓,應(yīng)用程序停止運行并保持在當(dāng)前狀態(tài)(注意:應(yīng)用程序僅是靜止在發(fā)生錯誤時的狀態(tài)迅腔,系統(tǒng)并不會結(jié)束該應(yīng)用程序的進程)。

adb shellmonkey -p cn.emoney.acg --kill-process-after-error 1000

10靠娱、參數(shù): --monitor-native-crashes

用于指定是否監(jiān)視并報告應(yīng)用程序發(fā)生崩潰的本地代碼沧烈。

adb shellmonkey -p cn.emoney.acg --monitor-native-crashes 1000

11、參數(shù): --pct-{+事件類別}{+事件類別百分比}

用于指定每種類別事件的數(shù)目百分比(在Monkey事件序列中像云,該類事件數(shù)目占總事件數(shù)目的百分比)

--pct-touch{+百分比}:

調(diào)整觸摸事件的百分比(觸摸事件是一個down-up事件锌雀,它發(fā)生在屏幕上的某單一位置)

adb shell monkey -p com.ifeng.news2 --pct-touch 10 1000

--pct-motion {+百分比}:

調(diào)整動作事件的百分比(動作事件由屏幕上某處的一個down事件、一系列的偽隨件機事和一個up事件組成)

adb shell monkey -p com.ifeng.news2 --pct-motion 20 1000

--pct-trackball {+百分比}:

調(diào)整軌跡事件的百分比(軌跡事件由一個或幾個隨機的移動組成苫费,有時還伴隨有點擊)

adb shell monkey -p com.ifeng.news2 --pct-trackball 30 1000

--pct-nav {+百分比}:

調(diào)整“基本”導(dǎo)航事件的百分比(導(dǎo)航事件由來自方向輸入設(shè)備的up/down/left/right組成)

adb shell monkey -p com.ifeng.news2 --pct-nav 40 1000

--pct-majornav {+百分比}:

調(diào)整“主要”導(dǎo)航事件的百分比(這些導(dǎo)航事件通常引發(fā)圖形界面中的動作汤锨,如:5-way鍵盤的中間按鍵、回退按鍵百框、菜單按鍵)

adb shell monkey -p com.ifeng.news2 --pct-majornav 50 1000

操作事件簡介
Monkey所執(zhí)行的隨機事件流中包含11大事件,分別是觸摸事件牍汹、手勢事件铐维、二指縮放事件柬泽、軌跡事件、屏幕旋轉(zhuǎn)事件嫁蛇、基本導(dǎo)航事件锨并、主要導(dǎo)航事件、系統(tǒng)按鍵事件睬棚、啟動Activity事件第煮、鍵盤事件、其他類型事件抑党。Monkey通過這11大事件來模擬用戶的常規(guī)操作包警,對手機App進行穩(wěn)定性測試。下面讓我們來詳細了解這11大事件底靠。

1.觸摸事件
觸摸事件是指在屏幕某處按下并抬起的操作害晦,可通過--pct-touch參數(shù)來配置其事件百分比。從Monkey執(zhí)行該事件對外輸出的日志可以看到暑中。 該事件由一組Touch(ACTION_DOWN)和Touch(ACTION_UP)事件組成壹瘟,在手機上看到實際操作類似于點擊。

2.手勢事件
手勢事件是指在屏幕某處的按下鳄逾、隨機移動稻轨、抬起的操作,即直線滑動操作雕凹∨咕悖可通過--pct-motion參數(shù)來配置其事件百分比。

該事件是由一個ACTION_DOWN事件请琳、一系列ACTION_MOVE事件和一個ACTION_UP事件組成的粱挡,在手機上看到的實際操作是一個沒有拐彎的直線滑動操作。

3.二指縮放事件
二指縮放事件是指在屏幕上的兩處同時按下俄精,并同時移動询筏,最后同時抬起的操作,即智能機上的放大縮小手勢操作竖慧∠犹祝可通過--pct-pinchzoom參數(shù)來配置其事件百分比。從Monkey執(zhí)行該事件對外輸出的日志可以看到:

該事件起始是一個ACTION_DOWN事件和一個ACTION_POINTER_DOWN事件圾旨,即模擬兩個手指同時點下踱讨;中間是一系列的ACTION_MOVE事件,即兩個手指同時在屏幕上直線滑動砍的;結(jié)束是由一個ACTION_POINTER_UP事件和一個ACTION_UP事件組成的痹筛,即兩個手指同時放開。

4.軌跡事件
軌跡事件是由一個或多個隨機的移動組成的,有時會伴隨著點擊帚稠。很早之前的Android手機帶有軌跡球谣旁,這個事件就是模擬的軌跡球的操作。現(xiàn)在的手機幾乎都沒有軌跡球滋早,但軌跡球事件中包含曲線滑動操作榄审,如果被測程序需要曲線滑動時可以選用此參數(shù)「唆铮可通過--pct-trackball參數(shù)來配置其事件百分比搁进。從Monkey執(zhí)行該事件對外輸出的日志可以看到:

該事件是由一系列的Trackball(ACTION_MOVE)事件組成的,觀察手機上的操作昔头,即為一系列的曲線滑動操作饼问。

5.屏幕旋轉(zhuǎn)事件
屏幕旋轉(zhuǎn)事件是一個隱藏事件,在Android官方文檔中并沒有記錄這個事件减细。它其實是模擬的Android手機的橫屏和豎屏切換匆瓜。可通過--pct-rotation參數(shù)來配置其事件百分比未蝌。從Monkey執(zhí)行該事件對外輸出的日志可以看到: [代碼] 該事件由一個rotation事件組成驮吱,其中degree表示的是旋轉(zhuǎn)方向,順時針旋轉(zhuǎn)萧吠,0表示旋轉(zhuǎn)90度的方向左冬,1表示旋轉(zhuǎn)180度的方向,2表示旋轉(zhuǎn)270度的方向纸型,3表示旋轉(zhuǎn)360度的方向拇砰。在執(zhí)行過程中,可以看到手機屏幕在橫豎屏之間不斷地切換狰腌。

6.基本導(dǎo)航事件
基本導(dǎo)航事件是指點擊方向輸入設(shè)備的上除破、下、左琼腔、右按鍵的操作瑰枫,現(xiàn)在手機上很少有上、下丹莲、左光坝、右按鍵,這種事件一般用得比較少甥材《⒘恚可通過--pct-nav參數(shù)來配置其事件百分比。從Monkey執(zhí)行該事件對外輸出的日志可以看到:

該事件是由一個Key(ACTION_DOWN)和一個Key(ACTION_UP)組成的洲赵,點擊的就是上鸳惯、下商蕴、左、右四個方向按鍵悲敷。

7.主要導(dǎo)航事件
主要導(dǎo)航事件是指點擊“主要導(dǎo)航”按鍵的操作究恤,這些按鍵通常會導(dǎo)致UI界面中的動作俭令,如鍵盤的中間鍵后德、回退按鍵、菜單按鍵抄腔∑芭龋可通過--pct-majornav參數(shù)來配置其事件百分比。從Monkey執(zhí)行該事件對外輸出的日志可以看到: [代碼] 該事件是由一個Key(ACTION_DOWN)和一個Key(ACTION_UP)組成的赫蛇,點擊的按鍵就是中間鍵和菜單鍵绵患。

8.系統(tǒng)按鍵事件
系統(tǒng)按鍵事件是指點擊系統(tǒng)保留使用的按鍵的操作,如點擊Home鍵悟耘、返回鍵落蝙、音量調(diào)節(jié)鍵等≡萦祝可通過--pct-syskeys參數(shù)來配置其事件百分比筏勒。從Monkey執(zhí)行該事件對外輸出的日志可以看到: [代碼] 該事件是由一個Key(ACTION_DOWN)和一個Key(ACTION_UP)組成的,點擊的就是上面說到的幾個系統(tǒng)按鍵旺嬉。

9.啟動Activity事件
啟動Activity事件是指在手機上啟動一個Activity的操作管行。在隨機的時間間隔中,Monkey將執(zhí)行一個startActivity()方法邪媳,作為最大限度上覆蓋被測包中全部Activity的一種方法捐顷。可通過--pct-appswitch參數(shù)來配置其事件百分比雨效。從Monkey執(zhí)行該事件對外輸出的日志可以看到: [代碼] 該事件是由一個Switch操作組成的迅涮,從手機上看,上面的操作實際是打開了com.android.settings這個應(yīng)用的一個com.android.settings.Settings的Activity界面徽龟。

10.鍵盤事件
鍵盤事件主要是一些與鍵盤相關(guān)的操作叮姑。比如點擊輸入框、鍵盤彈起顿肺、點擊輸入框以外區(qū)域戏溺、鍵盤收回等⊥雷穑可通過--pct-flip參數(shù)來配置其事件百分比旷祸。從Monkey執(zhí)行該事件對外輸出的日志可以看到: [代碼] 如日志所示,這里主要是鍵盤的打開和關(guān)閉操作讼昆。

11.其他類型事件
其他類型事件包括了除前面提到的10種事件外其他所有的事件托享,如按鍵、其他不常用的設(shè)備上的按鈕等∪蛭В可通過--pct-anyevent參數(shù)來配置其事件百分比赃绊。從Monkey執(zhí)行該事件對外輸出的日志可以看到: [代碼] 該事件是由一個Key(ACTION_DOWN)和一個Key(ACTION_UP)組成的,點擊的按鍵就是其他的一些系統(tǒng)按鍵羡榴,如字母按鍵碧查、數(shù)字按鍵等。因為現(xiàn)在手機很少帶字母按鍵或數(shù)字按鍵校仑,所以這個事件一般使用得比較少忠售。

日志輸出
輸出日志的方法:C:\Documents and Settings\Administrator>adb shell monkey -p 包名 -v 300 >D:\log.txt

2.python腳本

在完善了monkey腳本之后,還是會出現(xiàn)monkey點出去之后回不來的情況迄沫,那就寫腳本吧稻扬。

首先再一次明確目標(biāo),就是在monkey亂點點出了被測app后將其拉回來羊瘩。

直接先把代碼丟上來泰佳。之前參照的文章里面利用xml作為配置文件,感覺挺簡單的尘吗,也就直接用了逝她。

配置文件:config.xml

<?xml version="1.0" encoding="utf-8"?>
<config>
    <!-- 包名--> 
    <packagename>com.alashow.live</packagename>
    <!-- 主activity--> 
    <mainactivity>.MainActivity</mainactivity>
    <!-- 白名單activity--> 
    <whiteactivity>
    /.MainActivity,
    /cn.citytag.live.view.activity.LivePlayerActivity,
    /user.maopao.com.user.view.activity.mine.OthersHomePageActivity,
    /cn.citytag.live.view.activity.LiveFinishActivity,
    /cn.citytag.live.view.activity.LiveSearchActivity,
    /cn.citytag.live.view.activity.LiveRankingActivity,
    /cn.citytag.live.view.activity.LiveSubHomeActivity,
    /cn.citytag.live.view.activity.family.FamilyDetailActivity,
    /cn.citytag.live.view.activity.family.FamilyInformActivity,
    /cn.citytag.live.view.activity.family.FamilySettingActivity,
    /cn.citytag.live.view.activity.family.FamilyNoticeActivity,
    /cn.citytag.live.view.activity.tribe.TribeHomeActivity,
    /cn.citytag.live.view.activity.tribe.TribeWelfareActivity,
    /cn.citytag.live.view.activity.tribe.TribeShopActivity,
    /cn.citytag.live.view.activity.tribe.TribePackageActivity,
    /user.maopao.com.user.view.activity.bill.MyIncomeTotalDetailActivity,
    /cn.citytag.live.view.activity.LivePrepareActivity,
    /cn.citytag.live.view.activity.LiveSongEditActivity,
    /cn.citytag.live.view.activity.LiveNoticeActivity,
    /cn.citytag.base.widget.pictureselector.lib.PictureSelectorActivity
    </whiteactivity>
    <!-- 檢查時間秒-->
    <interval>30</interval>
    <!-- 檢查次數(shù)-->
    <count>10</count>
</config>

說明:沒什么好說明的,都注釋出來了摇予,就是字面意思汽绢。

python腳本:


import os
import re
import xml.dom.minidom as xmldom
import time
 
class Mtest():
    def __init__(self):
        dom = xmldom.parse('config.xml')
        root = dom.documentElement
        self.packagename = root.getElementsByTagName('packagename')[0].firstChild.data
        self.mainactivity = root.getElementsByTagName('mainactivity')[0].firstChild.data
        self.interval = int(root.getElementsByTagName('interval')[0].firstChild.data)
        self.count = int(root.getElementsByTagName('count')[0].firstChild.data)
        self.whiteactivity = root.getElementsByTagName('whiteactivity')[0].firstChild.data.replace('\n','').replace(' ','').split(',')
 
    def get_now_activity(self):
        os.system("adb devices")
        content = os.popen('adb shell dumpsys activity  |findstr "mResumedActivity" ').read() #讀取當(dāng)前頁面
        pattern = re.compile(r'/[a-zA-Z0-9\.]+')
        alist = pattern.findall(content)
        macitivity = self.packagename + '/' + self.mainactivity
        excuteshell = 'adb shell am start -n'+ macitivity
        if alist[0] not in self.whiteactivity:
            print('當(dāng)前activity:'+alist[0])
            print('--------------開始返回主activity----------------')
            os.system(excuteshell)  #可拉回主頁面
        else:
            print('當(dāng)前activity:'+alist[0]+'不需要返回')
    
    def check(self):
        for _ in range(self.count):
            time.sleep(self.interval)
            self.get_now_activity()
 
if __name__ == '__main__':
    test = Mtest()
    test.check()

python腳本這里就要稍微說明下了:

1.這里造了一個類,類的初始化里將config.xml里的內(nèi)容讀取過來運用了xml的一個庫

2.get_now_activity函數(shù)的作用是獲取當(dāng)前所在activity侧戴,判斷其是否在白名單里宁昭,如果在就做操作,如果不在就拉回主頁面(當(dāng)然你可以設(shè)置拉回任何頁面酗宋,甚至隨機)

os.system("adb devices") 這句不寫也沒關(guān)系积仗,其實是獲取當(dāng)前連接的手機設(shè)備信息


image.png

adb shell dumpsys activity |findstr "mResumedActivity" 這條adb命令就是獲取當(dāng)前所在activity。如果你查看app的activity也很簡單蜕猫,你手機連著執(zhí)行這條命令就可以了寂曹,這條命令執(zhí)行后大致是這樣的結(jié)果:


image.png

是不是數(shù)據(jù)不夠單純,與config.xml里的白名單數(shù)據(jù)相比是不是多了很多東西回右。

pattern = re.compile(r'/[a-zA-Z0-9.]+')

alist = pattern.findall(content)

這時候可以用正則表達式將其取出輸出alist[0],大致是這樣的:


image.png

頁面取出來之后就可以對其進行對比了隆圆,就是那個if判斷

接下來就是在判斷到activity不在白名單里面之后,啟動指定activity 利用這個命令'adb shell am start -n'

3.最后一個函數(shù)就是利用config.xml里的配置翔烁,設(shè)置多長時間去輪詢一次渺氧,然后一共輪詢多少次。如30s輪詢一次蹬屹,那么一個小時就能輪詢120次侣背,假設(shè)你的monkey執(zhí)行10個小時白华,那么你的輪詢次數(shù)就要設(shè)置1200次。

說了這么多贩耐,如何執(zhí)行呢弧腥?

1.先執(zhí)行adb monkey的命令,將monkey跑起來

2.執(zhí)行python腳本

3.仔細觀察是不是就算monkey亂點也能拉回去了呢潮太,<( ̄▽ ̄)/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末管搪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子消别,更是在濱河造成了極大的恐慌抛蚤,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寻狂,死亡現(xiàn)場離奇詭異,居然都是意外死亡朋沮,警方通過查閱死者的電腦和手機蛇券,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來樊拓,“玉大人纠亚,你說我怎么就攤上這事〗钕模” “怎么了蒂胞?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長条篷。 經(jīng)常有香客問我骗随,道長,這世上最難降的妖魔是什么赴叹? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任鸿染,我火速辦了婚禮,結(jié)果婚禮上乞巧,老公的妹妹穿的比我還像新娘涨椒。我一直安慰自己,他們只是感情好绽媒,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布蚕冬。 她就那樣靜靜地躺著,像睡著了一般是辕。 火紅的嫁衣襯著肌膚如雪囤热。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天免糕,我揣著相機與錄音赢乓,去河邊找鬼忧侧。 笑死,一個胖子當(dāng)著我的面吹牛牌芋,可吹牛的內(nèi)容都是我干的蚓炬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼躺屁,長吁一口氣:“原來是場噩夢啊……” “哼肯夏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起犀暑,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤驯击,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后耐亏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徊都,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年广辰,在試婚紗的時候發(fā)現(xiàn)自己被綠了暇矫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡择吊,死狀恐怖李根,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情几睛,我是刑警寧澤房轿,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站所森,受9級特大地震影響囱持,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜必峰,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一洪唐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吼蚁,春花似錦凭需、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旗国,卻和暖如春枯怖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背能曾。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工度硝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肿轨,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓蕊程,卻偏偏與公主長得像椒袍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子藻茂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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