• pytest使用


    背景

    目前在做接口自动的时候发现Pytest框架已经非常成熟了,结合Python搭建接口自动化非常灵活方便,可以作为接口工具自动化的补充方案

    一、概述

    pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:

    • 1、简单灵活,容易上手,文档丰富;
    • 2、支持参数化,可以细粒度地控制要测试的测试用例;
    • 3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
    • 4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
    • 5、测试用例的skip和xfail处理;
    • 6、可以很好的和CI工具结合,例如jenkins

    二、使用介绍

    2.1、安装

    pip install pytest

    2.2 、编写规则

    编写pytest测试样例需要按照下面的规则:

    • 测试文件以test_开头(以_test结尾也可以)
    • 测试类以Test开头,并且不能带有 init 方法
    • 测试函数以test_开头
    • 断言使用基本的assert

    test.py

    # -*- coding:utf-8 -*-
    import pytest
    
    @pytest.fixture(scope='function')
    def setup_function(request):
        def teardown_function():
            print("teardown_function called.")
        request.addfinalizer(teardown_function)  # 此内嵌函数做teardown工作
        print('setup_function called.')
    
    @pytest.fixture(scope='module')
    def setup_module(request):
        def teardown_module():
            print("teardown_module called.")
        request.addfinalizer(teardown_module)
        print('setup_module called.')
    
    @pytest.mark.website
    def test_1(setup_function):
        print('Test_1 called.')
    
    def test_2(setup_module):
        print('Test_2 called.')
    
    def test_3(setup_module):
        print('Test_3 called.')
        assert 2==1+1              # 通过assert断言确认测试结果是否符合预期
    

      

    2.3 、scope参数

    scope参数有四种,分别是'function','module','class','session',默认为function。

    • function:每个test都运行,默认是function的scope
    • class:每个class的所有test只运行一次
    • module:每个module的所有test只运行一次
    • session:每个session只运行一次

    2.4 、setup和teardown操作

    • setup,在测试函数或类之前执行,完成准备工作,例如数据库链接、测试数据、打开文件等
    • teardown,在测试函数或类之后执行,完成收尾工作,例如断开数据库链接、回收内存资源等
    • 备注:也可以通过在fixture函数中通过yield实现setup和teardown功能

    2.5、执行结果

    a、Console参数介绍

    • -v 用于显示每个测试函数的执行结果
    • -q 只显示整体测试结果
    • -s 用于显示测试函数中print()函数输出
    • -x, --exitfirst, exit instantly on first error or failed test
    • -h 帮助

    b、执行方式

    • pytest # run all tests below current dir
    • pytest test_mod.py # run tests in module file test_mod.py
    • pytest somepath # run all tests below somepath like ./tests/
    • pytest -k stringexpr # only run tests with names that match the
      # the "string expression", e.g. "MyClass and not method"
      # will select TestMyClass.test_something
      # but not TestMyClass.test_method_simple
    • pytest test_mod.py::test_func # only run tests that match the "node ID",
      # e.g "test_mod.py::test_func" will be selected
      # only run test_func in test_mod.py

    c、通过pytest.mark对test方法分类执行

    通过@pytest.mark控制需要执行哪些feature的test,例如在执行test前增加修饰@pytest.mark.website

    三、扩展插件

    3.1、测试报告

    a、安装与样例

    pip install pytest-cov # 计算pytest覆盖率,支持输出多种格式的测试报告
    pytest --cov-report=html --cov=./ test_code_target_dir

    Console参数介绍

    • --cov=[path], measure coverage for filesystem path (multi-allowed), 指定被测试对象,用于计算测试覆盖率
    • --cov-report=type, type of report to generate: term, term-missing, annotate, html, xml (multi-allowed), 测试报告的类型
    • --cov-config=path, config file for coverage, default: .coveragerc, coverage配置文件
    • --no-cov-on-fail, do not report coverage if test run fails, default: False,如果测试失败,不生成测试报告
    • --cov-fail-under=MIN, Fail if the total coverage is less than MIN. 如果测试覆盖率低于MIN,则认为失败

    b、出错立即返回

    pip install pytest-instafail

    c、分布式测试

    pip install pytest-xdist

    d、测试顺序随机

    pip install pytest-randomly



  • 相关阅读:
    mysql主从配置
    前台使用复杂json
    eclipse打包非web项目的整合了spring和mybaits的pom项目,打包可以运行的jar
    Select
    sqlcmd踩坑笔记(环境Ubuntu18.04)
    等待
    戴锦华访谈:小鲜肉 大女主 腐文化的流行 当代女性的生存现状和困境
    CREATE
    语法约定和标识符
    SQL Server应用目录
  • 原文地址:https://www.cnblogs.com/sunnydev/p/15081328.html
Copyright © 2020-2023  润新知