pytest详细教程

pytest详细教程

  1. 安装pytest

    pip install pytest

  2. 创建pytest配置文件

    pytest.ini

  3. 编写用例

    • test_开头的文件
    • test_开头的函数
    • 使用断言

    例如:

    python 复制代码
    # test_api.py
    from session import MySession
    
    session = MySession("http://127.0.0.1:8000")
    
    def test_api():
        user_info = {"username": "test", "password": "123456"}
        response = session.request("post", "/login/with_json", json=user_info)
        assert response.status_code == 200
  4. 执行测试命令

    shell 复制代码
    # 方法1
    pytest
    # 方法2  -vs显示代码中打印的详细信息
    pytest -vs
    # 方法3  指定文件
    pytest test_api.py
    # 方法4  通过代码启动pytest测试框架
    import pytest
    pytest.main()  
    # 方法5  pytest.ini配置文件可以添加配置选项,这样的话在执行pytest命令时就不需要指定-vs了
    [pytest]
    addopts = -vs
  5. pytest进阶用法

    • mark
    • fixture
    • hook
    • 各种插件
  6. mark, 自定义标记的用途的是筛选用例,只执行部分用例

    • 在pytest.ini注册标记

      python 复制代码
      [pytest]
      addopts = -vs -m "login or db"
      
      markers =
        login: 登录相关
        db: 数据库相关
        upload: 上传相关
    • 再用例中通过装饰器添加标记

      python 复制代码
      @pytest.mark.db
      def test_a():
          print("使用数据库")
      
      @pytest.mark.login
      def test_b():
          pass
      
      @pytest.mark.upload
      def test_c():
          pass
      
      def test_d():
          pass
    • 在命令行参数中加-m使用标记

      pytest -m "login or db"

    • 内置标记:由pytest自己注册的,目的不是为筛选用例,而是对用例进行特殊处理。

      无需注册,直接使用:

      1. skip: 无条件跳过用例

      2. skipif: 有条件跳过

      3. xfail: 预期失败

      4. parametrize: 参数化测试 + 数据文件 = 数据驱动测试

        参数化测试:通过添加、编辑数据,实现添加、编辑测试用例的效果。

  7. fixture夹具,在测试用例执行之前、执行之后,自动的运行代码

    python 复制代码
    @pytest.fixture()
    def jia_ju():
        print("我是前置代码,在用例执行之前,自动运行")
        yield
        print("我是后置代码,在用例执行之后,自动运行")
    
    
    @pytest.mark.maya
    def test_jia_ju(jia_ju):
        print("我是测试用例")
  8. fixture夹具的作用域

    python中的作用域有4种:LEGB

    • Local: 函数内部
    • Enclosing: 嵌套函数的外部函数,闭包中的外部变量
    • Global: 模块级别,模块顶级的变量
    • Built-in: python内置,print len等等

    fixture夹具作用域:5种

    • function: 每个用例
    • class: 每个类
    • model: 每个文件
    • package: 每个目录包
    • session: 所有的用例

    接口自动化测试中,通过fixture提供全局的session,实现TCP复用、参数共享、cookies关联、日志记录、BaseURL。

  9. hook钩子

    钩子:被pytest自动调用的函数

    • 写在conftest.py中
    • 符合hook规范定义: 规则定义的方法名在这个文件里面 import _pytest.hookspec
    • pytest中有52个hook,分类、顺序、用法。
  10. 自动化测试项目实战

    • 创建fixture

    • 创建用例

      python 复制代码
      import pytest
      
      @pytest.mark.parametrize(
          "data, code",
          [
              ({}, 422),
              ({"email": "1341935532@qq.com", "password": "123456"}, 422),
              ({"username": "admin", "password": "123456"}, 200),
              ({"username": "admin", "password": "wrongpassword"}, 401),
          ]
      )
      def test_login(session, data, code):
          resp = session.post("/login/get_token", json=data)
          assert resp.status_code == code
  11. pytest插件生成日志记录和测试报告

    • 安装插件

      shell 复制代码
      pip install allure-pytest pytest-result-log pytest-base-url
    • 配置插件

      python 复制代码
      [pytest]
      addopts = -vs --alluredir=./allure_results --clean-alluredir
      
      log_file = pytest.log
      log_file_level = debug
      log_file_format = %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s] : %(message)s
      log_file_date_format = %Y-%m-%d %H:%M:%S
      result_log_level_verbose = info
      
      markers =
        login: 登录相关
        db: 数据库相关
        upload: 上传相关
        maya: maya相关
    • 生成报告

      (1)下载安装allure https://github.com/allure-framework/allure2/releases

      (2)执行allure命令,生成测试报告:allure generate -o report ./allure_results

  12. 总结:

    • requests是手,pytest是脑
    • pytest+requests可以实现基本的接口自动化
    • 测试框架+持续集成,形成企业级的落地方案
相关推荐
无小道4 分钟前
Qt——常用控件
开发语言·qt
鸽芷咕11 分钟前
DrissionPage 成 CANN 仓库爆款自动化工具:背后原因何在?
运维·python·自动化·cann
爱学习的阿磊12 分钟前
使用Fabric自动化你的部署流程
jvm·数据库·python
aini_lovee21 分钟前
MATLAB基于小波技术的图像融合实现
开发语言·人工智能·matlab
少云清32 分钟前
【金融项目实战】7_接口测试 _代码实现接口测试(重点)
python·金融项目实战
深蓝电商API33 分钟前
爬虫IP封禁后的自动切换与检测机制
爬虫·python
R1nG86334 分钟前
多线程安全设计 CANN Runtime关键数据结构的锁优化
开发语言·cann
m0_5500246334 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
初次见面我叫泰隆35 分钟前
Qt——5、Qt系统相关
开发语言·qt·客户端开发
亓才孓40 分钟前
[Class的应用]获取类的信息
java·开发语言