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)
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()
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}')
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
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
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
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())
# 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}')
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
# 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'))
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
# 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):
# 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)
# 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'))
# 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()
"""设置处理器级别""" 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()"""
# 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
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)