class TestLogin(unittest.TestCase): """ 描述登录接口的类 """ do_excel = DoExcel(contants.case_file) # 利用.实现上下级,来引入其他目录下的文件 cases = do_excel.read_data('login') req = RequestMethod() # 实例化Reqeust类的对象 def setUp(self): pass @data(*cases) def test_login(self, case): resp = self.req.request_method(case.method, case.url, case.data) # 返回请求结果 logger.info("case.expected:{}".format(case.expected)) try: self.assertEqual(resp.text, case.expected, "Login Error") self.do_excel.write_data('login', case.case_id + 1, resp.text, 'PASS') logger.info("第{0}条用例测试结果:PASS".format(case.case_id)) except AssertionError as e: self.do_excel.write_data('login', case.case_id + 1, resp.text, 'FAIL') logger.error("第{0}条用例测试结果:FAIL".format(case.case_id)) raise e def tearDown(self): pass
def test_case(id, url, method, data, expect_result): log.info(f"编号:{id},请求url:{url},方法:{method},数据:{data},期望结果:{expect_result}") data = json.loads(data) res = RequestMethod.do_request(url, method, data) res_json = res.json() try: assert res_json == json.loads(expect_result) log.info(f"编号:{id}运行通过") except AssertionError: log.info(f"编号:{id}运行失败", exc_info=True) raise AssertionError
class TestApi(unittest.TestCase): do_excel = DoExcel(contants.cases_dir) #do_excel cases_login = do_excel.read_excel('login') cases_register = do_excel.read_excel('register') request_1 = RequestMethod() #request mysql = MysqlUtil() #数据库 my_logger = logger.get_logger( logger_name="TestApi") #各个模块中的logger_name可设置成一个名字 def setUp(self): pass #@unittest.skip("不要运行")#被装饰的方法将不会被执行 @data(*cases_login) #登录接口测试 def test_login(self, case): self.my_logger.info("开始执行第{}条登录用例".format(case.case_id)) resp = self.request_1.request_method(case.method, case.url, case.data) try: self.assertEqual(case.expectedresult, resp.text) self.do_excel.write_back(case.case_id + 1, resp.text, "Pass") #问题一:为啥登录的实际结果可以写进Excel,执行结果pass/failed却写不进Excel呢????????? self.my_logger.info("第{}条登录用例执行结果:Pass".format(case.case_id)) except AssertionError as e: self.do_excel.write_back(case.case_id + 1, resp.text, "Failed") self.my_logger.error("第{}条登录用例执行结果:Failed".format(case.case_id)) raise e def tearDown(self): pass @unittest.skip("不执行注册用例") @data(*cases_register) #注册接口测试 def test_register(self, case): self.my_logger.info("开始执行第{}条注册用例".format(case.case_id)) sql = "select max(mobilephone) from future.member" max = self.mysql.fetch_one(sql)[ 0] # 返回结果是元组类型数据,放在此处,执行每一条用例时都会替换新的手机号 data_dict = json.loads(case.data) #case.data从Excel取出是字符串格式,需转换为字典 if data_dict["mobilephone"] == "${register_mobile}": #手机号参数化 data_dict["mobilephone"] = int(max) + 1 print(data_dict["mobilephone"]) resp = self.request_1.request_method(case.method, case.url, data_dict) try: self.assertEqual(case.expectedresult, resp.text) self.do_excel.write_back(case.case_id + 1, resp.text, "Pass") self.my_logger.info("第{}条注册用例执行结果:Pass".format(case.case_id)) except AssertionError as e: self.do_excel.write_back(case.case_id + 1, resp.text, "Failed") self.my_logger.error("第{}条注册用例执行结果:Failed".format(case.case_id)) raise e
def test_case(self, sheet_name): do_excel = DoExcel(contants.case_file) #利用.实现上下级,来引入其他目录下的文件 cases = do_excel.read_data(sheet_name) req = RequestMethod() #实例化Reqeust类的对象 for case in cases: resp = req.request_method(case.method, case.url, case.data) #返回请求结果 print("case.expected:{}".format(case.expected)) if resp.text == case.expected: do_excel.write_data('login', case.case_id + 1, resp.text, 'PASS') else: do_excel.write_data('login', case.case_id + 1, resp.text, 'FAIL')
class TestRegister(unittest.TestCase): """ 描述登录接口的类 """ do_excel = DoExcel(contants.case_file) # 利用.实现上下级,来引入其他目录下的文件 cases = do_excel.read_data('register') req = RequestMethod() # 实例化Reqeust类的对象 mysql = MysqlUtil() #实例化对象 sql = "select max(mobilephone) from future.member" #sql查询语言 max = mysql.fetch_one(sql)[0] #调用fetch_one(sql)获取查询结果,结果是元组,用索引取值 mysql.close() def setUp(self): # Setup(self)是unittest里的方法,执行一次test_方法这个setup执行一次。 # 如果是每条用例测试前都想执行一次的操作,可以放在这个方法里 pass @data(*cases) def test_register(self,case): import json case_dict=json.loads(case.data) #json.loads()将传进来的data字符串转化为字典 if case_dict['mobilephone']=='phonenumber': #通过字典关键字取值做判断 case_dict['mobilephone']=int(self.max)-319 #重新给这个注册的号码赋值为数据库中唯一的一个值 print((int(self.max)-319)) resp = self.req.request_method(case.method, case.url, case_dict) # 返回请求结果 print("case.expected:{}".format(case.expected)) try: self.assertEqual(resp.text,case.expected,"register Error") self.do_excel.write_data('register', case.case_id + 1, resp.text, 'PASS') except AssertionError as e: self.do_excel.write_data('register', case.case_id + 1, resp.text, 'FAIL') raise e def tearDown(self): pass
def setUpClass(cls):#继承unittest.TestCase中的方法,并重写 print("这是一个类方法") cls.request = RequestMethod()#实例化放这里,使用session会话方式 cls.my_logger = logger.get_logger(logger_name="TestRecharge")
def write_data(self,sheet_name,row,actual,result): '''写入数据''' sheet=self.wb[sheet_name] sheet.cell(row,7).value=actual #写入实际结果 sheet.cell(row,8).value=result #写入执行结果 self.wb.save(self.excel_name) #写完数据保存 if __name__ == '__main__': from common import contants from common.request_method import RequestMethod do_excel=DoExcel(contants.case_file) #利用.实现上下级,来引入其他目录下的文件 cases=do_excel.read_data('login') #print(cases) req=RequestMethod()#实例化Reqeust类的对象 for case in cases: resp= req.request_method(case.method,case.url,case.data) #返回请求结果 print("case.expected:{}".format(case.expected)) if resp.text==case.expected: do_excel.write_data('login',case.case_id+1,resp.text,'PASS') else: do_excel.write_data('login',case.case_id+1, resp.text, 'FAIL')
if type(row_case.expectedresult) == int:#将期望结果转换成str类型 row_case.expectedresult = str(row_case.expectedresult) cases.append(row_case) #将每一个对象都追加到列表中 return cases def write_back(self,row,actualresult,result): sheet =self.wb[self.sheet_name] sheet.cell(row,8).value=actualresult sheet.cell(row,9).value=result self.wb.save(self.file_name) if __name__=='__main__': from common.request_method import RequestMethod from common import contants import json # 注意路径:此处使用的常量文件,另一种使用上级.查找'../datas/cases.xlsx' do_excel=DoExcel(contants.cases_dir) cases=do_excel.read_excel('register') request_1=RequestMethod() for case in cases: #case.data=eval(case.data) 这一步尽量放在ruqest_method中进行判断 resp=request_1.request_method(case.method,case.url,case.data) if resp.text==case.expectedresult: do_excel.write_back(case.case_id+1,resp.text,"Pass") else: do_excel.write_back(case.case_id+1,resp.text,"Failed") # print("case列表:",cases.read_excel()) # print("用例条数:",len(cases.read_excel()))
def setUpClass(cls): # setUpClass(cls)是unittest里的类方法,一个类执行一次。如果是测试类前都想执行一次的操作,可以放在这个方法里, cls.req = RequestMethod() # 实例化Reqeust类的对象 cls.mysql = MysqlUtil() #实例化MysqlUtil类对象