Pytest自动化测试框架

发布于:2022-12-28 ⋅ 阅读:(597) ⋅ 点赞:(0)

Pytest基本框架&用法

"""文件名要以test_开头或_test结尾,也就是test_*.py或*_test.py"""

class Test_测试:  # 类的Test的t要大写,函数test小写

    def test_C01(self):
        print("\n用例1")
        assert 1 == 1

    def test_C02(self):
        print("\n用例2")
        assert 2 == 2

    def test_C03(self):
        print("\n用例3")
        assert 3 == 2

执行测试,建议用系统终端(我这里是windows),一定要在测试文件所在的目录下执行,如果有多个文件分不清,可以指定具体目录

可以显示代码中print的内容,在命令行后加上-s即可,-v是展示更详细的信息

产生测试报告

这里用的是pytest-html,在命令行后加上:--html=文件名.html --self-contained-html

pytest (目录) --html=文件名.html --self-contained-html

 

 

初始化清除

 模块module初始化/清除:在每个用例开始前初始化,结束后清除,只会执行一次

def setup_module():
    print("\n----初始化模块----")

def teardown_module():
    print("\n----清除模块----")


class Test_测试:

    def test_C01(self):
        print("\n用例1")
        assert 1 == 1

    def test_C02(self):
        print("\n用例2")
        assert 2 == 2

    def test_C03(self):
        print("\n用例3")
        assert 3 == 2


class Test_测试2:

    def test_C11(self):
        print("\n用例b1")
        assert 1 == 1

    def test_C12(self):
        print("\n用例b2")
        assert 2 == 2

类class初始化/清除,在指定的类开始前初始化,结束或清除

def setup_module():
    print("\n----初始化模块----")

def teardown_module():
    print("\n----清除模块----")


class Test_测试:

    @classmethod
    def setup_class(cls):
        print("\n----初始化类----")

    @classmethod
    def teardown_class(cls):
        print("\n----清除类----")

    def test_C01(self):
        print("\n用例1")
        assert 1 == 1

    def test_C02(self):
        print("\n用例2")
        assert 2 == 2

    def test_C03(self):
        print("\n用例3")
        assert 3 == 2


class Test_测试2:

    def test_C11(self):
        print("\n用例b1")
        assert 1 == 1

    def test_C12(self):
        print("\n用例b2")
        assert 2 == 2

方法method初始化/清除,每个方法执行前初始化,结束后清除

def setup_module():
    print("\n----初始化模块----")

def teardown_module():
    print("\n----清除模块----")


class Test_测试:

    @classmethod
    def setup_class(cls):
        print("\n----初始化类----")

    @classmethod
    def teardown_class(cls):
        print("\n----清除类----")

    def setup_method(self):
        print("\n----初始化方法----")

    def teardown_method(self):
        print("\n----清除方法----")

    def test_C01(self):
        print("\n用例1")
        assert 1 == 1

    def test_C02(self):
        print("\n用例2")
        assert 2 == 2

    def test_C03(self):
        print("\n用例3")
        assert 3 == 2


class Test_测试2:

    def test_C11(self):
        print("\n用例b1")
        assert 1 == 1

    def test_C12(self):
        print("\n用例b2")
        assert 2 == 2

目录初始化/清除,在需要初始化的目录下创建conftest.py,里面内容为:

在文件1结束后先清除文件1的模块,再开始文件2

指定用例执行

指定一个模块

pytest 目录\子目录\...\文件名.py 

指定目录/多个目录

pytest 目录1 目录2\文件名

 指定类

 pytest 目录\子目录\...\文件名.py::类名

指定名字

可以是函数名/类名/模块名/目录名,名字可以不完整,区分大小写

根据标签

可以同时添加多个标签,也可以给整个类添加标签

parametrize参数化

单参数

import pytest

@pytest.mark.parametrize('name', ['a'])
def test_para01(name):
    print("这是"+name)
    assert name == 'a'

# 一个参数多个值,有几个值就执行几次,每次把对应的值赋值给参数
@pytest.mark.parametrize('name', ['a', 'b', 'c'])
def test_para02(name):
    assert name == 'b'

 

多参数

import pytest

@pytest.mark.parametrize('name,skill', [('路飞','橡胶'), ('黑胡子','暗暗')])
def test_para01(name, skill):
    print("\n用例1")
    print('\n'+f'{name}的技能是{skill}')

# 两个参数单个值
@pytest.mark.parametrize('name,skill', [['路飞','橡胶']])
def test_para02(name, skill):
    print("\n用例2")
    print('\n'+f'{name}的技能是{skill}')

 

数据驱动

测试用例中有相同的测试步骤,只是测试数据的参数不同,可以把测试数据从用例代码中分离出来

import pytest

class test_功能:
    @pytest.mark.parametriz('username, password, expected', [
        (None, '123123', '期望结果xxx'),  # 对应几条测试用例,有几条就执行几条
        ('xxx', None, '期望结果xxx'),
        ('xxx', 'xxx', '期望结果xxx'),
        ('xxx', 'xxx', '期望结果xxx'),
    ])

    def test(self, username, password, expected):
        result = Check(username, password)
        assert result == expected


网站公告

今日签到

点亮在社区的每一天
去签到