pytest框架

简介

  1. pytest是一个非常成熟的单元框架
  2. pytest可以和其他框架整合,例如requests,httprunner
  3. pytest可以实现测试用例跳过、失败重跑
  4. pytest可以和allure生成非常美观的测试报告
  5. pytest可以和jenkins持续集成
  6. pytest有非常强大的插件,并且你这些插件能实现很多的实用的操作

安装

pip install pytest
pytest-xdist 测试用例分布式执行,多cpu并发
pytest-ordering 用于改变测试用例的执行顺序
pytest-rerunfailures 用于失败重跑
allure-pytest 用于生成美观的测试报告

断言

assert True  # 为true
assert not 1 != 1  # 为 False
assert 1 != 2
assert not False
a = [1, 2, 3, 4]
assert 1 in a    # 是否包含
assert "1" in "2313"

前后置处理之setup/teardowm,setup_class/teardown_class

import pytest
class Test1:
    def setup(self):
        print("每个用例前执行一次")
    def teardown(self):
        print("每个用例后执行一次")
    def setup_class(self):
        print("每个类前执行一次")
    def teardown_class(self):
        print("每个类后执行一次")
    def test_001(self):
        print("用例1")

fixture特性

pytest fixture是Pytest测试框架中的一个特性,它可以在测试函数执行前或执行后自动执行一段代码,
并将其返回值传递给测试函数。pytest fixture的主要特性包括:

  1. 自动执行:pytest fixture可以自动执行一段代码,无需手动调用。
  2. 作用域:pytest fixture可以定义不同的作用域,包括函数级别、模块级别、类级别和会话级别。不
    同作用域的fixture在不同的测试函数中的执行次数和执行时间也不同。
@pytest.fixture(scope="session")  # 只执行一次
@pytest.fixture(scope="module")  # 只执行一次

注解

跳过单元测试

@pytest.mark.skip # 跳过某个单元测试

参数化

@pytest.mark.parametrize("username",['admin','张三','admin'])
def test1(username):
	print(username)
#多参数 集合(元组/集合/set)
@pytest.mark.parametrize("username,pwd",[('admin','123456'),('test1','123')])
def test2(username,pwd):
	print(username,pwd)
@pytest.mark.parametrize("username,pwd",[['admin', '123456'], ['test1','123456']])
def test3(username,pwd):
	print(username,pwd)
test_data = [{
	'case': '登入成功',
	'usr': 'admin', # 正常登入
	'psw': '123456'
},{
	'case': '账号不存在',
	'usr': 'admin1', # 账号不存在
	'psw': '123456'
}]
@pytest.mark.parametrize('param', test_data, ids=[data.get('case') for data in   test_data])  #ids为测试用例名称
def test4(param):
	usr = param.get('usr')
	psw = param.get('psw')
	print(f'usr: {usr} , psw: {psw}')

失败重试

pip install pytest-rerunfailures
@pytest.mark.flaky(reruns=3) #失败最大试3次
@pytest.mark.flaky(reruns=3,reruns_delay=2) #失败最大3次 ,每次延迟2秒执行

conftest.py 配置

pytest会默认读取conftest.py里面的所有fixture
conftest.py 文件名称是固定的,不能改动
不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py
测试用例文件中不需要手动import conftest.py,pytest会自动查找

def pytest_collection_modifyitems(items):
    """
    该方法解决
    """
    # 解决运行结果乱码问题
    for item in items:
        item.name = item.name.encode('UTF-8').decode('unicode-escape')
        item._nodeid = item.nodeid.encode('UTF-8').decode('unicode-escape')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值