需求:将手工登录,手工刷新服务器的FW转化为Python+Selenium实现自动化操作。

1.创建用户表,实现数据与脚本分离。需要读取模块。

2.自动化刷新FW.

不说话,直接上代码:

1userdata.py

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'''
A model that use xlrd to read excel(include user info)
'''
import xlrdclass XlUserInfo(object):#initializedef __init__(self, path=''):self.path = pathself.xl = xlrd.open_workbook(self.path)# def get_ip_info(self):#     ip_sheets = self.xl.sheets()[0]#     server_name = ip_sheets.col_values(0)[1:]#     ips = ip_sheets.col_values(1)[1:]#     temp = zip(server_name, ips)#     server_ip = []#     server_ip.append(dict(temp))#     return server_ip# def get_fw_info(self):#     fw_sheets = self.xl.sheets()[1]#     fw_name = fw_sheets.col_values(0)#     fw_dir = fw_sheets.col_values(1)[1:]#     temp = zip(fw_name, fw_dir)#     server_image = []#     server_image.append(dict(temp))#     return server_image#获取sheet object,处理并读取信息def get_sheet_info(self):all_info = []info0 = []info1 = []for row in range(0,self.sheet.nrows):info = self.sheet.row_values(row)info0.append(info[0])info1.append(info[1])temp = zip(info0,info1)all_info.append(dict(temp))return all_info.pop(0)# return all_info#通过excel的sheet的名字读取信息def get_sheetinfo_by_name(self, name):self.sheet = self.xl.sheet_by_name(name)return self.get_sheet_info()#通过excel的sheet的索引读取信息def get_sheetinfo_by_index(self, index):self.sheet = self.xl.sheet_by_index(index)return self.get_sheet_info()if __name__ == '__main__':
#     实例化xl = XlUserInfo('user_info.xlsx')ips = xl.get_sheetinfo_by_name('ip')fwargs = xl.get_sheetinfo_by_name('fw')webargs = xl.get_sheetinfo_by_name('webEle')print("IPS",ips)for server_name in ips.keys():machine = server_name.split('_')[0]test_ip = ips[server_name]bmc = fwargs['BMC']official_bmc = fwargs['OfficialBMC']dsa = fwargs['DSA']print(test_ip)print(server_name)

2.Login_model

import time
from outlog_model import OutLog
from selenium import webdriverdef login(testip,webarg):logger = OutLog(filepath='report/{}.log'.format(testip))profile = webdriver.FirefoxProfile()profile.accept_untrusted_certs = Truedriver = webdriver.Firefox(firefox_profile=profile)driver.implicitly_wait(30)driver.verificationErrors = []driver.accept_next_alert = Trueresult = 0try:driver.get('https://{}/designs/imm/index.php'.format(testip))except:logger.Write_info('[Fail to Login Web GUI] : {}'.format(testip))try:if driver.find_element_by_id(webarg["uname_id"]):result = 1else:result = 0# 'uname_id' = 'user'driver.find_element_by_id(webarg["uname_id"]).send_keys(webarg['uname'])finally:print("Wait web to be ready")time.sleep(15)# 'uname_id' = 'user'driver.find_element_by_id(webarg['uname_id']).send_keys(webarg['uname'])#pwd_id = passworddriver.find_element_by_id(webarg['pwd_id']).send_keys(webarg['pwd'])#login_button_id = btnLogin_labeldriver.find_element_by_id(webarg['login_id']).click()time.sleep(30)print("Success to login")# print("Login driver is ",driver)return driver

