Pytest系列-fixture的详细使用和结合conftest.py的详细使用(3)

10 篇文章 0 订阅
订阅专栏
本文详细介绍了pytest的fixture功能,包括其灵活的命名、数据共享、不同作用域的执行规则,以及如何通过@pytest.fixture装饰器进行参数化和yield实现teardown。还讨论了fixture的优先级和conftest.py的使用。
摘要由CSDN通过智能技术生成

介绍

前面一篇讲了setup、teardown可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个脚本全局生效的。
Fixture是pytest的非常核心功能之一,在不改变被装饰函数的前提下对函数进行功能增强,经常用于自定义测试用例前置和后置工作,更强大灵活。

一 、Fixture的优势

  • fixture命名方式灵活,不局限于 setup 和teardown 那几个命名规则
  • conftest.py 配置里可以实现数据共享,不需要 import就能够自动搜索需要的fixture
  • fixture 配置不同的参数可以轻松实现跨文件共享前置、session会话共享

二、fixture工作原理

  • 在普通函数上使用@Pytest.fixture()装饰器,声明函数为一个fixture函数
  • 如果测试用例函数的参数列表中存在fixture的函数名或者使用@pytest.mark.usefixtures(fixture_name)
  • 在测试执行阶段,pytest执行用例之前执行fixture函数功能
  • 如果fixture装饰的函数无返回值,相当于用例前置操作,否则相当于传参
  • 如果fixture设置了后置操作,则用例执行完成后进行执行

三、fixture的参数

@pytest.fixture(scope="function",params=None,autouse=True,ids=None,name=None)
def test():
    print("fixture初始化的参数")

参数

1、scope:可以理解成fixture的作用域。
(1) function:在函数之前和之后执行。函数测试用例时使用时需要引用参数 def test(seif,fixtures_def)

  • 手动调用的方式是在测试用例的参数里面加入 fixture的名称。
  • 如果说fixture有通过return或yield返回值的话,那么可以把这个值传递到测试用例中。值是通过固件的名字传递的。

参考用例:

import pytest

@pytest.fixture(scope="function",autouse=False)
def test_fixture():
    print("fixture初始化的参数")
    return "success"   #后面不能有其他语句
    #yield "success"   #后面可以有其他语句
    #print("参数后置")

class TestFixture:
    def test_one(self):
        print("测试用例1")

    def test_two(self,test_fixture):
        print("测试用例2")
        print(test_fixture)

    def test_three(self):
        print("测试用例1")

if __name__ == '__main__':
    pytest.main()

执行结果:
在这里插入图片描述

(2) class:在类之前和之后执行。

  • 手动调用的方式是在类的上面加@pytest.mark.usefixtures(“login”)装饰器

参考用例:

import pytest

@pytest.fixture(scope="class",autouse=False)
def test_fixture():
    print("fixture初始化的参数")
    yield "success"   #后面可以有其他语句
    print("参数后置")

@pytest.mark.usefixtures("test_fixture")
class TestFixture:
    def test_one(self):
        print("测试用例1")

    def test_two(self,test_fixture):
        print("测试用例2")
        print(test_fixture)

class TestStudy:
    def test_three(self):
        print("测试用例3")


if __name__ == '__main__':
    pytest.main()

执行结果:
在这里插入图片描述

(3) module:每一个.py文件调用一次
参考用例:

import pytest

@pytest.fixture(scope="module",autouse=False,)
def test_fixture():
    print("fixture初始化的参数")
    yield "success"
    print("参数后置")

# 通过参数方式使用fixture
def test_01(test_fixture):
    print("类外面的测试用例")

class TestFixture:
    def test_one(self):
        print("测试用例1")

    def test_two(self,test_fixture):
        print("测试用例2"+test_fixture)

if __name__ == '__main__':
    pytest.main()

执行结果:
在这里插入图片描述

(4) package/session:在整个项目会话之前和之后,即开始执行pytest到结束测试一般用于打开浏览器、启动APP、登录等操作。会结合conftest.py文件来实现

2、autouse:默认False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture,无需传入fixture函数名,作用范围跟着scope走(注意使用)。

3、param:实现参数化

  • 如何把值传到Fixture是通过fixture函数的参数里面加入request来接收参数。然后通过request.param来取值。(这里的param没有s)
@pytest.fixture(scope="function",autouse=False,params=read_yaml())
def test_fixture(request):
    print("fixture初始化的参数")
    yield (request.param)
    print("参数后置")

参考用例:

import pytest

#读取数据文件
def read_yaml():
    return ['cehsi','houduan','qianduan']
    #return [{'a':'b'},{'c','d'}]

