class TestEmail(unittest.TestCase): excel = ReadWriteExcel(case_file, 'email') cases = excel.read_excel() request = HandlerRequests() @data(*cases) def test_email(self, case): CaseData.random_email = self.random_email() case['url'] = replace_data(case['url']) url = conf.get('env', 'base_url') + case['url'] print('检验邮箱是否注册接口的url地址是:', url) method = case['method'] data = eval(case['data']) expected = eval(case['expected']) row = case['case_id'] + 1 response = self.request.send_request(url=url, method=method, params=data) # res = response.json() status_code = response.status_code print('执行接口后状态码是:', status_code) content = response.content # 上面得到一个byte类型的数据b'{"email":"*****@*****.**","count":0}' content = content.decode('utf-8') # 经过decode得到一个str类型的数据'{"email":"*****@*****.**","count":0}' if status_code == 200: content = eval(content) try: self.assertEqual(status_code, expected['status_code']) if status_code == 200: self.assertEqual(content['count'], expected['count']) except Exception as e: self.excel.write_excel(row=row, column=8, value='未通过') log.error('测试用例{}执行未通过'.format(case['title'])) log.exception(e) raise e else: self.excel.write_excel(row=row, column=8, value='通过') log.error('测试用例{}执行通过'.format(case['title'])) def random_email(self): mail_host = random.choice([126, 163, 139, 'qq']) n = random.randint(100, 99999999) email = str(n) + '@' + str(mail_host) + '.com' return email
class TestLogin(unittest.TestCase): excel = ReadWriteExcel(case_file,'login') cases = excel.read_excel() request = HandlerRequests() db = DB() @data(*cases) def test_login(self,case): url = conf.get('env','base_url') + case['url'] method = case['method'] case['data'] = replace_data(case['data']) data = eval(case['data']) print('测试用例中data的值是:',data) expected = eval(case['expected']) headers = eval(conf.get('env','headers')) row = case['case_id'] + 1 response = self.request.send_request(url=url,method=method,json=data,headers=headers) res = response.json() print('登录-测试用例执行结果:',res) try: self.assertEqual(res['code'],expected['code']) # self.assertEqual(res['msg'],expected['msg']) except Exception as e: self.excel.write_excel(row=row,column=8,value='未通过') log.error('测试用例{}执行未通过'.format(case['title'])) log.exception(e) raise e else: self.excel.write_excel(row=row,column=8,value='通过') log.info('测试用例{}执行通过'.format(case['title']))
class TestAdd(unittest.TestCase): excel = ReadWriteExcel(case_file, 'add') cases = excel.read_excel() request = HandlerRequests() db = DB() @data(*cases) def test_add(self, case): """ 将登录放在测试用例excel的第一行,根据接口类型,判断如果是登录,那么获取其响应结果中的token_value :param case: :return: """ url = conf.get('env', 'base_url') + case['url'] method = case['method'] headers = eval(conf.get('env', 'headers')) if case['interface'] != 'login': headers['Authorization'] = getattr(CaseData, 'token_value') case['data'] = replace_data(case['data']) data = eval(case['data']) if case['interface'] != 'login': sign_info = HandleSign.generate_sign(getattr(CaseData, "token")) data.update(sign_info) # 在请求体中加入,时间戳和签名 print('测试用例中data的值是:', data) expected = eval(case['expected']) row = case['case_id'] + 1 if case['check_sql']: case['check_sql'] = replace_data(case['check_sql']) sql = case['check_sql'] result = self.db.find_count(sql) start_sum = result print('执行添加项目前的总项目数是:', start_sum) response = self.request.send_request(url=url, method=method, json=data, headers=headers) res = response.json() print('执行接口后的结果是:', res) if case['interface'] == 'login': token_type = jsonpath.jsonpath(res, '$..token_type')[0] token = jsonpath.jsonpath(res, '$..token')[0] member_id = str(jsonpath.jsonpath(res, '$..id')[0]) token_value = token_type + ' ' + token CaseData.token = token CaseData.token_value = token_value CaseData.member_id = member_id if case['check_sql']: case['check_sql'] = replace_data(case['check_sql']) sql = case['check_sql'] result = self.db.find_count(sql) end_sum = result print('执行添加项目后的总项目数是:', end_sum) try: self.assertEqual(res['code'], expected['code']) # self.assertEqual(res['msg'],expected['msg']) if case['check_sql']: self.assertEqual(end_sum - start_sum, 1) except Exception as e: self.excel.write_excel(row=row, column=8, value='未通过') log.error('测试用例{}执行未通过'.format(case['title'])) log.exception(e) raise e else: self.excel.write_excel(row=row, column=8, value='通过') log.info('测试用例{}执行通过'.format(case['title']))
class TestMainStream(unittest.TestCase): excel = ReadWriteExcel(case_file, "main_stream") cases = excel.read_excel() request = HandlerRequests() @data(*cases) def test_main_stream(self, case): # 第一步:准备用例数据 url = conf.get("env", "base_url") + replace_data(case["url"]) method = case["method"] if case["interface"] == "register": # 注册接口,则随机生成一个手机号码 CaseData.mobilephone = self.random_phone() data = eval(replace_data(case["data"])) headers = eval(conf.get("env", "headers")) # 判断是否是登录接口,不是登录接口则需要添加token if case["interface"] != "login" and case["interface"] != "register": headers['Authorization'] = getattr(CaseData, 'token_value') # headers["Authorization"] = getattr(CaseData, "token_value") # 在请求体中加入,时间戳和签名 sign_info = HandleSign.generate_sign(getattr(CaseData, "token")) data.update(sign_info) expected = eval(case["expected"]) row = case["case_id"] + 1 # 第二步:发送请求,获取结果 print("请求参数:", data) response = self.request.send_request(url=url, method=method, json=data, headers=headers) res = response.json() print("预期结果", expected) print("实际结果", res) # 发送请求后,判断是否是登陆接口 if case["interface"].lower() == "login": # 提取用户id保存为类属性 CaseData.member_id = str(jsonpath.jsonpath(res, "$..id")[0]) token = jsonpath.jsonpath(res, "$..token")[0] token_type = jsonpath.jsonpath(res, "$..token_type")[0] # 提取token,保存为类属性 CaseData.token_value = token_type + " " + token CaseData.token = token # 判断是否是加标的用例,如果是的则请求标id if case["interface"] == "add": CaseData.loan_id = str(jsonpath.jsonpath(res, "$..id")[0]) # 第三步:断言(比对预期结果和实际结果) try: self.assertEqual(expected["code"], res["code"]) self.assertIn(expected["msg"], res["msg"]) except AssertionError as e: self.excel.write_excel(row=row, column=8, value="未通过") log.error("用例:{},执行未通过".format(case["title"])) log.exception(e) raise e else: self.excel.write_excel(row=row, column=8, value="通过") log.info("用例:{},执行未通过".format(case["title"])) def random_phone(self): phone = "139" n = random.randint(100000000, 999999999) phone += str(n)[1:] return phone
class TestUpdate(unittest.TestCase): excel = ReadWriteExcel(case_file, "update") cases = excel.read_excel() request = HandlerRequests() db = DB() @classmethod def setUpClass(cls): url = conf.get('env', 'base_url') + '/member/login' data = { 'mobile_phone': conf.get('test_data', 'mobile_phone'), 'pwd': conf.get('test_data', 'pwd') } headers = eval(conf.get('env', 'headers')) response = cls.request.send_request(url=url, json=data, headers=headers, method='post') res = response.json() token = jsonpath.jsonpath(res, '$..token') token_type = jsonpath.jsonpath(res, '$..token_type') CaseData.token = token[0] CaseData.token_value = token_type[0] + ' ' + token[0] CaseData.member_id = str(jsonpath.jsonpath(res, '$..id')[0]) @data(*cases) def test_update(self, case): url = conf.get('env', 'base_url') + case['url'] method = case['method'] case['data'] = replace_data(case['data']) data = eval(case['data']) # 在请求体中加入,时间戳和签名 sign_info = HandleSign.generate_sign(getattr(CaseData, "token")) data.update(sign_info) # print('data中reg_name的值是',data['reg_name'],type(data['reg_name'])) headers = eval(conf.get('env', 'headers')) headers['Authorization'] = getattr(CaseData, 'token_value') expected = eval(case["expected"]) row = case["case_id"] + 1 response = self.request.send_request(url=url, method=method, json=data, headers=headers) res = response.json() print('更新昵称接口返回的结果:', res) try: self.assertEqual(res['code'], expected['code']) if case['check_sql']: sql = 'select * from futureloan.member where mobile_phone={}'.format( conf.get('test_data', 'mobile_phone')) res_name = self.db.find_one(sql)['reg_name'] # print('执行后结果昵称是:',res_name,type(res_name)) self.assertEqual(res_name, data['reg_name']) except Exception as e: self.excel.write_excel(row=row, column=8, value='未通过') log.error('测试用例{}执行未通过'.format(case['title'])) log.exception(e) raise e else: self.excel.write_excel(row=row, column=8, value='通过') log.info('测试用例执行通过')
class TestProject(unittest.TestCase): excel = ReadWriteExcel(case_file, 'projects') cases = excel.read_excel() request = HandlerRequests() @classmethod def setUpClass(cls): url = conf.get('env', 'base_url') + '/user/login/' data = { "username": conf.get('test_data', 'username'), "password": conf.get('test_data', 'password') } response = cls.request.send_request(url=url, method='post', json=data) content = eval(response.content.decode('utf-8')) token = content['token'] CaseData.token_value = 'JWT' + ' ' + token @data(*cases) def test_project(self, case): headers = eval(conf.get('env', 'headers')) headers['Authorization'] = getattr(CaseData, 'token_value') url = conf.get('env', 'base_url') + case['url'] method = case['method'] CaseData.project_name = self.random_project() case['data'] = replace_data(case['data']) data = eval(case['data']) expected = eval(case['expected']) row = case['case_id'] + 1 response = self.request.send_request(url=url, method=method, json=data, headers=headers) status_code = response.status_code print('执行接口后状态码是:', status_code) res = response.json() print('执行接口后的响应结果是:', res) # content = response.content.decode('utf-8') # if status_code == 201: # content = eval(content) # print('项目成功的接口信息为:',content) try: self.assertEqual(status_code, expected['status_code']) except Exception as e: self.excel.write_excel(row=row, column=8, value='未通过') log.error('测试用例{}执行未通过'.format(case['title'])) log.exception(e) raise e else: self.excel.write_excel(row=row, column=8, value='通过') log.error('测试用例{}执行通过'.format(case['title'])) def random_project(self): project_name = 'ann' n = random.randint(10000, 99999) project_name += str(n) return project_name
class TestWithdraw(unittest.TestCase): excel = ReadWriteExcel(case_file,'withdraw') cases = excel.read_excel() request = HandlerRequests() db = DB() @classmethod def setUpClass(cls): url = conf.get('env','base_url') + '/member/login' data = { 'mobile_phone':conf.get('test_data','mobile_phone'), 'pwd':conf.get('test_data','pwd') } headers = eval(conf.get('env', 'headers')) response = cls.request.send_request(url=url,method='post',json=data,headers=headers) res = response.json() token = jsonpath.jsonpath(res,'$..token')[0] token_type = jsonpath.jsonpath(res,'$..token_type')[0] member_id = str(jsonpath.jsonpath(res,'$..id')[0]) token_value = token_type + ' ' + token CaseData.token_value = token_value CaseData.member_id = member_id CaseData.token = token @data(*cases) def test_withdraw(self,case): """ 将登录放在setupclass中实现,获取到登录后的token_value作为该接口的入参 :param case: :return: """ url = conf.get('env','base_url') + case['url'] method = case['method'] headers = eval(conf.get('env', 'headers')) headers['Authorization'] = getattr(CaseData,'token_value') case['data'] = replace_data(case['data']) data = eval(case['data']) # 在请求体中加入,时间戳和签名 sign_info = HandleSign.generate_sign(getattr(CaseData, "token")) data.update(sign_info) print('测试用例中data的值是:',data) expected = eval(case['expected']) row = case['case_id'] + 1 if case['check_sql']: sql = 'select * from futureloan.member where id={}'.format(getattr(CaseData,'member_id')) result = self.db.find_one(sql) start_amount = result['leave_amount'] # print('执行充值前的金额是:',start_amount) response = self.request.send_request(url=url,method=method,json=data,headers=headers) res = response.json() print('提现-测试用例执行结果:',res) if case['check_sql']: sql = 'select * from futureloan.member where id={}'.format(getattr(CaseData, 'member_id')) result = self.db.find_one(sql) end_amount = result['leave_amount'] # print('执行充值后的金额是:', end_amount) try: self.assertEqual(res['code'],expected['code']) # self.assertEqual(res['msg'],expected['msg']) if case['check_sql']: self.assertEqual(start_amount-end_amount,Decimal(str(data['amount']))) except Exception as e: self.excel.write_excel(row=row,column=8,value='未通过') log.error('测试用例{}执行未通过'.format(case['title'])) log.exception(e) raise e else: self.excel.write_excel(row=row,column=8,value='通过') log.info('测试用例{}执行通过'.format(case['title']))
class TestInterface(unittest.TestCase): excel = ReadWriteExcel(case_file,'interfaces') cases = excel.read_excel() request = HandlerRequests() @classmethod def setUpClass(cls): url = conf.get('env','base_url') + '/user/login/' data = { "username":conf.get('test_data','username'), "password":conf.get('test_data','password') } response = cls.request.send_request(url=url,method='post',json=data) content = eval(response.content.decode('utf-8')) token = content['token'] CaseData.token_value = 'JWT' + ' ' + token def setUp(self): url = conf.get('env','base_url') + '/projects/' headers = eval(conf.get('env', 'headers')) headers['Authorization'] = getattr(CaseData, 'token_value') CaseData.project_name = self.random_name() data = '{"name": "这是一个测试的项目编号#project_name#","leader": "ann","tester": "ann9186563","programmer": "小雅","publish_app": "自动化作业-应用","desc":"ann创建项目的描述"}' data = replace_data(data) data = eval(data) response = self.request.send_request(url=url, method='post', json=data,headers=headers) content = eval(response.content.decode('utf-8')) CaseData.project_id = str(content['id']) @data(*cases) def test_interface(self,case): headers = eval(conf.get('env','headers')) headers['Authorization'] = getattr(CaseData,'token_value') url = conf.get('env','base_url') + case['url'] method = case['method'] CaseData.interface_name = self.random_name() case['data'] = replace_data(case['data']) data = eval(case['data']) expected = eval(case['expected']) row = case['case_id'] + 1 response = self.request.send_request(url=url, method=method, json=data,headers=headers) status_code = response.status_code print('执行接口后状态码是:', status_code) res = response.json() print('执行接口后的响应结果是:',res) # content = response.content.decode('utf-8') if status_code == 201: # content = eval(content) # print('接口成功的接口信息为:',content) if case['title'] == '成功创建接口': # 如果是添加成功的接口,把接口名字取出来作为excel中第二条用例的验证(第二条用例的name用的是第一条已经添加过的那个name) CaseData.have_interface_name = res['name'] try: self.assertEqual(status_code,expected['status_code']) except Exception as e: self.excel.write_excel(row=row,column=8,value='未通过') log.error('测试用例{}执行未通过'.format(case['title'])) log.exception(e) raise e else: self.excel.write_excel(row=row, column=8, value='通过') log.error('测试用例{}执行通过'.format(case['title'])) def random_name(self): name = 'ann0309' n = random.randint(10000, 99999) name += str(n) return name
class TestInvest(unittest.TestCase): excel = ReadWriteExcel(case_file, 'invest2') cases = excel.read_excel() request = HandlerRequests() db = DB() @data(*cases) def test_invest(self, case): """ 将登录放在测试用例excel的第一行,根据接口类型,判断如果是登录,那么获取其响应结果中的token_value :param case: :return: """ url = conf.get('env', 'base_url') + case['url'] method = case['method'] headers = eval(conf.get('env', 'headers')) if case['interface'] != 'login': headers['Authorization'] = getattr(CaseData, 'token_value') case['data'] = replace_data(case['data']) data = eval(case['data']) if case['interface'] != 'login': sign_info = HandleSign.generate_sign(getattr(CaseData, "token")) data.update(sign_info) # 在请求体中加入,时间戳和签名 print('测试用例中data的值是:', data) expected = eval(case['expected']) row = case['case_id'] + 1 # 关于sql校验:需要校验投资用户可用余额减少(sql1)、需要校验流水记录表中增加了一条记录 if case['check_sql']: sql1 = "select * from futureloan.member where id={}".format( getattr(CaseData, 'member_id')) start_amount = self.db.find_one(sql1)['leave_amount'] print('执行投资前的用户余额时:', start_amount) sql2 = "select * from futureloan.financeLog where pay_member_id={}".format( getattr(CaseData, 'member_id')) start_sum = self.db.find_count(sql2) print("执行投资前流水记录表中的数量是:", start_sum) sql3 = "SELECT * FROM futureloan.invest WHERE member_id={} and loan_id={}".format( CaseData.member_id, CaseData.loan_id) start_invest = self.db.find_count(sql3) print('投资前的投资记录条数:', start_invest) response = self.request.send_request(url=url, method=method, json=data, headers=headers) res = response.json() print('执行接口后的结果是:', res) if case['interface'] == 'login': token_type = jsonpath.jsonpath(res, '$..token_type')[0] token = jsonpath.jsonpath(res, '$..token')[0] member_id = str(jsonpath.jsonpath(res, '$..id')[0]) token_value = token_type + ' ' + token CaseData.token_value = token_value CaseData.member_id = member_id CaseData.token = token if case['interface'] == 'add': loan_id = str(jsonpath.jsonpath(res, '$..id')[0]) CaseData.loan_id = loan_id if case['check_sql']: sql = "select * from futureloan.member where id={}".format( getattr(CaseData, 'member_id')) end_amount = self.db.find_one(sql)['leave_amount'] print('执行投资后的用户余额时:', end_amount) sql2 = "select * from futureloan.financeLog where pay_member_id={}".format( getattr(CaseData, 'member_id')) end_sum = self.db.find_count(sql2) print("执行投资后流水记录表中的数量是:", end_sum) sql3 = "SELECT * FROM futureloan.invest WHERE member_id={} and loan_id={}".format( CaseData.member_id, CaseData.loan_id) end_invest = self.db.find_count(sql3) print('投资后的投资记录条数:', end_invest) try: self.assertEqual(res['code'], expected['code']) # self.assertEqual(res['msg'],expected['msg']) if case['check_sql']: self.assertEqual(start_amount - end_amount, Decimal(str(data['amount']))) self.assertEqual(end_sum - start_sum, 1) self.assertEqual(end_invest - start_invest, 1) # 关于sql校验:除了以上校验外,如果达到满标(即投资额=用户可用余额,那么在回款计划表中会新增一条记录) # if end_amount == data['amount']: # sql3 = 'select * from futureloan.repayment where invest_id={}'.format(getattr(CaseData, 'member_id')) # repay_amount = self.db.find_count(sql3) # self.assertEqual(repay_amount,1) if "满标" in case["title"]: # 获取当前标所有的投资记录id sql4 = "SELECT id FROM futureloan.invest WHERE loan_id={}".format( CaseData.loan_id) invest_ids = self.db.find_all(sql4) # 遍历该标所有的投资记录,id for invest in invest_ids: sql5 = "SELECT * FROM futureloan.repayment WHERE invest_id={}".format( invest["id"]) # 获取当前这条投资记录,生成对应的回款 count = self.db.find_count(sql5) # 断言查询到的条数的布尔值是否为True(0的布尔值是Flase,只要不是0条,这个断言就会通过) self.assertTrue(count) except Exception as e: self.excel.write_excel(row=row, column=8, value='未通过') log.error('测试用例{}执行未通过'.format(case['title'])) log.exception(e) raise e else: self.excel.write_excel(row=row, column=8, value='通过') log.info('测试用例{}执行通过'.format(case['title']))