3.outlog model

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'''
A model for produce outlog
'''
import time
import xlsxwriter
import logging
import os#A class to write excel
class XLLoginfo(object):def __init__(self, path=''):file_name = "Result-{}".format(time.strftime('%m-%d-%H-%M-%S',time.localtime()))self.row = 0self.xl = xlsxwriter.Workbook(path + file_name + '.xlsx')def xl_write(self, *args):col = 0for val in args:self.sheet.write_string(self.row, col, val)col += 1self.row += 1# The API for users.def Xl_init(self, sheetname, *title):self.sheet = self.xl.add_worksheet(sheetname)self.sheet.set_column('A:G',20)self.xl_write(*title)def Xl_write(self,*args):self.xl_write(*args)def Xl_close(self):self.xl.close()#A class using logging model to get log(info,warining,critical)
class OutLog(object):def __init__(self,filepath=''):self.file = filepathself.logger = logging.getLogger()self.logger.setLevel(logging.INFO)self.fh = logging.FileHandler(filepath)self.ch = logging.StreamHandler()self.formatter = logging.Formatter('%(message)s = %(name)s = %(asctime)s')self.fh.setFormatter(self.formatter)self.ch.setFormatter(self.formatter)self.logger.addHandler(self.fh)self.logger.addHandler(self.ch)def Write_info(self,info_message):self.logger.info(info_message)def Write_error(self,error_message):self.logger.error(error_message)def ReWrite_result(self):with open(self.file) as fp:old_info = []for i in fp:if i not in old_info:old_info.append(i)new_result = []for r in old_info:if r not in new_result:new_result.append(r)with open(self.file, 'w') as f:f.truncate()for h in new_result:f.writelines(h)class Totlalog(object):def __init__(self,path):self.path = pathdef eachfile(filepath):pathdir = os.listdir(filepath)print(pathdir)for file in pathdir:filename = os.path.join('%s\%s'%(filepath,file))with open(filename) as fp:print(filename,fp.readlines())if __name__ == '__main__':# A example to use XLLoginfo API# A example to use Outloglog = OutLog(filepath='report/log.txt')log.Write_error('error')log.Write_info('info')log.Write_info('info')log.Write_info('info')log.ReWrite_result()

4.刷新FW,动作模块

