• 自动化测试-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()
  • 相关阅读:
    Struts2-result配置结果视图
    Struts2 -action处理业务请求
    struts 2
    mvc模式
    vue之webpack安装配置vue
    vue之webpack
    文件上传
    LinkedList详解
    ArrayList详解
    HashMap详解
  • 原文地址:https://www.cnblogs.com/cmnz/p/9090526.html
Copyright © 2020-2023  润新知