@pytest.fixture(scope="function",autouse=False,params=read_yaml())
def test_fixture(request):
    print("fixture初始化的参数")
    yield request.param
    print("参数后置")

class TestFixture:
    def test_one(self):
        print("测试用例1")

    def test_two(self,test_fixture):
        print("测试用例2"+test_fixture)
        #print("测试用例2"+str(test_fixture)) #数据是字典的话需要强转

if __name__ == '__main__':
    pytest.main()

执行结果:
在这里插入图片描述
5、ids:不单独使用,需要与params配合使用,一对一关系,作用是对参数起别名。
参考用例:

@pytest.fixture(scope="function",autouse=False,params=read_yaml(),ids=['a','b','c'])
def test_fixture(request):
    print("fixture初始化的参数")
    yield request.param
    print("参数后置")

执行结果:
在这里插入图片描述

5、name:作用给Fixture取别名,用来区分不同的使用。
【特别注意】:一旦使用别名之后,那么fixture的名称就不能用了。只能用别名。
参考用例:

import pytest

#读取数据文件
def read_yaml():
    return ['cehsi','houduan','qianduan']
    #return [{'a':'b'},{'c','d'}]

@pytest.fixture(scope="function",autouse=False,params=read_yaml(),ids=['a','b','c'],name='abc')
def test_fixture(request):
    print("fixture初始化的参数")
    yield request.param
    print("参数后置")

class TestFixture:
    def test_one(self):
        print("测试用例1")

    def test_two(self,abc):
        print("测试用例2"+abc)
        #print("测试用例2"+str(test_fixture)) #数据是字典的话需要强转

if __name__ == '__main__':
    pytest.main()

注意

@pytest.mark.usefixtures():

  • 在类声明上面加 @pytest.mark.usefixtures() ,代表这个类里面所有测试用例都会调用该fixture
  • 可以叠加多个 @pytest.mark.usefixtures() ,先执行的放底层,后执行的放上层
  • 可以传多个fixture参数,先执行的放前面,后执行的放后面
  • 如果fixture有返回值,用 @pytest.mark.usefixtures() 是无法获取到返回值的,必须用传参的方式(方式一)

四、 Fixture中yield来实现teardown

用fixture实现teardown并不是一个独立的函数,而是用 yield 关键字来开启teardown操作,使用可参考上面的测试用例。

yield注意事项

  • 如果yield前面的代码,即setup部分已经抛出异常了,则不会执行yield后面的teardown内容
  • 如果测试用例抛出异常,yield后面的teardown内容还是会正常执行

yield+with的结合

# 官方例子
@pytest.fixture(scope="module")
def smtp_connection():
    with smtplib.SMTP("smtp.gmail.com", 587, timeout=5) as smtp_connection:
        yield smtp_connection  # provide the fixture value

smtp_connection 连接将测试完成执行后已经关闭,因为 smtp_connection 对象自动关闭时, with 语句结束。

五、 addfinalizer 终结函数

@pytest.fixture(scope="module")
def test_addfinalizer(request):
    # 前置操作setup
    print("==再次打开浏览器==")
    test = "test_addfinalizer"

    def fin():
        # 后置操作teardown
        print("==再次关闭浏览器==")

    request.addfinalizer(fin)
    # 返回前置操作的变量
    return test

def test_anthor(test_addfinalizer):
    print("==最新用例==", test_addfinalizer)

注意事项

  • 如果 request.addfinalizer() 前面的代码,即setup部分已经抛出异常了,则不会执行 request.addfinalizer() 的teardown内容(和yield相似,应该是最近新版本改成一致了)
  • 可以声明多个终结函数并调用

六、Fixture结合conftest.py的使用

conftest.py的介绍

1、pytest会默认读取conftest.py里面的所有fixture
2、 conftest.py是专门用于存放fixture的配置文件。名称是固定的,不能变。
3、在 conftest.py文件里面所有的方法在调用时都不需要导包,pytest会自动查找。
5、 conftest.py文件可以有多个,并且多个 conftest.py文件里面的多个 fixture可以被一个用例调用
6、conftest.py只对同一个package下的所有测试用例生效

conftest.py文件一般写在项目的根路径下面,文件名不要写错

参考用例:
testcase.py

# 通过参数方式使用fixture
def test_01(abc):
    print("类外面的测试用例")

class TestFixture:
    def test_one(self):
        print("测试用例1")

    def test_two(self,abc,sd):
        print("测试用例2"+abc+sd)

if __name__ == '__main__':
    pytest.main()

conftest.py


