def test_login(self, data): http = HandleRequest() res = http.send(method="post", json=data, url=self.url, headers=self.header) assert data["Message"] == res.json()["Message"]
def test_login(self): yamlpath = os.path.join(DATA_DIR, "login.yml") data = HandleYaml(yamlpath).read_yaml() url = conf.get_str("env", "url") header = eval(conf.get_str("env", "header")) http = HandleRequest() res = http.send(method="post", json=data, url=url, headers=header) token = jsonpath.jsonpath(res.json, "$..token") yield token
class TestRegister(unittest.TestCase): excel = ReadExcel(data_file_path, "register") cases = excel.read_data() http = HandleRequest() @data(*cases) def test_register(self, case): # ------第一步:准备用例数据------------ # 拼接完整的接口地址 url = conf.get_str("env", "url") + case["url"] # 请求的方法 method = case["method"] # 请求参数 # 判断是否有有手机号码需要替换 if "#phone#" in case["data"]: # 生成一个手机号码 phone = self.random_phone() # 进行替换 case["data"] = case["data"].replace("#phone#", phone) data = eval(case["data"]) # 请求头 headers = eval(conf.get_str("env", "headers")) # 预期结果 expected = eval(case["expected"]) # 该用例在表单的中所在行 row = case["case_id"] + 1 # ------第二步:发送请求到接口,获取实际结果-------- response = self.http.send(url=url, method=method, json=data, headers=headers) result = response.json() # --------------------以下内容为扩展内容---------------- # 先判断是否注册成功,如果是注册成功 # self.phone = "注册成功的手机号码" # 没有注册成功就设置未None # --------------------------------------------------- # -------第三步:比对预期结果和实际结果----- try: self.assertEqual(expected["code"], result["code"]) self.assertEqual((expected["msg"]), result["msg"]) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}--->执行未通过".format(case["title"])) print("预取结果:{}".format(expected)) print("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}--->执行通过".format(case["title"])) @staticmethod def random_phone(): """生成随机的手机号码""" phone = "133" for i in range(8): phone += str(random.randint(0, 9)) return phone
def test_login(self, test_data_cases): # 第一步:准备用例数据 # 备注:列表、字典方式存储的,excel读取出来是字符串。数值类型,读取出来是数值类型的,字符串类型,读取出来是字符串类型。 # ①拼接完整的接口地址 url = conf.get_str("env", "url_ip") + test_data_cases["url"] # ②请求的方法 method = test_data_cases["method"] # ③请求参数 # 判断是否有手机号需要替换 if "#phone#" in test_data_cases["data"]: # 进行替换 test_data_cases["data"] = test_data_cases["data"].replace("#phone#", user) # 替换完后需要接收,不然没有实质的替换 if "#pwd#" in test_data_cases["data"]: # 进行替换 test_data_cases["data"] = test_data_cases["data"].replace("#pwd#", pwd) # 替换完后需要接收,不然没有实质的替换 data = eval(test_data_cases["data"]) # ④请求头 headers = eval(conf.get_str("env", "headers")) # ⑤预期结果 expected = eval(test_data_cases["expected"]) # ⑥该用例在表单中所在行 row = test_data_cases["case_id"] + 1 # 第二步:发送请求到接口,获取实际结果 response = HandleRequest().send(url=url, method=method, json=data, headers=headers) result = response.json() # 第三步:比对预期结果和实际结果 try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") # 可以把列(column)放在配置文件里面 # 记录没有通过的日志 my_log.info("用例:{}------>执行未通过".format(test_data_cases["title"])) # 在没有通过的时候,使用print会打印在测试报告中 print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) # 在没有通过的时候,将print输出到日志里面 my_log.info("预期结果:{}".format(expected)) my_log.info("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") # 可以把列(column)放在配置文件里面 # 记录通过的日志 my_log.info("用例:{}------>执行通过".format(test_data_cases["title"]))
class TestInvest(unittest.TestCase): excel = ReadExcel(data_file_path, "invest") cases = excel.read_data() http = HandleRequest() @data(*cases) def test_invest(self,case): #----------第一步:准备用例数据------------ url = conf.get_str("env", "url") + case["url"] #请求参数 case["data"] = replace_data(case["data"]) data = eval(case["data"]) #请求方法 method = case["method"] #请求头 headers = eval(conf.get_str("env", "headers")) if case["interface"] != "login": headers["Authorization"] = getattr(TestData, "token_data") #添加请求头中的token #预期结果 expected = eval(case["expected"]) #用例所在行 row = case["case_id"] + 1 #------------第二步:发送请求------------- res = self.http.send(url=url, json=data, method=method, headers=headers) result = res.json() if case["interface"] == "login": #提取用户id和token token_type = jsonpath.jsonpath(result, "$..token_type")[0] token = jsonpath.jsonpath(result, "$..token")[0] token_data = token_type + " " + token id = jsonpath.jsonpath(result, "$..id")[0] setattr(TestData, "token_data", token_data) setattr(TestData, "member_id", str(id)) elif case["interface"] == "add": #提取项目id loan_id = jsonpath.jsonpath(result, "$..id")[0] setattr(TestData, "loan_id", str(loan_id)) #第三步:对比结果(断言 try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) #判断是否需要sql校验 except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}--->执行未通过".format(case["title"])) print("预期结果: {}".format(expected)) print("实际结果: {}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例: {}--->执行通过".format(case["title"]))
class TestInvest(unittest.TestCase): excel = ReadExcel(file_path, "invest") cases = excel.read_data() http = HandleRequest() @data(*cases) def test_invest(self, case): # 第一步:准备用例数据 # 获取url url = conf.get_str("env", "url") + case["url"] # 获取数据 case["data"] = replace_data(case["data"]) data = eval(case["data"]) # 请求头 headers = eval(conf.get_str("env", "headers")) if case["interface"] != "login": headers["Authorization"] = getattr(TestData, "token_data") # 预期结果 expected = eval(case["expected"]) # 请求方法 method = case["method"] # 用例所在的行 row = case["case_id"] + 1 # 第二步:发送请求 res = self.http.send(url=url, method=method, json=data, headers=headers) json_data = res.json() if case["interface"] == "login": # 如果是登录的用例,提取对应的token,和用户id,保存为TestData这个类的类属性,用来给后面的用例替换 token_type = jsonpath.jsonpath(json_data, "$..token_type")[0] token = jsonpath.jsonpath(json_data, "$..token")[0] token_data = token_type + " " + token setattr(TestData, "token_data", token_data) id = jsonpath.jsonpath(json_data, "$..id")[0] setattr(TestData, "member_id", str(id)) elif case["interface"] == "add": # 如果是添加项目,则提取项目id id = jsonpath.jsonpath(json_data, "$..id")[0] setattr(TestData, "loan_id", str(id)) # 第三步:断言 try: self.assertEqual(expected["code"], json_data["code"]) self.assertEqual(expected["msg"], json_data["msg"]) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}--->执行未通过".format(case["title"])) print("预取结果:{}".format(expected)) print("实际结果:{}".format(json_data)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}--->执行通过".format(case["title"]))
class TestWithdraw(unittest.TestCase): excel = ReadExcel(data_file_path, "withdraw") cases = excel.read_data() http = HandleRequest() db = HandleDB() @data(*cases) def test_withdraw(self, case): # 第一步:准备测试用例数据 url = conf.get_str("env", "url") + case["url"] data = eval(replace_data(case["data"])) method = case["method"] headers = eval(conf.get_str("env", "headers")) if case["interface"] != "login": headers["Authorization"] = getattr(TestData, "token_data") expected = eval(case["expected"]) row = case["case_id"] + 1 if case["check_sql"]: sql = replace_data(case["check_sql"]) start_money = self.db.get_one(sql)[0] res = self.http.send(url=url, method=method, json=data, headers=headers) result = res.json() if case["interface"] == "login": id = jsonpath.jsonpath(result, "$..id")[0] setattr(TestData, "member_id", str(id)) token_type = jsonpath.jsonpath(result, "$..token_type")[0] token = jsonpath.jsonpath(result, "$..token")[0] token_data = token_type + " " + token setattr(TestData, "token", token) try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) if case["check_sql"]: sql = replace_data(case["check_sql"]) end_money = self.db.get_one(sql)[0] withdraw_money = decimal.Decimal(str(data["amount"])) my_log.info("取现之前金额为:{}\n取现金额为:{}\n取现之后金额为:{}".format( start_money, withdraw_money, end_money)) self.assertEqual(withdraw_money, start_money - end_money) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}---->执行未通过".format(case["title"])) print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}---->执行未通过".format(case["title"]))
class TestAdd(unittest.TestCase): excel = ReadExcel(file_path, "add") cases = excel.read_data() http = HandleRequest() db = HandleDB() @data(*cases) def test_add(self, case): # 第一步:准备用例数据 url = conf.get_str("env", "url") + case["url"] case["data"] = replace_data(case["data"]) data = eval(case["data"]) headers = eval(conf.get_str("env", "headers")) if case["interface"] != "login": headers["Authorization"] = getattr(TestData, "token_data") expected = eval(case["expected"]) method = case["method"] row = case["case_id"] + 1 # 第二步:发送请求 if case["check_sql"]: sql = replace_data(case["check_sql"]) s_loan_num = self.db.count(sql) res = self.http.send(url=url, method=method, json=data, headers=headers) result = res.json() if case["interface"] == "login": token_type = jsonpath.jsonpath(result, "$..token_type")[0] token = jsonpath.jsonpath(result, "$..token")[0] token_data = token_type + " " + token setattr(TestData, "token_data", token_data) id = jsonpath.jsonpath(result, "$..id")[0] setattr(TestData, "admin_member_id", str(id)) # 第三步:比对结果(断言) try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) if case["check_sql"]: sql = replace_data(case["check_sql"]) end_loan_num = self.db.count(sql) self.assertEqual(end_loan_num - s_loan_num, 1) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}---->执行未通过".format(case["title"])) print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}---->执行未通过".format(case["title"]))
class TestLogin(unittest.TestCase): excel = ReadExcel(data_file_path, "login") cases = excel.read_data() http = HandleRequest() @data(*cases) def test_login(self, case): # ------第一步:准备用例数据------------ # 拼接完整的接口地址 url = conf.get_str("env", "url") + case["url"] # 请求的方法 method = case["method"] # 请求参数 data = eval(case["data"]) # 请求头 headers = eval(conf.get_str("env", "headers")) # 预期结果 expected = eval(case["expected"]) # 该用例在表单的中所在行 row = case["case_id"] + 1 # ------第二步:发送请求到接口,获取实际结果-------- response = self.http.send(url=url, method=method, json=data, headers=headers) result = response.json() # -------第三步:比对预期结果和实际结果----- try: # 业务码断言 self.assertEqual(expected["code"], result["code"]) # msg断言 self.assertEqual((expected["msg"]), result["msg"]) except AssertionError as e: # excel中回写结果 self.excel.write_data(row=row, column=8, value="未通过") # 记录apicases.xlsx日志 my_log.info("用例:{}--->执行未通过".format(case["title"])) my_log.error(e) # 报告中打印预期和实际结果 print("预取结果:{}".format(expected)) print("实际结果:{}".format(result)) raise e else: # excel中回写结果 self.excel.write_data(row=row, column=8, value="通过") # 记录日志 my_log.info("用例:{}--->执行通过".format(case["title"]))
class TestAudit(unittest.TestCase): excel = ReadExcel(file_path, "audit") cases = excel.read_data() http = HandleRequest() db = HandleDB() @classmethod def setUpClass(cls): # -----------执行用例之前先进行登录--> # 登录,获取用户的id以及鉴权需要用到的token url = conf.get_str("env", "url") + "/member/login" data = { "mobile_phone": conf.get_str("test_data", 'admin_phone'), "pwd": conf.get_str("test_data", "admin_pwd") } headers = eval(conf.get_str("env", "headers")) response = cls.http.send(url=url, method="post", json=data, headers=headers) json_data = response.json() # -------登录之后,从响应结果中提取用户id和token------------- # 1、提取用户id member_id = jsonpath.jsonpath(json_data, "$..id")[0] setattr(TestData, "member_id", str(member_id)) # 2、提取token token_type = jsonpath.jsonpath(json_data, "$..token_type")[0] token = jsonpath.jsonpath(json_data, "$..token")[0] setattr(TestData, "token", token) token_data = token_type + " " + token setattr(TestData, "token_data", token_data) def setUp(self): # ---------每个审核的用例执行之前都加一个项目,将项目id保存起来---------- url = conf.get_str("env", "url") + "/loan/add" data = {"member_id": getattr(TestData, "member_id"), "title": "借钱实现财富自由", "amount": 2000, "loan_rate": 12.0, "loan_term": 3, "loan_date_type": 1, "bidding_days": 5} # 获取sign和时间戳 sign_data = HandleSign.generate_sign(getattr(TestData, "token")) # 将sign加入到请求参数中 data.update(sign_data) headers = eval(conf.get_str("env", "headers")) headers["Authorization"] = getattr(TestData, "token_data") # 发送请求加标 response = self.http.send(url=url, method="post", json=data, headers=headers) json_data = response.json() # 1、提取标id loan_id = jsonpath.jsonpath(json_data, "$..id")[0] # 2、保存为TestDate的属性 setattr(TestData, "loan_id", str(loan_id)) @data(*cases) def test_audit(self, case): # 拼接完整的接口地址 url = conf.get_str("env", "url") + case["url"] # 请求的方法 method = case["method"] # 请求参数 # 替换用例参数 case["data.txt"] = replace_data(case["data.txt"]) data = eval(case["data.txt"]) # 获取sign和时间戳 sign_data = HandleSign.generate_sign(getattr(TestData, "token")) # 将sign加入到请求参数中 data.update(sign_data) # 请求头 headers = eval(conf.get_str("env", "headers")) headers["Authorization"] = getattr(TestData, "token_data") # 预期结果 expected = eval(case["expected"]) # 该用例在表单的中所在行 row = case["case_id"] + 1 # ------第二步:发送请求到接口,获取实际结果-------- response = self.http.send(url=url, method=method, json=data, headers=headers) result = response.json() # 如果审核通过的项目返回ok,说明该项目已审核 if case["title"] == "审核通过" and result["msg"] == "OK": pass_loan_id = getattr(TestData, "loan_id") # 将该项目的id保存起来 setattr(TestData, "pass_loan_id", pass_loan_id) # -------第三步:比对预期结果和实际结果----- try: self.assertEqual(expected["code"], result["code"]) self.assertEqual((expected["msg"]), result["msg"]) if case["check_sql"]: sql = replace_data(case["check_sql"]) # 获取这个标的用户id status = self.db.get_one(sql)[0] # 进行断言 self.assertEqual(expected["status"], status) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}--->执行未通过".format(case["title"])) print("预取结果:{}".format(expected)) print("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}--->执行通过".format(case["title"]))
class TestAdd(unittest.TestCase): excel = ReadExcel(data_file_path, "add") # 读取数据 test_data = excel.read_excel() # # 创建http对象 http = HandleRequest() #创建db对象 db = HandleDB() @data(*test_data) def test_add(self, test_data_cases): # 第一步:准备用例数据 # (1)获取url url = conf.get_str("env", "url_ip") + test_data_cases["url"] # (2)获取数据 test_data_cases["data"] = replace_data( test_data_cases["data"]) # 调用replace_data方法 # (3)数据转换 data = eval(test_data_cases["data"]) # (4)预期结果 expected = eval(test_data_cases["expected"]) # excel是字典类型,需要转换一下 # (5)请求方法 method = test_data_cases["method"] # (6)用例所在的行 row = test_data_cases["case_id"] + 1 # (7)请求头 headers = eval(conf.get_str("env", "headers")) if test_data_cases["interface"] != "login": # 如果不是token,需要添加请求头 headers["Authorization"] = getattr(TestData, "token_data") # 调用保存在临时变量的类中 #先判断check_sql是否有数据 if test_data_cases["check_sql"]: sql = replace_data( test_data_cases["check_sql"]) #先获取check_sql数据,在进行替换 #执行sql语句 s_loan_num = self.db.count(sql) #得到加标前项目的条数 # 第二步:发送请求到接口,获取实际结果 res = self.http.send(url=url, method=method, json=data, headers=headers) result = res.json() # 判断是否是登录用例,是的话,则提取token if test_data_cases["interface"] == "login": # 如果是登录的用例,提取对应的token token_type = jsonpath.jsonpath(result, "$..token_type")[0] token = jsonpath.jsonpath(result, "$..token")[0] token_data = token_type + " " + token # 通过setattr方法保存到TestData类里面 setattr(TestData, "token_data", token_data) # 提取member_id admin_member_id = jsonpath.jsonpath(result, "$..id")[0] # 通过setattr方法保存到TestData类里面 setattr(TestData, "admin_member_id", str(admin_member_id)) # 存类属性的时候,需要与excel中的参数名一致 # 第三步:比对预期结果和实际结果 try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) # 加标后,项目的条数 # 先判断check_sql是否有数据 if test_data_cases["check_sql"]: sql = replace_data( test_data_cases["check_sql"]) # 先获取check_sql数据,在进行替换 # 执行sql语句 end_loan_num = self.db.count(sql) # 得到加标前项目的条数 self.assertEqual(end_loan_num - s_loan_num, 1) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") # 可以把列(column)放在配置文件里面 # 记录没有通过的日志 my_log.info("用例:{}------>执行未通过".format(test_data_cases["title"])) # 在没有通过的时候,使用print会打印在测试报告中 print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) # 在没有通过的时候,将print输出到日志里面 my_log.info("预期结果:{}".format(expected)) my_log.info("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") # 可以把列(column)放在配置文件里面 # 记录通过的日志 my_log.info("用例:{}------>执行通过".format(test_data_cases["title"]))
class TestAdd(unittest.TestCase): excel = ReadExcel(file_path, "add") cases = excel.read_data() http = HandleRequest() db = HandleDB() @data(*cases) def test_add(self, case): #--------------第一步:准备用例数据----------------- #1.获取url url = conf.get_str("env", "url") + case["url"] #2.获取数据 case["data"] = replace_data(case["data"]) data = eval(case["data"]) #3.获取请求头 headers = eval(conf.get_str("env", "headers")) if case["interface"] != "login": headers["Authorization"] = getattr(TestData, "token_data") #预期结果 expected = eval(case["expected"]) #请求方法 method = case["method"] print(method, type(method)) #用例所在行 row = case["case_id"] + 1 #----------------第二步:发送请求--------------------- if case["check_sql"]: sql = replace_data(case["check_sql"]) s_loan_num = self.db.count(sql) res = self.http.send(url=url, method=method, json=data, headers=headers) json_data = res.json() if case["interface"] == "login": # 如果是登录的用例,提取对应的token,和用户id,保存为TestData这个类的类属性,用来给后面的用例替换 token_type = jsonpath.jsonpath(json_data, "$..token_type")[0] token = jsonpath.jsonpath(json_data, "$..token")[0] token_data = token_type + " " + token setattr(TestData, "token_data", token_data) id = jsonpath.jsonpath(json_data, "$..id")[0] setattr(TestData, "admin_member_id", str(id)) '''补充知识: setattr() 函数对应函数 getattr(),用于设置属性值,该属性不一定是存在的。 setattr(object, name, value),有就用新的属性值替换掉原来的,没有就自动创建一个属性值 >>>class A(object): >>> bar = 1 >>> a = A() >>> getattr(a, 'bar') # 获取属性 bar 值 1 >>> setattr(a, 'bar', 5) # 设置属性 bar 值 >>> a.bar 5 ''' #----------------第三步:断言------------------------------- try: self.assertEqual(expected["code"], json_data["code"]) self.assertEqual(expected["msg"], json_data["msg"]) # 判断是否需要sql校验 if case["check_sql"]: sql = replace_data(case["check_sql"]) end_loan_num = self.db.count(sql) self.assertEqual(end_loan_num - s_loan_num, 1) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}--->执行未通过".format(case["title"])) print("预取结果:{}".format(expected)) print("实际结果:{}".format(json_data)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}--->执行通过".format(case["title"]))
class TestRegister(unittest.TestCase): excel = ReadExcel(data_file_path,"register") cases = excel.read_data() http = HandleRequest() db = HandleDB() @data(*cases) def test_register(self,case): # 第一步:准备测试用例数据 # 拼接完整的接口地址 url = conf.get_str("env", "url") + case["url"] # 请求方法 method = case["method"] # 请求参数 # 判断是否有手机号码需要替换 if "#phone#" in case["data"]: while True: phone = self.random_phone() sql = "SELECT * FROM futureloan.member where mobile_phone={}".format(phone) count = self.db.count(sql) if count != 1: break case["data"] = case["data"].replace("#phone#",phone) data = eval(case["data"]) # 请求头 headers = eval(conf.get_str("env", "headers")) # 预期结果 expected = eval(case["expected"]) # 该用例在该表单中所在行 row = case["case_id"] + 1 # 第二步:发送请求到接口,获取实际结果 response = self.http.send(url=url, method=method, json=data, headers=headers) result = response.json() # 第三步:比对预期结果和实际结果 try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) if result["msg"] == "OK": # 去数据库查询当前注册的账号是否存在 sql = "SELECT * FROM futureloan.member where mobile_phone={}".format(phone) # 获取数据库中有没有该用户的信息 count = self.db.count(sql) self.assertEqual(1,count) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}---->执行未通过".format(case["title"])) print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}---->执行未通过".format(case["title"])) @staticmethod def random_phone(): phone = "133" for i in range(8): phone += str(random.randint(0, 9)) return phone @classmethod def tearDownClass(cls): # 关闭数据的连接和游标对象 cls.db.close()
class TestRecharge(unittest.TestCase): excel = ReadExcel(data_file_path, "recharge") cases = excel.read_data() http = HandleRequest() @classmethod def setUpClass(cls): # cls : 表示没被实例化的类本身 #创建操作数据库的对象 cls.db = HandleDB() # 登录,获取用户的id以及鉴权需要用到的token url = conf.get_str("env", "url") + "/member/login" data = { "mobile_phone": conf.get_str("test_data", "user"), "pwd": conf.get_str("test_data", "pwd") } headers = eval(conf.get_str("env", "headers")) response = cls.http.send(url=url, method="post", json=data, headers=headers) json_data = response.json() # -------登录之后,从响应结果中提取用户id和token------------- #1、提取用户id cls.member_id = jsonpath.jsonpath(json_data, "$..id")[0] #2、提取token token_type = jsonpath.jsonpath(json_data, "$..token_type")[0] token = jsonpath.jsonpath(json_data, "$..token")[0] cls.token_data = token_type + " " + token @data(*cases) def test_recharge(self, case): # ------第一步:准备用例数据------------ # 拼接完整的接口地址 url = conf.get_str("env", "url") + case["url"] # 请求的方法 method = case["method"] #请求参数 #判断是否有用户id需要替换 if "#member_id#" in case["data"]: #进行替换 case["data"] = case["data"].replace("#member_id#", str(self.member_id)) data = eval(case["data"]) #请求头 headers = eval(conf.get_str("env", "headers")) headers["Authorization"] = self.token_data #预期结果 expected = eval(case["expected"]) #改用例在表单中的所在行 row = case["case_id"] + 1 # ------第二步:发送请求到接口,获取实际结果-------- #1.首先进行数据库的校验 if case["check_sql"]: sql = case["check_sql"].format(conf.get_str("test_data", 'user')) #获取充值之前的余额 start_money = self.db.get_one(sql)[0] response = self.http.send(url=url, method=method, json=data, headers=headers) result = response.json() # -------第三步:比对预期结果和实际结果----- try: self.assertEqual(expected["code"], result["code"]) self.assertEqual((expected["msg"]), result["msg"]) if case["check_sql"]: sql = case["check_sql"].format( conf.get_str("test_data", 'user')) #获取充值之前的余额 end_money = self.db.get_one(sql)[0] recharge_money = decimal.Decimal(str( data["amount"])) #decimal只支持整数,如果有小数的话先转化成str就会自动保存1位小数 my_log.info("充值之前金额为{}\n,充值金额为:{}\n,充值之后金额为{},".format( start_money, recharge_money, end_money)) # 进行断言 self.assertEqual(recharge_money, end_money - start_money) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}---->执行通过".format(case["title"])) print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}--->执行通过".format(case["title"]))
def test_recharge(self, test_data_cases): # 第一步:准备用例数据 # 备注:列表、字典方式存储的,excel读取出来是字符串。数值类型,读取出来是数值类型的,字符串类型,读取出来是字符串类型。 # ①拼接完整的接口地址 url = conf.get_str("env", "url_ip") + test_data_cases["url"] # ②请求的方法 method = test_data_cases["method"] # ③请求参数 # 判断是否有用户id需要替换 # if "#member_id#" in test_data_cases["data"]: # # 进行替换 # test_data_cases["data"] = test_data_cases["data"].replace("#member_id#", # self.member_id) # 替换完后需要接收,不然没有实质的替换 test_data_cases["data"] = replace_data( test_data_cases["data"]) #调用replace_data方法 data = eval(test_data_cases["data"]) # ④请求头 headers = eval(conf.get_str("env", "headers")) # 添加鉴权 # headers["Authorization"] = self.token_data # 从TestData类里面获取token_data属性:两种方法 # headers["Authorization"] = TestData.token_data#方法一:直接从TestData类里面获取token_data属性 headers["Authorization"] = getattr( TestData, "token_data") # 方法二:用getattr获取TestData类里面获取token_data属性 # ⑤预期结果 expected = eval(test_data_cases["expected"]) # ⑥该用例在表单中所在行 row = test_data_cases["case_id"] + 1 # 第二步:发送请求到接口,获取实际结果 if test_data_cases[ "check_sql"]: # 先判断用例里面check_sql字段是否有数据,如果有数据,说明需要进行数据库校验 sql = test_data_cases["check_sql"].format(user) # 获取充值之前的余额 start_money = self.db.get_one(sql)[0] response = HandleRequest().send(url=url, method=method, json=data, headers=headers) result = response.json() # 第三步:比对预期结果和实际结果 try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) # 充值后,进行数据库校验 if test_data_cases["check_sql"]: sql = test_data_cases["check_sql"].format(user) # 获取充值之后的余额 end_money = self.db.get_one(sql)[0] # 获取请求参数里面的充值金额 recharge_money = decimal.Decimal(str(data["amount"])) my_log.info("充值之前金额为:{}\n,充值金额为:{}\n,充值之后金额为:{}\n".format( start_money, recharge_money, end_money)) # 进行断言 self.assertEqual(recharge_money, end_money - start_money) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") # 可以把列(column)放在配置文件里面 # 记录没有通过的日志 my_log.info("用例:{}------>执行未通过".format(test_data_cases["title"])) # 在没有通过的时候,使用print会打印在测试报告中 print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) # 在没有通过的时候,将print输出到日志里面 my_log.info("预期结果:{}".format(expected)) my_log.info("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") # 可以把列(column)放在配置文件里面 # 记录通过的日志 my_log.info("用例:{}------>执行通过".format(test_data_cases["title"]))
def test_register(self, test_data_cases): # 第一步:准备用例数据 # 备注:列表、字典方式存储的,excel读取出来是字符串。数值类型,读取出来是数值类型的,字符串类型,读取出来是字符串类型。 # ①拼接完整的接口地址 url = conf.get_str("env", "url_ip") + test_data_cases["url"] # ②请求的方法 method = test_data_cases["method"] # ③请求参数 #判断是否有手机号需要替换 if "#phone#" in test_data_cases["data"]: #生成一个手机号码 phone = self.random_phone() #进行替换 test_data_cases["data"] = test_data_cases["data"].replace( "#phone#", phone) # 替换完后需要接收,不然没有实质的替换 data = eval(test_data_cases["data"]) # ④请求头 headers = eval(conf.get_str("env", "headers")) # ⑤预期结果 expected = eval(test_data_cases["expected"]) # ⑥该用例在表单中所在行 row = test_data_cases["case_id"] + 1 # 第二步:发送请求到接口,获取实际结果 response = HandleRequest().send(url=url, method=method, json=data, headers=headers) result = response.json() # 第三步:比对预期结果和实际结果 try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) if result["msg"] == "OK": #如果注册成功,去数据库查询当前注册的账号是否存在 sql = "select * from futureloan.member where mobile_phone={}".format( phone) #获取数据库中有没有该用户的信息:通过db对象,然后调用count方法 count = self.db.count(sql) #查找的结果 #数据库中返回的数据做断言,判断是否有一条数据 self.assertEqual(1, count) print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") # 可以把列(column)放在配置文件里面 # 记录没有通过的日志 my_log.info("用例:{}------>执行未通过".format(test_data_cases["title"])) # 在没有通过的时候,使用print会打印在测试报告中 print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) # 在没有通过的时候,将print输出到日志里面 my_log.info("预期结果:{}".format(expected)) my_log.info("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") # 可以把列(column)放在配置文件里面 # 记录通过的日志 my_log.info("用例:{}------>执行通过".format(test_data_cases["title"]))
class TestWithdraw(unittest.TestCase): excel = ReadExcel(data_file_path, "withdraw") cases = excel.read_data() http = HandleRequest() db = HandleDB() @classmethod def setUpClass(cls): # 获取登录用户手机号和密码 # cls.mobile_phone = conf.get_str("test_data", 'user') # cls.pwd = conf.get_str("test_data", "pwd") pass @data(*cases) def test_withdraw(self, case): # ------第一步:准备用例数据------------ # 拼接完整的接口地址 url = conf.get_str("env", "url") + case["url"] # 请求的方法 method = case["method"] # 请求参数 # 判断是否有用户id需要替换 case["data"] = replace_data(case["data"]) data = eval(case["data"]) # 请求头 headers = eval(conf.get_str("env", "headers")) if case["interface"] != "login": headers["Authorization"] = getattr(TestData, "token_data") # 预期结果 expected = eval(case["expected"]) # 该用例在表单的中所在行 row = case["case_id"] + 1 # ------第二步:发送请求到接口,获取实际结果-------- # 判断是否需要sql校验 if case["check_sql"]: sql = case["check_sql"].format(conf.get_str("test_data", 'user')) # 获取取充值之前的余额 start_money = self.db.get_one(sql)[0] # 发送请求,获取结果 response = self.http.send(url=url, method=method, json=data, headers=headers) result = response.json() if case["interface"] == "login": # -------如果是登录接口,从响应结果中提取用户id和token------------- # 1、用户id member_id = jsonpath.jsonpath(result, "$..id")[0] setattr(TestData, "member_id", str(member_id)) # 2、提取token token_type = jsonpath.jsonpath(result, "$..token_type")[0] token = jsonpath.jsonpath(result, "$..token")[0] token_data = token_type + " " + token # 下面这行代码和上面哪行代码是一个意思,都是将token设为类属性 setattr(TestData, "token_data", token_data) # -------第三步:比对预期结果和实际结果----- try: self.assertEqual(expected["code"], result["code"]) self.assertEqual((expected["msg"]), result["msg"]) # 判断是否需要数据库校验 if case["check_sql"]: sql = case["check_sql"].format( conf.get_str("test_data", 'user')) # 获取取充值之前的余额 end_money = self.db.get_one(sql)[0] recharge_money = decimal.Decimal(str(data["amount"])) my_log.info("取现之前金额为{}\n,取现金额为:{}\n,取现之后金额为{},".format( start_money, recharge_money, end_money)) # 进行断言(开始的金额减去结束的金额) self.assertEqual(recharge_money, start_money - end_money) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}--->执行未通过".format(case["title"])) print("预取结果:{}".format(expected)) print("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}--->执行通过".format(case["title"]))
class TestRecharge(unittest.TestCase): excel = ReadExcel(data_file_path,"recharge") cases = excel.read_data() http = HandleRequest() db = HandleDB() @classmethod def setUpClass(cls): # 登录,获取用户id和鉴权需要用到的token url = conf.get_str("env", "url") + "/member/login" data = { "mobile_phone":conf.get_str("test_data","user"), "pwd":conf.get_str("test_data","pwd") } headers = eval(conf.get_str("env","headers")) response = cls.http.send(url=url,method="post",json=data,headers=headers) json_data = response.json() # 登录之后从响应结果中提取用户id和token # 提取用户id cls.member_id = jsonpath.jsonpath(json_data,"$..id")[0] # 提取token token_type = jsonpath.jsonpath(json_data,"$..token_type")[0] token = jsonpath.jsonpath(json_data,"$..token")[0] cls.token_data = token_type + " " + token cls.leave_amount = jsonpath.jsonpath(json_data,"$..leave_amount")[0] @data(*cases) def test_recharge(self,case): # 第一步:准备测试用例数据 # 拼接完整的接口地址 url = conf.get_str("env", "url") + case["url"] # 请求方法 method = case["method"] # 请求参数 # 判断是否有用户id需要替换 if "#member_id#" in case["data"]: case["data"] = case["data"].replace("#member_id#",str(self.member_id)) data = eval(case["data"]) # 请求头 headers = eval(conf.get_str("env", "headers")) headers["Authorization"] = self.token_data # 预期结果 expected = eval(case["expected"]) # 该用例在该表单中所在行 row = case["case_id"] + 1 # 第二步:发送请求到接口,获取实际结果 response = self.http.send(url=url, method=method, json=data, headers=headers) result = response.json() # 第三步:比对预期结果和实际结果 try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) if result["msg"] == "OK": sql = "select leave_amount from futureloan.member where id={}".format(self.member_id) # 获取数据库中有没有该用户的信息 data = self.db.get_one(sql) print(data) # self.assertEqual(1, count) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}---->执行未通过".format(case["title"])) print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}---->执行未通过".format(case["title"]))
class TestInvest(unittest.TestCase): excel = ReadExcel(data_file_path, "invest") cases = excel.read_data() http = HandleRequest() db = HandleDB() @data(*cases) def test_invest(self, case): # 第一步:准备用例数据 # 获取URL url = conf.get_str("env", "url") + case["url"] # 获取请求的方法 method = case["method"] # 获取请求的参数 # 替换用例参数 case["data"] = replace_data(case["data"]) data = eval(case["data"]) # 获取请求头 headers = eval(conf.get_str("env", "headers")) if case["interface"] != "login": headers["Authorization"] = getattr(TestData, "token_data") # 添加请求头中的token # 预期结果 expected = eval(case["expected"]) # 获取所在行 row = case["case_id"] + 1 # ------第二步:发送请求到接口,获取实际结果-------- response = self.http.send(url=url, method=method, headers=headers, json=data) result = response.json() if case["interface"] == "login": # 提取用户id和token id = jsonpath.jsonpath(result, "$..id")[0] token_type = jsonpath.jsonpath(result, "$..token_type")[0] token = jsonpath.jsonpath(result, "$..token")[0] token_data = token_type + " " + token setattr(TestData, "token_data", token_data) setattr(TestData, "member_id", str(id)) elif case["interface"] == "add": # 提取项目id loan_id = jsonpath.jsonpath(result, "$..id")[0] setattr(TestData, "loan_id", str(loan_id)) # -------第三步:比对预期结果和实际结果----- try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) # 判断是否需要sql校验 if case["check_sql"]: sql = replace_data(case["check_sql"]) count = self.db.count(sql)[0] # 判断数据库表中是否有一条新数据 self.assertEqual(1, count) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}--->执行未通过".format(case["title"])) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info(my_log.info("用例:{}--->执行通过".format(case["title"])))
class TestRecharge(unittest.TestCase): excel = ReadExcel(data_file_path, "recharge") cases = excel.read_data() http = HandleRequest() db = HandleDB() @classmethod def setUpClass(cls): # # 创建操作数据库的对象 # cls.db = HandleDB() # 登录,获取用户的id以及鉴权需要用到的token url = conf.get_str("env", "url") + "/member/login" data = { "mobile_phone": conf.get_str("test_data", 'user'), "pwd": conf.get_str("test_data", "pwd") } headers = eval(conf.get_str("env", "headers")) response = cls.http.send(url=url, method="post", json=data, headers=headers) json_data = response.json() # -------登录之后,从响应结果中提取用户id和token------------- # 1、用户id member_id = jsonpath.jsonpath(json_data, "$..id")[0] setattr(TestData, "member_id", str(member_id)) # 2、提取token token_type = jsonpath.jsonpath(json_data, "$..token_type")[0] token = jsonpath.jsonpath(json_data, "$..token")[0] token_data = token_type + " " + token setattr(TestData, "token_data", token_data) @data(*cases) def test_recharge(self, case): # ------第一步:准备用例数据------------ # 拼接完整的接口地址 url = conf.get_str("env", "url") + case["url"] # 请求的方法 method = case["method"] # 请求参数 # 替换用例参数 case["data"] = replace_data(case["data"]) data = eval(case["data"]) # 请求头 headers = eval(conf.get_str("env", "headers")) headers["Authorization"] = getattr(TestData, "token_data") # 预期结果 expected = eval(case["expected"]) # 该用例在表单的中所在行 row = case["case_id"] + 1 # ------第二步:发送请求到接口,获取实际结果-------- if case["check_sql"]: sql = case["check_sql"].format(conf.get_str("test_data", "user")) # 获取充值之前的余额 start_money = self.db.get_one(sql)[0] response = self.http.send(url=url, method=method, json=data, headers=headers) result = response.json() # -------第三步:比对预期结果和实际结果----- try: self.assertEqual(expected["code"], result["code"]) self.assertEqual((expected["msg"]), result["msg"]) if case["check_sql"]: sql = case["check_sql"].format( conf.get_str("test_data", "user")) # 获取充值之后的余额 end_money = self.db.get_one(sql)[0] # 充值的金额 recharge_money = decimal.Decimal(str(data["amount"])) my_log.info("充值之前金额为{}\n,充值金额:{}\n,充值之后金额为{},".format( start_money, recharge_money, end_money)) # 数据库中返回的数据做断言,判断是否有一条数据 self.assertEqual(recharge_money, end_money - start_money) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}--->执行未通过".format(case["title"])) print("预取结果:{}".format(expected)) print("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}--->执行通过".format(case["title"])) @classmethod def tearDownClass(cls): # 关闭数据的连接和游标对象 cls.db.close()
class TestRegister(unittest.TestCase): excel = ReadExcel(data_file_path, "register") cases = excel.read_data() http = HandleRequest() db = HandleDB() @data(*cases) def test_register(self, case): # ------第一步:准备用例数据------------ # 拼接完整的接口地址 url = conf.get_str("env", "url") + case["url"] # 请求的方法 method = case["method"] # 请求参数 # 判断是否有有手机号码需要替换 if "#phone#" in case["data"]: # 生成一个手机号码 phone = self.random_phone() print(type(phone)) # 进行替换 case["data"] = case["data"].replace("#phone#", phone) data = eval(case["data"]) # 请求头 headers = eval(conf.get_str("env", "headers")) # 预期结果 expected = eval(case["expected"]) # 该用例在表单的中所在行 row = case["case_id"] + 1 # ------第二步:发送请求到接口,获取实际结果------- response = self.http.send(url=url, method=method, json=data, headers=headers) result = response.json() # --------------------以下内容为扩展内容---------------- # 先判断是否注册成功,如果是注册成功 # self.phone = "注册成功的手机号码" # 没有注册成功就设置未None # --------------------------------------------------- # -------第三步:比对预期结果和实际结果----- try: self.assertEqual(expected["code"], result["code"]) self.assertEqual((expected["msg"]), result["msg"]) if result["msg"] == "OK": # 去数据库查询当前注册的账号是否存在 sql = "SELECT * FROM futureloan.member where mobile_phone={}".format(phone) # 获取数据库中没有没有该用户的信息 count = self.db.count(sql) # 数据库中返回的数据做断言,判断是否有一条数据 self.assertEqual(1, count) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}--->执行未通过".format(case["title"])) print("预取结果:{}".format(expected)) print("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}--->执行通过".format(case["title"])) @staticmethod def random_phone(): """生成随机的手机号码""" phone = "133" for i in range(8): phone += str(random.randint(0, 9)) return phone @classmethod def tearDownClass(cls): # 关闭数据的连接和游标对象 cls.db.close()
""" ============================ Author:柠檬班-木森 Time:2019/12/18 E-mail:[email protected] Company:湖南零檬信息技术有限公司 ============================ """ from unittest.mock import Mock from common.handle_request import HandleRequest url = "http://127.0.0.1:8000/login" data = {"user":"******","pwd":"lemona","sign_id":"123r"} http = HandleRequest() request = Mock(return_value='{"code":1,"msg":"登录成功"}') response = request(url=url,method="post",data=data) response2 = http.send(url=url,method="post",data=data) print(response)
class TestAdd(unittest.TestCase): excel = ReadExcel(file_path, "add") cases = excel.read_data() http = HandleRequest() db = HandleDB() @data(*cases) def test_add(self, case): # 第一步:准备用例数据 # 获取url url = conf.get_str("env", "url") + case["url"] # url = conf.get_str("env", "url") + case.url # 获取数据 case["data.txt"] = replace_data(case["data.txt"]) data = eval(case["data.txt"]) # 请求头 headers = eval(conf.get_str("env", "headers")) if case["interface"] != "login": headers["Authorization"] = getattr(TestData, "token_data") # 获取sign和时间戳 sign_data = HandleSign.generate_sign(getattr(TestData, "token")) # 将sign加入到请求参数中 data.update(sign_data) # 预期结果 expected = eval(case["expected"]) # 请求方法 method = case["method"] # 用例所在的行 row = case["case_id"] + 1 # 第二步:发送请求 if case["check_sql"]: sql = replace_data(case["check_sql"]) s_loan_num = self.db.count(sql) res = self.http.send(url=url, method=method, json=data, headers=headers) json_data = res.json() if case["interface"] == "login": # 如果是登录的用例,提取对应的token,和用户id,保存为TestData这个类的类属性,用来给后面的用例替换 token_type = jsonpath.jsonpath(json_data, "$..token_type")[0] token = jsonpath.jsonpath(json_data, "$..token")[0] token_data = token_type + " " + token setattr(TestData, "token_data", token_data) setattr(TestData, "token", token) id = jsonpath.jsonpath(json_data, "$..id")[0] setattr(TestData, "admin_member_id", str(id)) # 第三步:断言 try: self.assertEqual(expected["code"], json_data["code"]) self.assertEqual(expected["msg"], json_data["msg"]) # 判断是否需要sql校验 if case["check_sql"]: sql = replace_data(case["check_sql"]) end_loan_num = self.db.count(sql) self.assertEqual(end_loan_num - s_loan_num, 1) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") my_log.info("用例:{}--->执行未通过".format(case["title"])) print("预取结果:{}".format(expected)) print("实际结果:{}".format(json_data)) raise e else: self.excel.write_data(row=row, column=8, value="通过") my_log.info("用例:{}--->执行通过".format(case["title"]))
class TestRecharge(unittest.TestCase): # 通过类创建excel对象 excel = ReadExcel(data_file_path, "recharge") # 读取数据 test_data = excel.read_excel() http = HandleRequest() # 创建DB对象 db = HandleDB() @classmethod def setUpClass(cls): # 在测试用例类(TestRecharge)执行之前就会执行这个方法 # 登录:获取用户的id以及鉴权需要用到的token url = conf.get_str("env", "url_ip") + "/member/login" login_data = {"mobile_phone": user, "pwd": pwd} headers = eval(conf.get_str("env", "headers")) response = cls.http.send( url=url, method="post", json=login_data, headers=headers) # 此处用cls是因为是类方法setUpClass(cls)里面的,是通过类属性去调用的 result = response.json() # 登录之后,从响应结果中提取用户id和token # (1)获取用户id # cls.member_id = str(jsonpath.jsonpath(result, "$..id")[0])#设置为TestRecharge类的类属性 member_id = jsonpath.jsonpath(result, "$..id")[0] # 获取member_id print(member_id) # 设置TestData类的类属性 setattr( TestData, "member_id", str(member_id)) #设置TestData类的类属性,设置类属性为member_id,类属性的值为member_id # (2)提取token token_type = jsonpath.jsonpath(result, "$..token_type")[0] token = jsonpath.jsonpath(result, "$..token")[0] # cls.token_data = token_type + " " + token#设置为TestRecharge类的类属性 token_data = token_type + " " + token # setattr( TestData, "token_data", token_data) # 设置TestData类的类属性,设置类属性为token_data,类属性的值为token_data # def setUp(self):#每个用例执行之前都会执行 # 如果把登录放在这里,每执行完一个用例就会登录,增加代码的运行时间,没有必要 @data(*test_data) # 进行解包 def test_recharge(self, test_data_cases): # 第一步:准备用例数据 # 备注:列表、字典方式存储的,excel读取出来是字符串。数值类型,读取出来是数值类型的,字符串类型,读取出来是字符串类型。 # ①拼接完整的接口地址 url = conf.get_str("env", "url_ip") + test_data_cases["url"] # ②请求的方法 method = test_data_cases["method"] # ③请求参数 # 判断是否有用户id需要替换 # if "#member_id#" in test_data_cases["data"]: # # 进行替换 # test_data_cases["data"] = test_data_cases["data"].replace("#member_id#", # self.member_id) # 替换完后需要接收,不然没有实质的替换 test_data_cases["data"] = replace_data( test_data_cases["data"]) #调用replace_data方法 data = eval(test_data_cases["data"]) # ④请求头 headers = eval(conf.get_str("env", "headers")) # 添加鉴权 # headers["Authorization"] = self.token_data # 从TestData类里面获取token_data属性:两种方法 # headers["Authorization"] = TestData.token_data#方法一:直接从TestData类里面获取token_data属性 headers["Authorization"] = getattr( TestData, "token_data") # 方法二:用getattr获取TestData类里面获取token_data属性 # ⑤预期结果 expected = eval(test_data_cases["expected"]) # ⑥该用例在表单中所在行 row = test_data_cases["case_id"] + 1 # 第二步:发送请求到接口,获取实际结果 if test_data_cases[ "check_sql"]: # 先判断用例里面check_sql字段是否有数据,如果有数据,说明需要进行数据库校验 sql = test_data_cases["check_sql"].format(user) # 获取充值之前的余额 start_money = self.db.get_one(sql)[0] response = HandleRequest().send(url=url, method=method, json=data, headers=headers) result = response.json() # 第三步:比对预期结果和实际结果 try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) # 充值后,进行数据库校验 if test_data_cases["check_sql"]: sql = test_data_cases["check_sql"].format(user) # 获取充值之后的余额 end_money = self.db.get_one(sql)[0] # 获取请求参数里面的充值金额 recharge_money = decimal.Decimal(str(data["amount"])) my_log.info("充值之前金额为:{}\n,充值金额为:{}\n,充值之后金额为:{}\n".format( start_money, recharge_money, end_money)) # 进行断言 self.assertEqual(recharge_money, end_money - start_money) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") # 可以把列(column)放在配置文件里面 # 记录没有通过的日志 my_log.info("用例:{}------>执行未通过".format(test_data_cases["title"])) # 在没有通过的时候,使用print会打印在测试报告中 print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) # 在没有通过的时候,将print输出到日志里面 my_log.info("预期结果:{}".format(expected)) my_log.info("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") # 可以把列(column)放在配置文件里面 # 记录通过的日志 my_log.info("用例:{}------>执行通过".format(test_data_cases["title"]))
def test_withdraw(self, test_data_cases): # 第一步:准备用例数据 # 备注:列表、字典方式存储的,excel读取出来是字符串。数值类型,读取出来是数值类型的,字符串类型,读取出来是字符串类型。 # ①拼接完整的接口地址 url = conf.get_str("env", "url_ip") + test_data_cases["url"] # ②请求的方法 method = test_data_cases["method"] # ③请求参数 #调用replace_data方法进行参数替换 test_data_cases["data"] = replace_data(test_data_cases["data"]) data = eval(test_data_cases["data"]) # ④请求头 headers = eval(conf.get_str("env", "headers")) # 添加鉴权 # 判断是否为登录接口,不是登录接口,则需要加token值 if test_data_cases["interface"] != "login": # headers["Authorization"] = self.token_data headers["Authorization"] = getattr(TestData, "token_data") # ⑤预期结果 expected = eval(test_data_cases["expected"]) # ⑥该用例在表单中所在行 row = test_data_cases["case_id"] + 1 # 第二步:发送请求到接口,获取实际结果 if test_data_cases[ "check_sql"]: # 先判断用例里面check_sql字段是否有数据,如果有数据,说明需要进行数据库校验 sql = test_data_cases["check_sql"].format( conf.get_str("test_data", "user")) # 获取充值之前的余额 start_money = self.db.get_one(sql)[0] response = HandleRequest().send(url=url, method=method, json=data, headers=headers) result = response.json() # 判断是否是登录的用例,如果是登录接口,则去获取用户的id,并设置为类属性 if test_data_cases["interface"] == "login": # 登录之后,从响应结果中提取用户id和token # (1)获取用户id # TestWithdraw.member_id = jsonpath.jsonpath(result, "$..id")[0] # 通过类名.属性名设置类属性 member_id = jsonpath.jsonpath(result, "$..id")[0] setattr(TestData, "member_id", str( member_id)) #使用setattr设置TestData类,member_id属性,属性值为member_id # (2)提取token token_type = jsonpath.jsonpath(result, "$..token_type")[0] token = jsonpath.jsonpath(result, "$..token")[0] # TestWithdraw.token_data = token_type + " " + token# 通过类名.属性名设置类属性 token_data = token_type + " " + token # 通过类名.属性名设置类属性 setattr( TestData, "token_data", token_data) # 使用setattr设置TestData类,token_data属性,属性值为token_data # 设置类属性还可以通过setattr进行设置 # 下面这行代码和上面那行代码是一个意思,都是将token设为类属性 setattr(TestWithdraw, "token_data", token_type + " " + token) # 第一个参数:类名 # 第二个参数:属性名 # 第三个参数:对应的属性值 # 第三步:比对预期结果和实际结果 try: self.assertEqual(expected["code"], result["code"]) self.assertEqual(expected["msg"], result["msg"]) # 提现后,进行数据库校验 if test_data_cases["check_sql"]: sql = test_data_cases["check_sql"].format( conf.get_str("test_data", "user")) # 获取提现之后的余额 end_money = self.db.get_one(sql)[0] # 获取请求参数里面的充值金额 recharge_money = decimal.Decimal(str(data["amount"])) my_log.info("提现之前金额为:{}\n,提现金额为:{}\n,提现之后金额为:{}\n".format( start_money, recharge_money, end_money)) # 进行断言 self.assertEqual(recharge_money, start_money - end_money) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") # 可以把列(column)放在配置文件里面 # 记录没有通过的日志 my_log.info("用例:{}------>执行未通过".format(test_data_cases["title"])) # 在没有通过的时候,使用print会打印在测试报告中 print("预期结果:{}".format(expected)) print("实际结果:{}".format(result)) # 在没有通过的时候,将print输出到日志里面 my_log.info("预期结果:{}".format(expected)) my_log.info("实际结果:{}".format(result)) raise e else: self.excel.write_data(row=row, column=8, value="通过") # 可以把列(column)放在配置文件里面 # 记录通过的日志 my_log.info("用例:{}------>执行通过".format(test_data_cases["title"]))