自动化测试-18.selenium之bugFree代码注释

  1 #encoding=utf-8
  2 import xlrd,time,os
  3 from xlutils.copy import copy
  4 from selenium import webdriver
  5 
  6 def getTestData(excelPath,sheetName):
  7     '''
  8     定义从excel文件中获取数据
  9     :param excelPath: excel文件路径
 10     :param sheetName: 表格中的页签名
 11     :return: 返回测试数据字段
 12     '''
 13     # 打开存有测试数据的excel
 14     xl = xlrd.open_workbook(excelPath)
 15     # 指定打开某个页签的table
 16     table = xl.sheet_by_name(sheetName)
 17     # 获取表中的第一行,用来做字典的key进行存储,返回的是列表从第一列到最后一列
 18     listKey = table.row_values(0)
 19     # 用于存放测试数据
 20     listTestData = []
 21     # 外围for循环取到的是行
 22     for i in range(1,table.nrows):
 23         # 将存取的每次数据存在空字典内
 24         dicData = {}
 25         # 内部for循环取到的是列
 26         for j in range(0,table.ncols):
 27             # key为第一行的每列,value为每行的列值
 28             dicData.update({listKey[j]:table.cell_value(i,j)})
 29         listTestData.append(dicData)
 30     print('取到的数据为:')
 31     # 遍历取到的每行数据
 32     for rowData in listTestData:
 33         print(rowData)
 34     # 返回测试数据
 35     return listTestData
 36 
 37 def writeResultToExcel(excelPath,sheetName,listRe,reResultFiles):
 38     '''
 39     定义函数,先复制测试用例表格模板,再往里面写入实际结果,测试结果以及截图路径
 40     :param excelPath: 需要复制的excel模板路径
 41     :param sheetName: 被复制末班中的页签名
 42     :param listRe: 列表类型,其内部数据为字典类型,列表中包含实际结果,测试结果,截图路径的存取数据字典
 43     :param reResultFiles: 写入完成后保存的excel路径
 44     :return:
 45     '''
 46     # 打开指定路径的excel文件
 47     xl = xlrd.open_workbook(excelPath,encoding_override='utf-8')
 48     # 打开对应页签的表
 49     table = xl.sheet_by_name(sheetName)
 50     # 复制模板
 51     excelMudle = copy(xl)
 52     # 获取到sheetName对应的表
 53     mudleTable = excelMudle.get_sheet(sheetName)
 54     # 获取模板表中有多少列数
 55     cols = table.ncols
 56     # 获取模板表中有多少行数
 57     rows = table.nrows
 58     for rowsName in listRe[0].keys():
 59         # 每次往第一行最新的列写入表头
 60         mudleTable.write(0,cols,rowsName)
 61         # 列索引往后移动一位
 62         cols+=1
 63     #逐行写数据,从第2行开始写,写到最后一行,每行是一次测试结果,每次测试结果放在字典中
 64     for i  in  range(1,rows):
 65         '''
 66         listRe[0]是第二行索引为1的测试结果,listRe[1]是第三行索引为2的测试结果,行值和数据存储存字典索引相差1
 67         每次往第i行写数据  写 listRe[i-1]的数据
 68         实际结果,i是行索引,cols-3是列的倒数第3个列,cols-2是列的倒数第2个列,cols-1是列的倒数第1个列
 69         '''
 70         mudleTable.write(i,cols-3,listRe[i-1]['realyResult'])
 71         # 测试结果
 72         mudleTable.write(i,cols-2,listRe[i-1]['testResult'])
 73         # 截图路径
 74         mudleTable.write(i,cols-1,listRe[i-1]['pngPath'])
 75         # 保存测试结果
 76         excelMudle.save(reResultFiles)
 77 
 78 def removeDir(dirPath):
 79     '''
 80     删除Windows下文件夹里面的所有文件和子文件夹
 81     :param dirPath: 要删除的文件夹路径
 82     :return: None
 83     '''
 84     # 读取要删除的目录下所有文件和子目录
 85     listTopDir = os.listdir(dirPath)    
 86     for item in listTopDir:
 87         # 如果是子目录则递归删除
 88         if os.path.isdir(dirPath+'\\'+item):
 89             # 删除子目录中的文件
 90             removeDir(dirPath+'\\'+item)
 91             # 删除子目录
 92             os.rmdir(dirPath+'\\'+item)
 93         # 如果是文件则直接删除
 94         else:   
 95             os.remove(dirPath+'\\'+item)
 96 
 97 def bugfreeLogin(driver,dic):
 98     '''
 99     bugfree登录功能
100     :param driver: 浏览器对象
101     :param dic: dic数据字典
102     :return: 返回dicRe,字典内的键值对与
103     '''
104     dicRe = {}
105     realyResult,testResult,pngPath='','',''
106     # 打开登录页面
107     driver.get(str(dic['url']))
108     driver.find_element_by_id('LoginForm_username').clear()
109     # 输入用户名
110     driver.find_element_by_id('LoginForm_username').send_keys(str(dic['username']))
111     driver.find_element_by_id('LoginForm_password').clear()
112     # 输入密码
113     driver.find_element_by_id('LoginForm_password').send_keys(str(dic['password']))
114     # 点击登录按钮
115     driver.find_element_by_id('SubmitLoginBTN').click()
116     time.sleep(3)
117     #获取提示信息用于判断测试结果,如果登录成功则判断页面展示"欢迎,  系统管理员",如果登录失败则判断提示信息
118     try:
119         # 登录成功
120         realyResult = driver.find_element_by_css_selector('.user-info').text
121     except:
122         # 登录失败,取提示信息
123         realyResult = driver.find_element_by_id('login-error-div').text
124     else:
125         #登录成功,退出系统
126         driver.find_element_by_link_text('退出').click()
127 
128     #判断结果
129     if (dic['yuqiResult'] in realyResult):  # 预期结果与实际结果一致
130         # 记录测试结果
131         testResult = 'PASS'
132     else:  ##预期结果与实际结果不一致
133         # 记录测试结果
134         testResult = 'FAIL'
135         # 保存路径
136         pngPath = os.getcwd() + '\\errorPng\\' + time.strftime('%Y-%m-%d %H-%M-%S', time.localtime()) + '.png'
137         # 截图保存在pngPath变量存储的路径中
138         driver.get_screenshot_as_file(pngPath)
139     # 往测试结果字典中插入一条测试数据,存储的内容以realyResult、testResult、pngPath为键值
140     dicRe.update({'realyResult': realyResult, 'testResult': testResult, 'pngPath': pngPath})
141     return dicRe
142 
143 if __name__ == '__main__':
144     # 调用removeDir删除report目录下的所有文件或目录
145     removeDir(os.getcwd()+'\\report')
146     # 调用removeDir删除errorpng目录下的所有文件或目录
147     removeDir(os.getcwd()+'\\errorpng')
148     # 启动Firefox驱动
149     driver = webdriver.Firefox()
150     # 设置driver驱动的全局定时等待最长时间为5秒
151     driver.implicitly_wait(5)
152     # 定义空的列表,用于存储测试字典数据
153     listRe= []
154     # 取到测试数据的excel文档路径
155     fpath = os.getcwd()+'\\testData\\bugfree_login.xls'   
156     # 取到excel表中页签为login的表
157     sheetName = 'login'
158     # 结果文档的路径
159     resultPath= os.getcwd()+'\\report\\test_result '+time.strftime('%Y-%m-%d %H-%M-%S',time.localtime())+'.xls'
160     # 读取测试数据
161     list1 = getTestData(fpath,sheetName)
162     # 此循环用于遍历测试用例中的用例数
163     for i in list1:
164         # 每一条测试数据,执行一次登录
165         dicResult = bugfreeLogin(driver,i)
166         # 往列表中存储我们测试结果中的字典数据
167         listRe.append(dicResult)
168     print listRe
169     #往测试结果文档写数据:复制测试数据文档+写入:实际结果、测试结果、截图路径
170     writeResultToExcel(fpath, sheetName, listRe, resultPath)
171     # 关闭所有浏览器
172     driver.quit()
posted @ 2018-05-25 20:22  JustLittle  阅读(398)  评论(0编辑  收藏  举报