import pytest

@pytest.fixture(scope="function",autouse=False,name='abc')
def test_fixture():
    print("fixture初始化的参数")
    yield "success"
    print("参数后置")

@pytest.fixture(scope="function",autouse=False,name='sd')
def test_study():
    print("多个fixture初始化的参数")
    yield
    print("多个参数后置")

执行结果:
在这里插入图片描述

七、Fixture的优先级

  • 较高 scope 范围的fixture(session)在较低 scope 范围的fixture( function 、 class )【session > package > module > class > function】
  • 具有相同作用域的fixture遵循测试函数中声明的顺序,并遵循fixture之间的依赖关系【在fixture_A里面依赖的fixture_B优先实例化,然后到fixture_A实例化】

八、setup、teardown、setup_class、teardown_class、fixture、conftest优先级

会话:fixture的session级别的优先级最高。

类:fixture的class级别的优先级最高。
类:setup_class

函数:fixture的function级别的优先级最高。
函数:setup

各方法优先级:fixture会话>fixture的class级别>setup_class>fixture的function>setup

注意 灾同时使用这些方法的时候,fixture的autouse为true时会遵循上买呢说的执行顺序;如果为False时,手动调用类里面会按照调用的顺序执行,此时的是不遵循上述说的优先级的。
参考用例:

import pytest
#定义数据
def read_datebase():
    return ['测试','前端','后端']

@pytest.fixture(scope="function",autouse=False,params=read_datebase(),ids=['a','b','c'])
def test_fixture(request):
    print("fixture 的初始化参数")
    yield request.param
    print("fixture 的后置参数")

def test_demo():
    print("类外面的测试用例")

class TestFixture:

    def setup(self):
        print("--每个用例之前执行")

    def test_one(self):
        print("类里面的测试用例1")

    def test_two(self,test_fixture):
        print("类里面的测试用例2")
        print(test_fixture)

    def teardown(self):
        print("--每个用例之后执行")

if __name__ == '__main__':
    pytest.main()

执行结果:
在这里插入图片描述

九、总结Pytest的执行过程

1、查询当前目录下的 conftest.py 文件;
2、查询当前目录下的 pytest.ini 文件,找到测试用例的位置;
3、查询用例目录下的 conftest.py 文件;
4、查询py文件中是否有setup_class、teardown_class;
5、再根据 pytest.ini 文件的测试用例规则去查询用例并执行。

版权声明:本文为CSDN博主「小橙子测试」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

