def case_invest(self, data, login_data, db: HandleMysql = None): member = MemberApi() # 管理员登录-加标-审核 audit_res = self.case_audit(data, login_data) # 获取审核通过后的标的id pass_loan_id = audit_res['loan_id'] # 投资人登录 investor_account = member.conf_data['investor_account'] # 获取投资人登录信息 investor_login_data = member.get_login_data(**investor_account) data = self.template(data, {'invest_member_id': investor_login_data['member_id'], 'loan_id': pass_loan_id}) if data['check_sql']: before_investor_balance = investor_login_data['leave_amount'] # 投资人投资 invest_res = self.invest_loan_api(**data['invest_json'], token=investor_login_data['token']).json() invest_info = member.get_user_info_api(investor_login_data['member_id'], investor_login_data['token']).json() after_investor_balance = invest_info['data']['leave_amount'] # 投资人投资金额 = 投资前账户余额 - 投资后账户余额 invest_amount = before_investor_balance - after_investor_balance # 投资完成后,invest表和financeLog表分别增加一条记录 invest_num = db.count(data['check_sql']['check_invest']) finance_num = db.count(data['check_sql']['check_financeLog']) invest_res['invest_num'] = invest_num invest_res['financeLog_num'] = finance_num invest_res['invest_amount'] = self.to_two_decimal(invest_amount) else: invest_res = self.invest_loan_api(**data['invest_json'], token=investor_login_data['token']).json() return invest_res
def case_withdraw(self, data, login_data, db: HandleMysql): """ 账户提现业务场景 :param data: 提现接口所需参数 :param login_data: 登录响应结果提取 :param db: 数据库连接对象 :return: """ # 替换数据 data = self.template(data, {'member_id': login_data['member_id'], 'mobile_phone': login_data['mobile_phone']}) # logger.info(f'替换后的数据:{data}') if data['sql']: # 充值前账户余额 try: before_balance: Decimal = db.get_one(data['sql'])[0] except Exception as e: logger.error('报错了') logger.exception(e) raise e # logger.info(f'充值前账户余额:{before_balance}') withdraw_response = self.withdraw_api(data['member_id'], data['amount'], login_data['token']) res = withdraw_response.json() # 充值后账户余额 after_balance: Decimal = db.get_one(data['sql'])[0] # logger.info(f'充值后账户余额:{after_balance}') withdraw: Decimal = before_balance - after_balance # logger.info(f'提现后,数据库金额变化差值:{withdraw}') res['withdraw'] = withdraw else: recharge_response = self.recharge_api(data['member_id'], data['amount'], login_data['token']) res = recharge_response.json() return res
def clear_alone_base(): # 清空单独的库 db_table = { 'ct_db': ['t_account', 't_user_info'], 'sms_db': ['t_ip_limeit', 't_mobile_limit'], 'user_db': ['t_user_auto_info', 't_user_info'] } for db in db_table: for table in db_table[db]: print('正在清空{}库{}表'.format(db, table)) query_sql = 'delete from {}'.format(table) HandleMysql.handle_mysql(query_sql, db, 'update') print('清空完毕')
def case_add_loan(self, data, login_data, db: HandleMysql = None): # 替换数据 data = self.template(data, {'member_id': login_data['member_id']}) if data['sql']: before_num: int = db.count(data['sql']) add_loan_response = self.add_loan_api(**data['json'], token=login_data['token']) res = add_loan_response.json() after_num: int = db.count(data['sql']) add_num = after_num - before_num res['add_num'] = add_num else: add_loan_response = self.add_loan_api(**data['json'], token=login_data['token']) res = add_loan_response.json() return res
class Add(unittest.TestCase): exce = Excel_Hande(os.path.join(DATA_DIR, 'apicases.xlsx'), 'add') case = exce.read_excel() bb = HandleMysql() @classmethod def setUpClass(cls) -> None: url = conf.get('env', 'url') + '/member/login' data = { 'mobile_phone': conf.get('test_data', 'phone'), 'pwd': conf.get('test_data', 'pwd') } headers = eval(conf.get('env', 'headers')) respones = request(url=url, method='post', json=data, headers=headers) res = respones.json() token = 'Bearer' + ' ' + jsonpath.jsonpath(res, '$..token')[0] member_id = str(jsonpath.jsonpath(res, '$..id')[0]) setattr(EnvData, 'token', token) setattr(EnvData, 'member_id', member_id) @data(*case) def test_add(self, cas): url = conf.get('env', 'url') + cas['url'] method = cas['method'] cas['data'] = replace_data(cas['data']) data = eval(cas['data']) headers = eval(conf.get('env', 'headers')) headers['Authorization'] = getattr(EnvData, 'token') expected = eval(cas['expected']) row = cas['case_id'] + 1 #查询添加项目之前的标的数量 if cas['check_sql']: sql = replace_data(cas['check_sql']) f = self.bb.find_count(sql) respones = request(url=url, method=method, json=data, headers=headers) res = respones.json() print('预期结果:', expected) print('实际结果:', res) try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) #查询加标后标的数量 if cas['check_sql']: sql = replace_data(cas['check_sql']) q = self.bb.find_count(sql) self.assertEqual(1, q - f) except AssertionError as e: log.error('该用例{}错误'.format(cas['title'])) log.exception(e) self.exce.write(row=row, column=8, value='不通过') raise e else: log.info('该用例{}通过'.format('通过')) self.exce.write(row=row, column=8, value='通过')
class Withdraw(unittest.TestCase): exce = Excel_Hande(os.path.join(DATA_DIR,'apicases.xlsx'),'withdraw') case = exce.read_excel() bb = HandleMysql() @classmethod def setUpClass(cls) -> None: url = conf.get('env','url') + '/member/login' data = { 'mobile_phone':conf.get('test_data','phone'), 'pwd':conf.get('test_data','pwd') } headers = eval(conf.get('env','headers')) respones = request(url=url,method='post',json=data,headers=headers) re = respones.json() token = 'Bearer' + " " + jsonpath.jsonpath(re,'$..token')[0] member_id = str(jsonpath.jsonpath(re,'$..id')[0]) setattr(EnvData,'token',token) setattr(EnvData,'member_id',member_id) @data(*case) def test_withdraw(self,cas): url = conf.get('env','url') + cas['url'] method = cas['method'] #替换用例中中的#member_id# cas['data'] = replace_data(cas['data']) data = eval(cas['data']) headers = eval(conf.get('env','headers')) headers['Authorization'] = getattr(EnvData,'token') expected = eval(cas['expected']) row = cas['case_id'] + 1 #查询取现之前的金额 if cas['check_sql']: sql = replace_data(cas['check_sql']) money_start = self.bb.find_one(sql)['leave_amount'] respons = request(url=url,method=method,json=data,headers=headers) res = respons.json() try: self.assertEqual(expected['code'],res['code']) self.assertEqual(expected['msg'],res['msg']) #查询取现之后账户的金额 if cas['check_sql']: sql = replace_data(cas['check_sql']) money_end = self.bb.find_one(sql)['leave_amount'] #将用例数据的金额数值类型转换为decimal f = decimal.Decimal(str(data['amount'])) self.assertEqual(f,money_start-money_end) except AssertionError as e: log.error('该用例{}未通过'.format(cas['title'])) log.exception(e) self.exce.write(row=row,column=8,value='不通过') raise e else: log.info('该用例{}通过'.format(cas['title'])) self.exce.write(row=row,column=8,value='不通过')
class Register(unittest.TestCase): exce = Excel_Hande(os.path.join(DATA_DIR,'case.xlsx'),'register') case = exce.read_excel() bb = HandleMysql() @data def test_register(self,cas): url = conf.get('env','url2') + '/user/register/' method = cas['method'] expected = eval(cas['expected']) if '#username#' in cas['data']: username = self.usernam_data() setattr(EnvData,'username',username) cas['data'] = replace_data(cas['data']) if '#email#' in cas['data']: email = self.email_data() setattr(EnvData,'email',email) cas['data'] = replace_data(cas['data']) data = eval(cas['data']) respones = request(url=url,method=method,json=data) res = respones.json() #判断用户名是否注册 url3 = 'http://api.keyou.site:8000/keyou1/count/' try: self.assertEqual(res[ ]) @classmethod def usernam_data(cls): while True: name = 'huihui' for i in range(5): r = random.randint(0, 9) name += str(r) sql = 'select * from test.auth_user where username={}'.format(name) qs = cls.bb.find_count(sql) if qs == 0: return name @classmethod def email_data(cls): while True: n = '1' for i in range(8): r = random.randint(0, 9) n += str(r) sql = 'select * from test.auth_user where email={}@qq.com'.format(n) qs = cls.bb.find_count(sql) if qs == 0: return n
class UpdateCase(unittest.TestCase): excel = Excel_Hande(os.path.join(DATA_DIR, 'apicases.xlsx'), 'nickname') case = excel.read_excel() bb = HandleMysql() @classmethod def setUpClass(cls): # 登录 url = conf.get('env', 'url') + '/member/login' data = {'mobile_phone': '13367899876', 'pwd': 'lemonban'} headers = eval(conf.get('env', 'headers')) r = request(url=url, method='post', json=data, headers=headers) re = r.json() cls.token = 'Bearer' + ' ' + jsonpath.jsonpath(re, '$..token')[0] cls.member_id = jsonpath.jsonpath(re, '$..id')[0] cls.reg_name = jsonpath.jsonpath(re, '$..reg_name')[0] print('登陆时的昵称', cls.reg_name) @data(*case) def test_update(self, cas): url = conf.get('env', 'url') + cas['url'] cas['data'] = cas['data'].replace('#member_id#', str(self.member_id)) data = eval(cas['data']) headers = eval(conf.get('env', 'headers')) headers['Authorization'] = self.token method = cas['method'] expected = eval(cas['expected']) row = cas['case_id'] + 1 response = request(method=method, url=url, json=data, headers=headers) res = response.json() print('预期结果:', expected) print('实际结果:', res) try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) if cas['check_sql']: sql = cas['check_sql'].replace('#member_id#', str(self.member_id)) q = self.bb.find_one(sql)['reg_name'] print('更新后昵称', q) self.assertEqual(q, expected['reg_name']) except AssertionError as e: log.error('用例--{}--未通过'.format(cas['title'])) log.debug('预期结果{}'.format(expected)) log.debug('实际结果{}:'.format(res)) log.exception(e) self.excel.write(row=row, column=8, value='不通过') raise e else: log.info('用例--{}--通过'.format(cas['title'])) self.excel.write(row=row, column=8, value='通过')
class RegisterTestcase(unittest.TestCase): excel = Excel_Hande(filename, 'register') case_data = excel.read_excel() bb = HandleMysql() @data(*case_data) def test_register(self, cas): expected = eval(cas['expected']) method = cas['method'] # 用生成的随机手机号码替换#phon# if '#phon#' in cas['data']: phones = self.readom_phon() cas['data'] = cas['data'].replace('#phon#', phones) data = eval(cas['data']) url = cas['url'] headers = eval(conf.get('env', 'headers')) row = cas['case_id'] + 1 respons = request(method=method, url=url, json=data, headers=headers) res = respons.json() print('预期结果:', expected) print('实际结果:', res) try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) if cas['sql']: qy = cas['sql'].replace('#phon#', data['mobile_phone']) re = self.bb.find_one(qy) self.assertTrue(re) except AssertionError as e: log.error('用例--{}--未通过'.format(cas['title'])) log.debug('预期结果{}'.format(expected)) log.debug('实际结果{}:'.format(res)) log.exception(e) self.excel.write(row=row, column=8, value='不通过') raise e else: log.info('用例--{}--通过'.format(cas['title'])) self.excel.write(row=row, column=8, value='通过') @classmethod def readom_phon(cls): while True: phon = '155' for i in range(8): re = random.randint(0, 9) phon += str(re) mysql = 'select * from futureloan.member where mobile_phone={}'.format( phon) sq = cls.bb.find_count(mysql) if sq == 0: return phon
class Update(unittest.TestCase): exce = Excel_Hande(os.path.join(DATA_DIR, 'apicases.xlsx'), 'update') case = exce.read_excel() bb = HandleMysql() @classmethod def setUpClass(cls) -> None: url = conf.get('env', 'url') + '/member/login' data = { 'mobile_phone': conf.get('test_data', 'phone'), 'pwd': conf.get('test_data', 'pwd') } headers = eval(conf.get('env', 'headers')) respones2 = request(url=url, method='post', json=data, headers=headers) res2 = respones2.json() token = 'Bearer' ' ' + jsonpath.jsonpath(res2, '$..token')[0] member_id = str(jsonpath.jsonpath(res2, '$..id')[0]) setattr(EnvData, 'token', token) setattr(EnvData, 'member_id', member_id) @data(*case) def test_update(self, cas): url = conf.get('env', 'url') + cas['url'] method = cas['method'] cas['data'] = replace_data(cas['data']) data = eval(cas['data']) headers = eval(conf.get('env', 'headers')) headers['Authorization'] = getattr(EnvData, 'token') expected = eval(cas['expected']) row = cas['case_id'] + 1 respones = request(url=url, method=method, json=data, headers=headers) res = respones.json() try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) #判断数据库中是否更新昵称 if cas['check_sql']: sql = replace_data(cas['check_sql']) s = self.bb.find_one(sql)['reg_name'] self.assertEqual(data['reg_name'], s) except AssertionError as e: log.error('该用例{}报错'.format(cas['title'])) log.exception(e) self.exce.write(row=row, column=8, value='不通过') raise e else: log.info('该用例{}通过'.format(cas['title'])) self.exce.write(row=row, column=8, value='通过')
class Register(unittest.TestCase): exce = Excel_Hande(os.path.join(DATA_DIR, 'apicases.xlsx'), 'register') case = exce.read_excel() my = HandleMysql() @data(*case) def test_register(self, cas): url = cas['url'] method = cas['method'] if '#phone#' in cas['data']: phon = self.phone_replace() setattr(EnvData, 'mobile_phone', phon) cas['data'] = replace_data(cas['data']) data = eval(cas['data']) headers = eval(conf.get('env', 'headers')) expected = eval(cas['expected']) row = cas['case_id'] + 1 respones = request(url=url, method=method, json=data, headers=headers) res = respones.json() try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) if cas['check_sql']: sql = replace_data(cas['check_sql']) f = self.my.find_count(sql) self.assertEqual(1, f) except AssertionError as e: log.error('这条用例{}报错'.format(cas['title'])) log.exception(e) self.exce.write(row=row, column=8, value='不通过') raise e else: log.info('这条用例{}通过了'.format(cas['title'])) self.exce.write(row=row, column=8, value='通过') @classmethod def phone_replace(cls): while True: phone = '135' for i in range(8): re = random.randint(0, 9) phone += str(re) sql = 'select * from futureloan.member where mobile_phone={}'.format( phone) d = cls.my.find_count(sql) if d == 0: return phone
def case_audit(self, data, login_data, db: HandleMysql = None): data = self.template(data, {'member_id': login_data['member_id']}) # 添加项目 add_loan_res = self.add_loan_api(**data['add_loan_json'], token=login_data['token']).json() loan_id = jsonpath(add_loan_res, '$..id')[0] # 审核 audit_res = self.audit_loan_api(loan_id, data['audit_json']['approved_or_not']).json() audit_res['loan_id'] = loan_id if 'again' in data.keys(): audit_res = self.audit_loan_api(loan_id, data['audit_json']['approved_or_not']).json() if 'sql' in data.keys() and data['sql']: data = self.template(data, {'loan_id': loan_id}) status = db.get_one(data['sql'])[0] audit_res['status'] = status return audit_res
def case_withdraw(self, data, login_data, db: HandleMysql): """ 账户提现业务场景 :param data: 提现接口所需参数 :param login_data: 登录响应结果提取 :param db: 数据库连接对象 :return: """ # 替换数据 data = self.template(data, {'member_id': login_data['member_id'], 'mobile_phone': login_data['mobile_phone']}) if data['sql']: # 充值前账户余额 before_balance: Decimal = db.get_one(data['sql'])[0] withdraw_response = self.withdraw_api(data['member_id'], data['amount'], login_data['token']) res = withdraw_response.json() # 充值后账户余额 after_balance: Decimal = db.get_one(data['sql'])[0] withdraw: Decimal = before_balance - after_balance res['withdraw'] = withdraw else: recharge_response = self.recharge_api(data['member_id'], data['amount'], login_data['token']) res = recharge_response.json() return res
class Invest(unittest.TestCase): excel = Excel_Hande(os.path.join(DATA_DIR, 'apicases.xlsx'), 'invest') case = excel.read_excel() bb = HandleMysql() @data(*case) def test_invest(self, cas): url = conf.get('env', 'url') + cas['url'] method = cas['method'] data = eval(replace_data(cas['data'])) headers = eval(conf.get('env', 'headers')) if cas['interface'] != 'login': #如果不是登录的接口需要添加token headers['Authorization'] = getattr(EnvData, 'token') expected = eval(cas['expected']) row = cas['case_id'] + 1 respones = request(url=url, method=method, json=data, headers=headers) res = respones.json() if cas['interface'] == 'login': #如果是登录接口,需要提取id和token token = 'Bearer' + ' ' + jsonpath.jsonpath(res, '$..token')[0] member_id = str(jsonpath.jsonpath(res, '$..id')[0]) setattr(EnvData, 'token', token) setattr(EnvData, 'member_id', member_id) if cas['interface'] == 'add': #如果是加标接口,需要获取加标后的标id loan_id = str(jsonpath.jsonpath(res, '$..id')[0]) setattr(EnvData, 'loan_id', loan_id) print('预期结果:', expected) print('实际结果:', res) try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) except AssertionError as e: log.error('这是{}用例未通过'.format(cas['title'])) log.debug('预期结果{}'.format(expected)) log.debug('实际结果{}'.format(res)) log.exception(e) self.excel.write(row=row, column=8, value='不通过') raise e else: log.info('用例{}通过'.format(cas['title'])) self.excel.write(row=row, column=8, value='通过')
def send_get_msg(mobile): # 发送并获取验证码 # 数据是固定的,只需更改手机号 data = { 'client_ip': getattr(GetData, 'ip'), 'tmpl_ip': '1', 'mobile': mobile } client = BaseRequest.base_request(getattr(GetData, 'sms_service_url')) client.service.SendMCode(data) # 查询验证码 query_sql = 'select Fverify_code from t_mvcode_info_{0} where Fmobile_no={1}'.format( mobile[-3], mobile) db_name = 'sms_db_{0}'.format(mobile[-2]) res = HandleMysql.handle_mysql(query_sql, db_name) return res[0]
def test_invest(self, item): global check_sql_result logger.info('开始执行的用例{0}:{1}'.format(item['test_id'], item['title'])) # 请求之前完成loan_id替换 if item['data'].find('${loan_id}') !=-1: if getattr(GetData,'loan_id') ==None: # 还没有通过反射把值改了 sql = 'select max(Id) from loan where MemberID={0}'.format(getattr(GetData, 'loan_admin_tel')) # memberID投资充值ID loan_id = HandleMysql().handle_mysql(sql)[0][0] item['data'] = item['data'].replace('${loan_id}', str(loan_id)) setattr(GetData, 'loan_id', loan_id) # 利用这个反射存储结果 logger.info(loan_id) else: # 通过反射已经设置了值 logger.info(getattr(GetData, 'loan_id')) item['data'] = item['data'].replace('${loan_id}', str(getattr(GetData, 'loan_id'))) # 登录 logger.info('获取到的请求数据是:{0}'.format(item['data'])) if item['check_sql'] != None: logger.info('数据库检验{0}'.format(item['title'])) sql = eval(item['check_sql']['sql']) Before_Amount = HandleMysql().handle_mysql(sql, 1)[0] logger.info('用例:{0}请求之前余额:{1}'.format(item['title'], Before_Amount)) logger.info('开始http接口请求...') res = HttpRequest.http_request(item['url'], eval(item['data']), item['http_method'], getattr(GetData, 'Cookie') ) logger.info('完成http请求') After_Amount = HandleMysql().handle_mysql(sql, 1)[0] logger.info('用例:{0}请求之后余额:{1}'.format(item['title'], After_Amount)) # 检查结果 if eval(item['data']['amount']) == abs(After_Amount - Before_Amount): logger.info('数据库余额检验通过') logger.info('数据库检查通过') HandleExcel.write_back(test_data_path, item['sheet_name'], item['test_id'] + 1, 10, check_sql_result) else: logger.info('数据库余额检验不通过') check_sql_result = logger.info('数据库检查不通过') # 重新改写 HandleExcel write_back方法 HandleExcel.write_back(test_data_path, item['sheet_name'], item['test_id'] + 1, 10, check_sql_result) else: logger.info('此条用例不需数据库校验:{0}'.format(item['title'])) res = HttpRequest.http_request(item['url'], eval(item['data']), item['http_method'], getattr(GetData, 'Cookie') ) if res.cookies: setattr(GetData, 'Cookie', res.cookies) try: self.assertEqual(item['excepted'], res.json()['code']) TestResult = 'PASS' # 成功的 except Exception as e: TestResult = 'failed' # 失败的 logger.info("执行用例出错:{0}".format(e)) finally: HandleExcel.write_back(test_data_path, item['sheet_name'], item['test_id'] + 1, 8,str(res.json())) HandleExcel.write_back(test_data_path, item['sheet_name'], item['test_id'] + 1, 9, str(res.json())) logger.error("获取到的结果为:{0}".format(res.json()))
def connect_mysql(request): db = HandleMysql(**request.param) yield db db.close()
class AddTest(unittest.TestCase): excel = Excel_Hande(os.path.join(DATA_DIR, 'apicases.xlsx'), 'add') case = excel.read_excel() bb = HandleMysql() @classmethod def setUpClass(cls): # 准备登录用的数据 url = conf.get('env', 'url') + '/member/login' data = { 'mobile_phone': conf.get('test_data', 'phone'), 'pwd': conf.get('test_data', 'pwd') } headers = eval(conf.get('env', 'headers')) respons = request(method='post', url=url, json=data, headers=headers) re = respons.json() member_id = str(jsonpath.jsonpath(re, '$..id')[0]) token = "Bearer" + " " + jsonpath.jsonpath(re, '$..token')[0] setattr(EnvData, 'member_id', member_id) setattr(EnvData, 'token', token) @data(*case) def test_add(self, cas): # 准备用例数据 url = conf.get('env', 'url') + cas['url'] cas['data'] = replace_data(cas['data']) data = eval(cas['data']) method = cas['method'] headers = eval(conf.get('env', 'headers')) headers['Authorization'] = getattr(EnvData, 'token') expected = eval(cas['expected']) row = cas['case_id'] + 1 # 请求之前查询用户标的数量 if cas['check_sql']: sql = replace_data(cas['check_sql']) st = self.bb.find_count(sql) print('请求之前的标数:', st) response = request(url=url, method=method, json=data, headers=headers) res = response.json() print('预期结果:', expected) print('实际结果:', res) # 请求后查询用户标的数量 try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) if cas['check_sql']: sql = replace_data(cas['check_sql']) end = self.bb.find_count(sql) print('请求之后标数', end) self.assertEqual(1, end - st) except AssertionError as e: log.error('用例--{}--未通过'.format(cas['title'])) log.debug('预期结果{}'.format(expected)) log.debug('实际结果{}:'.format(res)) log.exception(e) self.excel.write(row=row, column=8, value='不通过') raise e else: log.info('用例--{}--通过'.format(cas['title'])) self.excel.write(row=row, column=8, value='通过')
class Recharge_Case(unittest.TestCase): excel = Excel_Hande(fms, 'recharge') case_data = excel.read_excel() bb = HandleMysql() @classmethod def setUpClass(cls): url = conf.get('env', 'url') + '/member/login' data = { 'mobile_phone': conf.get('test_data', 'phone'), 'pwd': conf.get('test_data', 'pwd') } headers = eval(conf.get('env', 'headers')) resp = request(method='post', url=url, json=data, headers=headers) qw = resp.json() cls.member_id = str(jsonpath.jsonpath(qw, "$..id")[0]) cls.token = "Bearer" + " " + jsonpath.jsonpath(qw, '$..token')[0] print('用户id', cls.member_id) print('token值', cls.token) @data(*case_data) def test_recharge(self, cas): # 准备数据 url = conf.get('env', 'url') + cas['url'] cas['data'] = cas['data'].replace('#member_id#', self.member_id) data = eval(cas['data']) method = cas['method'] headers = eval(conf.get('env', 'headers')) headers['Authorization'] = self.token expected = eval(cas['expected']) row = cas['case_id'] + 1 if cas['check_sql']: sql = cas['check_sql'].format(self.member_id) money_data = self.bb.find_one(sql)['leave_amount'] print("充值之前的钱:", money_data) # 发送请求获取实际结果 repans = request(url=url, method=method, json=data, headers=headers) res = repans.json() if cas['check_sql']: sql = cas['check_sql'].format(self.member_id) money_data2 = self.bb.find_one(sql)['leave_amount'] print("充值之后的钱:", money_data2) print('预期结果:', expected) print('实际结果:', res) # 断言 try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) if cas['check_sql']: # 将准备的data数据中的amount数值类型转换为decimal my_data = decimal.Decimal(str(data['amount'])) self.assertEqual(my_data, money_data2 - money_data) except AssertionError as e: log.error('用例--{}--未通过'.format(cas['title'])) log.debug('预期结果{}'.format(expected)) log.debug('实际结果{}:'.format(res)) log.exception(e) self.excel.write(row=row, column=8, value='不通过') raise e else: log.info('用例--{}--通过'.format(cas['title'])) self.excel.write(row=row, column=8, value='通过')
class Withdraw(unittest.TestCase): excel = Excel_Hande(os.path.join(DATA_DIR, 'apicases.xlsx'), 'withdraw') case = excel.read_excel() bb = HandleMysql() @classmethod def setUpClass(cls): # 准备的登录的数据 url = conf.get('env', 'url') + '/member/login' data = { 'mobile_phone': conf.get('test_data', 'phone'), 'pwd': conf.get('test_data', 'pwd') } headers = eval(conf.get('env', 'headers')) respons = request(url=url, method='post', json=data, headers=headers) re = respons.json() cls.member_id = jsonpath.jsonpath(re, '$..id')[0] cls.token = "Bearer" + " " + jsonpath.jsonpath(re, '$..token')[0] @data(*case) def test_withdraw(self, cas): # 准备用例数据 url = conf.get('env', 'url') + cas['url'] cas['data'] = cas['data'].replace('#member_id#', str(self.member_id)) data = eval(cas['data']) method = cas['method'] headers = eval(conf.get('env', 'headers')) headers['Authorization'] = self.token expected = eval(cas['expected']) row = cas['case_id'] + 1 # 查询取现之前的余额 if cas['check_sql']: sql = cas['check_sql'].format(self.member_id) start_money = self.bb.find_one(sql)['leave_amount'] print('取现前:', start_money) # 发送请求 response1 = request(method=method, url=url, headers=headers, json=data) res = response1.json() print('实际结果:', res) print('预期结果:', expected) # 断言 try: self.assertEqual(expected['code'], res['code']) self.assertEqual(expected['msg'], res['msg']) # 查询请求之后的账户余额 if cas['check_sql']: sql = cas['check_sql'].format(self.member_id) end_money = self.bb.find_one(sql)['leave_amount'] print('取现后:', end_money) # 用例数据中data,amount的数值类型转换 my_data = decimal.Decimal(str(data['amount'])) self.assertEqual(my_data, start_money - end_money) except AssertionError as e: log.error('用例--{}--未通过'.format(cas['title'])) log.debug('预期结果{}'.format(expected)) log.debug('实际结果{}:'.format(res)) log.exception(e) self.excel.write(row=row, column=8, value='不通过') raise e else: log.info('用例--{}--通过'.format(cas['title'])) self.excel.write(row=row, column=8, value='通过')
class AuditTest(unittest.TestCase): excel = Excel_Hande(os.path.join(DATA_DIR, 'apicases.xlsx'), 'Sheet1') case = excel.read_excel() bb = HandleMysql() @classmethod def setUpClass(cls): # 普通用户登录 # 准备数据 url = conf.get('env', 'url') + '/member/login' user_data = { 'mobile_phone': conf.get('test_data', 'phone'), 'pwd': conf.get('test_data', 'pwd') } headers = eval(conf.get('env', 'headers')) respons = request(method='post', url=url, json=user_data, headers=headers) re = respons.json() user_member_id = str(jsonpath.jsonpath(re, '$..id')[0]) user_token = 'Bearer' + ' ' + jsonpath.jsonpath(re, '$..token')[0] setattr(EnvData, 'user_member_id', user_member_id) setattr(EnvData, 'user_token', user_token) # 管理员登录 data = { 'mobile_phone': conf.get('test_data', 'admin_phone'), 'pwd': conf.get('test_data', 'admin_pwd') } resp = request(method='post', url=url, json=data, headers=headers) es = resp.json() admin_token = 'Bearer' + ' ' + jsonpath.jsonpath(es, '$..token')[0] setattr(EnvData, 'admin_token', admin_token) # 加标 def setUp(self) -> None: url = conf.get("env", "url") + "/loan/add" headers = eval(conf.get("env", "headers")) headers["Authorization"] = getattr(EnvData, 'user_token') data = { "member_id": getattr(EnvData, 'user_member_id'), "title": "木森借钱买飞机", "amount": 2000, "loan_rate": 12.0, "loan_term": 3, "loan_date_type": 1, "bidding_days": 5 } # 发送请求,添加项目 response = request(method="post", url=url, json=data, headers=headers) res = response.json() # 获取标id loan_id = str(jsonpath.jsonpath(res, "$..id")[0]) setattr(EnvData, 'loan_id', loan_id) @data(*case) def test_audit(self, cas): # 准备数据 url = conf.get('env', 'url') + cas['url'] # 判断是否需要替换为审核通过的标id if "#pass_loan_id#" in cas['data']: cas['data'] = replace_data(cas['data']) cas['data'] = replace_data(cas['data']) data = eval(cas['data']) method = cas['method'] headers = eval(conf.get('env', 'headers')) headers['Authorization'] = getattr(EnvData, 'admin_token') expected = eval(cas['expected']) row = cas['case_id'] + 1 # 获取实际结果 response = request(url=url, method=method, json=data, headers=headers) rese = response.json() print('预期结果:', expected) print('实际结果:', rese) # 判断是否是审核通过的用例,并且审核成功 if cas['title'] == '审核通过' and rese['msg'] == 'OK': setattr(EnvData, 'pass_loan_id', str(data['loan_id'])) try: self.assertEqual(expected['code'], rese['code']) self.assertEqual(expected['msg'], rese['msg']) if cas['check_sql']: sql = replace_data(cas['check_sql']) status = self.bb.find_one(sql)['status'] self.assertEqual(expected['status'], status) print(status, type(status)) except AssertionError as e: log.error('用例--{}--未通过'.format(cas['title'])) log.debug('预期结果{}'.format(expected)) log.debug('实际结果{}:'.format(rese)) log.exception(e) self.excel.write(row=row, column=8, value='不通过') raise e else: log.info('用例--{}--通过'.format(cas['title'])) self.excel.write(row=row, column=8, value='通过')
class Audit(unittest.TestCase): exce = Excel_Hande(os.path.join(DATA_DIR, 'apicases.xlsx'), 'audit') case = exce.read_excel() bb = HandleMysql() #普通用户登录 @classmethod def setUpClass(cls) -> None: url = conf.get('env', 'url') + '/member/login' user_data = { 'mobile_phone': conf.get('test_data', 'phone'), 'pwd': conf.get('test_data', 'pwd') } headers = eval(conf.get('env', 'headers')) respones = request(url=url, method='post', json=user_data, headers=headers) res = respones.json() user_token = 'Bearer' + ' ' + jsonpath.jsonpath(res, '$..token')[0] user_member_id = str(jsonpath.jsonpath(res, '$..id')[0]) setattr(EnvData, 'user_token', user_token) setattr(EnvData, 'user_member_id', user_member_id) #管理员登录 admin_data = { 'mobile_phone': conf.get('test_data', 'admin_phone'), 'pwd': conf.get('test_data', 'admin_pwd') } q = request(url=url, method='post', json=admin_data, headers=headers) f = q.json() admin_token = 'Bearer' + ' ' + jsonpath.jsonpath(f, '$..token')[0] admin_member_id = str(jsonpath.jsonpath(f, '$..id')[0]) setattr(EnvData, 'admin_token', admin_token) setattr(EnvData, 'admin_member_id', admin_member_id) #每条用例执行前,添加一个标 def setUp(self) -> None: url = conf.get('env', 'url') + '/loan/add' data = { "member_id": getattr(EnvData, 'user_member_id'), "title": "借钱娶媳妇", "amount": 2000, "loan_rate": 12.0, "loan_term": 3, "loan_date_type": 1, "bidding_days": 5 } headers = eval(conf.get('env', 'headers')) headers['Authorization'] = getattr(EnvData, 'user_token') pn = request(url=url, method='post', json=data, headers=headers) ss = pn.json() loan_id = str(jsonpath.jsonpath(ss, '$..id')[0]) setattr(EnvData, 'loan_id', loan_id) @data(*case) def test_audit(self, cas): url = conf.get('env', 'url') + cas['url'] method = cas['method'] data = eval(replace_data(cas['data'])) headers = eval(conf.get('env', 'headers')) headers['Authorization'] = getattr(EnvData, 'admin_token') expected = eval(cas['expected']) row = cas['case_id'] + 1 respones1 = request(url=url, method=method, json=data, headers=headers) res1 = respones1.json() if cas['title'] == '审核通过' and res1['msg'] == 'OK': setattr(EnvData, 'pass_loan_id', str(data['loan_id'])) print('预期结果:', expected) print('实际结果:', res1) try: self.assertEqual(expected['code'], res1['code']) self.assertEqual(expected['msg'], res1['msg']) #判断审核状态是否符合预期的结果 if cas['check_sql']: sql = replace_data(cas['check_sql']) status = self.bb.find_one(sql)['status'] self.assertEqual(expected['status'], status) except AssertionError as e: log.error('这条用例{}没有通过'.format(cas['title'])) log.exception(e) self.exce.write(row=row, column=8, value='不通过') raise e else: log.info('这条用例{}执行通过'.format(cas['title'])) self.exce.write(row=row, column=8, value='通过')