예제 #1
0
 def setUpClass(cls):
     cls.url = config.get('api', 'base_url') + config.get('api', 'withdraw_url')
     cls.headers = eval(config.get('api', 'headers'))
     """账户初始余额60万"""
     change_amount(member_id=member_id, amount=510000)
     # 日志记录
     log.info(cls.url)
    def setUpClass(cls):
        cls.session = HttpSessionHandler()
        cls.url = config.get('api', 'base_url') + config.get('api', 'invest_url')
        cls.headers = eval(config.get('api', 'headers'))
        log.info(f'url:{cls.url}')

        change_amount(member_id, amount=2500)
예제 #3
0
def is_register_1():
    """判断普通用户账号是否存在,不存在,则注册"""
    # 获取判断的账号信息
    mobile_phone = config.get('user', 'mobile_phone')
    password = config.get('user', 'password')

    # 连接数据库,查询数据
    db = MySQLHandler()
    sql = "select * from member where mobile_phone=%s;"
    user_info = db.fetchone(sql, [mobile_phone, ])
    db.close()
    # 若获取结果为空,则创建账户
    if not user_info:
        register_url = config.get('api', 'base_url') + config.get('api', 'register_url')
        headers = eval(config.get('api', 'headers'))
        register_data = {"mobile_phone": mobile_phone, "pwd": password, "type": 1}
        register_json = request.get_json(method='post', url=register_url, json=register_data, headers=headers)
        if register_json['code'] == 0:
            config.set('user', 'member_id', str(register_json['data']['id']))           # 回写配置文件,user id
            log.info(f'用户[{mobile_phone}]注册成功!')
            return True
        log.debug(f'注册失败:{register_json}')
        return False
    config.set('user', 'member_id', str(user_info['id']))   # 回写配置文件,user id
    return None
    def setUpClass(cls):
        cls.url = config.get('api', 'base_url') + config.get('api', 'update_url')
        cls.headers = eval(config.get('api', 'headers'))
        # 日志记录
        log.info(f'{cls.url}')

        cls.session = HttpSessionHandler()
예제 #5
0
    def setUpClass(cls):
        cls.session = HttpSessionHandler()
        cls.url = config.get('api', 'base_url') + config.get('api', 'loans_url')
        cls.headers = eval(config.get('api', 'headers'))
        cls.headers.pop('Content-Type')

        token_info = login_1(cls.session)
        cls.headers['Authorization'] = token_info['token_type'] + ' ' + token_info['token']

        log.info(f'{cls.url}')
예제 #6
0
def add_loan():
    """新增并审核项目"""
    add_data = {"member_id": config.get("user", 'member_id'), "title": "小荔枝",
            "amount": 3000, "loan_rate": 3.2, "loan_term": 1, "loan_date_type": 1, "bidding_days": 1}
    headers = eval(config.get('api', 'headers'))
    token_info = login_1(session=request)
    token = token_info['token_type'] + ' ' + token_info['token']
    headers['Authorization'] = token
    add_res = request.get_json(method='post',
                               url=config.get('api', 'base_url') + config.get('api', 'add_url'),
                               json=add_data,
                               headers=headers)
    if add_res['code'] == 0:
        log.info('项目新增成功')
        """项目新增成功,审核项目"""
        admin = config.get('admin', 'mobile_phone')
        pwd = config.get('admin', 'password')
        is_register(admin, pwd, typ=0)
        audit_data = {"loan_id": add_res['data']['id'], "approved_or_not": "true"}
        token_info = login(session=request, phone=admin, pwd=pwd)
        headers['Authorization'] = token_info['token_type'] + ' ' + token_info['token']
        audit_res = request.get_json(method='PATCH',
                                     url=config.get('api', 'base_url') + config.get('api', 'audit_url'),
                                     json=audit_data,
                                     headers=headers)
        if audit_res['code'] == 0:
            log.info(f"{add_res['data']['id']}项目审核成功")
            return None
        log.error(f"{add_res['data']['id']}项目审核失败")
        return None
    log.error('新增项目失败')
    return None
