def __init__(self): """ 如果你后面需要用到这个变量你就加self,否则不需要加 """ # 建立数据库连接 self.conn = pymysql.connect( host=do_yuml.read_yuml('mysql', 'host'), # mysql服务器ip或者域名 user=do_yuml.read_yuml('mysql', 'user'), # 数据库连接的用户名 password=do_yuml.read_yuml('mysql', 'password'), # 数据库连接密码 db=do_yuml.read_yuml('mysql', 'db'), # 数据库名字 port=do_yuml.read_yuml('mysql', 'port'), # 连接数据库端口号 charset='utf8', # 编码格式 cursorclass=pymysql.cursors.DictCursor # 可以指定cursorclass为DictCursor, 那么返回的结果为字典或者嵌套字典的列表 ) # 创建游标对象 self.curse = self.conn.cursor()
def creat_user(reg_name, pwd="12366666", type=1): # 创建请求对象 do_request = HandleRequest() # 创建数据库对象 do_sql = Hadle_Mysql() # 添加请求头 do_request.add_hesders(do_yuml.read_yuml('request', 'version')) # 获取url url = do_yuml.read_yuml('request', 'url') + '/member/register' # 获取数据库userid sql = do_yuml.read_yuml('mysql', 'userid') while True: phone = do_sql.notexist_phone() par = { "mobile_phone": phone, "pwd": pwd, "type": type, "reg_name": reg_name } # 调用注册接口发送请求 do_request.send(url, data=par) # 获取用户id result = do_sql.run(sql=sql, args=(phone, )) if result: user_id = result["id"] # 如果查询的sql数据正确,用户id取值结果中的id break # 用字典来构造用户信息 userinfo = { reg_name: { 'id': user_id, 'reg_name': reg_name, 'mobile_phone': phone, 'pwd': pwd } } #关闭连接 do_request.close() do_sql.close() return userinfo
def exist_phone(self, phone): """ 判断手机号是否被注册了 :param phone: :return: """ sql = do_yuml.read_yuml('mysql', 'sql') # 动态查询手机号 if self.run(sql, args=[phone]): return True else: return False
def __init__(self, sheet, filename=None): # 初始化 """ 对传入的文件进行判端,如果不传文件名,默认读取我定义的文件 否则使用,你重新定义的新的文件 :param sheet: :param filename: """ if filename is None: self.filename = os.path.join( Datas_Path, do_yuml.read_yuml('excel', 'case_path')) else: self.filename = filename self.sheet = sheet
def test_invest(self, cases): # 第一步:准备数据 # 获取用例行号 row = cases.caseid + 1 # 获取请求参数 par = Parameterization.parmse_all(cases.datas) # 获取url invest_url = do_yuml.read_yuml('request', 'url') + cases.url # 获取预期结果 expected = cases.expected # 获取标题 msg = cases.title # 第二步:调用投资接口,进行投资 res = self.request.send(invest_url, method=cases.method, data=par) actuall = res.json() # 第三步:比对预期与实际结果 try: self.assertEqual(expected, actuall.get('code'), msg=msg) except AssertionError as e: # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml('msg', 'fail_result')) do_log.error('{},执行测试用例的具体异常为{}'.format(msg, e)) raise e else: if 'token_info' in res.text: token = actuall['data']['token_info']['token'] # 在获取响应结果的字典数据,从中查找token_info new_header = {"Authorization": "Bearer " + token} # 获取请求的token值 self.request.add_hesders(new_header) # 将获取到的token值加更新到请求头中 # check_sql=cases.check_sql # if check_sql: # sql=Parameterization.parmse_all(check_sql) # res_sql=self.do_sql.run(sql) # loan_id=res_sql['id'] # setattr(Parameterization,'a',loan_id) # # 获取loan_id if cases.caseid == 2: loan_id = actuall.get('data').get('id') # 获取响应的json数据中的data,再获取它下面的id setattr(Parameterization, 'loan_id', loan_id) ## 动态创建属性的机制, 来解决接口依赖的问题 # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml('msg', 'success_result')) do_log.info('{},测试用例执行成功'.format(msg)) finally: # 将响应的结果反写到excel的actall这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'case_result'), value=res.text)
def test_login(self, cases): #第一步:准备工作 #获取用例行号 row = cases.caseid + 1 #获取参数 par = Parameterization.parmse_all(cases.datas) #获取url login_url = do_yuml.read_yuml('request', 'url') + cases.url #获取预期结果 expected = json.loads( cases.expected, encoding='utf8') #因为用例是json格式的字符串通过loads转换为Python中的字典 #获取用例标题 msg = cases.title #第二步:调用登录接口发送请求 res = self.request.send(login_url, method=cases.method, data=par) actuall = res.json() #第三步:预期与实际进行对比 try: #用例中的多断言对比就是按照顺序,在异常处理中进行多次断言比较 self.assertEqual(expected['code'], actuall['code'], msg=msg) self.assertEqual(expected['msg'], actuall['msg'], msg=msg) except AssertionError as e: # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml( 'msg', 'fail_result')) do_log.error("{},执行测试的具体的异常为:{}\n".format(msg, e)) raise e else: self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml( 'msg', 'success_result')) do_log.info('{},执行用例通过'.format(msg)) finally: # 将响应的结果反写到excel的actall这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml( 'excel', 'case_result'), value=res.text)
def test_add(self, cases): # 第一步:准备数据 # 获取用例行号 row = cases.caseid + 1 # 获取请求参数 par = Parameterization.parmse_all(cases.datas) # 获取url add_url = do_yuml.read_yuml('request', 'url') + cases.url # 获取预期结果 expected = cases.expected # 因为用例是json格式的字符串通过loads转换为Python中的字典 # 获取标题 msg = cases.title # 第二步:发送加标请求,获取响应结果 res = self.request.send(add_url, method=cases.method,data=par) actuall = res.json() # 将响应结果转换为json格式的数据 # 第三步:对比预期与实际结果 try: self.assertEqual(expected, actuall.get('code'), msg=msg) except AssertionError as e: # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml('msg', 'fail_result')) do_log.error('{},断言的具体异常为{}\n'.format(msg, e)) raise e else: if cases.caseid == 2: # 默认登录接口登录成功 # 取值登录的token token = actuall['data']['token_info']['token'] # 更新请求头 new_header = {'Authorization': 'Bearer ' + token} # 将更新的请求头加的默认的请求头中,有则更新,无则添加 self.request.add_hesders(new_header) self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml('msg', 'success_result')) do_log.info('{},测试用例执行通过'.format(msg)) finally: # 将响应的结果反写到excel的actall这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'case_result'), value=res.text)
def test_register(self,cases): #获取用例的行号 row=cases.caseid+1 #获取用例的参数 par=Parameterization.parmse_all(cases.datas) #获取用例的url register_url=do_yuml.read_yuml('request','url')+cases.url #获取用例的期望结果 expected=cases.expected #获取用例标题 msg=cases.title #第二步:调用请求接口,发送请求,执行注册 res=self.do_request.send(url=register_url,method=cases.method,data=par,is_json=True)#这里的method=cases.method跟is_json=True因为是默认参数,可以省略不写 data_json=res.json()#将响应报文转化为json的字典数据 #第三步:预期与实际结果进行比较 try: # assertEqual第三个参数为用例执行失败之后的提示信息 # assertEqual第一个参数为期望值, 第二个参数为实际值 self.assertEqual(expected,data_json['code'],msg=msg)#预期与实际的2个code进行对比 except AssertionError as e: #将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel','result'), value=do_yuml.read_yuml('msg','fail_result')) do_log.error("{},执行测试的具体的异常为:{}\n".format(msg,e)) raise e else: # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml('msg', 'success_result')) do_log.info('{},执行用例通过'.format(msg)) finally: # 将响应的结果反写到excel的actall这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'case_result'), value=res.text)
def create_logger(cls): # 创建日志收集器 mylog = logging.getLogger(do_yuml.read_yuml('log','logname')) # 获取日志等级 mylog.setLevel(do_yuml.read_yuml('log','log_Level')) # 设置日志输出格式 format = logging.Formatter(do_yuml.read_yuml('log','log_format')) # 创建一个输出导控制台的日志输出渠道 sh = logging.StreamHandler() sh.setLevel(do_yuml.read_yuml("log", "Steram_Level")) # 设置输出导控制台的格式 sh.setFormatter(format) # 将输出渠道添加到日志收集器中 mylog.addHandler(sh) # 创建一个输出导文件的渠道 fh = logging.FileHandler(filename=os.path.join(Logs_Path,do_yuml.read_yuml('log','log_Filename')), encoding='utf8') # 设置日志的输出等级 fh.setLevel(do_yuml.read_yuml('log','FilenameLevel')) # 设置输出到文件的日志格式 fh.setFormatter(format) # 将输出渠道加到日志收集器中 mylog.addHandler(fh) return mylog
def setUpClass(cls): cls.request = HandleRequest() cls.request.add_hesders(do_yuml.read_yuml('request', 'version'))
def test_rechargd(self, cases): ##第一步:准备工作 #获取用例行号 row = cases.caseid + 1 #获取参数 par = Parameterization.parmse_all(cases.datas) #获取url rechargd_url = do_yuml.read_yuml('request', 'url') + cases.url #获取预期结果 expected = cases.expected #获取用例标题 msg = cases.title check_sql = cases.check_sql # 取出check_sql if check_sql: # 如果check_sql不为空, 则代表当前用例需要进行数据校验 check_sql = Parameterization.parmse_all( check_sql) # 将check_sql进行参数化,根据sql查找数据库充值前的金额 mysql_data = self.do_sql.run(check_sql) # 执行sql amount_before = float( mysql_data['leave_amount']) # 不是float类型, 也不是int类型, 是decimal类型 # 由于使用float转化之后的数, 有可能小数位数超过2位, 需要使用round保留2位小数 amount_before = round(amount_before, 2) #第二步:调用充值接口发送请求 res = self.request.send(rechargd_url, method=cases.method, data=par) actuall = res.json() #第三步:预期与实际进行对比 try: #用例中的多断言对比就是按照顺序,在异常处理中进行多次断言比较 self.assertEqual(expected, actuall['code'], msg=msg) if check_sql: check_sql = Parameterization.parmse_all( check_sql) # 前面的断言成功,获取充值后的金额 mysql_data = self.do_sql.run(check_sql) # 执行sql amount_after = round(float(mysql_data['leave_amount']), 2) # 不是float类型, 也不是int类型, 是decimal类型 actual_amount = round(amount_after - amount_before, 2) #充值后的金额减去充值钱的金额获取差值,保留2位小数进行断言 one_dict = json.loads(par, encoding='utf8') #将json的字符串转化为Python的字典 recharge_amount = one_dict['amount'] #获取充值的金额 self.assertEqual(recharge_amount, actual_amount, msg="实际充值金额与数据库存储金额不符") except AssertionError as e: # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml( 'msg', 'fail_result')) do_log.error("{},执行测试的具体的异常为:{}\n".format(msg, e)) raise e else: # 默认充值接口的第二条测试用例登录成功 if cases.caseid == 2: # 取值登录的token token = actuall['data']['token_info']['token'] # 更新header的请求头 new_header = {'Authorization': 'Bearer ' + token} self.request.add_hesders(new_header) # 将用例的实际结果写到excel的result这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml('excel', 'result'), value=do_yuml.read_yuml( 'msg', 'success_result')) do_log.info('{},执行用例通过'.format(msg)) finally: # 将响应的结果反写到excel的actall这一列中 self.excel.write_excel(han=row, column=do_yuml.read_yuml( 'excel', 'case_result'), value=res.text)
def setUpClass(cls): cls.request = HandleRequest() # 创建请求对象 cls.request.add_hesders(do_yuml.read_yuml('request', 'version')) # 读取yaml文件获取请求数据的头更新到默认的请求头中 cls.do_sql = Hadle_Mysql() # 创建执行sql的对象
title = [a.value for a in rows[0]] # 遍历所有行的第一列,并把他的值取出来 for b in rows[1:]: # 遍历除了第一行之外的所以内容,放到b中,结果是元祖格式 # print(b) b1 = [c.value for c in b] # 这个遍历出来的c是一个个的格子,c.value获取格子的值 b2 = list(zip(title, b1)) # 进行聚合打包,并转化为列表格式 casedata = CaseDate() for d in b2: setattr(casedata, d[0], d[1]) res.append(casedata) self.wb.close() # 关闭工作簿 return res def write_excel(self, han, column, value): # 把测试结果回写到excel中,不知道行,列,值给他定义一个 # 打开excel self.open_excel() # 写入数据,到excel的行中 self.sh.cell(row=han, column=column, value=value) # 保存数据到excel中 self.wb.save(self.filename) # 关闭excel self.wb.close() if __name__ == '__main__': # read=ReadExcel('case01.xlsx','register')#创建ReadExcel的对象,并且传参 filename = os.path.join(Datas_Path, do_yuml.read_yuml('excel', 'case_path')) read = ReadExcel(filename, 'invest') cases = read.read_excel() # 用对象来调用类里面的类方法 print(cases)
def setUpClass(cls): # 所有用例执行前, 会被调用一次 cls.do_request = HandleRequest() # 创建MyRequest对象 cls.do_request.add_hesders(do_yuml.read_yuml('request', 'version'))