#!/usr/bin/env python#coding: utf-8from splinter import Browserfrom ConfigParser import ConfigParserimport timecf = ConfigParser()cf.read(confFile)b = Browser("chrome")b.visit(url)def confcheck():conf = self.getConf()try:conf = {"url": self.cf.get("ser", "url"),"uname" : self.cf.get("ser", "username"),"passwd" : self.cf.get("ser", "password"),"tname" : self.cf.get("ser", "project")}except Exception as e:logging.critical("加载配置文件失败")logging.critical(e)sys.exit(1)class base(object):def __init__(self):self.url = urldef ClickCSS(t=1, *args):for css in args:link = b.find_by_css(css)[0]link.click()time.sleep(t)b.screenshot()def ClickID(ID, t=1):b.click_link_by_id(ID)b.screenshot()time.sleep(t)def ClickDropDown(name):css = "tr[data-display=%s] span[class='fa fa-caret-down']" % nameb.find_by_css(css)[0].click()def submit():"""提交"""css = "div[class='modal-footer'] input[type='submit']"b.find_by_css(css)[0].click()def instance(name, source, flavor, net):"""创建instance"""#跳转到project>instanceself.projectInstance()#点击创建虚拟机b.click_link_by_id("instances__action_launch-ng")#虚拟机名称b.fill("name", name)#选择源b.find_by_css("a[href='#']")[3].click()b.find_by_css("button[tabindex='0']").click()#选择floverb.find_by_css("a[href='#']")[4].click()b.find_by_css("button[tabindex='0']")[1].click()#选择网络b.find_by_css("a[href='#']")[5].click()b.find_by_css("button[tabindex='0']")[-2].click()#点击创建实例submit()def instanceAction(name, action):"""操作instance,重启,关闭,热迁移,resize"""if action == "resize":#点击下拉栏css = "tr[data-display=%s] span[class='fa fa-caret-down']" % name#选择调整云主机大小b.find_by_css("a[class='ajax-modal btn-resize']")[0].click()#选择floverb.select_by_text("flavor", "m1.tiny")#确认submit()#再次确认b.find_by_css("button[value^='instances__confirm']")[0].click()elif action == "reboot":passelif action == "shutdown":passelif action == "liveMigrate":self.panelgo(p="admin")#点击下拉栏ClickDropDown(name)#点击云主机热迁移b.find_by_css("a[href$='live_migrate']")else:alertInfo("暂时不支持此操作 %s" % action)def snapshot(name):css = "tr[data-display=%s] span[class='fa fa-caret-down']" % name#创建快照b.fill("name", "snapshot1")def snapshotAction(action):#删除快照if action == "delete":b.find_by_css("button[value^='images_delete']")b.find_by_css("button[value^='images__delete__']")[0].click()b.find_by_css("div[class='modal-footer'] a[href='#']")[1].click()else:alertInfo("WTF")def net(name, subname, cidr):"""创建网络"""#进入项目>网络self.panelgo(p="project", location="networks")#点击创建网络b.click_link_by_id("networks__action_create")#编辑网络tabb.fill("net_name","net1")#编辑子网b.fill("subnet_name", "net1-sub")b.fill("cidr", "192.168.0.1/24")#点击网络详情css = "div[class='modal-body'] a[href='#create_network__createsubnetdetailaction']"Click(1,css)#点击创建网络css = "div[class='modal-footer'] button[type='submit']"Click(1,css)def netExt(name, subname, cidr):"""创建网络"""def netAction(name, action):"""操作网络,删除"""passdef route(name):"""新建路由"""passdef routeAction(name, action):passdef secgroup(name):passdef image(name):passdef imageAction(name, action):passdef terminal(stdin):passclass poctest(base):def __init__(self):self.url = urldef login(self, uname="admin", passwd="admin"):"""登陆"""b.fill("username", "admin")b.fill("password", "admin")b.click_link_by_id("loginBtn")def panelgo(self, p="project", location="instances", v=9):"""默认进入侧边栏project>instance"""visitURL = "%s/horizon/%s/%s" % (self.url, p, location)b.visit(visitURL)def alertInfo(info):"""提示测试内容"""b.execute_script("alert(%s)" % info)a = b.get_alert()sleep(2)a.accept()def test1(self, restart=True):"""创建,关闭,重启虚拟机"""self.projectInstance()#点击创建虚拟机b.click_link_by_id("instances__action_launch-ng")#虚拟机名称b.fill("name","vm1")#选择源b.find_by_css("a[href='#']")[3].click()b.find_by_css("button[tabindex='0']").click()#选择floverb.find_by_css("a[href='#']")[4].click()b.find_by_css("button[tabindex='0']")[1].click()#选择网络b.find_by_css("a[href='#']")[5].click()b.find_by_css("button[tabindex='0']")[-2].click()#点击创建实例b.find_by_css("span[ng-bind='::viewModel.btnText.finish']")[0].click()#关闭实例#重启实例def test2(self):"""创建,删除快照"""b.find_by_css("a[id$='snapshot']")[0].click()#创建快照b.fill("name","snapshot1")b.find_by_css("input[type='submit']")[0].click()#删除快照b.find_by_css("button[value^='images_delete']")b.find_by_css("button[value^='images__delete__']")[0].click()b.find_by_css("div[class='modal-footer'] a[href='#']")[1].click()def test3(self):"""调整云主机大小"""#选择调整云主机大小b.find_by_css("a[class='ajax-modal btn-resize']")[0].click()#选择floverb.select_by_text("flavor","m1.tiny")#确认b.find_by_css("div[class='modal-footer'] input[type='submit']")[0].click()#再次确认b.find_by_css("button[value^='instances__confirm']")[0].click()def test4():"""虚拟机热迁移"""self.projectInstance(p="admin")#点击下拉栏b.find_by_css("tr[class='ajax-update status_up'] span[class='fa fa-caret-down']")[0].click()#点击云主机热迁移b.find_by_css("a[href$='live_migrate']")def test5():"""创建用户内部私有网络, net1, net2"""#进入项目>网络self.panelgo(p="project", location="networks")#点击创建网络b.click_link_by_id("networks__action_create")#编辑网络tabb.fill("net_name","net1")#编辑子网b.fill("subnet_name", "net1-sub")b.fill("cidr", "192.168.0.1/24")#点击网络详情css = "div[class='modal-body'] a[href='#create_network__createsubnetdetailaction']"Click(1,css)#点击创建网络css = "div[class='modal-footer'] button[type='submit']"Click(1,css)def test6():"""创建用户外部EXT网络"""js = "var chk = document.getElementById('id_external');chk.checked = true"#跳转admin>networksb.visit()#点击创建网络ID = "networks__action_create"#填入信息b.fill("name","pub")b.select_by_text("tenant_id","admin")b.select("id_network_type","flat")#选择外部网络b.execute_script(js)#提交submit()def test7():"""创建路由器"""#跳转project>routeb.visit()#点击创建路由ID = "routers__action_create"b.click_link_by_id()#填入信息b.fill("name", "route1")#选择外部网络b.select_by_text("external_network")#提交submit()#将新建的子网net1,net2加入此路由器#点击刚创建的路由器b.find_by_css("tr[data-display='test'] a")[0].click()#跳转到接口b.click_link_by_href("?tab=router_details__interfaces")#增加接口ID = "interfaces__action_create"#填入信息css = ""ID = [i.value for i in b.find_by_css("select option") if i.text.startswith("net1")][0]#提交submit()def test8():"""分配及绑定floating ip"""#跳转project>instanceb.visit()#点击绑定浮动ip#获取#提交#pingdef test9():"""不同租户下网络隔离"""#跳转#登陆terminal#执行命令#xxxdef test10():"""安全组访问控制策略"""#跳转project>secgroup#点击新建secgroup#配置#提交def test11():"""创建,挂载云硬盘"""#跳转project>volumeb.visit("http://172.16.0.3/horizon/project/volumes/")#点击创建云硬盘b.click_link_by_id("volumes__action_create")#配置#提交self.submit()#挂载def test12():"""扩展云硬盘"""#跳转b.visit("http://172.16.0.3/horizon/project/volumes/")#点击下拉栏css = "tr[data-display='vol11'] span[class='fa fa-caret-down']"#点击扩展css = "a[id$='action_extend']"#配置b.fill("new_size","2")#提交submit()def test13():"""上传,下载,删除镜像"""#跳转b.visit("http://172.16.0.3/horizon/project/images/")#点击新建ID = "images__action_create"#配置b.fill("name","img1")alertInfo("请在10秒内选择相应的镜像文件")b.select("disk_format","qcow2")while something:submit()#提交#删除css = "tr[data-display='img1'] span[class='fa fa-caret-down']"css = "tr[data-display='img1'] button[id$='__action_delete']"b.find_by_css("div[class='modal-footer'] a")[-1].click()def test14():"""日志数据收集"""passdef test15():"""云平台告警"""passdef test16():"""openstack服务监控"""pass
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。