def Save_screenShot(self, model_name="model"): """ 截图功能 :param model_name: 功能模块货用例名称 :return: """ # 根据功能和时间点生成截图 # 文件格式 :功能名称_年月日-时分秒.png img_file_path = screenshot_dir + "/{0}_{1}.png".format( model_name, time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())) # logging.info("截图成功,路径为:{0}".format(img_file_path)) my_log.info("截图成功,路径为:{0}".format(img_file_path)) # 截图文件存放在 Screenshot目录下 # driver方法:self.driver.Save_screenshot() self.driver.save_screenshot(img_file_path) return img_file_path
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"]))
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"]))
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"]))
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"]))