Pytest官方教程-22-API參考-Objects

目錄:

  1. 安裝及入門
  2. 使用和調用方法
  3. 原有TestSuite使用方法
  4. 斷言的編寫和報告
  5. Pytest fixtures:清晰 模塊化 易擴展
  6. 使用Marks標記測試用例
  7. Monkeypatching/對模塊和環境進行Mock
  8. 使用tmp目錄和文件
  9. 捕獲stdout及stderr輸出
  10. 捕獲警告信息
  11. 模塊及測試文件中集成doctest測試
  12. skip及xfail: 處理不能成功的測試用例
  13. Fixture方法及測試用例的參數化
  14. 緩存: 使用跨執行狀態
  15. unittest.TestCase支持
  16. 運行Nose用例
  17. 經典xUnit風格的setup/teardown
  18. 安裝和使用插件
  19. 插件編寫
  20. 編寫鉤子(hook)方法
  21. 運行日志
  22. API參考
    1. 方法(Functions)
    2. 標記(Marks)
    3. 鉤子(Hooks)
    4. 裝置(Fixtures)
    5. 對象(Objects)
    6. 特殊變量(Special Variables)
    7. 環境變量(Environment Variables)
    8. 配置選項(Configuration Options)
  23. 優質集成實踐
  24. 片狀測試
  25. Pytest導入機制及sys.path/PYTHONPATH
  26. 配置選項
  27. 示例及自定義技巧
  28. Bash自動補全設置

API參考-Objects

對象(Objects)

完全參考可從Fixturs掛鉤進入的物體。

CallInfo

*class *CallInfo[source]
結果/異常信息是一個函數調用。

Class

*class *Class[source]
基地: _pytest.python.PyCollector
收集器的測試方法。
collect()[來源]
返回此集合節點的子項(項和收集器)列表。

Collector

*class *Collector[source]
基地: _pytest.nodes.Node
收集器實例通過collect()創建子項,從而迭代地構建樹。
異常CollectError[來源]
基地: Exception
收集期間出錯,包含自定義消息。

collect()[來源]
返回此集合節點的子項(項和收集器)列表。

repr_failure(*excinfo *)[來源]
表示集合失敗。

配置

class Config[source]
訪問配置值,pluginmanager和插件鉤子。
option
=無

訪問命令行選項作為屬性。(已棄用),請getoption()改用

pluginmanager=無
一個pluginmanager實例

add_cleanup(*func *)[來源]
添加一個在配置對象不使用時調用的函數(通常與pytest_unconfigure一致)。

classmethod fromdictargsoption_dict,*args *)[source]
構造函數可用于子進程。

addinivalue_line名稱[來源]
在ini-file選項中添加一行。該選項必須已聲明但可能尚未設置,在這種情況下,該行將成為其值中的第一行。

getini姓名[來源]
ini文件返回配置值。如果未通過先前parser.addini 調用(通常來自插件)注冊指定的名稱 ,則會引發ValueError。

skip = False *)[source]
返回命令行選項值。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |

  • name - 選項的名稱。您也可以指定文字--OPT選項而不是“dest”選項名稱。
  • default - 如果不存在該名稱的選項,則為默認值。
  • skip - 如果選項不存在或具有None值,則為true raise pytest.skip。
    |

getvaluename,*path = None *)[來源]
(不推薦使用,請使用getoption())

getvalueorskipname,*path = None *)[來源]
(不推薦使用,使用getoption(skip = True))

異常信息

class ExceptionInfoexcinfostriptext ='',*traceback = None *)[來源]
包裝sys.exc_info()對象并提供導航回溯的幫助。
*classmethod from_currentexprinfo = None *)[來源]
返回與當前回溯匹配的ExceptionInfo
警告
實驗API
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | exprinfo - 一個文本字符串,幫助確定我們是否應該AssertionError從輸出中剝離,默認為異常消息/__str__() |

*classmethod *for_later()[source]
返回一個未填充的ExceptionInfo

type
異常類

value
異常值

tb
異常原始追溯

typename
異常的類型名稱

traceback
追溯

exconly(*tryshort = False *)[來源]
將異常作為字符串返回
當'tryshort'解析為True,異常是_pytest._code._AssertionError時,只返回異常表示的實際異常部分(因此'AssertionError:'從頭開始刪除)

errisinstance(*exc *)[來源]
如果異常是exc的實例,則返回True