# -*- coding: utf-8 -*-
import time
from login_model import login
from outlog_model import OutLogdef test_flash(server_name,testip,fwname,webarg):logger = OutLog(filepath='report/{}.log'.format('result'))try:driver = login(testip, webarg)driver.accept_next_alert = Trueprint('fwname:',fwname)print("Now begin to test flash {}".format(fwname))time.sleep(25)try:driver.find_element_by_id("dijit_MenuBarItem_0_text")except:driver.quit()finally:time.sleep(5)print("Web is ready now")driver.find_element_by_id("dijit_PopupMenuBarItem_2_text").click()driver.find_element_by_css_selector("#dijit_MenuItem_9_text > table > tbody > tr > td").click()driver.find_element_by_id("btnUpdateFwDlg_label").click()time.sleep(5)# .find_element_by_css_selector("input.dijitOffScreen").click()# driver.find_element_by_name("uploadedfile").clear()driver.find_element_by_name("uploadedfile").send_keys(fwname)if 'imm' in fwname:try:try:driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()finally:time.sleep(10)print("Now upload {} image".format(fwname))driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()time.sleep(200)try:driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()finally:time.sleep(15)print("Wait to flash {} image finished".format(fwname))driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()time.sleep(5)driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()time.sleep(180)# driver.find_element_by_xpath("(//input[@value=''])[5]").click()driver.find_element_by_id("restartIMMId_label").click()time.sleep(5)if driver.find_element_by_id("commonPopupOk_label"):result = 1logger.Write_info('[Pass] : IMM  {} {} {}'.format(server_name,testip,fwname))else:result = 0logger.Write_info('[Fail] : IMM  {} {} {}'.format(server_name, testip, fwname))print("Reatart imm wait about 5 min")driver.find_element_by_id("commonPopupOk_label").click()time.sleep(720)print("Finish test to flash IMM fw.")try:print("Close")driver.close()except:print("Quit")driver.quit()finally:return resultexcept:driver.close()result = -1logger.Write_error('[Fail] code:{} IMM  {} {} {}'.format(result,server_name, testip, fwname))return resulttime.sleep(20)elif 'uefi' in fwname:try:try:driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()finally:time.sleep(10)print("Now upload UEFI image")driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()time.sleep(20)try:driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()finally:time.sleep(15)driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()print("Wait to flash UEFI image finished,need 1 min 37 sec")time.sleep(5)driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()time.sleep(110)# driver.find_element_by_xpath("(//input[@value=''])[4]").click()if driver.find_element_by_id("restartOSId_label"):print("Restart OS")time.sleep(10)driver.find_element_by_id("restartOSId_label").click()else:time.sleep(10)driver.find_element_by_id("restartOSId_label").click()time.sleep(5)driver.find_element_by_id("commonPopupOk_label").click()time.sleep(5)driver.find_element_by_id("commonPopupClose_label").click()time.sleep(10)driver.find_element_by_id("dijit_MenuBarItem_0_text").click()time.sleep(5)driver.find_element_by_id("btnserverActionsListHealthSumm_label").click()time.sleep(5)driver.find_element_by_id("serverActionsListHealthSumm63_text").click()time.sleep(5)driver.find_element_by_id("commonPopupOk_label").click()time.sleep(5)print("Reatart os,wait about 5 min")time.sleep(300)print("Finish test to flash UEFI fw")if driver.find_element_by_id("commonPopupClose_label"):result = 1logger.Write_info('[Pass] : UEFI  {} {} {}'.format(server_name,testip,fwname))else:result = 0logger.Write_info('[Fail] : UEFI  {} {} {}'.format(server_name, testip, fwname))driver.find_element_by_id("commonPopupClose_label").click()try:print("Quit")driver.quit()except:print("Close")driver.close()finally:return resultexcept:driver.close()result = -1logger.Write_error('[Fail] code:{} UEFI  {} {} {}'.format(result,server_name, testip, fwname))return -1else:try:if driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label"):driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()print("1.Now upload DSA image,need about 250s")else:time.sleep(10)print("2.Now upload DSA image,need about 250s")driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()time.sleep(420)if driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label"):print("1.wait to flash dsa")driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()else:time.sleep(30)print("2.wait to flash dsa")driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()print("Wait to flash DSA image finished,need 120 sec")time.sleep(5)driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()time.sleep(5)driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()time.sleep(5)driver.find_element_by_id("updateServerFirmwareWizardbtnNext_label").click()time.sleep(200)# updateServerFirmwareWizardbtnFinish_labelif driver.find_element_by_id("updateServerFirmwareWizardbtnFinish_label"):result = 1logger.Write_info('[Pass] : DSA  {} {} {}'.format(server_name,testip,fwname))driver.find_element_by_id("updateServerFirmwareWizardbtnFinish_label").click()else:result = 0logger.Write_info('[Fail] : DSA  {} {} {}'.format(server_name, testip, fwname))print("Finish test to flash DSA fw")try:print("Quit")driver.quit()except:print("Close")driver.close()finally:return resultexcept:driver.close()result = -1logger.Write_error('[Fail] code:-1  DSA  {} {} {}'.format(server_name, testip, fwname))return resultfinally:# return result
        driver.close()
if __name__ == "__main__":pass

