500行如清纯少女般的代码
from selenium import webdriver
import time
import unittest
import threading
class MyTestCase_V01(unittest.TestCase):
def setUp(self):
print("setUp")
def tearDown(self):
print("tearDown")
main_xpath = '//main[@class="el-main main"]'
url = "http://192.168.3.200/#/login"
Chrome_path = "F:\GITHUB_PRO\consoleTest\consoleTest\\tools\chromedriver.exe"
inputuser_box = "//input[@placeholder='请输入用户名']"
inputpasswd_box = "//input[@type='password']"
login_submit_btn = "//*[@id='app']/div/div/form/button"
reboot_mcband = "//*[@id='app']/section/header/div[2]/button[1]"
comfirm = "/html/body/div[3]/div/div[3]/button[2]/span"
band_1 = "//div[text()='1']"
setpar_band = "//span[text()='参数设置']"
UePMax = "//*[@id='app']/section/section/main/div/div[2]/div[3]/div[4]/div/div[2]/form/div[13]/div[2]/div/div/div/div/input"
save_par = "//span[text()='保存参数']"
comfirm_button = "//button[@class='el-button el-button--default el-button--small el-button--primary ']"
jz_manage = "//span[text()='基站管理']"
band_manage = "//span[text()='核心板管理']"
pa_manage = "//span[text()='功放管理']"
reboot_band = "//span[text()='软重启']"
comfirm_soft = "/html/body/div[4]/div/div[3]/button[2]/span"
power_outage_restart = "//span[text()='断电重启']"
pa_on = "//span[text()='开启所有功放']"
pa_off = "//span[text()='关闭所有功放']"
refresh = "//i[@class='el-icon-refresh']"
B40_table_pa_xpath = "//*[@id='app']/section/section/main/div/div[2]/div[3]/div[2]/div[3]/table/tbody/tr[1]/td[9]"
B40_table_pa_css = "#app > section > section > main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr:nth-child(1) > td.el-table_1_column_9 > div > div > span"
B1_table_pa_xpath = "//*[@id='app']/section/section/main/div/div[2]/div[3]/div[2]/div[3]/table/tbody/tr[2]/td[9]"
B1_table_pa_css = "#app > section > section > main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr:nth-child(2) > td.el-table_1_column_9 > div > div > span"
GSM_table_pa_xpath = "//*[@id='app']/section/section/main/div/div[2]/div[3]/div[2]/div[3]/table/tbody/tr[3]/td[9]"
GSM_table_pa_css = "#app > section > section > main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr:nth-child(3) > td.el-table_1_column_9 > div > div > span"
OS_FDD_56_xpath_iframe = '//*[@id="app"]/section/section/main/div/div[2]/div[4]/div[2]/div[3]/table/tbody/tr[1]/td[7]/div/span'
OS_FDD_56_css_iframe = ''
OS_FDD_56_xpath = '//*[@id="app"]/section/section/main/div/div[2]/div[4]/div[2]/div[3]/table/tbody/tr[1]/td[7]'
OS_FDD_56_css = '#app > section > section > main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr:nth-child(1) > td.el-table_6_column_105 > div > span'
WS_FDD_56_xpath = '//*[@id="app"]/section/section/main/div/div[2]/div[4]/div[2]/div[3]/table/tbody/tr[1]/td[8]'
WS_FDD_56_css = '#app > section > section > main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr:nth-child(1) > td.el-table_6_column_106 > div > div > span'
OS_TDD_55_xpath = '//*[@id="app"]/section/section/main/div/div[2]/div[4]/div[2]/div[3]/table/tbody/tr[2]/td[7]'
OS_TDD_55_css = '#app > section > section > main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr.el-table__row.expanded > td.el-table_6_column_105 > div > span'
WS_TDD_55_xpath = '//*[@id="app"]/section/section/main/div/div[2]/div[4]/div[2]/div[3]/table/tbody/tr[2]/td[8]'
WS_TDD_55_css = '#app > section > section > main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr.el-table__row.expanded > td.el-table_6_column_106 > div > div > span'
OS_GSM_KB_xpath = '//*[@id="app"]/section/section/main/div/div[2]/div[4]/div[2]/div[3]/table/tbody/tr[4]/td[7]'
OS_GSM_KB_css = '#app > section > section > main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr:nth-child(4) > td.el-table_6_column_105 > div > span'
WS_GSM_KB_xpath = '//*[@id="app"]/section/section/main/div/div[2]/div[4]/div[2]/div[3]/table/tbody/tr[4]/td[8]'
WS_GSM_KB_css = '#app > section > section > main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr:nth-child(4) > td.el-table_6_column_106 > div > div > span'
'''
2、主控板重启测试;(每次重启的间隔时间为30min);
测试用例模式:A为前提条件,用例使用AB,AC两个方式来执行
主线程:调用操作线程后,延时到结束,时间xxx分钟,大约执行三次循;
操作线程:
使用两个测试用例,分包测试AB和AC
标准:
A、点击重启主控板后,返回主控重启成功的字段;
B、5秒后登陆控制台(输入映射的IP),登陆失败;
C、1min钟后登陆控制台(输入映射的IP),登陆成功,能查询到主控版本信息;
上述三点均满足,则判断此次主控板重启成功;
'''
def MCB_Reboot(self,url):
print("打开浏览器,登录")
val = self.login(url)
self.driver.find_element_by_xpath(self.reboot_mcband).click()
time.sleep(3)
self.driver.find_element_by_xpath(self.comfirm).click()
time.sleep(3)
print("关闭浏览器")
self.driver.quit()
time.sleep(5)
loginStatus = self.login(url)
if loginStatus == 0:
print("重启主控失败")
self.driver.quit()
else:
print("重启主控成功")
self.driver.quit()
print("等待一分钟后登录控制台")
time.sleep(60)
loginStatus = self.login(url)
if loginStatus == 0:
print("重启主控成功")
self.driver.quit()
else:
print("重启主控失败")
print("退出浏览器,等待五分钟后执行功放开关测试")
self.driver.quit()
'''
功放开关测试
前置条件:设置后各参数,功放的输出功率设置为40dbm;
使用单测试用例
执行时间:打开功放开关界面,
主线程:调用操作线程后,延时到结束,时间18分钟,大约执行三次循;
操作线程:
关闭操作,刷新,读取,判断 (定时5秒后进行开启功放操作)
开启功放,刷新,读取,判断。(定时5分钟进行关闭功放操作)
'''
def PA_Reboot(self,url):
self.login(url)
self.driver.find_element_by_xpath(self.jz_manage).click()
time.sleep(1)
self.driver.find_element_by_xpath(self.band_manage).click()
time.sleep(1)
self.click_band_1()
self.click_setpar_band()
self.type_UePMax("40")
self.click_save_par()
time.sleep(1)
self.click_save_par_confirm()
time.sleep(1)
self.driver.find_element_by_xpath(self.pa_manage).click()
time.sleep(1)
self.driver.find_element_by_xpath(self.pa_off).click()
time.sleep(3)
self.driver.find_element_by_xpath(self.refresh).click()
time.sleep(3)
locater = self.driver.find_element_by_xpath(self.main_xpath)
time.sleep(1)
cssStr1 = 'main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr:nth-child(1) > td.el-table_1_column_9 > div > div > span'
val = locater.find_element_by_css_selector(cssStr1).text
print(val)
if val == -999:
print("读取功放失败")
elif val > -50 and val <= 0:
print("功放关闭成功")
elif val > 0:
print("功放关闭失败")
pa_status = 0
cssStr2 = 'main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr:nth-child(1) > td.el-table_1_column_11 > div > div > span'
val = locater.find_element_by_css_selector(cssStr2).text
print(val)
if val == -999:
print("读取功放失败")
elif val > -50 and val <= 0:
pa_status -=1
print("功放关闭成功")
elif val > 0:
print("功放关闭失败")
time.sleep(2)
self.driver.find_element_by_xpath(self.pa_on).click()
time.sleep(3)
self.driver.find_element_by_xpath(self.refresh).click()
time.sleep(5)
cssStr1 = 'main > div > div.el-tabs__content > div.box-card > div.el-table.el-table--fit.el-table--border.el-table--scrollable-x.el-table--enable-row-hover.el-table--enable-row-transition.el-table--mini > div.el-table__body-wrapper.is-scrolling-left > table > tbody > tr:nth-child(1) > td.el-table_1_column_9 > div > div > span'
val = locater.find_element_by_css_selector(cssStr1).text
print(val)
if val == -999:
print("读取功放失败")
elif val > -50 and val <= 0:
print("功放关闭成功")
elif val > 0:
print("功放关闭失败")
pa_status = 0
val = locater.find_element_by_css_selector(cssStr2).text
print(val)
if val == -999:
print("读取功放失败")
elif val > -50 and val <= 0:
pa_status -= 1
print("功放关闭成功")
elif val > 0:
print("功放关闭失败")
time.sleep(5)
print("退出浏览器,等待五分钟后执行核心板重启测试")
self.driver.quit()
return pa_status
def KB_Soft_Reboot(self,url):
self.login(url)
self.driver.find_element_by_xpath(self.jz_manage).click()
time.sleep(1)
self.driver.find_element_by_xpath(self.band_manage).click()
time.sleep(1)
self.click_band_1()
time.sleep(1)
self.driver.find_element_by_xpath(self.reboot_band).click()
time.sleep(1)
self.driver.find_element_by_xpath(self.reboot_band).click()
first_xpath = "//*[@id='app']/section/section/main"
first_css = ""
time.sleep(1)
for i in {
1,2,3,4}:
if i == 1:
time.sleep(5)
elif i == 2:
time.sleep(20)
elif i == 3:
time.sleep(60)
elif i == 4:
time.sleep(3*60)
retStr = self.read_table_text_by_locater(first_xpath,first_css)
if "离线" in retStr:
print("离线状态")
elif "在线" in retStr:
print("在线状态")
elif "工作" in retStr:
print("工作状态")
time.sleep(5)
self.driver.quit()
band_2 = "xpath=>//div[text()='2']"
def KB_IPS_Reboot(self,url):
self.login(url)
self.driver.find_element_by_xpath(self.jz_manage).click()
time.sleep(1)
self.driver.find_element_by_xpath(self.band_manage).click()
self.driver.quit()
self.click_band_1()
time.sleep(1)
self.driver.find_element_by_xpath(self.power_outage_restart).click()
time.sleep(1)
first_xpath = "//*[@id='app']/section/section/main"
first_css = "//main/div/div[2]/div[3]/div[2]/div[3]/table/tbody/tr[1]/td[7]/div/span"
for i in {
1,2,3,4}:
if i == 1:
time.sleep(5)
elif i == 2:
time.sleep(20)
elif i == 3:
time.sleep(60)
elif i == 4:
time.sleep(3*60)
retStr = self.read_table_text_by_locater(first_xpath, first_css)
if "离线" in retStr:
print("离线状态")
elif "在线" in retStr:
print("在线状态")
elif "工作" in retStr:
print("工作状态")
self.driver.quit()
def read_table_text_by_locater(self, xpathStr, cssStr):
try:
locater = self.driver.find_element_by_xpath(xpathStr)
data = locater.find_element_by_css_selector(cssStr).text
print("data: %s" % data)
return data
except Exception as err:
print(err)
return -999
def login(self,url):
try:
self.driver = webdriver.Chrome(self.Chrome_path)
time.sleep(3)
self.driver.get(self.url)
self.driver.maximize_window()
print("开始登录操作")
self.driver.find_element_by_xpath(self.inputuser_box).send_keys("admin")
self.driver.find_element_by_xpath(self.inputpasswd_box).send_keys("123456")
self.driver.find_element_by_xpath(self.login_submit_btn).click()
time.sleep(2)
print("点击了登录按钮")
except:
print("登录异常")
return -1
else:
print("登录成功")
return 0
def click_band_1(self):
self.driver.find_element_by_xpath(self.band_1).click()
time.sleep(1)
def click_setpar_band(self):
self.driver.find_element_by_xpath(self.setpar_band).click()
time.sleep(1)
def type_UePMax(self,text):
self.driver.find_element_by_xpath(self.UePMax).clear()
self.driver.find_element_by_xpath(self.UePMax).send_keys(text)
def click_save_par(self):
self.driver.find_element_by_xpath(self.save_par).click()
def click_save_par_confirm(self):
self.driver.find_element_by_xpath(self.comfirm_button).click()
'''
主控重启
等待5分钟
功放开关
等待五分钟
核心板软启动
等待五分钟
核心板断电重启
等待15分钟
回到第一步,主控重启
定时器线程为24小时
'''
runCounter = 0
def thread_timer(self,ip,gThStatus):
url = ip +"/#/login"
if gThStatus == 0:
self.MCB_Reboot(url)
time.sleep(5*60)
th = threading.Thread(target=self.thread_timer, args=(ip, 1))
th.start()
elif gThStatus == 1:
self.PA_Reboot(url)
time.sleep(5 * 60)
th = threading.Thread(target=self.thread_timer, args=(ip, 2))
th.start()
elif gThStatus == 2:
self.KB_Soft_Reboot(url)
time.sleep(5 * 60)
th = threading.Thread(target=self.thread_timer, args=(ip, 3))
th.start()
elif gThStatus == 3:
self.KB_IPS_Reboot(url)
time.sleep(15 * 60)
th = threading.Thread(target=self.thread_timer, args=(ip, 0))
th.start()
self.runCounter += 1
if self.runCounter >= 48:
return 0
else:
self.gThStatus = 0
def test_App(self):
threads = []
IP = (['192.168.3.200'],
['192.168.3.201'],
['192.168.3.202'])
for i in range(len(IP)):
print('IP:%s' % IP[i])
thd1 = threading.Thread(target=self.thread_timer, args=(IP[i], 0))
threads.append(thd1)
for th in threads:
th.start()
for th in threads:
th.join()
if __name__=='__main__':
unittest.main()