getreprshowlocals = Falsestyle ='long'abspath = Falsetbfilter = Truefuncargs = Falsetruncate_locals = True,*chain = True *)[來源]
返回str()表示此異常信息。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |

  • showlocalsbool) - 顯示每個回溯條目的本地人。忽略如果style=="native"
  • stylestr) - long | short | no | native traceback style
  • abspathbool) - 如果路徑應更改為絕對路徑或保持不變。
  • tbfilterbool) - 隱藏包含局部變量的條目__tracebackhide__==True。忽略如果style=="native"
  • funcargsbool) - 為每個回溯條目顯示固定裝置(用于傳統目的的“funcargs”)。
  • truncate_localsbool) - 使用showlocals==True,確保本地可以安全地表示為字符串。
  • chainbool) - 如果顯示Python 3中的鏈接異常。
    |
    在版本3.9中更改:添加了chain參數。

match(*regexp *)[來源]
將正則表達式'regexp'與異常的字符串表示形式匹配。如果匹配則返回True(這樣就可以寫'assert excinfo.match()')。如果不匹配則引發AssertionError。

FixtureDef

*class *FixtureDef[source]
基地: object
工廠定義的容器。

FSCollector

*class *FSCollector[source]
基地: _pytest.nodes.Collector

功能

class Function[source]
基地:_pytest.python.FunctionMixin_pytest.nodes.Item_pytest.compat.FuncargnamesCompatAttr
功能項負責設置和執行Python測試功能。
originalname
=無

原始函數名稱,沒有任何裝飾(例如參數"[...]"化為函數名稱添加后綴)。
3.0版中的新功能。

function
底層python'函數'對象

runtest()[來源]
執行基礎測試功能。

setup()[來源]
執行此測試功能的設置。

項目

class Item[source]
基地: _pytest.nodes.Node
一個基本的測試調用項。請注意,對于單個函數,可能存在多個測試調用項。
user_properties
=無

user屬性是一個元組列表(名稱,值),用于保存此測試的用戶定義屬性。

add_report_section何時關鍵內容[來源]
添加一個新的報表部分,類似于內部完成添加stdout和stderr捕獲的輸出:

item.add_report_section("call", "stdout", "report section contents")

<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |

  • STR) -一個可能捕獲的狀態,"setup""call""teardown"
  • keystr) - 部分名稱,可以隨意定制。Pytest使用"stdout""stderr"內部。
  • contentstr) - 作為字符串的完整內容。
    |

MarkDecorator

*class MarkDecoratormark *)[source]
測試函數和測試類的裝飾器。應用時,它將創建MarkInfo可以通過鉤子作為項目關鍵字檢索的對象 。MarkDecorator實例通常是這樣創建的:

mark1 = pytest.mark.NAME              # simple MarkDecorator
mark2 = pytest.mark.NAME(name1=value) # parametrized MarkDecorator

然后可以作為裝飾器應用于測試功能:

@mark2
def test_function():
    pass

調用MarkDecorator實例時,它會執行以下操作:

  1. 如果使用單個類作為其唯一的位置參數調用而沒有其他關鍵字參數,則它會將自身附加到類,以便自動應用于該類中的所有測試用例。
  2. 如果使用單個函數作為唯一的位置參數調用而沒有其他關鍵字參數,則會將MarkInfo對象附加到函數,其中包含已存儲在MarkDecorator內部的所有參數。
  3. 當在任何其他情況下調用時,它執行“假構造”調用,即它返回一個新的MarkDecorator實例,其原始MarkDecorator的內容使用傳遞給此調用的參數進行更新。

注意:上述規則阻止MarkDecorator對象僅存儲單個函數或類引用作為其位置參數,而不包含其他關鍵字或位置參數。
name
mark.name的別名

args
mark.args的別名

kwargs
mark.kwargs的別名

with_args(** args** kwargs *)[來源]
返回添加了額外參數的MarkDecorator
與調用不同,即使唯一參數是可調用/類,也可以使用它
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 返回: | MarkDecorator |

MarkGenerator

*class *MarkGenerator[source]
MarkDecorator對象的工廠- 作為pytest.mark單例實例公開。例:

import pytest
@pytest.mark.slowtest
def test_function():
   pass

將在MarkInfo對象上設置一個“最慢” 的test_function對象。

馬克

class Markname:strargs,*kwargs *)[來源]

name=無
商標名稱

args=無
標記裝飾器的位置參數

kwargs=無
標記裝飾器的關鍵字參數

combined_with其他[來源]
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | 其他馬克) - 與之結合的商標 |
| 返回類型: | 標記 |
通過附加aargs和合并映射來組合

