进阶之路--从0开始学接口测试(8)--接口关联-审核接口

实现接口关联(审核接口)

依赖接口:登录接口(管理员账号),创建项目接口(得到项目id) ,项目接口也需要登录接口(普通用户账号member_id)

流程:访问登录接口(获得普通用户id,普通用户token)--> 访问创建项目接口(需要普通用户token,获得项目id)-->访问登录接口(获得管理员id,管理员token)-->访问审核接口(需要管理员token,项目id)

操作步骤:

-在接口类中添加管理员登录的类方法,并且得到管理员id和token

因为需要获得登录2个人的账号信息,如果用同一个登录方法,会导致类属性被覆盖

而且管理员登录的方法,定义属性的时候属性名不能相同,会导致属性被覆盖

 @classmethod
    def admin_login(cls):
        # 访问登录接口
        login_resp = requests.request(url=f"{host}/member/login", method="post",
                                      headers={"X-Lemonban-Media-Type": "lemonban.v2"},
                                      json=admin_user)
        login_data = login_resp.json()

        cls.admin_member_id = str(jsonpath(login_data, "$..id")[0])
        cls.admin_token = jsonpath(login_data, "$..token")[0]
        cls.admin_leave_amount = jsonpath(login_data, "$..leave_amount")[0]
        return (cls.admin_member_id, cls.admin_token, cls.admin_leave_amount)

-在接口类中添加新增项目接口函数

访问添加项目接口前,需要先访问登录接口获得id和token

@classmethod
    def add_project(cls):
        json_data = json.loads(info["json"])
        title = json_data["title"]
        amount = json_data["amount"]
        loan_rate = json_data["loan_rate"]
        loan_term = json_data["loan_term"]
        loan_date_type = json_data["loan_date_type"]
        bidding_days = json_data["bidding_days"]
        #续要先访问登录接口获取id和token
        data = {"member_id": cls.member_id,"title": title,"amount": amount,
                "loan_rate": loan_rate,"loan_term": loan_term,
                "loan_date_type": loan_date_type,"bidding_days": bidding_days}
        add_project_resp = requests.request(url=f"{host}/loan/add", method="post",
                                      headers={"X-Lemonban-Media-Type": "lemonban.v2","Authorization": cls.token},
                                      json=data)
        add_project_data = add_project_resp.json()
        cls.loan_id = str(jsonpath(add_project_data,"$..id")[0])

-在前置条件中,调用登录接口和新增项目接口函数

-setUpClass

普通用户登录和管理员登录,只需要访问一次登录接口,就能获得id和token

 @classmethod
    def setUpClass(cls) -> None:
        #测试用例需要的前置,每个类只执行一次
        #访问普通用户登录接口,得到id,token
       
        cls.login()

        #访问管理员登录接口,得到id,token
        cls.admin_login()

-setUp

访问新增项目接口,需要每次执行用例都新增一次,放到类前置的话,一个测试用例类只能新增一次,审核已经存在的项目会导致测试不通过

    def setUp(self) -> None:
        #访问添加接口,每次都需要创建一个新的项目
        self.add_project()

-获取请求头和token信息

@data(*info)
    def test_recharge_01(self,case_info):

        # 获得普通用户token
        headers = case_info["headers"]
        if "#token#" in headers:
            headers = headers.replace("#token#",self.token)
        elif "#admin_token#" in headers:
            headers = headers.replace("#admin_token#", self.admin_token)
        my_log.info(f"写入请求头参数{headers}")
        #3,id添加到请求数据当中
        json_data = case_info["json"]
        if "#loan_id#" in json_data:
            json_data = json_data.replace("#loan_id#",self.loan_id)

测试时候考虑到普通用户访问审核接口,所以用到if..elif..语句,能实现普通用户和管理员的token

-访问审核接口

    #访问审核接口
        json_data = json.loads(json_data)
        headers = json.loads(headers)
        expected = json.loads(case_info["expected"])
        my_log.info(f"正在测试审核接口:{case_info['title']}")
        autid_resp = requests.request(method=case_info["method"],url=host + case_info['url'],
                                      headers=headers,json=json_data).json()

-断言

            for key,value in expected.items():
                self.assertEqual(value,autid_resp[key])

完成流程

import unittest
import requests
from config.config import case_file,host,log_1_file
from common.excel_handle import ExcelHandle
from ddt import ddt,data
from common.get_logging import get_log
import json
from common.api_case import APICase

info = ExcelHandle(case_file,"audit").read_excel()[1:]
my_log = get_log(log_1_file,name="conlin")

@ddt
class TestAudit(unittest.TestCase,APICase):

    @classmethod
    def setUpClass(cls) -> None:
        #测试用例需要的前置,每个类只执行一次
        #访问普通用户登录接口,得到id,token
        my_log.info("开始测试")
        cls.login()
        my_log.info("普通用户登录")
        #访问管理员登录接口,得到id,token
        cls.admin_login()
        my_log.info("管理员登录")
        my_log.info("*"*100)

    def setUp(self) -> None:
        #访问添加接口,每次都需要创建一个新的项目
        self.add_project()
        my_log.info("新增项目")
        my_log.info("*"*60)

    @classmethod
    def tearDownClass(cls) -> None:
        #后置操作:每个测试类只执行一次
        pass

    @data(*info)
    def test_recharge_01(self,case_info):

        # 获得普通用户token
        headers = case_info["headers"]
        if "#token#" in headers:
            headers = headers.replace("#token#",self.token)
        elif "#admin_token#" in headers:
            headers = headers.replace("#admin_token#", self.admin_token)
        my_log.info(f"写入请求头参数{headers}")
        #3,id添加到请求数据当中
        json_data = case_info["json"]
        if "#loan_id#" in json_data:
            json_data = json_data.replace("#loan_id#",self.loan_id)

        #访问审核接口
        json_data = json.loads(json_data)
        headers = json.loads(headers)
        expected = json.loads(case_info["expected"])
        my_log.info(f"正在测试审核接口:{case_info['title']}")
        autid_resp = requests.request(method=case_info["method"],url=host + case_info['url'],
                                      headers=headers,json=json_data).json()

        try:
            for key,value in expected.items():
                self.assertEqual(value,autid_resp[key])
            my_log.info("用例通过")
        except AssertionError as e:
            my_log.error("用例不通过")
            ExcelHandle(case_file, "audit").write_excel(row=case_info["case_id"] + 1, column=9, value="用例不通过")
            raise e
        else:
            ExcelHandle(case_file,"audit").write_excel(row=case_info["case_id"]+1,column=9,value="用例通过")
        finally:
            my_log.info("*"*60)

测试用例函数需要编写的代码

1,获取实际结果

2,获取预期结果

3,断言

除了这3个操作,都是可以作为前置或者后置

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值