python自动化之投资接口用例及前面常用类封装

管理员登陆、普通用户登陆、添加项目、审核可以封装起来,后续测试用例类中会频繁调用,导致代码冗余。

# fixture
import requests
from jsonpath import jsonpath
from common.handle_conf import conf

class BaseTest:
    @classmethod
    def admin_login(cls):
        '''---------------管理员登陆-----------------'''
        # 1、准备登陆的数据
        url = conf.get('env', 'base_url') + '/member/login'
        params = {
            "mobile_phone": conf.get("test_data", "admin_mobile"),
            "ped": conf.get("test_data", "admin_pwd")
        }
        headers = eval(conf.get("env", "headers"))
        # 2、请求登陆接口
        response = requests.post(url=url, json=params, headers=headers)
        res = response.json()
        # 3、提取token,放到请求头中,给后面用例使用
        admin_token = jsonpath(res, '$..token')[0]
        headers['Authorization'] = 'Bearer ' + admin_token
        cls.admin_headers = headers
        # 4、提取用例id
        cls.admin_member_id = jsonpath(res, '$..id')[0]

    @classmethod
    def user_login(cls):
        '''---------------普通用户登陆-----------------'''
        # 1、准备登陆的数据
        params = {
            "mobile_phone": conf.get("test_data", "mobile"),
            "ped": conf.get("test_data", "pwd")
        }
        headers = eval(conf.get("env", "headers"))
        # 2、请求登陆接口
        response = requests.post(url=url, json=params, headers=headers)
        res = response.json()
        # 3、提取token,放到请求头中,给后面用例使用
        token = jsonpath(res, '$..token')[0]
        headers['Authorization'] = 'Bearer ' + token
        cls.headers = headers
        # 4、提取用例id
        cls.member_id = jsonpath(res, '$..id')[0]
        
    @classmethod
    def add_project(cls):
        '''---------------添加项目-----------------'''
        url = conf.get('env', 'base_url') + '/loan/add'
        params = {
            "member_id": cls.member_id,
            "title": "借钱实现财富自由",
            "amount": 2000,
            "loan_rate": 12.0,
            "loan_data": 3,
            "loan_term": 1,
            "bidding_days": 5
        }
        # 第二步:请求添加项目的接口
        response = requests.post(url=url, json=params, headers=cls.headers)
        res = response.json()
        # 第三步:提取项目id,保存为类属性
        cls.loan_id = jsonpath(res, '$..id')[0]
        
    @classmethod
    def audit(cls):
        '''---------------审核-----------------'''
        url = conf.get('env', 'base_url') + '/loan/audit'
        params = {
            "loan_id": cls.loan_id,
            "approved_or_not": True
        }
        expected = eval(item['expected'])
        method = item['methond']
        # 第二步:调用接口,获取实际结果
        response = requests.request(method=method, url=url, json=params, headers=cls.admin_headers)
        res = response.json()

投资接口用例的实现

前置操作:
1、普通用户登陆(类级别)
2、管理员登陆(类级别)
3、添加项目(类级别)
4、审核项目(类级别)

用例方法:
1、准备数据
2、发生请求
3、断言
数据校验:
用户表:用户的余额投资前后会变化(投资前-投资后投资金额)
流水记录表:投资成功会新增一条流水记录(投资后流水数量-投资前流水数量
1)
投资表:投资成功会新增一条记录(投资后数量-投资前数量==1)

import unittest
import os
import requests
from unittestreport import ddt, list_data
from common.handle_excel import HandleExcel
from common.handle_path import DATA_DIR
from common.handle_conf import conf
from common.tools import replace_data
from common.handle_log import my_log
from common.handle_mysql import HandleDB
from testcases.fixture import BaseTest

@ddt
class TestInvest(unittest.TestCase, BaseTest):
    excel = HandleExcel(os.path.join(DATA_DIR, ' apicase.xlsx', 'invest'))
    cases = excel.read_data()
    db = HandleDB()

    @classmethod
    def setUpClass(cls) -> None:
        # 管理员登陆
        cls.admin_login()
        # 普通用户登陆
        cls.user_login()
        # 添加项目
        cls.add_project
        # 审核
        cls.audit()

    @list_data(cases)
    def test_invest(self, item):
        # 第一步:准备数据
        url = conf.get('env', 'base_url') + item['url']
        item['data'] = replace_data(item['data', TestInvest])
        params = eval(item['data'])
        expected = eval(item['expected'])
        method = item['methond']
        # 第二步:调用接口,获取实际结果
        # 请求接口前,查询用户表的sql
        sql1 = "select * leave_amount from futureloan.member where id='{}'".format(self.member_id)
        # 投资记录
        sql2 = "select count(*) from futureloan.invest where member_id='{}'".format(self.member_id)
        # 流水记录
        sql3 = "select count(*) from futureloan.financelog where pay_member_id='{}'".format(self.member_id)
        s_amount = self.db.find_one(sql1)[0]
        s_invest = self.db.find_one(sql2)
        s_financelog = self.db.find_one(sql3)
        response = requests.request(method=method, url=url, json=params, headers=self.headers)
        res = response.json()
        # 调用接口之后,查询数据库
        e_amount = self.db.find_one(sql1)[0]
        e_invest = self.db.find_one(sql2)
        e_financelog = self.db.find_one(sql3)
        if item['title'] == "审核通过" and res['msg'] == 'OK':
            TestAudit.pass_loan_id = self.loan_id
            # TestAudit.pass_loan_id = params['loan_id']
        # 第三步:断言
        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            if item['check_sql']:
                # 断言用户余额
                self.assertEqual(params['amount'], float(s_amount-e_amount))
                # 断言投资记录
                self.assertEqual(1, e_invest-s_invest)
                # 断言流水记录
                self.assertEqual(1, e_financelog - s_financelog)
        except AssertionError as e:
            my_log.error("用例{}执行失败".format(item['title']))
            my_log.exception(e)
            raise e
        else:
            my_log.info("用例{}执行成功".format(item['title']))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值