def invest_json_data(data):
    if isinstance(data, dict):
        member_id = eval(config.get('user', 'member_id'))
        if data['member_id'] == 'id':
            data['member_id'] = member_id
        elif data['member_id'] == 'other_id':
            data['member_id'] = member_id - 1

        if data['loan_id'] == 'id':
            loan_info = get_loan_info(my=False)
            data['loan_id'] = loan_info['id']
        elif data['loan_id'] == 'my_loan':
            loan_info = get_loan_info()
            data['loan_id'] = loan_info['id']
        elif data['loan_id'] == 'not_start':
            loan_info = get_loan_info(my=False, status=1)
            data['loan_id'] = loan_info['id']
        elif data['loan_id'] == 'full':
            loan_info = get_loan_info(my=False, status=3)
            data['loan_id'] = loan_info['id']

        if data['amount'] == 'over_loan':
            """超过项目可投余额"""
            loan_amount = get_invest_amount(loan_id=data['loan_id'])
            data['amount'] = float(loan_amount) + 100
        elif data['amount'] == 'over_leave':
            """超过账户余额"""
            loan_amount = get_invest_amount(loan_id=data['loan_id'])
            leave_amount = get_leave_amount(data['member_id'])
            if loan_amount <= leave_amount:
                change_amount(member_id, amount=(float(loan_amount)-100))
            data['amount'] = float(loan_amount)
    else:
        log.error('传入的数据不是字典类型!')
    return data
예제 #8
0
def login_1(session):
    """登录"""
    mobile_phone = config.get('user', 'mobile_phone')
    password = config.get('user', 'password')

    login_url = config.get('api', 'base_url') + config.get('api', 'login_url')
    headers = eval(config.get('api', 'headers'))
    login_data = {"mobile_phone": mobile_phone, "pwd": password}
    try:
        login_json = session.get_json(method='post', url=login_url, json=login_data, headers=headers)
    except Exception as e:
        log.error(e)
    else:
        if login_json['code'] == 0:
            log.info(f'用户{[mobile_phone]}登录成功!')
            return login_json['data']['token_info']
        else:
            log.info(f'用户{[mobile_phone]}登录失败!')
            return None
예제 #9
0
def get_loan_info(my=True, status=2, loan_id=None):
    """查询项目信息, 项目状态status=(1, 2, 3, 4, 5), 1:审核中 2:竞标中 3:还款中 4:还款完成 5:审核不通过 """
    member_id = config.get('user', 'member_id')
    db = MySQLHandler()
    if loan_id is not None:
        """根据项目id 查询项目信息"""
        sql = "select * from loan where id=%s;"
        loan_info = db.fetchone(query=sql, args=[loan_id, ])
    elif my:
        """查询测试账号下的项目信息"""
        sql = "select * from loan where member_id=%s and status=%s;"
        loan_info = db.fetchone(query=sql, args=[member_id, status])
    else:
        """查询其他用户的项目信息"""
        sql = "select * from loan where member_id!=%s and status=%s;"
        loan_info = db.fetchone(query=sql, args=[member_id, status])
    db.close()
    return loan_info
예제 #10
0
        self.wb.close()
        return data

    def write(self, row, col, value):
        """写入数据"""
        self.open()
        self.sheet.cell(row, col).value = value
        self.save()

    def save(self):
        """保存并关闭"""
        self.wb.save(self.filename)
        self.wb.close()


"""读取配置文件中excel文件名称"""
file_name = config.get('excel', 'filename')
file_path = os.path.join(pth.data_path, file_name)


def load_sheet(sheet):
    return ExcelHandler(file_path, sheet)


if __name__ == '__main__':
    # file_name = config.get('excel', 'filename')
    # file_path = os.path.join(pth.data_path, file_name)
    # sheet_name = config.get('excel', 'register_sheet')
    ex = load_sheet('register')
    print(ex.get_headers())
