PyTest(笔记)

 1.添加断言

import pytest

def add(a, b):
    return a + b

def test_dengyu():
    assert 3 == add(1, 2)

def test_budengyu():
    assert  5 != add(1,3)    # 错误就显示失败

def test_dayu():
    assert 5 > add(1,3)

def test_dayudengyu():
    assert 5 >= add(1,3)

def test_xiao():
    assert 1 < add(1,2)

def test_xiaoyudengyu():
    assert 1 <= add(1,3)

def test_baohan():
    assert 1 in [1,2,3]

def test_bubaohan():
    assert 1 not in [1,2,3]

def test_ifture():
    assert 1 is True    # 需要手动转换数据类型
    # assert bool(1)  is True

def test_iffalse():
    assert 0 is False

if __name__ == "__main__":
    pytest.main(['test_pytest2.py'])

 2.pytest参数化

import pytest
# 参数化
def add(a, b):
    return a + b

# 第一种实现参数化的写法
@pytest.mark.parametrize(['x','y'],[(1,2),(0,3)])
def test_add1(x,y):
    assert 3 == add(x, y)

# 第二种实现参数化的写法
xy = [(-1,3),(-1,4), (1,-4)]
@pytest.mark.parametrize(['x','y'],xy)
def test_add2(x,y):
    assert 3 == add(x, y)

if __name__ == "__main__":
    pytest.main(['test_pytest3'])

3.外部mysql

import pytest
# 参数化
def add(a, b):
    return a + b

# 第一种实现参数化的写法
@pytest.mark.parametrize(['x','y'],[(1,2),(0,3)])
def test_add1(x,y):
    assert 3 == add(x, y)

# 第二种实现参数化的写法
xy = [(-1,3),(-1,4), (1,-4)]
@pytest.mark.parametrize(['x','y'],xy)
def test_add2(x,y):
    assert 3 == add(x, y)

# 把存储在mysql当中的测试用例参数化出来
import pymysql
db_info={
    "host":"192.168.0.108",
    "user":"root",
    "password":"123",
    "database":"mydb2",
    "charset":"itf8"
}
conn = pymysql.connect(**db_info)
cursor = conn.cursor()
sql = "select * from mumu"
cursor.execute(sql)
result = cursor.fetchall()

@pytest.mark.parametrize(['id',
                          'case_id',
                          'title',
                          'interface_type',
                          'uri',
                          'method',
                          'if_login',
                          'input_data',
                          'data_type',
                          'expect'],result)
def test_mysql_param(id,case_id,title,interface_type,uri,
                     method,if_login,input_data,data_type,expect):
    print(title)


if __name__ == "__main__":
    pytest.main(['test_pytest3'])

4.pytest测试用例组织管理

1.在PyTest当中,测试方法执行的顺序,默认是从上到下

2.我们使用pytest.mark.run进行测试函数执行顺序的标记时

需要先安装pip install pytest_ordering

3.在优先级方面(正数) pytest.mark.first是最高优先级

                         (倒数)pytest.mark.last优先级要低于order=-1

4.如果我们在进行标记顺序时,假设我们采用了数字形式,那么就都用数字形式(first和 order=1 不同时用)

5.鼠标在空白处右击执行,在类中右击只执行类中的

# 测试用例的组织管理
import pytest
def test_01():
    print(1)
def test_02():
    print(2)

@pytest.mark.first    # 永远优先执行
def test_03():
    print(3)

@pytest.mark.run(order=1)   # 先运行
def test_04():
    print(4)

class TestLogin():
    def test_05(self):   #在类里面叫方法,有个默认参数self
        print(5)

    @pytest.mark.run(order=2)
    def test_06(self):
        print(6)
    @pytest.mark.run(order=-1)   # 最后执行
    def test_07(self):
        print(7)
    @pytest.mark.last    # 永远最后执行
    def test_08(self):
        print(8)

if __name__ == "__main__":
    pytest.main(['test_pytest4.py'])

5.pytest的前置和后置操作

在Python  3.6的版本中下边的两个前置和后置函数setup和teardown是可以运行的,但是优先级没有setup_function和teardown_function的优先级高

# pytest的前置和后置操作
import pytest

def setup_module():         # 前置模块范围的会触发一次
    print("这是前置的模块级别的函数")

def teardown_module():
    print("这是后置的模块级别的函数")

def setup_function():         # 函数级别的将会在运行每一个测试函数的前面和后面都会运行
    print("这是前置的函数级别运行的函数")
def teardown_function():
    print("这是后置的函数级别运行的函数")

# def setup():
#     print("前置函数级别的111111")
# 这个两个级别没有带function的级别高,老的python版本写法
# def teardown():
#     print("后置函数级别的22222")

def test_01():
    print("测试1运行了")
    assert 1==1

def test_02():
    print("测试2运行了")
    assert 1==1

# 先执行模块,再执行类中的方法
class TestMyClass():
    def setup_class(self):
        print("这是前置的class级别的方法")
    def teardown_class(self):
        print("这是后置的class级别的方法")
    # 类中的前置和后置方法必须要写method
    #  不能写function
    def setup_method(self, method):
        print("我是前置的类中的方法级别的")
        print(method)
    def teardown_method(self):
        print("我是前置的类中的方法级别的")

    def test_of_method1(self):
        print("<<<我是类中的测试方法11111>>>")
    def test_of_method2(self):
        print("<<<我是类中的测试方法22222>>>")

if __name__ == "__main__":
    pytest.main(['test_pytest5.py'])

6.fixture

import pytest

@pytest.fixture()
def first_fixture():
    print("这是我人生中第一个fixture")
    return 1

@pytest.fixture()
def second_fixture(first_fixture):
    print("这是我人生中的第二个fixture")
    return first_fixture + 2


def test_case1(first_fixture):
    print("这是我的第一个测试用例")
    r = first_fixture
    print(r)

def test_case2(second_fixture):
    print("这是我的第二个测试用例")
    print(second_fixture)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值