当前位置: 首页 > news >正文

pytest详细教程

pytest详细教程

  1. 安装pytest

    pip install pytest

  2. 创建pytest配置文件

    pytest.ini

  3. 编写用例

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

    例如:

    # test_api.py
    from session import MySessionsession = 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. 执行测试命令

    # 方法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注册标记

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

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

      pytest -m "login or db"

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

      无需注册,直接使用:

      1. skip: 无条件跳过用例

      2. skipif: 有条件跳过

      3. xfail: 预期失败

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

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

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

    @pytest.fixture()
    def jia_ju():print("我是前置代码,在用例执行之前,自动运行")yieldprint("我是后置代码,在用例执行之后,自动运行")@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

    • 创建用例

      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插件生成日志记录和测试报告

    • 安装插件

      pip install allure-pytest pytest-result-log pytest-base-url
      
    • 配置插件

      [pytest]
      addopts = -vs --alluredir=./allure_results --clean-alluredirlog_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 = infomarkers =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可以实现基本的接口自动化
    • 测试框架+持续集成,形成企业级的落地方案
http://www.dtcms.com/a/457226.html

相关文章:

  • 订单超时方案的选择
  • Redis 集群故障转移
  • 虚拟专用网络
  • 网站制作公司网站建设网站膳食管理东莞网站建设
  • Linux小课堂: 从零到上手的指南
  • DrissionPage防检测
  • 三亚官方网站建设ps如何做网页设计
  • Java体系总结——从基础语法到微服务
  • 深圳网站建设李天亮网站怎么做构成
  • Word卡顿,过很久才弹窗网络连接失败解决办法
  • 古典网站建设睢宁招标网官方
  • 告别物流乱象:商贸物流软件如何实现全流程可视化管理​
  • Ubuntu 20.04 安装mysql-5.7.9
  • 二、排版格式与注释
  • 计组2.2.1——加法器,算数逻辑单元ALU
  • 东莞网站建设公司注册郑州企业网站排名
  • 2025-10-08 Python 标准库 4——内置类型:数字类型
  • java ArrayList的add方法是插入到最后吗
  • Kotlin 判空写法对比与最佳实践
  • 如何在中国建设银行网站转账网站域名格式
  • OSI 七层模型
  • HTTP Client
  • 网络彩票网站建设电商具体是做什么的上班
  • 【C语言基础详细版】02. 数组详解:从概念到应用全面解析
  • 告别项目文档滞后:Litho(deepwiki-rs)在CI/CD中的自动化文档生成实践
  • 接口测试-postman-全局变量与环境变量
  • 使用MockMVC进行Web请求验证
  • 淄博网站制作设计html5教程下载百度云
  • 专业网站建设怎么样网站建设的感想与建议
  • CMD命令行