pytest学习和使用9-fixture中conftest.py如何使用
虫无涯的博客
11-18 631
是一个配置文件;可单独管理一些预置的操作场景;pytest里面默认读取里面的配置;可以理解为一个专门存放fixture的配置文件。
Python Pytest调用fixture之@pytest.mark.usefixtures()、叠加usefixtures、@pytest.fixture(autouse=True)用法详解
专业资深测试者,多年质量管理经验,浪迹网游、金融、房产、招聘及海外行业多年,CDSN百万原创阅读,公众号500+原创文章,提倡测试左移、风险、越权、假设、探索测试,喜欢用抽象思维模式思考和技术探讨,自动化、性能、安全测试实施者,感谢关注!
09-16 1万+
usefixtures与传fixture区别 如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。 当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。 1.函数或类里面方法直接传fixture的函数参数名称 ...
pytest】四、pytestfixture()实现部分后置,及fixture结合conftest.py使用详解
Moonlight的博客
02-23 2743
fixture的作用范围(scope) fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function -function:每一个函数或方法都会调用 -class:每一个类调用一次,一个类中可以有多个方法 -module:每一个.py文件调用一次,该文件内又有多个function和class -session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
pytest框架之fixture详细使用
最新发布
weixin_67553250的博客
07-30 1149
这默认为装饰函数的名称。如果fixture在定义它的统一模块中使用,夹具的功能名称将被请求夹具的功能arg遮蔽,解决这个问题的一种方法时将装饰函数命令"fixture_<fixturename>"然后使用"@pytest.fixture(name='<fixturename>')"。fixture为session级别是可以跨.py模块调用的,也就是当我们有多个.py文件的用例的时候,如果多个用例只需调用一次fixture,那就可以设置为scope="session",并且写到conftest.py文件里。
pytestfixture的使用
weixin_42724501的博客
09-21 1168
pytest中的fixture使用
Pytest进阶之fixture的使用(超详细
weixin_47257473的博客
07-21 2602
本文非常详细介绍了pytestfixture的相关机制,包括fixture的定义,三种使用方式:作为参数使用fixture之间的相互调用,作为conftest.py文件传入。fixture的作用范围,包括function,class,module,session,每个 范围都进行详细用例讲解,还有Fixture中其它参数,例如params和ids,autouse的使用以及name重命名,最后做了一个总结,看完本篇相信你一定会有所收获
pytest fixture 详解转载
m0_37822019的博客
07-29 695
https://www.cnblogs.com/huizaia/p/10331469.html pytest框架的精髓fixture说起吧! 简介: fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进: 1.有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。 2.按模块化的方式实现,每个fixture都可以互相调用。 3.fixture的范围从简单的单元测试到复杂的功能测试,可以对fixture配置参数,或者跨函数function,类clas
pytest-fixture之conftest.py
weixin_33365807的博客
01-18 478
conftest.py作用 多个.py文件想使用同一个函数,如果使用setup和teardown代码重复率较高,并且编写麻烦,所以可以使用conftest.py进行实现 conftest.py配置 conftest.py 配置脚本名称是固定的,不能改名称 conftest.py 不运行的用例要在同一个 pakage 下,并且有__init__.py文件 不需要 import 导入 conftest.pypytest 用例会自动查找 conftest.py示例 示例一:无yield # -*- co
pytest框架学习(二) - pytest-html报告与fixture使用以及conftest.py文件
夜莺_Cody
07-02 881
优化 - pytest - html 需要安装pytest - html插件 pytest可以生成多种样式的结果 1.生成 JunitXML 格式的测试报告: 命令: --junitxml=path 2.生成result log格式的测试报告: 命令: --resultlog=report\log.txt 3.生成html格式的测试报告: 命令: --html=report\test_o...
python pytest进阶之conftest.py详解
09-19
其中 `conftest.py` 文件是 Pytest 的一个重要组成部分,它允许用户在一个集中位置定义共享的 fixture 和其他配置选项。本文将详细介绍 `conftest.py` 的功能及其应用场景。 #### conftest.py 的基本概念 `conftest...
pytest系列conftest.py配置文件
mashang_z111的博客
09-25 3882
conftest.pyfixture函数的一个集合,可以理解为公共的提取出来放在一个文件里,然后供其它模块调用。不同于普通被调用的模块,conftest.py使用时不需要导入,Pytest会自动查找。如果我们有很多个函数,写在各个py文件中是不很乱?再或者说,我们很多个py文件想要使用同一个函数该怎么办?这也就是conftest.py的作用conftest.py这个文件名是固定的,不可以更改。conftest.py与运行用例在同一个包下,并且该包中有__init__.py文件使用的时候。
Pytest学习之use fixtures
weixin_30432179的博客
02-25 287
'''当用例需要调用fixture时,面讲到可以直接在用例里加fixture参数,如果一个测试class都需要用到fixture,每个用例都去传参,会比较麻烦,这个时候,可以在class外面加usefixtures装饰器,让整个class都调用fixture''''''调用fixture的三种方法1.函数或类里面方法直接传fixture的函数名称2.使用装饰器@pyets.mark.usefix...
pytestfixture用法05:usefixtures方法
weixin_46471814的博客
11-15 243
第一种是我们之文章中已经使用的方法。第二种usefixture无法接收返回值,在方法不需要返回值使用就会更直观地看出调用了fixture方法。@pytest.mark.usefixtures('use_fixture', 'use_fixture2')括号中是字符串格式。提:定义了一个fixture方法。
pytest】(三) pytest中的fixture (2) : fixture的声明和调用
爱测试的高胖胖的博客
07-19 857
本文为在霍格沃兹测试开发学社中学习到的一些技术,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步。
PytestFixture参数详解及使用
热门推荐
qq_42610167的博客
08-20 1万+
Fixture参数详解及使用 Fixture的调用方式: @pytest.fixture(scope = "function",params=None,autouse=False,ids=None,name=None) 参数详解: 1、SCOPE 用于控制Fixture的作用范围 作用类似于Pytest的setup/teardown 默认取值为function(函数级别),控制范围的排序为:session > module > class > function 取值 范围 说明
pytest自动化测试中的fixture的声明和调用
软件测试小dao
12-28 1225
我们使用@pytest.fixture()来声明fixture函数fixture()即可无参数进行声明,也可以带参数声明。
pytest中实用但不常用方法列举
python自学者的足迹
03-28 460
hello,大家好,今天和大家一起学习下pytest中实用但不常用的一些方法,作为一名测试,可能不像开发那样天天写代码,所以有时我们会逐渐遗忘一些方法或这语法,所以以免后期我也遗忘,今天做下记录 一:pytest中的testcase执行顺序,废话不多,直接上代码 import os,sys def setup_module(): print('--setup module--') class TestTmp(object): @classmethod def set
自动化测试 —— Pytest fixture及conftest详解!
测试界的彭于晏的博客
04-16 708
fixture是在测试函数运行后,由pytest执行的外壳函数fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集、配置测试系统的初始状态、为批量测试提供数据源等等。fixture是pytest的精髓所在,类似unittest中setup/teardown,但是比它们要强大、灵活很多,它的优势是可以跨文件共享。
pytest-fixture的使用
shixiaonong_
12-17 1444
置条件: 1.文件路径: - Test_App - - test_abc.py - - pytest.ini 2.pyetst.ini配置文件内容: [pytest] # 命令行参数 addopts = -s ...
pytest conftest.py文件使用
07-27
pytest中,`conftest.py`是一个特殊的文件,用于定义共享的测试夹具(fixtures)和插件配置。夹具是一些函数、类或对象,用于为测试提供所需的预置条件或共享资源。 要使用`conftest.py`文件,首先在你的项目中创建一个名为`conftest.py`的文件。然后,在该文件中定义你需要的夹具。 例如,假设你有一个测试模块,其中包含多个测试函数需要使用同一个夹具。你可以在`conftest.py`中定义该夹具,并在需要使用它的测试函数中引用它。 以下是一个示例`conftest.py`文件: ```python import pytest # 定义一个夹具 @pytest.fixture def my_fixture(): # 在这里可以执行一些预置操作 data = [1, 2, 3, 4] return data ``` 然后,在你的测试模块中,可以直接使用`my_fixture`夹具: ```python def test_function(my_fixture): # 使用my_fixture夹具 assert len(my_fixture) == 4 ``` 注意,`conftest.py`文件必须与你的测试模块在同一级目录下,或者是其父级目录。pytest将自动查找并加载所有的`conftest.py`文件。 当运行pytest时,它会自动应用`conftest.py`中定义的夹具和配置。这样,你就可以在多个测试模块中共享夹具,并进行一些全局的配置。 希望这个回答能够帮助到你!如果还有其他问题,请随时提问。
写文章

热门文章

  • JSP基本语法 6256
  • pip安装提示socket.timeout: The read operation timed out【已解决】 5236
  • PyCharm 虚拟环境搭建 2361
  • Python Selenium 元素定位错误Message: no such element: Unable to locate element: {“method“:xxx} 2288
  • Python程序运行出现TypeError: run() missing 1 required positional argument: ‘test’ 2159

分类专栏

  • 前端 12篇
  • 计算机网络 1篇
  • 理论基础 6篇
  • Linux 1篇
  • Python 8篇
  • Pytest 10篇
  • Selenium 1篇
  • Jmeter 11篇
  • MySQL 1篇
  • Postman 3篇
  • 抓包工具 1篇
  • Anaconda 1篇
  • 安装综合
  • 问题汇总 7篇

最新评论

  • Anaconda安装过程

    小橙子*: 1.3 中 2命令: 查看当前存在哪些虚拟环境。conda env list

最新文章

  • 公共方法和推导式
  • 扇形统计图形测试场景
  • Pytest系列-失败重跑插件pytest-rerunfailures的使用(9)
2024年1篇
2023年28篇
2022年48篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小橙子*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家宿迁玻璃钢广场雕塑厂家江都玻璃钢花盆花器玻璃钢雕塑加工哪里好青浦区专业玻璃钢雕塑多少钱长沙县长沙玻璃钢雕塑定制澳门玻璃钢抽象雕塑玻璃钢雕塑鸟玻璃钢海洋雕塑专业厂家菏泽玻璃钢彩绘雕塑定制广东人物玻璃钢雕塑图片绍兴玻璃钢仿铜雕塑价格四川定制玻璃钢雕塑制作玻璃钢迎宾人物雕塑鼎湖玻璃钢卡通雕塑厂家广东动物雕塑玻璃钢河源玻璃钢马雕塑盘锦玻璃钢雕塑制作厂家开封镜面校园玻璃钢雕塑阳江商场玻璃钢雕塑山东超市商场美陈销售厂家临沧市玻璃钢雕塑批发厂家羽毛玻璃钢雕塑厂商场节庆美陈雕塑艺术小品制作德州校园玻璃钢彩绘雕塑厂家玻璃钢雕塑模具制作方法视频玻璃钢雕塑详细报价表四川玻璃钢定制雕塑宣城抽象玻璃钢雕塑多少钱青岛玻璃钢动物雕塑通州商场美陈定制香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化