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

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

1、充值接口

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

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第1张图片

postman截图:

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第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 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"]))

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第3张图片

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第4张图片

很容易遇到的一些坑

坑一:

在这里插入图片描述

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

请添加图片描述

坑二:

在这里插入图片描述

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

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第5张图片

正确的代码应该是这样:

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第6张图片

坑三:

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第7张图片

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

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

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第8张图片

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"]))

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第9张图片

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

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第10张图片

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

一、Python编程入门到精通

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第11张图片

二、接口自动化项目实战

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第12张图片

三、Web自动化项目实战

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第13张图片

四、App自动化项目实战

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第14张图片

五、一线大厂简历

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第15张图片

六、测试开发DevOps体系

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第16张图片

七、常用自动化测试工具

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第17张图片

八、JMeter性能测试

接口测试项目实战,充值接口+取现接口,资深测试带你一文打通..._第18张图片

九、总结(尾部小惊喜)

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

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

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

你可能感兴趣的:(软件测试,接口测试,接口自动化测试,软件测试,功能测试,软件测试工程师,接口测试,接口自动化测试,自动化测试,接口自动化)