接口自动化之添加商品(pytest)

1、项目结构

2、拿取登录的鉴权码assess_token.py

python 复制代码
import requests

def login_token():
    BASE_url="http://192.168.10.39:6255/wx/auth/login"

    json={"username":"user123","password":"user123"}

    res=requests.post(url=BASE_url,json=json)
    #需要结合实际的json格式,获取的格式为{data:{token:""}}
    token=res.json()["data"]['token']
    headers={'x-litemall-token':token}
    return headers

3、读取文件根目录的config.py

python 复制代码
import os

BASE_DIR = os.path.dirname(__file__)

4、读取需要测试的json数据read_data.py

这是一个json文件(additems.json):

python 复制代码
[
  {
    "goodsId":1135002,
    "number":1,
    "productId":204,
    "expect" : "成功"
  },
  {
    "goodsId":" ",
    "number":1,
    "productId":204,
    "expect" : "参数不对"
  },
  {
    "goodsId":1135002,
    "number":" ",
    "productId":204,
    "expect" : "系统内部错误"
  },
  {
    "goodsId":1135002,
    "number":1,
    "productId":" ",
    "expect" : "参数不对"
  }
]

这是读取数据的read_data.py

python 复制代码
from config import BASE_DIR

import json

def goods_data():
    with open(BASE_DIR + '\\data\\additems.json',encoding='utf-8') as f:
        data1 = json.load(f)

    new_list = [] 

    for d in data1:
        new_list.append(tuple(d.values()))

    return new_list

5、发送添加商品的请求以及判定执行结果add_tools.py

python 复制代码
import requests

from assess_token import login_token

def addgds(goodsId,number,productId):

    BASE_URL = "http://192.168.10.39:6255"


    url1 = f"{BASE_URL}/wx/cart/add"
    payload = {
    "goodsId":goodsId,
    "number":number,
    "productId":productId}

    resp = requests.post(url=url1, json=payload, timeout=10,headers=login_token())

    res_json = resp.json()

    # litemall 规范:errno=0 代表成功
    if res_json.get("errno") == 0:
        return res_json.get("errmsg")   # 成功标记
    else:
        return res_json.get("errmsg")   # 失败标记

6、执行添加商品的接口测试additem.py

python 复制代码
import pytest

from reas_data import goods_data

from tools.add_tools import addgds


class TestAdd:
    # 参数化:批量读取json内多组账号密码+预期结果
    @pytest.mark.parametrize('goodsId,number,productId,expect', goods_data())
    def test_add_pass(self, goodsId,number,productId,expect):

        actual_result = addgds(goodsId,number,productId)

        print(f"预期结果:{expect},实际结果:{actual_result}")
        # 断言:实际值 = 预期值,不相等则用例失败py

        assert expect in actual_result

7、配置pytest.ini文件

python 复制代码
[pytest]
addopts = --capture=tee-sys --html=report/additem_report.html  --self-contained-html
testpaths = ./litemall
python_files = additem.py
python_classes = Test*
python_functions = test*

8、打开终端执行pytest生成测试报告

相关推荐
用户9562562542911 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
威哥爱编程11 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
威哥爱编程11 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
2601_9679801112 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
伞伞悦读12 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习
新*12 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
卷无止境14 小时前
mathmodel-figure-templates 以及两个上手案例
后端·python
锋行天下15 小时前
服务器 Python 2.7 装不了 langgraph-cli?用本地生成 Dockerfile 曲线救国
人工智能·后端·python
一条大祥脚15 小时前
深入理解 PyTorch FlexAttention:从 Score Mod 到 Mask Mod 的稀疏加速之道
人工智能·pytorch·python·注意力机制·flex attention·可编程注意力
2601_9679801116 小时前
Python自动化办公:模块、库与样式调整教程
python·excel·自动化办公·openpyxl·样式调整