Metafunc

class Metafuncdefinitionfixtureinfoconfigcls = Nonemodule = None [來源]
Metafunc對象被傳遞給pytest_generate_tests鉤子。它們有助于檢查測試功能并根據測試配置或在定義測試功能的類或模塊中指定的值生成測試。
config
=無

訪問_pytest.config.Config測試Session的對象

module=無
定義測試函數的模塊對象。

function=無
底層python測試功能

fixturenames=無
測試功能所需的夾具名稱集

cls=無
在或中定義測試函數的類對象None

parametrizeargnamesargvaluesindirect = Falseids = None,*scope = None *)[來源]
使用給定argnames的argvalues列表向基礎測試函數添加新調用。在收集階段執行參數化。如果您需要設置昂貴的資源,請參閱設置間接,以便在測試設置時進行。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |

  • argnames - 以逗號分隔的字符串,表示一個或多個參數名稱,或參數字符串的列表/元組。
  • argvalues - argvalues列表確定使用不同參數值調用測試的頻率。如果只指定了一個argname,則argvalues是值列表。如果指定了N個argnames,則argvalues必須是N元組的列表,其中每個tuple-element為其各自的argname指定一個值。
  • indirect - argnames或boolean的列表。參數列表名稱(argnames的子集)。如果為True,則列表包含argnames中的所有名稱。對應于此列表中的argname的每個argvalue將作為request.param傳遞到其各自的argname fixture函數,以便它可以在測試的設置階段而不是在收集時執行更昂貴的設置。
  • ids - 字符串ID列表或可調用的列表。如果字符串,則每個字符串對應于argvalues,以便它們是測試ID的一部分。如果將None作為特定測試的id給出,則將使用該參數的自動生成的id。如果是可調用的,它應該采用一個參數(單個argvalue)并返回一個字符串或返回None。如果為None,將使用該參數的自動生成的id。如果沒有提供id,它們將自動從argvalues生成。
  • 范圍 - 如果指定,則表示參數的范圍。范圍用于按參數實例對測試進行分組。它還將覆蓋任何fixture函數定義的范圍,允許使用測試上下文或配置設置動態范圍。
    |

模塊

*class *Module[source]
基地:_pytest.nodes.File_pytest.python.PyCollector
測試類和函數的收集器。
collect()[來源]
返回此集合節點的子項(項和收集器)列表。

節點

class Node[source]
Collector的基類和測試集合樹的Item。收集器子類有子節點,Items是終端節點。
name
=無

父節點范圍內的唯一名稱

parent=無
父收集器節點。

config=無
pytest配置對象

session=無
此節點所屬的Session

fspath=無
收集此節點的文件系統路徑(可以是None)

keywords=無
從所有范圍收集的關鍵字/標記

own_markers=無
屬于此節點的標記對象

extra_keyword_matches=無
允許添加額外的關鍵字以用于匹配

ihook
用于調用pytest鉤子的fspath敏感鉤子代理

warn警告[來源]
發出此項目的警告。
除非明確禁止,否則將在測試Session后顯示警告
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | 警告警告) - 要發出的警告實例。必須是PytestWarning的子類。 |
| 舉: | ValueError - 如果warning實例不是PytestWarning的子類。 |
用法示例:

node.warn(PytestWarning("some message"))

nodeid
a :: - 表示其集合樹地址的分隔字符串。

listchain()[來源]
從收集樹的根開始返回所有父收集器的列表。

add_markermarker,*append = True *)[來源]
動態地將標記對象添加到節點。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | 標記strpytest.mark.* 對象) - append=True是否附加標記,如果False插入位置0。 |

iter_markers名稱=無[來源]
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | name - 如果給定,則按name屬性過濾結果 |
迭代節點的所有標記

*for ... in iter_markers_with_nodename = None *)[來源]
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | name - 如果給定,則按name屬性過濾結果 |
迭代節點的所有標記返回元組序列(節點,標記)

get_closest_marker名稱默認=無[來源]
返回與名稱匹配的第一個標記,從最近(例如函數)到更遠級別(例如模塊級別)。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |

  • 默認 - 找不到標記的回退返回值
  • name - 要過濾的名稱
    |

listextrakeywords()[來源]
在self和任何父母中返回一組所有額外的關鍵字。

addfinalizer(*fin *)[來源]
在最終確定此節點時注冊要調用的函數。
只有在此節點在設置鏈中處于活動狀態時才能調用此方法,例如在self.setup()期間。

