接口测试项目实战,充值接口+取现接口,资深测试带你一文打通...


前言

1、充值接口

首先,我们得去写测试用例,以下仅仅几条,不算完善,仅仅是想跑起来,测一次,你们可自行设计更加全面完善的用例,那么这个expected结果是需要自己在postman上面自己先测一遍,看返回的是什么东西

在这里插入图片描述

postman截图:

在这里插入图片描述

在代码中实现:

import unittest
import os
import requests

from common.handle_config import conf
from common.handle_database import db
from common.handle_excel import Excel
from common.handle_log import log
from common.handle_path import DATA_DIR
from common import myddt
from jsonpath import jsonpath


@myddt.ddt
class TestReCharge(unittest.TestCase):
    excel = Excel(os.path.join(DATA_DIR, "cases.xlsx"), "recharge")
    cases = excel.read_data()

    @classmethod
    def setUpClass(cls):
        """写该用例类执行之前的前置,先登录才有后续的充值操作"""
        """登录获取token,用户id"""
        # 这就涉及到两个接口之间的参数依赖,比如登录接口和充值接口,参数依赖就是token和用户id
        login_url = conf.get("env", "login_url")
        params = {
            "mobile_phone": conf.get("login_test_data", "mobile_phone"),
            "pwd": conf.get("login_test_data", "pwd")
        }
        headers = eval(conf.get("env", "headers"))
        response = requests.request(url=login_url, method="post", json=params, headers=headers)
        res_login = response.json()
        # 提取token
        token = jsonpath(res_login, "$..token")[0]
        cls.token = "Bearer" + " " + token
        # 提取用户id
        cls.member_id = jsonpath(res_login, "$..id")[0]

    @myddt.data(*cases)
    def test_recharge(self, item):
        # 第一步:准备数据
        # 接口地址
        url = conf.get("env", "base_url") + item["url"]
        # 请求参数
        if "#member_id#" in item["data"]:
            item["data"] = item["data"].replace("#member_id#", str(self.member_id))
        params = eval(item["data"])
        # 请求头
        headers = eval(conf.get("env", "headers"))
        # 请求头中添加token
        headers["Authorization"] = self.token
        # 需要鉴权
        # 请求方法
        method = item["method"]
        # 预期结果
        expected = eval(item["expected"])
        sql = item["check_sql"]
        # 请求之前的金额
        if sql:
            s_amount = db.find_data(sql.format(params["member_id"]))
            s_money = s_amount[0]["leave_amount"]
        # 第二步:请求接口,获取结果
        response = requests.request(url=url, method=method, json=params, headers=headers)
        res = response.json()
        print("预期结果:", expected)
        print("实际结果:", res)

        # 断言
        try:
            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["msg"])
            # 数据库校验
            if sql:
                # 请求之后的金额
                e_amount = db.find_data(sql.format(params["member_id"]))
                e_money = e_amount[0]["leave_amount"]
                self.assertEqual(float(e_money - s_money), params["amount"])

        except AssertionError as e:
            log.error("用例{},执行未通过".format(item["title"]))
            log.exception(e)
            raise e
        else:
            log.info("用例{},执行通过".format(item["title"]))

请添加图片描述

请添加图片描述

很容易遇到的一些坑

坑一:

在这里插入图片描述

这个是涉及到Decimal类型数据的校验,可以将decimal类型的数据转换为浮点数

请添加图片描述

坑二:

在这里插入图片描述

涉及到局部变量和全局变量

请添加图片描述

正确的代码应该是这样:

请添加图片描述

坑三:

在这里插入图片描述

这个是报错,布尔值无法进行切片操作,说明返回的对象不是token,而是False,那就说明取不到token,取不到token的原因,再往上推测,那就是登录没成功,失败了。

登录失败,为什么会登录失败,说明有以下几种情形:请求路径、请求参数、请求头、请求方式,涉及到这四个,需要靠自己逐一排查,像这个问题就是路径错了

请添加图片描述

2、取现接口

同样的,先设计测试用例…此处省略一万字

在这里插入图片描述

再上代码:

import unittest
import os
import requests

from common.handle_config import conf
from common.handle_database import db
from common.handle_excel import Excel
from common.handle_log import log
from common.handle_path import DATA_DIR
from common import myddt
from jsonpath import jsonpath


@myddt.ddt
class TestWithdraw(unittest.TestCase):
    excel = Excel(os.path.join(DATA_DIR, "cases.xlsx"), "withdraw")
    cases = excel.read_data()

    @classmethod
    def setUpClass(cls):
        """写该用例类执行之前的前置,先登录才有后续的充值操作"""
        """登录获取token,用户id"""
        # 这就涉及到两个接口之间的参数依赖,比如登录接口和充值接口,参数依赖就是token和用户id
        login_url = conf.get("env", "login_url")
        params = {
            "mobile_phone": conf.get("login_test_data", "mobile_phone"),
            "pwd": conf.get("login_test_data", "pwd")
        }
        headers = eval(conf.get("env", "headers"))
        response = requests.request(url=login_url, method="post", json=params, headers=headers)
        res_login = response.json()
        # 提取token
        token = jsonpath(res_login, "$..token")[0]
        cls.token = "Bearer" + " " + token
        # 提取用户id
        cls.member_id = jsonpath(res_login, "$..id")[0]

    @myddt.data(*cases)
    def test_withdraw(self, item):
        # 第一步:准备数据
        # 接口地址
        url = conf.get("env", "base_url") + item["url"]
        # 请求参数
        if "#member_id#" in item["data"]:
            item["data"] = item["data"].replace("#member_id#", str(self.member_id))
        params = eval(item["data"])
        # 请求头
        headers = eval(conf.get("env", "headers"))
        # 请求头中添加token
        headers["Authorization"] = self.token
        # 需要鉴权
        # 请求方法
        method = item["method"]
        # 预期结果
        expected = eval(item["expected"])
        sql = item["check_sql"]
        # 请求之前的金额
        if sql:
            s_amount = db.find_data(sql.format(params["member_id"]))
            s_money = s_amount[0]["leave_amount"]
        # 第二步:请求接口,获取结果
        response = requests.request(url=url, method=method, json=params, headers=headers)
        res = response.json()
        print("预期结果:", expected)
        print("实际结果:", res)

        # 断言
        try:
            self.assertEqual(expected["code"], res["code"])
            self.assertEqual(expected["msg"], res["msg"])
            # 数据库校验
            if sql:
                # 请求之后的金额
                e_amount = db.find_data(sql.format(params["member_id"]))
                e_money = e_amount[0]["leave_amount"]
                self.assertEqual(float(s_money - e_money), params["amount"])

        except AssertionError as e:
            log.error("用例{},执行未通过".format(item["title"]))
            log.exception(e)
            raise e
        else:
            log.info("用例{},执行通过".format(item["title"]))

请添加图片描述

提现的代码基本和充值一样,但是除了命名改一下,目前只需改这一行代码即可,附上运行结果截图

在这里插入图片描述

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

没有什么事情是轻而易举的,只有不停地学习、不断地探索和付出,才能取得成功。坚持自己的信念,努力追求梦想,终将收获无尽的喜悦和真正的幸福!

在漫漫人生路上,不论遇到多少困难和挑战,都要保持坚定的信念和无限的勇气。相信自己的潜力,敢于追求,努力奋斗,你将点亮属于自己的璀璨星途!

不要让过去的失败束缚你,也不要让未来的担忧打消你的勇气。用每一次努力和坚持,书写出属于自己的辉煌篇章,成就那个无限可能的你!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值