IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> pytest单元测试框架 -> 正文阅读

[开发测试]pytest单元测试框架

1.pytest基本使用方法

1.1 断言

import pytest


# 功能1:计算a+b
def add(a, b):
    return a + b


# 功能2:判断素数
def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True


# 测试功能1
def test_add_1():
    assert add(3, 4) == 7


def test_add_2():
    assert add(3, 4) != 8


def test_add_3():
    assert add(3, 4) <= 9


def test_add_4():
    assert add(3, 4) >= 5


# 测试包含
def test_in():
    a = "hello"
    b = "he"
    assert b in a


def test_not_in():
    a = "hello"
    b = "hi"
    assert b in a


# 测试功能2
def test_is_prime_1():
    assert is_prime(13)


def test_is_prime_2():
    assert is_prime(13) is True


def test_is_prime_3():
    assert not is_prime(9)


def test_is_prime_4():
    assert is_prime(9) is not True


def test_is_prime_5():
    assert is_prime(9) is False


if __name__ == "__main__":
    pytest.main()

1.2 Fixture

import pytest


# 功能
def multiply(a, b):
    return a * b


# Fixture
# 在当前文件夹中,在所有的测试用例之前与之后执行
def setup_module(module):
    print("setup module...")


def teardown_module(module):
    print("teardown module...")


# 在每个测试函数之前与之后执行
def setup_function(function):
    print("setup function...")


def teardown_function(function):
    print("teardown function...")


# 在每个测试函数之前与之后执行,也可以作用与类方法
def setup():
    print("setup...")


def teardown():
    print("teardown...")


# 测试用例
def test_module_1():
    print("test module 1")
    assert multiply(3, 4) == 12


def test_module_2():
    print("test module 2")
    assert multiply(3, 'a') == 'aaa'


if __name__ == "__main__":
    pytest.main(['-s', 'test_fixture_1.py'])
import pytest


# 功能
def multiply(a, b):
    return a * b


class TestMultiply:
    # Fixture
    # 在当前类的开始与结束执行
    @classmethod
    def setup_class(cls):
        print("setup module...")

    @classmethod
    def teardown_class(cls):
        print("teardown module...")

    # 在每个测试方法的开始与结束时执行
    def setup_method(self, method):
        print("setup method...")

    def teardown_method(self, method):
        print("teardown method...")

    # 在每个测试方法的开始与结束时执行,也可以作用与测试函数
    def setup(self):
        print("setup...")

    def teardown(self):
        print("teardown...")

    # 测试用例
    def test_module_1(self):
        print("test module 1")
        assert multiply(3, 4) == 12

    def test_module_2(self):
        print("test module 2")
        assert multiply(3, 'a') == 'aaa'


if __name__ == "__main__":
    pytest.main(['-s', 'test_fixture_2.py'])

?1.3 参数化

import math
import pytest


# 参数化
@pytest.mark.parametrize(
    "base, exponent, expected",
    [(2, 2, 4),
     (2, 3, 8),
     (1, 9, 1),
     (0, 9, 0)],
    ids=["case1", "case2", "case3", "case4"]
)
def test_pow(base, exponent, expected):
    assert math.pow(base, exponent) == expected


if __name__ == "__main__":
    # -v增加测试用例冗长
    pytest.main(['-v', 'test_parameterize.py'])

?1.4 运行测试

if __name__ == "__main__":
    # -s用于关闭捕捉,从而输出打印信息
    pytest.main(['-s', 'test_assert.py'])
if __name__ == "__main__":
    # -v用于增加测试用例冗长
    pytest.main(['-v', 'test_assert.py'])
if __name__ == "__main__":
    # -k指定运行名称中包含某字符串的测试用例
    pytest.main(['-k add', 'test_assert.py'])
if __name__ == "__main__":
    # -q用于减少测试运行冗长,等价于--quiet
    pytest.main(['-q', 'test_assert.py'])
if __name__ == "__main__":
    # -x如果出现一条测试用例失败,则退出测试
    pytest.main(['-x', 'test_assert.py'])

?运行测试目录:

?指定特定类或方法执行:

1.5 生成测试报告

生成JUnit XML文件:

(venv) D:\PythonProject>pytest ./pytest_demo ?--junit-xml=./report/log.xml

?生成在线测试报告:

# 要加这段
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

(venv) D:\PythonProject>pytest ./pytest_demo ?--pastebin=all

1.6 conftest.py

是pytest特有的本地测试配置文件,既可以用来设置项目级别的Fixture,也可以用来导入外部插件,还可以用来指定钩子函数。只作用于所在目录及其子目录。

test_project/conftest.py

import pytest


# 设置测试钩子
@pytest.fixture()
def test_url():
    return "http://www.baidu.com"

?test_project/test_sub.py

def test_baidu(test_url):
    print(test_url)

2.pytest扩展

2.1 pytest-html可以生成HTML格式的测试报告

(venv) D:\PythonProject>pip install pytest-html

(venv) D:\PythonProject>pytest ./pytest_demo --html=./report/result.html

?2.2 pytest-rerunfailures可以在测试用例失败时进行重试

(venv) D:\PythonProject>pip install pytest-rerunfailures
(venv) D:\PythonProject>pytest -v test_baidu.py --reruns 3

2.3 pytest-parallel扩展,可以实现测试用例的并行运行(运行失败)

(venv) D:\PythonProject>pip install pytest-parallel
(venv) D:\PythonProject>pytest -q test_parallel.py --tests-per-worker auto

3.构建web自动化测试项目

pytest对比unittest:

  • pytest可以通过conftest.py文件配置全局浏览器的启动或关闭,整个项目的运行只需要启动或关闭一次浏览器即可;
  • 测试用例运行失败截图;
  • 测试用例运行失败重跑。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:34:29  更:2021-10-09 16:35:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:59:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码