getparent(*cls *)[來源]
獲取下一個父節點(包括ownelf),它是給定類的一個實例

解析器

class Parser[source]
解析命令行參數和ini文件值。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 變量: | extra_info - 泛型參數的字典 - >在處理命令行參數時出錯的情況下顯示的值。 |
getgroup
name
description ='',*after = None *)[來源]
獲取(或創建)命名選項組。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 名稱: | 選項組的名稱。 |
| 描述: | -help輸出的長描述。 |
| 后: | 其他組的名稱,用于排序-help輸出。 |
返回的組對象具有addoption與簽名相同的方法,parser.addoption但將在輸出中的相應組中顯示。pytest. --help

addoption(** opts** attrs *)[來源]
注冊命令行選項。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 選擇采用: | 選項名稱,可以是短期或長期期權。 |
| ATTRS: | 相同的屬性,其中add_option()所述的功能 argparse庫 接受。 |
在命令行解析選項在pytest配置對象上可用之后config.option.NAMENAME通常通過傳遞dest屬性來設置,例如 。addoption("--long", dest="NAME", ...)

parse_known_argsargs,*namespace = None *)[來源]
此時解析并返回具有已知參數的命名空間對象。

parse_known_and_unknown_argsargs,*namespace = None *)[來源]
解析并返回具有已知參數的名稱空間對象,此時其余參數未知。

addininamehelptype = None,*default = None *)[source]
注冊ini文件選項。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 名稱: | ini-variable的名稱 |
| 類型: | 該變量的類型,可以是pathlistargslinelistbool。 |
| 默認: | 默認值,如果不存在ini-file選項但是被查詢。 |
可以通過調用來檢索ini變量的值 config.getini(name)

插件管理

class PluginManager[source]
Core Pluginmanager類,用于管理插件對象的注冊和1:N鉤子調用。
您可以通過致電注冊新的掛鉤add_hookspec(module_or_class)。您可以通過調用注冊插件對象(包含掛鉤) register(plugin)。Pluginmanager初始化為在注冊的插件對象的dict名稱中搜索的前綴。
出于調試目的,您可以調用enable_tracing() 哪個隨后將調試信息發送到跟蹤幫助程序。
register
插件
名稱=無[來源]
如果名稱被阻止注冊,請注冊插件并返回其規范名稱或無。如果插件已注冊,則引發ValueError。

unregisterplugin = None,*name = None *)[來源]
從內部數據結構取消注冊插件對象及其所有包含的鉤子實現。

set_blocked姓名[來源]
阻止給定名稱的注冊,如果已經注冊,則注銷。

is_blocked姓名[來源]
如果名稱博客注冊該名稱的插件,則返回True。

add_hookspecs(*module_or_class *)[來源]
添加給定module_or_class中定義的新鉤子規范。如果相應地修飾了功能,則會識別它們。

get_plugins()[來源]
返回已注冊的插件集。

is_registered插件[來源]
如果插件已經注冊,則返回True。

get_canonical_name插件[來源]
返回插件對象的規范名稱。請注意,插件可以使用由register(plugin,name)的調用者指定的其他名稱注冊。要獲取已注冊插件的名稱,請使用get_name(plugin)

get_plugin姓名[來源]
返回給定名稱的插件或None。

has_plugin姓名[來源]
如果注冊了具有給定名稱的插件,則返回True。

get_name插件[來源]
注冊插件的返回名稱,如果未注冊,則返回None。

check_pending()[來源]
驗證所有未針對鉤子規范驗證的鉤子是可選的,否則引發PluginValidationError

load_setuptools_entrypoints名稱=無[來源]
從查詢指定的setuptools加載模塊group
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |

  • groupstr) - 加載插件的入口點組
  • namestr) - 如果給定,只加載給定的插件name
    |
    | 返回類型: |
    INT
    |
    | 返回: |
    通過此調用返回加載的插件數。
    |

list_plugin_distinfo()[來源]
返回所有setuptools注冊插件的distinguishedfo / plugin元組列表。

list_name_plugin()[來源]
返回名稱/插件對的列表。

get_hookcallers插件[來源]
獲取指定插件的所有鉤子調用者。

