本文已参与「新人创作礼」活动,一起开启掘金创作之路。
测试需要借助单元测试框架,在python中比较常用的单元测试框架:unittest,pytest,nose,其中pytest最为强大和灵活,并且能够匹配其他两种的测试用例
1:安装pytest第三方库 python3 -m pip install pytest 报错如下:
更换安装命令:pip3 install --user pytest
安装成功:
检测是否安装成功:
选择preferences…---找到python interpreter,查看pytest版本
设置pytest作为当前项目的默认单元测试工具
清理之前的运行记录
依次删除
2:pytest测试用例编写
规则:
- 测试文件必须以pytest开头
- 测试用例其实就是一个函数,函数必须以test开头
- 测试用例中必须有断言
实例函数编写如下:
#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
数据库配置: