class LoginTestCase(unittest.TestCase): excel = HandleExcel(filename, "login") cases = excel.read_data() @data(*cases) def test_login(self, case): method = case["method"] url = conf.get("env", "url") + case["url"] data = eval(case["data"]) expected = eval(case["expected"]) row = case["case_id"] + 1 res = (request(method, url, json=data)).json() try: assert_dict(expected, res) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过")
class TestUpdate(unittest.TestCase): excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlsx"), "user_info") cases = excel.read_data() @data(*cases) def test_add(self, case): # 准备用例数据 phone = conf.get("test_data", "phone") pwd = conf.get("test_data", "pwd") member_id, token = HandleSetup.handle_setup(phone, pwd) data, res = HandleSetup.handle_case(case, member_id, token) row = case["case_id"] + 1 expected = eval(case["expected"]) try: self.assertEqual(expected["code"], res["code"]) self.assertEqual(expected["msg"], res["msg"]) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过")
class TestList(unittest.TestCase): excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlsx"), "list") cases = excel.read_data() @data(*cases) def test_add(self, case): # 准备用例数据 url = case["url"] method = case["method"] headers = {"X-Lemonban-Media-Type": "lemonban.v1"} response = request(url=url, method=method, json=data, headers=headers) res = response.json() row = case["case_id"] + 1 expected = eval(case["expected"]) try: self.assertEqual(expected["code"], res["code"]) self.assertEqual(expected["msg"], res["msg"]) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过")
class TestInfo(unittest.TestCase): excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlsx"), "user_info") cases = excel.read_data() @data(*cases) def test_add(self, case): # 准备用例数据 phone = conf.get("test_data", "phone") pwd = conf.get("test_data", "pwd") member_id, token = HandleSetup.handle_setup(phone, pwd) case["url"] = case["url"].replace("#member_id#", member_id) url = conf.get("env", "url") + case["url"] method = case["method"] headers = {"X-Lemonban-Media-Type": "lemonban.v1"} response = request(url=url, method=method, json=data, headers=headers) res = response.json() row = case["case_id"] + 1 expected = eval(case["expected"]) try: self.assertEqual(expected["code"], res["code"]) self.assertEqual(expected["msg"], res["msg"]) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过")
class TestAudit(unittest.TestCase): excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlxs"), "audit") cases = excel.read_data() @data(*cases) def test_audit(self, case): # 第一步:准备数据:获取管理员token admin_phone = conf.get("test_data", "phone") admin_pwd = conf.get("test_data", "pwd") admin_member_id, admin_token = HandleSetup.handle_setup(admin_phone, admin_pwd) # 2:获取普通用户id和token phone = conf.get("test_data", "phone") pwd = conf.get("test_data", "pwd") member_id, token = HandleSetup.handle_setup(phone, pwd) #每次添加一个新项目 url = conf.get("env", "url") + "/loan/add" headers = eval(conf.get("env", "headers")) headers["Authorization"] = token data = {"member_id": 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 = jsonpath.jsonpath(res, "$..id")[0] url = conf.get("env", "url") + case["url"] data = eval(case["data"].replace("#loan_id#", str(loan_id))) headers = eval(conf.get("env", "headers")) headers["Authorization"] = admin_token method = case["method"] expected = eval(case["expected"]) row = case["case_id"] + 1 # 第二步:调用接口,获取实际结果 response = request(url=url, method=method, json=data, headers=headers) res = response.json() # 第三步:断言 try: self.assertEqual(expected["code"], res["code"]) self.assertEqual(expected["msg"], res["msg"]) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过")
class TestInvset(unittest.TestCase): execl = HandleExcel(filename, "invest") cases = execl.read_data() @data(*cases) def test_invest(self, case): """投资用例""" # 第一步:准备数据 url = conf.get("env", "url") + case["url"] method = case["method"] headers = eval(conf.get("env", "headers")) if case["interface"] != "login": # 如果不是登陆接口,添加一个token headers["Authorization"] = getattr(HandleSetup, "token") data = eval(replace_data(case["data"])) expected = eval(case["expected"]) row = case["case_id"] + 1 response = request(url, method, json=data, headers=headers) res = response.json() if case["interface"] == "login": # 如果是登陆接口,提取id和token member_id = str(jsonpath.jsonpath(res, "$..id")[0]) token = "Bearer" + " " + jsonpath.jsonpath(res, "$..token")[0] setattr(HandleSetup, "member_id", member_id) setattr(HandleSetup, "token", token) if case["interface"] == "add": # 如果是加标接口,提取id进行保存 loan_id = str(jsonpath.jsonpath(res, "$..id")[0]) setattr(HandleSetup, "loan_id", loan_id) # 断言 try: self.assertEqual(expected["code"], res["code"]) self.assertEqual(expected["msg"], res["meg"]) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过")
class TestWithdraw(unittest.TestCase): excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlsx"), "withdraw") cases = excel.read_data() @data(*cases) def test_withdraw(self, case): # 第一步准备用例参数 phone = conf.get("test_data", "phone") pwd = conf.get("test_data", "pwd") member_id, token = HandleSetup.handle_setup(phone, pwd) # 判断该用例是否需要数据库校验,获取提现之前的余额 start_money = TestWithdraw.handle_sql(self, case, member_id) data, res = HandleSetup.handle_case(case, member_id, token) row = case["case_id"] + 1 expected = eval(case["expected"]) # 第三步:断言预期结果和实际结果 try: if start_money != 0: self.assertEqual(expected["code"], res["code"]) self.assertEqual(expected["msg"], res["msg"]) end_money = TestWithdraw.handle_sql(self, case, member_id) withdraw_money = decimal.Decimal(str(data["amount"])) self.assertEqual(withdraw_money, start_money - end_money) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过") def handle_sql(self, case, member_id): if case["check_sql"]: sql = case["check_sql"].format(member_id) money = db.find_one(sql)["leave_amount"] return money return 0
class InterfaceTestCase(unittest.TestCase): excel = HandleExcel(filename, "interface") cases = excel.read_data() @data(*cases) def test_interface(self, case): login() newproject() # 1.准备用例数据 EnvData.name = random_intername() url = conf.get("env", "url") + case["url"] method = case["method"] data = eval(replace_data(case["data"])) expected = eval(replace_data(case["expected"])) headers = {"Authorization": getattr(EnvData, "token")} row = case["case_id"] + 1 if case["check_sql"]: sql = replace_data(case["check_sql"]) start_count = db.find_count(sql) res = (request(method=method, url=url, json=data, headers=headers)).json() # 第三步,断言预期结果和实际结果 try: assert_dict(expected, res) if case["check_sql"]: sql = replace_data(case["check_sql"]) end_count = db.find_count(sql) self.assertEqual(1, end_count - start_count) except AssertionError as e: log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过")
class TestAdd(unittest.TestCase): excel = HandleExcel(os.path.join(DATA_DIR, "apicases.xlsx"), "add") cases = excel.read_data() @data(*cases) def test_add(self, case): # 准备用例数据 phone = conf.get("test_data", "phone") pwd = conf.get("test_data", "pwd") member_id, token = HandleSetup.handle_setup(phone, pwd) start_count = TestAdd.handle_sql(self, case, member_id) data, res = HandleSetup.handle_case(case, member_id, token) row = case["case_id"] + 1 expected = eval(case["expected"]) # 断言,比对预期结果和实际结果 try: if start_count != 0: self.assertEqual(expected["code"], res["code"]) self.assertEqual(expected["msg"], res["msg"]) end_count = TestAdd.handle_sql(self, case, member_id) self.assertEqual(1, end_count - start_count) except AssertionError as e: log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过") def handle_sql(self, case, member_id): if case["check_sql"]: sql = case["check_sql"].replace("#member_id#", member_id) count = db.find_count(sql) return count return 0
class LoginTestCase(unittest.TestCase): excel = HandleExcel(filename, "login") cases = excel.read_data() @data(*cases) def test_login(self, case): # 第一步:准备用例数据 # 请求方法 method = case["method"] # 请求地址 url = case["url"] # 请求参数 data = eval(case["data"]) # 请求头 headers = eval(conf.get("env", "headers")) # 预期结果 expected = eval(case["expected"]) # 用例所在行 row = case["case_id"] + 1 # 第二步:发送请求获取实际结果 response = request(method=method, url=url, json=data, headers=headers) # 获取实际结果 res = response.json() # 第三步:断言 try: self.assertEqual(expected["code"], res["code"]) self.assertEqual(expected["msg"], res["msg"]) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过")
登陆 同一用户名和密码 充值 上一个登陆接口返回值里的 token,member_id 提现 登陆接口返回值里的 token,member_id 加标 """ import unittest from Common.handle_phone import get_new_phone from Common.handle_data import EnvData, replace_case_by_regular, clear_EnvData_attrs from Common.myddt import ddt, data from Common.handle_excel import HandleExcel from Common.handle_path import datas_dir from Common.handle_requests import send_requests from Common.handle_extract_data_from_response import extract_data_from_response he = HandleExcel(datas_dir + "\\api_cases.xlsx", "业务流") cases = he.read_all_datas() he.close_file() @ddt class TestUserBusiness(unittest.TestCase): @classmethod def setUpClass(cls) -> None: # 清理环境变量EnvData clear_EnvData_attrs() # 生成一个新的手机号码。设置为全局变量。 new_phone = get_new_phone() setattr(EnvData, "phone", new_phone)
class RegisterTestCase(unittest.TestCase): excel = HandleExcel(filename, "register") cases = excel.read_data() @data(*cases) def test_register(self, case): # 准备用例数据 method = case["method"] url = conf.get("env", "url") + case["url"] if case["interface"] == "register": # 注册接口,则随机生成一个用户名和email EnvData.name = self.random_username() EnvData.email = self.random_email() data = eval(replace_data(case["data"])) expected = eval(replace_data(case["expected"])) row = case["case_id"] + 1 # 第二步:发送请求获取实际结果 res = (requests.request(method=method, url=url, json=data)).json() # 第三步:断言 try: assert_dict(expected, res) # 判断是否需要进行sql校验 if case["check_sql"]: sql = replace_data(case["check_sql"]) res = db.find_count(sql) self.assertEqual(1, res) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过") @staticmethod def random_username(): """生成一个数据库里面未注册的用户名""" while True: name = "fls" for i in range(5): r = R(0, 9) name += str(r) # 数据库查询该用户名是否存在 sql = 'SELECT * FROM test.auth_user WHERE username="******"'.format( name) res = db.find_count(sql) # 如果不存在,则返回该用户名 if res == 0: return name @staticmethod def random_email(): """生成一个数据库里面未注册的邮箱地址""" while True: num = "" address = "" email = "@qq.com" for i in range(9): r = R(0, 9) num += str(r) address = num + email # 数据库查询该用户名是否存在 sql = 'SELECT * from test.auth_user WHERE email ="{}"'.format( address) res = db.find_count(sql) # 如果不存在,则返回该用户名 if res == 0: return address
class RegisterTestCase(unittest.TestCase): excel = HandleExcel(filename, "register") cases = excel.read_data() @data(*cases) def test_register(self, case): # 第一步:准备用例数据 # 请求方法 method = case["method"] # 请求地址 url = conf.get("env", "url") + "/member/register" # 判断是否有手机号需要替换 if "#phone#" in case["data"]: # 随机生成一个手机号码 phone = self.random_phone() # 将参数中的#phone#,替换成随机生成的手机号 case["data"] = case["data"].replace("#phone#", phone) # 请求参数 data = eval(case["data"]) # 请求头 headers = eval(conf.get("env", "headers")) # 预期结果 expected = eval(case["expected"]) # 用例所在行 row = case["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"]) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过") @classmethod def random_phone(cls): """生成一个数据库里面未注册的手机号码""" while True: phone = "155" for i in range(8): r = random.randint(0, 9) phone += str(r) # 数据库查询该手机号是否存在 sql = "SELECT * FROM futereloan.member WHERE mobile_phone={}".format( phone) res = db.find_count(sql) # 如果不存在,返回该手机号 if res == 0: return phone
def obtain_datas(self): case_path = os.path.join(test_datas_dir, self.table_name) case_datas = HandleExcel(case_path, self.sheet_names) case_all_datas = case_datas.read_test_cases_datas() case_datas.close_file() return case_all_datas