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可以实现基本的接口自动化
    • 测试框架+持续集成,形成企业级的落地方案
相关推荐
乄捷径5 小时前
pytest入门到熟练
pytest
专职5 小时前
pytest+requests+allure生成接口自动化测试报告
开发语言·python·pytest
小韩博5 小时前
day03_八大基本数类型+程序交互+基本运算符+流程控制语句
python·交互
风起云涌~6 小时前
【Java】浅谈ServiceLoader
java·开发语言
那我掉的头发算什么6 小时前
【数据结构】优先级队列(堆)
java·开发语言·数据结构·链表·idea
hui函数6 小时前
Python全栈(基础篇)——Day06:后端内容(定义函数+调用函数+实战演示+每日一题)
后端·python
qq_546937276 小时前
Cryptomator:免费的加密工具,
python
IT学长编程7 小时前
计算机毕业设计 基于k-means的校园美食推荐系统 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·python·毕业设计·kmeans·课程设计·毕业论文·美食推荐系统
.ZGR.7 小时前
C语言:数组的增删查改2.0
c语言·开发语言