pytest测试框架

193 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

测试需要借助单元测试框架,在python中比较常用的单元测试框架:unittest,pytest,nose,其中pytest最为强大和灵活,并且能够匹配其他两种的测试用例

1:安装pytest第三方库 python3 -m pip install pytest 报错如下:

截屏2022-02-27 下午7.46.39.png

更换安装命令:pip3 install  --user pytest

安装成功: 截屏2022-02-27 下午7.48.08.png

检测是否安装成功: 选择preferences…---找到python interpreter,查看pytest版本 截屏2022-02-27 下午8.05.38.png 截屏2022-02-27 下午8.08.18.png

设置pytest作为当前项目的默认单元测试工具 image.png

清理之前的运行记录 截屏2022-02-28 下午4.46.20.png 依次删除 image.png

2:pytest测试用例编写

规则:

  • 测试文件必须以pytest开头
  • 测试用例其实就是一个函数,函数必须以test开头
  • 测试用例中必须有断言

image.png

实例函数编写如下:

#pytest测试用例规则
#测试文件必须以pytest开头
#测试用例其实就是一个函数,函数必须以test开头

#立即购买接口用例设计
import pytest
from requets.mtxshop import buy_login, buy_now

#调用buy_now函数,拿到响应结果,完成断言

def test_buy_now():
    token = buy_login()
    resp1 = buy_now(token)
#拿到响应结果+断言
    status_code = resp1.status_code
    assert status_code == 200

#立即购买接口用例设计
"""
'sku_id为空','',1,400
'sku_id不存在','12345678',1,500
'sku_id已删除',74664,1,400
'sku_id已下架',541,1,400
'num为0',600,0,400
'num为-1',600,-1,400
'num超过库存',600,99999999,500
"""
#sku_id和num要作为参数传递,所以buy_now中的函数要进行修改
def test_buy_now1():
    token = buy_login()
    resp1 = buy_now(token,sku_id='',num=1)
    status_code = resp1.status_code
    assert status_code == 400

def test_buy_now1():
    token = buy_login()
    resp1 = buy_now(token,sku_id='',num=1)
    status_code = resp1.status_code
    assert status_code == 400

def test_buy_now2():
    token = buy_login()
    resp1 = buy_now(token,sku_id=12345678,num=1)
    status_code = resp1.status_code
    assert status_code == 500

def test_buy_now3():
    token = buy_login()
    resp1 = buy_now(token,sku_id=74664,num=1)
    status_code = resp1.status_code
    assert status_code == 500

def test_buy_now4():
    token = buy_login()
    resp1 = buy_now(token, sku_id=600, num=0)
    status_code = resp1.status_code
    assert status_code == 400

以上数据参数化:

#参数化
test_case = [
    ['sku_id为空','600',1,200],
    ['sku_id不存在','12345678',1,500],
    ['num为0',600,0,400],
    ['num为-1',600,-1,400]
]

#python解释器
@pytest.mark.parametrize('case_name,sku_id,num,expect_status_code',test_case)
def test_buy_now5(case_name,sku_id,num,expect_status_code):
    token = buy_login()
    resp1 = buy_now(token,sku_id=sku_id,num=num)
    status_code = resp1.status_code
    assert status_code == expect_status_code

数据库配置:

image.png