5.主模块,运行模块

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import threading
import time
from userdata import XlUserInfo
from flashImage import test_flash
from login_model import login
from outlog_model import OutLogdef main(ip,server_name,imm,official_imm,bios,DSA):# test_ip, serverName, bmc, official_bmc, uefi, dsalogger = OutLog(filepath='report/{}.log'.format('result'))# choose to flash immimm_result = test_flash(server_name, ip, imm, webargs)time.sleep(60)if imm_result != 1:imm_result = test_flash(server_name, ip, imm, webargs)time.sleep(60)# choose to flash uefiuefi_result = test_flash(server_name, ip, bios, webargs)if uefi_result != 1:uefi_result = test_flash(server_name, ip, bios, webargs)# choose to flash dsadsa_result = test_flash(server_name, ip, DSA, webargs)if dsa_result != 1:dsa_result = test_flash(server_name, ip, DSA, webargs)# choose to flash official immofficial_imm_result = test_flash(server_name, ip, official_imm, webargs)if official_imm_result != 1:official_imm_result = test_flash(server_name, ip, official_imm, webargs)# choose to update imm.upgrade_imm_result = test_flash(server_name, ip, imm, webargs)if upgrade_imm_result != 1:upgrade_imm_result = test_flash(server_name, ip, imm, webargs)# try:#     driver = login(test_ip,webargs)#     print(driver)#     if driver:#         driver.close()#         time.sleep(60)#         #choose to flash imm#         imm_result = test_flash(server_name,ip, imm, webargs)#         time.sleep(60)#         if imm_result != 1:#             imm_result = test_flash(server_name, ip, imm, webargs)#         time.sleep(60)#         # choose to flash uefi#         uefi_result = test_flash(server_name,ip, bios, webargs)#         if uefi_result != 1:#             uefi_result = test_flash(server_name, ip, bios, webargs)#         #choose to flash dsa#         dsa_result = test_flash(server_name, ip, DSA, webargs)#         if dsa_result != 1:#             dsa_result = test_flash(server_name, ip, DSA, webargs)#         #choose to flash official imm#         official_imm_result = test_flash(server_name, ip, official_imm, webargs)#         if official_imm_result != 1:#             official_imm_result = test_flash(server_name, ip, official_imm, webargs)#         #choose to update imm.#         upgrade_imm_result = test_flash(server_name, ip, imm, webargs)#         if upgrade_imm_result != 1:#             upgrade_imm_result = test_flash(server_name, ip, imm, webargs)#     else:#         logger.Write_error("[Fail Login into Web] : {} {}".format(server_name, ip))# except:#     logger.Write_error("[Fail Login into Web]]]]]] : {} {}".format(server_name, ip))# finally:#     time.sleep(60)#     logger.ReWrite_result()if __name__ == '__main__':now_time = time.strftime("%Y-%m-%d_%H.%M.%S", time.localtime(time.time()))#实例化一个xl对象,分别读取ip,fw,webEle的infoxl = XlUserInfo('user_info.xlsx')ips = xl.get_sheetinfo_by_name('ip')fwargs = xl.get_sheetinfo_by_name('fw')webargs = xl.get_sheetinfo_by_name('webEle')test_thread = []for serverName in ips.keys():machine = serverName.split('_')[0]test_ip = ips[serverName]bmc = fwargs['BMC']official_bmc = fwargs['OfficialBMC']dsa = fwargs['DSA']uefi = ''for uefi_name in fwargs.keys():if machine.lower() in uefi_name.lower():uefi = fwargs[uefi_name]print("*"*40)print(test_ip,bmc,official_bmc,uefi,dsa)print("*" * 40)t = threading.Thread(target=main,args=(test_ip,serverName,bmc,official_bmc,uefi,dsa))print(t)t.start()test_thread.append(t)time.sleep(2)for t in test_thread:t.join()print("Finish all Test")

转载于:https://www.cnblogs.com/william126/p/7526751.html

