zoukankan      html  css  js  c++  java
  • 自动化测试-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()
  • 相关阅读:
    January 25th, 2018 Week 04th Thursday
    January 24th, 2018 Week 04th Wednesday
    January 23rd, 2018 Week 04th Tuesday
    January 22nd, 2018 Week 04th Monday
    January 21st, 2018 Week 3rd Sunday
    January 20th, 2018 Week 3rd Saturday
    January 19th, 2018 Week 3rd Friday
    January 18th, 2018 Week 03rd Thursday
    January 17th, 2018 Week 03rd Wednesday
    January 16th, 2018 Week 03rd Tuesday
  • 原文地址:https://www.cnblogs.com/cmnz/p/9090526.html
Copyright © 2011-2022 走看看