add_hookcall_monitoring之前之后[來源]
在所有掛鉤的跟蹤功能之前/之后添加并返回一個撤銷功能,當被調用時,將刪除添加的跟蹤器。
before(hook_name, hook_impls, kwargs) 將在所有掛鉤調用之前調用并接收一個hookcaller實例,一個HookImpl實例列表和一個鉤子調用的關鍵字參數。
after(outcome, hook_name, hook_impls, kwargs)接收相同的參數,before但也接收一個`_Result``表示整個鉤子調用的結果的對象。

enable_tracing()[來源]
啟用對鉤子調用的跟蹤并返回撤銷功能。

subset_hook_callername,*remove_plugins *)[來源]
為命名方法返回一個新的_HookCaller實例,該方法管理除remove_plugins之外的所有已注冊插件的調用。

PytestPluginManager

*class *PytestPluginManager[source]
基地: pluggy.manager.PluginManager
覆蓋pluggy.PluginManager以添加特定于pytest的功能:

  • 從命令行加載插件,加載插件中的PYTEST_PLUGINSenv變量和 pytest_plugins全局變量;
  • conftest.py 在啟動期間裝載;
    addhooks(*module_or_class *)[來源]
    自2.8版以來已棄用。
    pluggy.PluginManager.add_hookspecs 改用。

parse_hookimpl_opts插件名稱[來源]

parse_hookspec_optsmodule_or_class,*name *)[來源]

register插件名稱=無[來源]
如果名稱被阻止注冊,請注冊插件并返回其規范名稱或無。如果插件已注冊,則引發ValueError。

getplugin姓名[來源]

hasplugin姓名[來源]
如果注冊了具有給定名稱的插件,則返回True。

pytest_configure(*config *)[來源]

consider_preparse(*args *)[來源]

consider_pluginarg(*arg *)[來源]

consider_conftest(*conftestmodule *)[來源]

consider_env()[來源]

consider_module(*mod *)[來源]

import_pluginmodname,*consideration_entry_points = False *)[來源]
用插件導入插件modname。如果consider_entry_points為True,則還會將入口點名稱視為查找插件。

Session

*class *Session[source]
基地: _pytest.nodes.FSCollector
異常Interrupted
基地: KeyboardInterrupt
發出中斷的測試運行信號。

異常Failed
基地: Exception
在測試運行失敗時發出停止信號。

*for ... in *collect()[source]
返回此集合節點的子項(項和收集器)列表。

TestReport

class TestReport[source]
基本測試報告對象(如果失敗,也用于設置和拆除調用)。
nodeid
=無

規范化的集合節點ID

location=無
a(filesystempath,lineno,domaininfo)元組指示測試項的實際位置 - 它可能與收集的測試項不同,例如,如果方法是從不同的模塊繼承的。

keywords=無
name - > value字典,包含與測試調用關聯的所有關鍵字和標記。

outcome=無
測試結果,總是“通過”,“失敗”,“跳過”之一。

longrepr=無
無或失敗表示。

when=無
'setup','call','teardown'之一表示測試階段。

user_properties=無
user屬性是一個元組列表(名稱,值),用于保存用戶定義的測試屬性

sections=無
需要編組的額外信息對的列表。通過pytest用于添加從捕獲的文本和,但是可以通過其它的插件可用于任意信息添加到報表。(str, str)``stdout``stderr

duration=無
只運行測試所花費的時間

classmethod from_item_and_callitem,*call *)
使用標準項和調用信息創建和填充TestReport的工廠方法。

caplog
如果啟用了日志捕獲,則返回捕獲的日志行
版本3.5中的新功能。

capstderr
如果啟用了捕獲,則從stderr返回捕獲的文本
3.0版中的新功能。

capstdout
如果啟用了捕獲,則從stdout返回捕獲的文本
3.0版中的新功能。

count_towards_summary
試驗
如果此報告應計入測試Session結束時顯示的總計,則返回True:“1通過,1失敗等”。
注意
此功能被認為是實驗性的,因此請注意即使在修補程序版本中它也會發生變化。

head_line
試驗
返回此報告的longrepr輸出顯示的頭行,更常見的是在故障期間的回溯表示期間:

________ Test.foo ________

在上面的示例中,head_line是“Test.foo”。
注意
此功能被認為是實驗性的,因此請注意即使在修補程序版本中它也會發生變化。

longreprtext
只讀屬性,返回完整的字符串表示形式longrepr
3.0版中的新功能。

[_result ]

class _Resultresult,*excinfo *)
result
獲取此掛鉤調用的結果(DEPRECATED支持get_result())。

force_result結果
強制結果result
如果掛鉤被標記為firstresult單個值,則應設置否則設置(修改)結果列表。調用期間發現的任何異常都將被刪除。

get_result()
獲取此掛鉤調用的結果。
如果鉤子被標記為firstresult只有一個值,則返回結果列表。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容