Python实战之Selenium自动化测试web刷新FW相关推荐

  1. 基于python语言的selenium自动化测试(1)-环境搭建

    近期在写爬虫软件时遇到的一些问题需要使用到selenium工具,在测试领域也同样需要学习该工具,所以大概记录下学习这款工具的使用以及一些问题及思考 selenium 是一个web的自动化测试工具,不少 ...

  2. java实现Selenium自动化测试web

    自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较.在此过程中 ...

  3. 一文8个步骤从0到1实现Python+Selenium自动化测试项目实战【建议收藏】

    目录 第 1 章.自动化测试 第 2 章.Python基础 第 3 章.元素定位方式 第 4 章.元素 | 浏览器操作方法 第 5 章.元素等待 第 6 章.鼠标和键盘操作 第 7 章.UnitTes ...

  4. Python+Selenium自动化测试项目实战【建议收藏】

    第 1 章 自动化测试 1.1.自动化测试介绍 自动化测试就是通过自动化测试工具帮我们打开浏览器,输入网址,输入账号密码登录,及登录后的操作,总的说来自动化测试就是通过自动化测试脚本来帮我们从繁琐重复 ...

  5. Python+Selenium自动化测试项目实战

    第 1 章 自动化测试 1.1.自动化测试介绍 自动化测试就是通过自动化测试工具帮我们打开浏览器,输入网址,输入账号密码登录,及登录后的操作,总的说来自动化测试就是通过自动化测试脚本来帮我们从繁琐重复 ...

  6. python+selenium进行web自动化测试

    python+selenium进行web自动化测试 一.配置python环境 目前已经更新到python3.10.3,我现在是3.9, 不过版本应该问题不大,大家可以自行官网下载并安装,并装好pych ...

  7. 论文python+selenium网页自动化测试论文_毕业设计(论文)-基于selenium的web自动化测试.docx...

    基于Selenium的Web自动化测试1 绪论1.1引言网络时代的到来和迅速普及,为软件产业带来了一场革命性的变化,基于Web的应用系统已经开始逐步取代原来的单机版应用系统,成为当前和未来的软件系统开 ...

  8. selenium实现web自动化测试

    Web自动化测试 课程大纲 序号 章节 知识点 1 第一章 Web自动化入门 1.认识自动化及自动化测试 2.自动化测试工具选择 3.环境搭建 2 第二章 Selenium-API 1.元素定位方式 ...

  9. pythonselenium教学视频_从零开始学Selenium自动化测试(基于Python视频教学版)

    本书基于Python语言,系统地介绍Selenium 3自动化测试的相关知识体系及应用.书中的大部分知识点都匹配了相应的案例,便于读者进行实践.本书各章案例清晰易懂,并可独立运行,便于不同需求的读者学 ...

最新文章

  1. [PY3]——字符串的分割、匹配、搜索方法总结
  2. tf报错之raise TypeError(“pred must not be a Python bool“)
  3. Aspose.Word 的常见使用(不用模板创建)
  4. boost pool内存池库使用简要介绍
  5. Java 多线程 并发编程
  6. 复习栈和队列,详解最小栈,栈的弹出压入序列,逆波兰表达式求值
  7. 继续泼冷水 Ubuntu决定放弃支持安腾
  8. java英语词汇_java常用的英语单词
  9. css div中文字位置_计算机二级Web(4):CSS基础 (上)
  10. mybatis 多参数处理
  11. NPOI导出Excel2007-xlsx
  12. Codepen 每日精选(2018-3-29)
  13. CMMI5级认证含金量高吗?
  14. firefox 53支持java_火狐浏览器53.0版
  15. ds18b20温度转换指令_【原创】基于单片机的DS18B20温度显示
  16. 简单 申请 msn.com邮箱 @
  17. 欧美古风格html网站模板
  18. c语言opencv识别颜色并标记,opencv怎么识别图片上带颜色的圆
  19. ios MultipeerConnectivity蓝牙通讯
  20. Yann Lecun 纽约大学Spring2020深度学习课程,附66页PPT下载

热门文章

  1. zookeeper之学习(三)zkcli补充
  2. 开课吧:C++STL常用remove算法有哪些?
  3. VMware服务器虚拟化平台应急方案
  4. 6.4-全栈Java笔记:异常处理办法(下)
  5. 微信小程序chooseImage(从本地相册选择图片或使用相机拍照)
  6. NetScaler的Web 2.0 Push技术
  7. linux学习一天一个命令(4)[mkdir命令]
  8. 文档未记录的API之setContentToHTMLString
  9. 方差(Variance)和标准差(Standard Deviation)
  10. Leetcode 53.最大子序列和