美文网首页
Pytest学习6 -conftest.py的详细讲解

Pytest学习6 -conftest.py的详细讲解

作者: C1R2 | 来源:发表于2020-11-12 22:43 被阅读0次
    什么是conftest.py

    可以理解成一个专门存放fixture的配置文件

    实际开发场景

    多个测试用例文件(test_*.py)的所有用例都需要登录功能来作为前置操作,那就不能把登录功能写到某个用例文件中

    如何解决上述场景问题?

    conftest.py可以单独管理一些全局的fixture

    conftest.py配置fixture注意事项
    • pytest会默认读取conftest.py里面的所有fixture
    • conftest.py 文件名称是固定的,不能改动
    • conftest.py只对同一个package下的所有测试用例生效
    • 不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py
    • 测试用例文件中不需要手动import conftest.py,pytest会自动查找
    查看实际项目conftest存放位置
    image.png
    1
    06conftest目录下
    最顶层conftest文件,一般写全局的fixture,在web ui自动化中,可能会用来初始化driver
    代码参考如下:
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import pytest
    
    
    @pytest.fixture(scope="session")
    def login():
        print("====登录功能,返回账号,token===")
        name = "testyy"
        token = "npoi213bn4"
        yield name, token
        print("====退出登录!!!====")
    
    
    @pytest.fixture(autouse=True)
    def get_info(login):
        name, token = login
        print(f"== 每个用例都调用的外层fixture:打印用户token: {token} ==")
    
    
    • test_1.py代码
      同级目录下的第一条测试用例
      代码如下:
    def test_get_info(login):
        name, token = login
        print("***基础用例:获取用户个人信息***")
        print(f"用户名:{name}, token:{token}")
    
    
    • 06_run.py代码
      运行06conftest目录下所有测试用例
      代码如下:
    import pytest
    
    if __name__ == '__main__':
        pytest.main(["-s", "../06conftest/"])
    

    2

    • test_51job目录下
      conftest代码,配置一些针对51job这个网站的测试用例独有的fixture,譬如:打开51job网站
      代码如下:
    import pytest
    
    @pytest.fixture(scope="module")
    def open_51(login):
        name, token = login
        print(f"###用户  {name} 打开51job网站###")
    
    • test_case1.py代码
      某个功能模块下的测试用例
      代码如下:
    def test_case2_01(open_51):
        print("51job,列出所有职位用例")
    
    def test_case2_02(open_51):
        print("51job,找出所有python岗位")
    

    3
    -test_toutiao目录下
    test_case1.py代码
    注意:包没有init.py文件也没有conftest.py文件
    代码如下:

    def test_no_fixture(login):
        print("==没有__init__测试用例,我进入头条了==", login)
    
    

    4

    • test_weibo目录下
      conftest.py代码
      配置一些针对weibo这个网站的测试用例独有的fixture,譬如:打开weibo网站
      代码如下:
    import pytest
    
    @pytest.fixture(scope="function")
    def open_weibo(login):
        name, token = login
        print(f"&&& 用户 {name} 返回微博首页 &&&")
    
    
    • test_case1.py代码
      某个功能模块下的测试用例
      代码参考:
    class TestWeibo:
        def test_case1_01(self, open_weibo):
            print("查看微博热搜")
    
        def test_case1_02(self, open_weibo):
            print("查看微博范冰冰")
    
    image.png

    参考链接
    https://www.cnblogs.com/poloyy/p/12663601.html

    相关文章

      网友评论

          本文标题:Pytest学习6 -conftest.py的详细讲解

          本文链接:https://www.haomeiwen.com/subject/hcqavktx.html