def do_pymysql(self, query, flag): """ query:sql查询语句 flag:1表示获取第一条数据,2表示获取多条数据""" db_config = ReadConfig(project_path.conf_path).get_data('DB', 'db_config') cnn = pymysql.connect(**db_config) # 建立连接 cursor = cnn.cursor() cursor.execute(query) if flag == 1: res = cursor.fetchone() else: res = cursor.fetchall() return res
def read_case(self, section): """此函数用于读取Excel里面的测试用例,有返回值 section: 配置文件里面的片段名,根据设定来具体执行哪些测试用例""" # 配置文件控制读取哪些用例 case_id = ReadConfig(project_path.conf_path).get_data( section, 'case_id') # get_data()是自己写的read_config模块中用于读取配置文件中元组、字典、列表的函数 wb = load_workbook(self.file_name) # 打开工作簿,文件名出现了t开头,要多加/ sheet = wb[self.sheet_name] # 定位表单 # tel = self.get_tel() # 放这里不妥,要是多条用例需要新的手机号,却还没更新 test_data = [] for i in range(2, sheet.max_row + 1): # tel = self.get_tel() #放这里也不妥,不需要新手机号也会每次都更新,浪费! row_data = {} row_data['CaseId'] = sheet.cell(i, 1).value row_data['Module'] = sheet.cell(i, 2).value row_data['Title'] = sheet.cell(i, 3).value row_data['Method'] = sheet.cell(i, 4).value row_data['Url'] = sheet.cell(i, 5).value # 自动更新手机号 if sheet.cell(i, 6).value.find( 'tel' ) != -1: # find()是内置函数,如果找到'tel'则返回最小索引值,找不到则返回-1.也可以用成员运算in tel = self.get_tel() # 对象调用get_tel()方法获取存在excel里面的电话号码 row_data['Params'] = sheet.cell(i, 6).value.replace( 'tel', str(tel)) # replace是字符串之间的替换,tel是int,所以用str(tel)转str self.update_tel( int(tel) + 1) # 将手机号+1再写回excel中的备用手机号 要是同时有两条用例需要没注册过的手机号? else: row_data['Params'] = sheet.cell(i, 6).value row_data['sql'] = sheet.cell(i, 7).value row_data['ExpectedResult'] = sheet.cell(i, 8).value test_data.append(row_data) wb.close() # 记得关闭 # 根据配置文件读取测试用例 final_data = [] # 定义一个空列表,用于存储根据配置文件需要读取的测试用例 if case_id == "all": # 把1换成all时报错:不可迭代,配置文件把all变成"all"即可,本来是str,都出来也是str,相当于双重str final_data = test_data else: for i in case_id: # case_id是配置文件[CASE]里面的section,具体值可自行配置 final_data.append(test_data[ i - 1]) # i是case,从1开始,但是列表索引是从0开始遍历的,所以要减1,但是如果配置文件中的i是"all", return final_data
def read_data(self): #section 配置文件里面的片段名 可以根据你的指定来执行具体的用例 '''从Excel读取数据,有返回值''' #从配置文件里面控制读取哪些用例 case_id = ReadConfig(project_path.conf_path_new).get_data( 'CASEID', 'case_id') #case_id={'recharge':'all','register':[1,2]} wb = load_workbook(self.file_name) #唯一的要求是什么?每一行数据要在一起 {} [] #如何把每一行的数据存到一个空间里面去? [] #开始读取数据 #获取存在excel里面的电话号码 tel = self.get_tel() final_data = [] #空列表 存储最终的测试用例数据 #case_id={'recharge':'all','register':[1,2]} 这个是配置文件读取到的字典数据 for key in case_id: #遍历字典 test_data = [] #存储每个表单的数据 sheet_name = key #字典的key就是表单名 sheet = wb[sheet_name] #获取一个表单对象 for i in range(2, sheet.max_row + 1): row_data = {} row_data['CaseId'] = sheet.cell(i, 1).value row_data['Module'] = sheet.cell(i, 2).value row_data['Title'] = sheet.cell(i, 3).value row_data['Url'] = sheet.cell(i, 4).value row_data['Method'] = sheet.cell(i, 5).value if sheet.cell( i, 6).value.find('tel') != -1: #注意这个方法的使用以及返回值 也可以用成员运算符 row_data['Params'] = sheet.cell(i, 6).value.replace( 'tel', str(tel)) #替换值 tel 为啥要用str() self.update_tel(int(tel) + 1) else: #如果没有tel这个子字符串 就不需要去替换了 row_data['Params'] = sheet.cell(i, 6).value row_data['ExpectedResult'] = sheet.cell(i, 7).value row_data[ 'sheet_name'] = key #这里做个表单存储~~方便后面确定到底是执行哪个模块的用例写到哪些结果里面去 test_data.append(row_data) if case_id[key] == 'all': #如果case_id==all 那就获取所有的用例数据 final_data.extend(test_data) #把测试用例赋值给final_data这个变量 else: #否则 如果是列表 那就获取列表里面指定id的用例的数据 for i in case_id[key]: #遍历case_id 里面的值 final_data.append(test_data[i - 1]) #?对应关系?? wb.close() return final_data
def do_mysql(self, query, flag=1): ''' :query sql查询语句 :flag 标志 1 获取一条数据 2获取多条数据''' db_config = ReadConfig(project_path.conf_path).get_data( 'DB', 'db_config') cnn = connector.connect(**db_config) #建立一个链接 cursor = cnn.cursor() cursor.execute(query) if flag == 1: res = cursor.fetchone() #返回的元组 else: res = cursor.fetchall() #返回的是列表嵌套元组 return res
def read_data(self, section): # section 配置文件里面的片段名 可以根据你的指定来执行具体的用例 '''从Excel读取数据,有返回值''' # 从配置文件里面控制读取哪些用例 case_id = ReadConfig(project_path.conf_path).get_data( section, 'case_id') wb = load_workbook(self.file_name) sheet = wb[self.sheet_name] # 唯一的要求是什么?每一行数据要在一起 {} [] # 如何把每一行的数据存到一个空间里面去? [] # 开始读取数据 # 获取存在excel里面的电话号码 tel = self.get_tel() test_data = [] for i in range(2, sheet.max_row + 1): row_data = {} row_data['CaseId'] = sheet.cell(i, 1).value row_data['Module'] = sheet.cell(i, 2).value row_data['Title'] = sheet.cell(i, 3).value row_data['Url'] = sheet.cell(i, 4).value row_data['Method'] = sheet.cell(i, 5).value if sheet.cell( i, 6).value.find('tel') != -1: # 注意这个方法的使用以及返回值 也可以用成员运算符 row_data['Params'] = sheet.cell(i, 6).value.replace( 'tel', str(tel)) # 替换值 tel 为啥要用str() self.update_tel(int(tel) + 1) else: # 如果没有tel这个子字符串 就不需要去替换了 row_data['Params'] = sheet.cell(i, 6).value row_data['sql'] = sheet.cell(i, 7).value # 加上去的sql语句 row_data['ExpectedResult'] = sheet.cell(i, 8).value test_data.append(row_data) wb.close() final_data = [] # 空列表 存储最终的测试用例数据 if case_id == 'all': # 如果case_id==all 那就获取所有的用例数据 final_data = test_data # 把测试用例赋值给final_data这个变量 else: # 否则 如果是列表 那就获取列表里面指定id的用例的数据 for i in case_id: # 遍历case_id 里面的值 final_data.append(test_data[i - 1]) # ?对应关系?? return final_data
# -*- coding: utf-8 -*- # @Time : 2019/3/18 21:07 # @Author : lemon_huahua # @Email : [email protected] # @File : get_data.py from API_7.common.read_config import ReadConfig from API_7.common import project_path import re config = ReadConfig(project_path.conf_path) class GetData: '''可以用来动态的更改 删除 获取数据''' COOKIE = None LOAN_ID = None # 新添加的标id初始值 normal_user = config.get_str('data', 'normal_user') normal_pwd = config.get_str('data', 'normal_pwd') normal_member_id = config.get_str('data', 'normal_member_id') # 类属性 # print(GetData.COOKIE) # print(GetData().COOKIE) # 类的反射可以动态的查看,增加,删除,更改类里面的属性 # 利用反射的方法来拿值 # print(getattr(GetData,'COOKIE'))#第一个参数是类名 第二个参数是属性的参数名 # print(hasattr(GetData,'COOKIE'))#第一个参数是类名 第二个参数是属性的参数名 返回值是布尔值 # print(setattr(GetData,'COOKIE','123456')) # #第一个参数是类名 第二个参数是属性的参数名 第三个你要设置的新值