예제 #11
0
# coding=gbk

import unittest
from libs.ddt import ddt, data
from handler.ConfigHandler import config
from handler.ExcelHandler_one import load_sheet
from handler.RequestsHandler import HttpSessionHandler
from handler.LogHandler import log
from helper.helper import is_register_1, login_1, get_user_info


"""读取测试数据"""
sheet = config.get('excel', 'update_sheet')
ex = load_sheet(sheet)
test_case = ex.read()

"""获取用户信息"""
# 判断是否注册,回写配置文件member_id
is_register_1()
member_id = eval(config.get('user', 'member_id'))


@ddt
class TestUpdate(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.url = config.get('api', 'base_url') + config.get('api', 'update_url')
        cls.headers = eval(config.get('api', 'headers'))
        # 日志记录
        log.info(f'{cls.url}')
예제 #12
0
    def test_login(self, case_data):
        case_id = case_data['case_id']
        method = case_data['method']
        description = case_data['description']
        dic_data = eval(case_data['data'])
        expected = eval(case_data['expected'])

        # 处理特殊数据
        if dic_data['mobile_phone'] == 'phone_num':
            dic_data['mobile_phone'] = mobile_phone
        elif dic_data['mobile_phone'] == 'wrong_phone':
            # dic_data['mobile_phone'] = old_phone()
            dic_data['mobile_phone'] = config.get('user', 'old_phone')

        if dic_data['pwd'] == 'password':
            dic_data['pwd'] = password
        elif dic_data['pwd'] == 'wrong_pwd':
            dic_data['pwd'] = password + 'w'

        # 发起请求
        res_json = request.get_json(method=method, url=self.url, json=dic_data, headers=self.headers)

        # 日志记录
        log.info(f'{case_id},{method},{description},{dic_data}')
        log.info(f'expected:{expected}')
        log.info(f'result:{res_json}\n')

        # 获取表头
        sheet_title = ex.get_headers()
        result_index = sheet_title.index("result")+1
        msg_index = sheet_title.index('msg')+1
        code_index = sheet_title.index('code')+1
        res_data_index = sheet_title.index('res_data')+1

        # 回写
        ex.write(case_id + 1, msg_index, res_json['msg'])
        ex.write(case_id + 1, code_index, str(res_json['code']))
        ex.write(case_id + 1, res_data_index, str(res_json['data']))

        code = expected['code']
        if code != 0:
            try:
                self.assertEqual(code, res_json['code'])
                self.assertEqual(expected['data'], res_json['data'])
                ex.write(case_id+1, result_index, 'Pass')
            except AssertionError as e:
                ex.write(case_id + 1, result_index, 'Failed')
                raise e
        else:
            try:
                self.assertEqual(code, res_json['code'])

                # 数据库信息 与 返回信息比对
                sql = "select * from member where id=%s;"
                user_info = self.db.fetchone(query=sql, args=[res_json['data']['id'], ])
                self.assertEqual(user_info['leave_amount'], res_json['data']['leave_amount'])
                self.assertEqual(user_info['mobile_phone'], res_json['data']['mobile_phone'])
                self.assertEqual(user_info['reg_name'], res_json['data']['reg_name'])
                self.assertEqual(user_info['type'], res_json['data']['type'])
                self.assertTrue(True, res_json['data']['token_info'])
                ex.write(case_id + 1, result_index, 'Pass')
            except AssertionError as e:
                ex.write(case_id + 1, result_index, 'Failed')
                raise e
예제 #13
0
# coding=gbk

import unittest
from libs.ddt import ddt, data
from handler.ExcelHandler_one import load_sheet
from handler.ConfigHandler import config
from handler.LogHandler import log
from handler.RequestsHandler import request
from handler.MySQLHandler import MySQLHandler
from helper.helper import old_phone, is_register_1


"""读取login表单数据"""
sheet = config.get('excel', 'login_sheet')
ex = load_sheet(sheet)
test_data = ex.read()

"""登录用户信息"""
mobile_phone = config.get('user', 'mobile_phone')
password = config.get('user', 'password')

# 判断用户信息是否存在,不存在,则创建
is_register_1()


@ddt
class TestLogin(unittest.TestCase):
    # login 接口地址
    url = config.get('api', 'base_url') + config.get('api', 'login_url')
    headers = eval(config.get('api', 'headers'))
예제 #14
0
    def test_register(self, case_data):
        # 获取请求方法
        method = case_data['method']
        # 获取json参数
        json_data = eval(case_data['data'])

        # 特殊数据处理
        if json_data['mobile_phone'] == 'new_phone':
            json_data['mobile_phone'] = new_phone()
        elif json_data['mobile_phone'] == 'old_phone':
            # json_data['mobile_phone'] = old_phone()           # 两种方式二选一
            json_data['mobile_phone'] = config.get('user', 'old_phone')

        # 发起请求, 返回的是dict类型
        res_json = request.get_json(method=method, url=self.url, json=json_data, headers=self.headers)

        # expected
        expected = eval(case_data['expected'])
        code = expected['code']

        # 日志记录
        case_id = case_data['case_id']
        description = case_data['description']
        log.info(f"{case_id},{method},{description},{json_data}")
        log.info(f"expected:{expected}")
        log.info(f"result:{res_json}\n")

        sheet_title = ex.get_headers()
        ex.write(case_id+1, sheet_title.index('msg')+1, res_json['msg'])
        ex.write(case_id+1, sheet_title.index('code')+1, str(res_json['code']))
        ex.write(case_id+1, sheet_title.index('res_data')+1, str(res_json['data']))

        if code != 0:
            try:
                self.assertEqual(code, res_json['code'])
                self.assertEqual(expected['data'], res_json['data'])
                ex.write(case_id+1, sheet_title.index('result')+1, 'Pass')
            except AssertionError as e:
                ex.write(case_id+1, sheet_title.index('result')+1, 'Failed')
                raise e
        else:
            try:
                self.assertEqual(code, res_json['code'])
                # 回写到配置文件
                config.set('user', 'old_phone', json_data['mobile_phone'])

                # 比对预期结果,与 返回信息
                self.assertEqual(expected['data']['reg_name'], res_json['data']['reg_name'])
                self.assertEqual(json_data['mobile_phone'], res_json['data']['mobile_phone'])

                # 比对预期结果,与 数据库值
                sql = "select * from member where id=%s;"
                user_info = self.db.fetchone(query=sql, args=[res_json['data']['id'], ])

                log.info(f'user_info:{user_info}\n')

                self.assertEqual(expected['data']['reg_name'], user_info['reg_name'])
                self.assertEqual(json_data['mobile_phone'], user_info['mobile_phone'])
                self.assertEqual(expected['data']['type'], user_info['type'])
                self.assertEqual(expected['data']['leave_amount'], user_info['leave_amount'])
                ex.write(case_id+1, sheet_title.index('result')+1, 'Pass')
            except AssertionError as e:
                ex.write(case_id+1, sheet_title.index('result')+1, 'Failed')
                raise e
예제 #15
0
# coding=gbk

# import os
import unittest
from libs.ddt import ddt, data
from handler.ExcelHandler_one import load_sheet
from handler.ConfigHandler import config
from handler.LogHandler import log
from handler.RequestsHandler import request
from handler.MySQLHandler import MySQLHandler
from helper.helper import new_phone, old_phone

# 读取测试数据
sheet = config.get('excel', 'register_sheet')
ex = load_sheet(sheet)
test_data = ex.read()


@ddt
class TestRegister(unittest.TestCase):
    # 获取接口地址
    url = config.get('api', 'base_url') + config.get('api', 'register_url')

    # 获取headers
    headers = eval(config.get('api', 'headers'))

    # 记录日志
    log.info(f'url:{url}, headers:{headers}')

    @classmethod
    def setUpClass(cls):
예제 #16
0
# coding=gbk

import unittest
from libs.ddt import ddt, data
from handler.ConfigHandler import config
from handler.ExcelHandler_one import load_sheet
from handler.RequestsHandler import HttpSessionHandler
from handler.LogHandler import log
from helper.helper import login_1, is_register_1

sheet = config.get('excel', 'loans_sheet')
ex = load_sheet(sheet)
test_case = ex.read()
is_register_1()


@ddt
class TestLoans(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.session = HttpSessionHandler()
        cls.url = config.get('api', 'base_url') + config.get('api', 'loans_url')
        cls.headers = eval(config.get('api', 'headers'))
        cls.headers.pop('Content-Type')

        token_info = login_1(cls.session)
        cls.headers['Authorization'] = token_info['token_type'] + ' ' + token_info['token']

        log.info(f'{cls.url}')

    @data(*test_case)
 def setUpClass(cls):
     # 获取 配置文件中的请求地址url,请求头headers
     cls.url = config.get('api', 'base_url') + config.get('api', 'recharge_url')
     cls.headers = eval(config.get('api', 'headers'))
     log.info(cls.url)
예제 #18
0
# coding=gbk

import unittest
from decimal import Decimal
from libs.ddt import ddt, data
from handler.ConfigHandler import config
from handler.ExcelHandler_one import load_sheet
from handler.RequestsHandler import HttpSessionHandler
from handler.LogHandler import log
from helper.helper import is_register_1, login_1, \
    get_invest_info, get_leave_amount, change_amount, get_loan_info, add_loan
from helper.exchange_data import invest_json_data


"""获取测试数据"""
sheet = config.get('excel', 'invest_sheet')
ex = load_sheet(sheet)
test_case = ex.read()

is_register_1()
# 获取member_id
member_id = eval(config.get('user', 'member_id'))


@ddt
class TestInvest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.session = HttpSessionHandler()
        cls.url = config.get('api', 'base_url') + config.get('api', 'invest_url')
        cls.headers = eval(config.get('api', 'headers'))
예제 #19
0
# coding=gbk

import unittest
from libs.ddt import ddt, data
from handler.ExcelHandler_one import load_sheet
from handler.ConfigHandler import config
from handler.LogHandler import log
from handler.RequestsHandler import HttpSessionHandler
from helper.demo import deal
from helper.helper import login, is_register, get_loan_info

sheet = config.get('excel', 'audit_sheet')
ex = load_sheet(sheet)
test_data = ex.read()

# 获取普通账号
user = config.get('user', 'mobile_phone')
password = config.get('user', 'password')
is_register(user, password, typ=1)

# 获取管理员账号
admin = config.get('admin', 'mobile_phone')
pwd = config.get('admin', 'password')
is_register(admin, pwd, typ=0)


@ddt
class TestAudit(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.session = HttpSessionHandler()
예제 #20
0
        """设置处理器级别"""
        handler.setLevel(handler_level)
        """收集器 添加 处理器"""
        self.logger.addHandler(handler)

        """输出格式"""
        fmt_str = "[%(levelname)s]%(asctime)s-%(filename)s-%(lineno)d: %(message)s"
        # "%(asctime)s-%(name)s-%(filename)s-%(lineno)d-%(levelname)s: %(message)s"
        """初始化格式器"""
        fmt = logging.Formatter(fmt_str)
        """处理器设置输出格式"""
        handler.setFormatter(fmt)


"""读取配置文件中相应值"""
logger_name = config.get('Logger', 'name')
logger_level = config.get('Logger', 'level')
hdr_level = config.get('Logger', 'hdr_level')

"""log文件名称"""
log_name = "log_" + datetime.now().strftime("%Y%m%d") + ".txt"
"""log文件路径"""
file_name = os.path.join(pth.log_path, log_name)

"""初始化日志收集器"""
logger = LogHandler(name=logger_name,
                    level=logger_level,
                    filename=file_name,
                    handler_level=hdr_level)

"""log.info()"""
예제 #21
0
# coding=gbk

import unittest
from libs.ddt import ddt, data
from decimal import Decimal
from handler.ConfigHandler import config
from handler.ExcelHandler_one import load_sheet
from handler.LogHandler import log
from handler.RequestsHandler import HttpSessionHandler
from helper.helper import is_register_1, login_1, get_user_info

"""获取测试数据"""
sheet = config.get('excel', 'info_sheet')
ex = load_sheet(sheet)
test_case = ex.read()

# 判断用户是否注册
is_register_1()
# 获取用户member_id
member_id = config.get('user', 'member_id')


@ddt
class TestInfo(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.base_url = config.get('api', 'base_url')
        cls.headers = eval(config.get('api', 'headers'))
        cls.headers.pop('Content-Type')

        cls.session = HttpSessionHandler()
# coding=gbk

import unittest
from libs.ddt import ddt, data
from decimal import Decimal
from handler.ConfigHandler import config
from handler.ExcelHandler_one import load_sheet
from handler.LogHandler import log
from handler.RequestsHandler import HttpSessionHandler
from helper.helper import is_register_1, login_1, get_leave_amount


"""读取测试数据"""
sheet = config.get('excel', 'recharge_sheet')
ex = load_sheet(sheet)
test_data = ex.read()

"""获取用户信息"""
mobile_phone = config.get('user', 'mobile_phone')
password = config.get('user', 'password')

# 判断用户是否存在,若不存在,则创建,并回写配置文件 user_id, 若存在,也回写 user_id
is_register_1()
# 获取 user id
member_id = eval(config.get('user', 'member_id'))



@ddt
class TestRecharge(unittest.TestCase):
    @classmethod
예제 #23
0
    def setUpClass(cls):
        cls.base_url = config.get('api', 'base_url')
        cls.headers = eval(config.get('api', 'headers'))
        cls.headers.pop('Content-Type')

        cls.session = HttpSessionHandler()
        """其他请求"""
        try:
            response = requests.request(method=method, url=url, **kwargs)
        except Exception as e:
            log.error(e)
        else:
            return response

    def get_json(self, method, url, **kwargs):
        """访问接口,获取json内容"""
        try:
            res = self.request(method, url, **kwargs)
            json_dic = res.json()
        except Exception as e:
            log.error(e)
        else:
            return json_dic


"""初始化requests、session"""
session = HttpSessionHandler()
request = HttpRequestsHandler()


if __name__ == "__main__":
    api_url = config.get('api', 'base_url') + config.get('api', 'register_url')
    json_data = {"mobile_phone": "13655864554", "pwd": "12345678", "type": None, "reg_name": ""}
    headers = eval(config.get('api', 'headers'))
    rs = request.get_json(method='post', url=api_url, json=json_data, headers=headers)
    print(rs)
from libs.ddt import ddt, data
from handler.ConfigHandler import config
from handler.ExcelHandler_one import load_sheet
from handler.RequestsHandler import HttpSessionHandler
from handler.LogHandler import log
from helper.helper import is_register_1, login_1, get_invest_info, get_leave_amount, change_amount
from helper.re_demo import deal


"""获取测试数据"""
ex = load_sheet('invest_repl')
test_case = ex.read()

is_register_1()
# 获取member_id
member_id = eval(config.get('user', 'member_id'))


@ddt
class TestInvest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.session = HttpSessionHandler()
        cls.url = config.get('api', 'base_url') + config.get('api', 'invest_url')
        cls.headers = eval(config.get('api', 'headers'))
        log.info(f'url:{cls.url}')

        change_amount(member_id, amount=2500)

    def setUp(self):
        token_info = login_1(session=self.session)