2020-2-26更新
This commit is contained in:
parent
1225951062
commit
60769f58a7
|
@ -32,3 +32,12 @@ html_report_path = os.path.join(prj_path, 'report', 'html')
|
|||
|
||||
# cookie_path
|
||||
cookie_path = os.path.join(prj_path, 'data', 'cookie_data')
|
||||
|
||||
#等待时间
|
||||
tiny = 0.5
|
||||
small= 1
|
||||
middle = 2
|
||||
long = 5
|
||||
|
||||
#c重试次数
|
||||
RENUM = 0
|
Binary file not shown.
|
@ -0,0 +1,29 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/2/20 15:27
|
||||
# @Author : mrwuzs
|
||||
# @Email : mrwuzs@outlook.com
|
||||
# @File : applyfromaction.py
|
||||
# @Software: PyCharm
|
||||
from public.pages import controlcenterpage
|
||||
from time import sleep
|
||||
|
||||
|
||||
def submission_apply_from(project_name,dr):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from public.common import pyselenium
|
||||
from config import globalparam
|
||||
from public.appmodel.loginaction import Login
|
||||
|
||||
dr = pyselenium.PySelenium(globalparam.browser)
|
||||
dr.max_window()
|
||||
login = Login(dr).login("hubei01", "1qaz!QAZ")
|
||||
submission_apply_from("湖北",dr)
|
||||
|
||||
|
||||
|
||||
|
|
@ -10,27 +10,77 @@ import allure
|
|||
from time import sleep
|
||||
from public.pages import controlcenterpage
|
||||
from public.common import log
|
||||
from public.appmodel import applyfromaction
|
||||
|
||||
|
||||
class CloudHostAction():
|
||||
def __init__(self, driver):
|
||||
self.dr = driver
|
||||
self.chpg = controlcenterpage.CloudHostPage(self.dr)
|
||||
self.cs = controlcenterpage.ShoppingcarPage(self.dr)
|
||||
self.log = log.Log()
|
||||
|
||||
def into_pv_cloudhost(self):
|
||||
def into_pv_cloudhost(self,projectname):
|
||||
try:
|
||||
self.chpg.mova_to_menu_bar()
|
||||
self.chpg.move_to_project_view_button()
|
||||
self.chpg.click_project_view_button()
|
||||
sleep(2)
|
||||
# self.chpg.click_cloud_host_snap_button()
|
||||
# self.chpg.move_to_project_cloud_host_button()
|
||||
|
||||
self.chpg.click_control_center_button()
|
||||
self.chpg.open_pv_cloudhost(projectname)
|
||||
# self.chpg.click_control_center_button()
|
||||
except Exception as e:
|
||||
self.log.error("进入云主机模块失败:%s"%e)
|
||||
|
||||
def create_cloud_host(self,hostname,**args):
|
||||
self.log.debug("创建虚拟机")
|
||||
try:
|
||||
self.chpg.click_apply_cloudhost_button()
|
||||
if "vpool" in args:
|
||||
self.chpg.click_box_vpool()
|
||||
self.chpg.input_and_search_box_vpool(args["vpool"])
|
||||
|
||||
if "ipversion" in args:
|
||||
self.log.debug("选择ip版本")
|
||||
if args["ipversion"] == "6":
|
||||
self.chpg.click_ipv6_button()
|
||||
else:
|
||||
self.chpg.click_ipv4_button()
|
||||
|
||||
if "subnetname" in args:
|
||||
self.log.debug("选择子网")
|
||||
self.chpg.click_subnet_box()
|
||||
self.chpg.input_and_select_subnet(args["subnetname"])
|
||||
|
||||
if "ipaddress" in args:
|
||||
self.log.debug("选择IP地址")
|
||||
self.chpg.click_ip_box()
|
||||
self.chpg.input_and_select_ip(args["ipaddress"])
|
||||
|
||||
if "cpu" in args:
|
||||
self.chpg.input_cpu(args["cpu"])
|
||||
|
||||
if "mem" in args:
|
||||
self.chpg.input_mem(args["mem"])
|
||||
|
||||
if "boot_disk" in args:
|
||||
self.chpg.input_boot_disk(args["boot_disk"])
|
||||
|
||||
if "data_disk" in args:
|
||||
self.chpg.select_data_disk_button()
|
||||
self.chpg.input_data_disk_size(args["data_disk"])
|
||||
self.chpg.input_cloud_host_name(hostname)
|
||||
|
||||
if "host_num" in args:
|
||||
host_count = args["host_num"]
|
||||
while host_count -1 :
|
||||
host_count = host_count -1
|
||||
self.chpg.click_add_host_num()
|
||||
self.chpg.click_entry_form_button()
|
||||
sleep(2)
|
||||
self.chpg.click_confirmation_form_button()
|
||||
self.cs.page_to_bottom()
|
||||
sleep(1)
|
||||
self.cs.click_submission_apply_form()
|
||||
|
||||
except Exception as e:
|
||||
self.log.error("创建虚拟机失败:%s"%e)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from public.common import pyselenium
|
||||
|
@ -41,8 +91,9 @@ if __name__ == '__main__':
|
|||
dr.max_window()
|
||||
login = Login(dr).login("hubei01", "1qaz!QAZ")
|
||||
ch = CloudHostAction(dr)
|
||||
ch.into_pv_cloudhost()
|
||||
sleep(1)
|
||||
ch.into_pv_cloudhost("湖北")
|
||||
ch.create_cloud_host(hostname="bei02",vpool="湖北",cpu="4",mem="4",boot_disk="10",data_disk="200")
|
||||
sleep(6)
|
||||
dr.quit()
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,243 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/2/23 9:45
|
||||
# @Author : mrwuzs
|
||||
# @Email : mrwuzs@outlook.com
|
||||
# @File : folderaction.py
|
||||
# @Software: PyCharm
|
||||
|
||||
import allure
|
||||
|
||||
from time import sleep
|
||||
from public.pages import folderpage
|
||||
from public.common import log
|
||||
from config import globalparam
|
||||
|
||||
class FolderAction(object):
|
||||
def __init__(self, driver):
|
||||
self.dr = driver
|
||||
self.log = log.Log()
|
||||
self.pdclasspage = folderpage.ProdCategPage(self.dr)
|
||||
self.pdmanagepage = folderpage.ProductManagePage(self.dr)
|
||||
self.spmanage = folderpage.SpecificationPage(self.dr)
|
||||
|
||||
|
||||
class ProdCategAction(FolderAction):
|
||||
|
||||
def create_product_class(self,classname,classnum,classdes,prodclass):
|
||||
try:
|
||||
self.pdclasspage.open_prod_catg_page()
|
||||
sleep(1)
|
||||
self.pdclasspage.click_new_create_prod_button()
|
||||
self.pdclasspage.input_systematic_name(classname)
|
||||
self.pdclasspage.input_systematic_number(classnum)
|
||||
sleep(1)
|
||||
self.pdclasspage.click_produc_category_icon()
|
||||
sleep(2)
|
||||
if prodclass == "裸金属服务器":
|
||||
self.pdclasspage.click_bare_metal_server_icon()
|
||||
elif prodclass == "云主机":
|
||||
self.pdclasspage.click_cloud_host_icon()
|
||||
elif prodclass == "云磁盘":
|
||||
self.pdclasspage.click_cloud_disk_icon()
|
||||
elif prodclass == "物理资源":
|
||||
self.pdclasspage.click_phy_res_icon()
|
||||
elif prodclass =="负载均衡":
|
||||
self.pdclasspage.click_loadbalance_icon()
|
||||
elif prodclass == "公网IP":
|
||||
self.pdclasspage.click_public_ip_icon()
|
||||
elif prodclass == "云主机备份":
|
||||
self.pdclasspage.click_cloud_host_backup_icon()
|
||||
elif prodclass == "容器服务":
|
||||
self.pdclasspage.click_container_service_icon()
|
||||
elif prodclass == "外网带宽":
|
||||
self.pdclasspage.click_bandwidth_icon()
|
||||
else:
|
||||
self.log.error("产品分类:%s 不在可选列表中"%prodclass)
|
||||
self.pdclasspage.click_commit_button()
|
||||
self.pdclasspage.input_describ(classdes)
|
||||
self.pdclasspage.click_submit_button()
|
||||
except Exception as e:
|
||||
self.log.error("创建产品分类错误:%s"%e)
|
||||
|
||||
def delete_product_class(self,classname):
|
||||
pass
|
||||
|
||||
def search_product_class(self,classname):
|
||||
try:
|
||||
|
||||
self.pdclasspage.open_prod_catg_page()
|
||||
self.pdclasspage.select_product_class(classname)
|
||||
data = self.pdclasspage.get_table_text()
|
||||
return data
|
||||
except Exception as e:
|
||||
self.log.error("异常错误:%s"%e)
|
||||
return None
|
||||
|
||||
|
||||
class ProductManageAction(FolderAction):
|
||||
def create_product(self,productclass,platform,resourcetype,productname,productbnum,description):
|
||||
try:
|
||||
self.pdmanagepage.open_product_manage_page()
|
||||
sleep(globalparam.middle)
|
||||
self.pdmanagepage.click_create_product_button()
|
||||
sleep(globalparam.tiny)
|
||||
self.pdmanagepage.click_product_class_box()
|
||||
self.pdmanagepage.select_product_class_name(productclass)
|
||||
self.pdmanagepage.click_platform_box()
|
||||
self.pdmanagepage.select_platform(platform)
|
||||
self.pdmanagepage.click_resource_type_box()
|
||||
self.pdmanagepage.select_resource_type(resourcetype)
|
||||
self.pdmanagepage.input_product_name(productname)
|
||||
self.pdmanagepage.input_product_num(productbnum)
|
||||
#目前都一样选择第一个
|
||||
self.pdmanagepage.click_get_url_button()
|
||||
sleep(globalparam.tiny)
|
||||
self.pdmanagepage.click_cloud_res_openup_button()
|
||||
self.pdmanagepage.page_to_bottom()
|
||||
sleep(globalparam.tiny)
|
||||
self.pdmanagepage.click_commit_button()
|
||||
self.pdmanagepage.input_product_des(description)
|
||||
sleep(globalparam.tiny)
|
||||
self.pdmanagepage.click_save_button()
|
||||
sleep(globalparam.tiny)
|
||||
self.pdmanagepage.click_save_button()
|
||||
|
||||
except Exception as e:
|
||||
self.log.error("创建产品失败:%s"%e)
|
||||
|
||||
|
||||
def product_online(self,productname):
|
||||
try:
|
||||
self.pdmanagepage.open_product_manage_page()
|
||||
self.pdmanagepage.select_product(productname)
|
||||
self.pdmanagepage.click_more_button()
|
||||
sleep(globalparam.middle)
|
||||
self.pdmanagepage.click_online_button()
|
||||
self.pdmanagepage.click_common_confirm_button_tag_a()
|
||||
except Exception as e:
|
||||
self.log.error("异常错误:%s,产品上线失败"%e)
|
||||
|
||||
def product_offline(self,productname):
|
||||
try:
|
||||
self.pdmanagepage.open_product_manage_page()
|
||||
self.pdmanagepage.select_product(productname)
|
||||
self.pdmanagepage.click_more_button()
|
||||
sleep(globalparam.tiny)
|
||||
self.pdmanagepage.click_offline_button()
|
||||
self.pdmanagepage.click_common_confirm_button_tag_a()
|
||||
except Exception as e:
|
||||
self.log.error("下线失败:%s"%e)
|
||||
|
||||
def search_product(self,productname):
|
||||
try:
|
||||
self.pdmanagepage.open_product_manage_page()
|
||||
self.pdmanagepage.select_product(productname)
|
||||
data = self.pdclasspage.get_table_text()
|
||||
return data
|
||||
except Exception as e:
|
||||
self.log.error("查询失败:%s,异常错误")
|
||||
|
||||
class SpecificationAction(FolderAction):
|
||||
#sp简称规格
|
||||
def create_specification(self,productname,spname,sptype,spdes,vpool,**kwargs):
|
||||
try:
|
||||
self.spmanage.open_specification_page()
|
||||
self.spmanage.click_create_sp_button()
|
||||
sleep(globalparam.small)
|
||||
self.spmanage.select_product_name(productname)
|
||||
self.spmanage.input_spn_name(spname)
|
||||
if sptype == 2:
|
||||
self.spmanage.click_new_create_box()
|
||||
elif sptype == 1:
|
||||
self.spmanage.click_change_box()
|
||||
else:
|
||||
pass
|
||||
if "sptag" in kwargs:
|
||||
self.spmanage.input_sp_tag(kwargs["sptag"])
|
||||
|
||||
self.spmanage.input_sp_des(spdes)
|
||||
self.spmanage.click_next_step_button()
|
||||
sleep(globalparam.middle)
|
||||
self.spmanage.page_to_bottom()
|
||||
self.spmanage.select_vpool(vpool)
|
||||
if "volume_type" in kwargs:
|
||||
self.spmanage.input_volume_type(kwargs["volume_type"])
|
||||
if "volume_disk_type_tag" in kwargs:
|
||||
self.spmanage.input_volume_disk_type_tag(kwargs["volume_disk_type_tag"])
|
||||
if "cloud_host_type" in kwargs:
|
||||
self.spmanage.select_host_type(kwargs["cloud_host_type"])
|
||||
if "test_period" in kwargs:
|
||||
self.spmanage.select_test_period(kwargs["select_test_period"])
|
||||
self.spmanage.click_complete_button()
|
||||
except Exception as e:
|
||||
self.log.error("创建产品规格失败:%s"%e)
|
||||
|
||||
|
||||
def online_sp(self,spname):
|
||||
try:
|
||||
self.spmanage.open_specification_page()
|
||||
sleep(globalparam.small)
|
||||
self.spmanage.select_sp_name(spname)
|
||||
self.spmanage.click_more_button()
|
||||
sleep(globalparam.small)
|
||||
self.spmanage.click_online_button()
|
||||
self.spmanage.click_common_confirm_button_tag_a()
|
||||
except Exception as e:
|
||||
self.log.error("产品规格上线失败:%s"%e)
|
||||
|
||||
def offline_sp(self,spname):
|
||||
try:
|
||||
self.spmanage.open_specification_page()
|
||||
sleep(globalparam.small)
|
||||
self.spmanage.select_sp_name(spname)
|
||||
self.spmanage.click_more_button()
|
||||
sleep(globalparam.small)
|
||||
self.spmanage.click_offline_button()
|
||||
self.spmanage.click_common_confirm_button_tag_a()
|
||||
except Exception as e:
|
||||
self.log.error("产品规格下线失败:%s"%e)
|
||||
|
||||
def delete_sp(self,spname):
|
||||
try:
|
||||
self.spmanage.open_specification_page()
|
||||
sleep(globalparam.small)
|
||||
self.spmanage.select_sp_name(spname)
|
||||
self.spmanage.click_more_button()
|
||||
sleep(globalparam.small)
|
||||
self.spmanage.click_delete_sp_button()
|
||||
self.spmanage.click_common_confirm_button_tag_a()
|
||||
except Exception as e:
|
||||
self.log.error("产品规格上线失败:%s"%e)
|
||||
|
||||
|
||||
def search_sp(self,spname):
|
||||
try:
|
||||
self.spmanage.open_specification_page()
|
||||
sleep(globalparam.small)
|
||||
self.spmanage.select_sp_name(spname)
|
||||
sleep(globalparam.tiny)
|
||||
data = self.spmanage.get_table_text()
|
||||
return data
|
||||
except Exception as e:
|
||||
self.log.error("查询失败:%s,异常错误"%e)
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from public.common import pyselenium
|
||||
from config import globalparam
|
||||
from public.appmodel.loginaction import Login
|
||||
|
||||
dr = pyselenium.PySelenium(globalparam.browser)
|
||||
dr.max_window()
|
||||
login = Login(dr).login("hubei01", "1qaz!QAZ")
|
||||
#
|
||||
sleep(3)
|
||||
product =SpecificationAction(dr)
|
||||
# # product.create_product("云主机","Openstack L","云主机","云主机测试","12","测试")
|
||||
# product.product_offline("云主机测试")
|
||||
# product.create_specification(productname="云主机",spname="云主机规格test",sptype=3,sptag="测试",spdes="自动化测试",vpool="湖北")
|
||||
print(product.search_sp(spname="云主机规格test"))
|
||||
sleep(2)
|
||||
# product.create_product_class("123","1","234")
|
||||
dr.quit()
|
|
@ -48,11 +48,13 @@ if __name__ == '__main__':
|
|||
dr = pyselenium.PySelenium(globalparam.browser)
|
||||
dr.max_window()
|
||||
login = Login(dr).login("系统管理员", "123456")
|
||||
|
||||
#
|
||||
product = ProductAction(dr)
|
||||
sleep(2)
|
||||
product.create_productclassify("123","1","234")
|
||||
# # user.create_user("河南","wuzs0001","wuzs0001","1qaz!QAZ","1qaz!QAZ","wzs@qq.com")
|
||||
# user.create_tenant_user("wuzs_auto01", "wuzs_teant_0001", "wuzs_teant_0001", "1qaz!QAZ", "1qaz!QAZ", "wzs@qq.com")
|
||||
# user.allocation_domain_administrator("河南","wuzs0001")
|
||||
#
|
||||
sleep(5)
|
||||
dr.quit()
|
|
@ -10,6 +10,7 @@ import allure
|
|||
from time import sleep
|
||||
from public.pages import auth_project_page
|
||||
from public.common import log
|
||||
from config import globalparam
|
||||
|
||||
|
||||
class PojectAction(object):
|
||||
|
@ -19,14 +20,14 @@ class PojectAction(object):
|
|||
self.log = log.Log()
|
||||
|
||||
def create_project(self, tenantname, projectname, projectdesc):
|
||||
sleep(globalparam.small)
|
||||
with allure.step("创建项目"):
|
||||
allure.attach("运营部门名称:%s" % tenantname)
|
||||
allure.attach("项目名称:%s" % projectname)
|
||||
allure.attach("项目描述:%s" % projectdesc)
|
||||
self.propg.open_authproject()
|
||||
self.dr.wait(10)
|
||||
self.propg.click_new_create_buttun()
|
||||
sleep(1)
|
||||
sleep(globalparam.tiny)
|
||||
self.propg.click_select_tenant()
|
||||
self.propg.input_and_select_tenant(tenantname)
|
||||
self.propg.click_select_zzjg()
|
||||
|
@ -39,13 +40,12 @@ class PojectAction(object):
|
|||
with allure.step("删除项目"):
|
||||
allure.attach("项目名称:%s" % projectname)
|
||||
self.propg.open_authproject()
|
||||
self.dr.wait(10)
|
||||
self.propg.input_and_search_project(projectname)
|
||||
sleep(1)
|
||||
sleep(globalparam.small)
|
||||
self.propg.click_project_more_button()
|
||||
sleep(0.5)
|
||||
sleep(globalparam.tiny)
|
||||
self.propg.click_project_delete_button()
|
||||
sleep(0.5)
|
||||
sleep(globalparam.tiny)
|
||||
self.propg.click_project_delete_success_button()
|
||||
|
||||
def assign_admin_user_for_project(self,projectname,username):
|
||||
|
|
|
@ -10,6 +10,7 @@ import allure
|
|||
from time import sleep
|
||||
from public.pages import sys_regionMgrPage
|
||||
from public.common import log
|
||||
from config import globalparam
|
||||
|
||||
|
||||
class Add_Res_Node(object):
|
||||
|
@ -20,6 +21,7 @@ class Add_Res_Node(object):
|
|||
self.log = log.Log()
|
||||
|
||||
def _skip_to_resource_node(self):
|
||||
sleep(globalparam.middle)
|
||||
self.regionpg.open_sys_regionMgr_page()
|
||||
# self.log.info("跳转到资源节点页面")
|
||||
# menupage = menuPage.MenuPage(self.dr)
|
||||
|
@ -36,7 +38,6 @@ class Add_Res_Node(object):
|
|||
virtual_type,
|
||||
regDesc):
|
||||
self._skip_to_resource_node()
|
||||
self.dr.wait(10)
|
||||
with allure.step("创建资源节点"):
|
||||
allure.attach("域:%s" % regionname)
|
||||
allure.attach("资源节点的名称:%s" % nodename)
|
||||
|
|
|
@ -12,6 +12,7 @@ from public.pages import menuPage
|
|||
from public.pages import resSyncPage
|
||||
from public.common import log
|
||||
from public.common import publicfunction
|
||||
from config import globalparam
|
||||
|
||||
|
||||
class ResSync(object):
|
||||
|
@ -32,10 +33,11 @@ class ResSync(object):
|
|||
allure.attach("域:%s" % reginname)
|
||||
allure.attach("资源节点的名称:%s" % datacenter)
|
||||
self.log.info("同步物理资源")
|
||||
sleep(globalparam.middle)
|
||||
self.syncPage.open_ressyncpage()
|
||||
self.syncPage.open_osphysicalsyncpage()
|
||||
self.log.info("选择region:%s;" % reginname)
|
||||
sleep(1)
|
||||
sleep(globalparam.small)
|
||||
self.syncPage.click_select_region()
|
||||
self.syncPage.select_region(reginname)
|
||||
self.log.info("选择数据中心:%s" % datacenter)
|
||||
|
@ -46,10 +48,10 @@ class ResSync(object):
|
|||
allure.attach("数据中心名称:%s" % DC)
|
||||
self.syncPage.select_and_click_data_center(DC)
|
||||
self.syncPage.click_sync_buttun()
|
||||
sleep(1)
|
||||
sleep(globalparam.small)
|
||||
# self.syncPage.switch_commit_page()
|
||||
self.syncPage.click_commit_buttun()
|
||||
sleep(1)
|
||||
sleep(globalparam.small)
|
||||
commit_button_flag = self.syncPage.is_exists_commit_buttun()
|
||||
if commit_button_flag is True:
|
||||
publicfunction.add_image(self.dr, "物理资源无法同步")
|
||||
|
|
|
@ -0,0 +1,136 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/2/24 10:11
|
||||
# @Author : mrwuzs
|
||||
# @Email : mrwuzs@outlook.com
|
||||
# @File : volumeaction.py
|
||||
# @Software: PyCharm
|
||||
|
||||
from time import sleep
|
||||
from public.pages import controlcenterpage
|
||||
from public.common import log
|
||||
from public.appmodel import applyfromaction
|
||||
|
||||
|
||||
class VolumeAction():
|
||||
def __init__(self, driver):
|
||||
self.dr = driver
|
||||
self.mvp = controlcenterpage.ManageVolumePage(self.dr)
|
||||
self.cs = controlcenterpage.ShoppingcarPage(self.dr)
|
||||
self.log = log.Log()
|
||||
|
||||
def create_volume(
|
||||
self,
|
||||
projectname,
|
||||
volumename,
|
||||
vpool,
|
||||
capacity,
|
||||
mounttype,
|
||||
**kwargs):
|
||||
try:
|
||||
|
||||
self.mvp.open_pv_managevolume_page(projectname)
|
||||
self.mvp.click_apply_volume_button()
|
||||
self.mvp.click_vpool_box()
|
||||
self.mvp.select_vpool(vpool)
|
||||
print(capacity)
|
||||
self.mvp.input_volume_capacity(capacity)
|
||||
if mounttype == "独立磁盘":
|
||||
self.mvp.click_independent_disk()
|
||||
elif mounttype == "独享挂载":
|
||||
self.mvp.click_cloud_host_category()
|
||||
if kwargs["category"] == "已有云主机":
|
||||
self.mvp.select_cloud_host_category("已有云主机")
|
||||
elif kwargs["category"] == "申请单中云主机":
|
||||
self.mvp.select_cloud_host_category("申请单中云主机")
|
||||
else:
|
||||
self.log.error("cant select loud_host_category")
|
||||
|
||||
if kwargs["cloudhost"]:
|
||||
self.mvp.select_cloud_host(kwargs["cloudhost"])
|
||||
else:
|
||||
self.log.error("you must select a cloudhost")
|
||||
|
||||
elif mounttype == "共享挂载":
|
||||
pass
|
||||
else:
|
||||
self.log.error(
|
||||
"mounttype:%s is not in ['独立磁盘','独享挂载','共享挂载']" %
|
||||
mounttype)
|
||||
self.mvp.input_volume_name(volumename)
|
||||
if "volume_num" in kwargs:
|
||||
host_count = kwargs["host_num"]
|
||||
while host_count - 1:
|
||||
host_count = host_count - 1
|
||||
self.mvp.click_number_application_add()
|
||||
sleep(2)
|
||||
self.mvp.click_entry_form_button()
|
||||
self.mvp.click_confirmation_form_button()
|
||||
self.cs.page_to_bottom()
|
||||
sleep(1)
|
||||
self.cs.click_submission_apply_form()
|
||||
sleep(1)
|
||||
self.cs.page_to_bottom()
|
||||
sleep(1)
|
||||
self.cs.commit_submit_button()
|
||||
except Exception as e:
|
||||
self.log.error("创建云磁盘失败,请确认:%s" % e)
|
||||
|
||||
def attach_volume(self, projectname, volume, host, attachtype="exclusive"):
|
||||
try:
|
||||
self.mvp.open_pv_managevolume_page(projectname)
|
||||
sleep(2)
|
||||
self.mvp.select_volume(volume)
|
||||
self.mvp.click_attach_button()
|
||||
sleep(0.5)
|
||||
self.mvp.click_attach_button()
|
||||
print(attachtype)
|
||||
if attachtype != "exclusive":
|
||||
self.mvp.click_share_button()
|
||||
self.mvp.click_host_for_attach_box()
|
||||
self.mvp.select_host_for_attach(host)
|
||||
sleep(0.5)
|
||||
self.mvp.click_commit_for_attach_buttton()
|
||||
except Exception as e:
|
||||
self.log.error("挂载磁盘失败:%s" % e)
|
||||
|
||||
def delete_volume(self, projectname, volume):
|
||||
try:
|
||||
self.mvp.open_pv_managevolume_page(projectname)
|
||||
sleep(1)
|
||||
self.mvp.select_volume(volume)
|
||||
self.mvp.click_volume_more_botton()
|
||||
self.mvp.click_release_button()
|
||||
self.mvp.click_release_commit_button()
|
||||
except Exception as e:
|
||||
self.log.error("删除磁盘失败:%s" % e)
|
||||
|
||||
def create_volume_snap(self, projectname, volume, snapname, des):
|
||||
try:
|
||||
self.mvp.open_pv_managevolume_page(projectname)
|
||||
sleep(1)
|
||||
self.mvp.select_volume(volume)
|
||||
self.mvp.click_volume_more_botton()
|
||||
self.mvp.click_create_snap_button()
|
||||
sleep(0.5)
|
||||
self.mvp.input_volume_sanp_name(snapname)
|
||||
self.mvp.input_volume_snap_des(des)
|
||||
self.mvp.click_create_button_yellow()
|
||||
except Exception as e:
|
||||
self.log.error("创建磁盘快照失败:%s" % e)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from public.common import pyselenium
|
||||
from config import globalparam
|
||||
from public.appmodel.loginaction import Login
|
||||
|
||||
dr = pyselenium.PySelenium(globalparam.browser)
|
||||
dr.wait(10)
|
||||
dr.max_window()
|
||||
login = Login(dr).login("hubei01", "1qaz!QAZ")
|
||||
sleep(2)
|
||||
vc = VolumeAction(dr)
|
||||
# vc.create_volume("湖北","测试磁盘01","湖北","100",mounttype="共享挂载",category="已有云主机",cloudhost="测试111")
|
||||
vc.create_volume_snap("湖北", "测试磁盘01", "快照测试", "描述信息")
|
||||
sleep(10)
|
||||
dr.quit()
|
|
@ -0,0 +1,150 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/2/20 12:19
|
||||
# @Author : mrwuzs
|
||||
# @Email : mrwuzs@outlook.com
|
||||
# @File : mysql_pub.py
|
||||
# @Software: PyCharm
|
||||
'''
|
||||
定义对mysql数据库基本操作的封装
|
||||
1.单条数据的操作:insert,update,delete
|
||||
2.查询数据表的一条数据
|
||||
3.查询数据表的所有数据
|
||||
'''
|
||||
|
||||
import pymysql
|
||||
from public.common.log import Log
|
||||
|
||||
class OpMysql():
|
||||
'''mysql操作类,基于pymysql的封装'''
|
||||
log = Log()
|
||||
|
||||
|
||||
def __init__(self,host,port,username,password,databasename):
|
||||
'''
|
||||
初始化opmysql对象
|
||||
:param host:数据库服务器地址
|
||||
:param username:数据库用户名
|
||||
:param password:用户的密码
|
||||
:param databasename:要操作的库名称
|
||||
'''
|
||||
try:
|
||||
self.conn = pymysql.connect(
|
||||
host = host,
|
||||
user = username,
|
||||
password = password,
|
||||
database = databasename,
|
||||
port = port,
|
||||
charset = 'utf8', # 如果sql语句中存在中文字符的时候,需要在这里指定charset的参数,否则中文显示乱码
|
||||
cursorclass = pymysql.cursors.DictCursor # pymysql默认select获取的数据是元祖类型,如果想要字典类型的数据,可以在这里统一设置
|
||||
)
|
||||
self.cur = self.conn.cursor() #创建游标
|
||||
self.log.info('数据库连接成功')
|
||||
except pymysql.Error as e:
|
||||
self.log.info("[connection_message]-host:%s;user:%s;password:%s;database:%s"%(host,username,password,databasename))
|
||||
self.log.error("数据库连接错误%s"%e)
|
||||
|
||||
|
||||
def op_sql(self,query,params=None):
|
||||
'''
|
||||
单条数据的操作,insert,update,delete
|
||||
:param query:包含%s的sql字符串,当params=None的时候,不包含%s
|
||||
:param params:一个元祖,默认为None
|
||||
:return:如果执行过程没有crash,返回True,反之返回False
|
||||
'''
|
||||
try:
|
||||
self.cur.execute(query,params)
|
||||
self.conn.commit()
|
||||
return True
|
||||
except BaseException as e:
|
||||
self.conn.rollback() #如果这里是执行的执行存储过程的sql命令,那么可能会存在rollback的情况,所以这里应该考虑到
|
||||
self.log.info("[sql_str_message]-%s"%self.cur.mogrify(query,params))
|
||||
self.log.error(e)
|
||||
return False
|
||||
|
||||
def select_one(self,query,params=None):
|
||||
'''
|
||||
查询数据表的单条数据
|
||||
:param query: 包含%s的sql字符串,当params=None的时候,不包含%s
|
||||
:param params: 一个元祖,默认为None
|
||||
:return: 如果执行未crash,并以包含dict的列表的方式返回select的结果,否则返回错误代码001
|
||||
'''
|
||||
try:
|
||||
self.cur.execute(query,params)
|
||||
self.cur.scroll(0,"absolute") #光标回到初始位置,感觉自己的这句有点多余
|
||||
return self.cur.fetchone()
|
||||
except BaseException as e:
|
||||
self.log.info("[sql_str_message]-%s" % self.cur.mogrify(query, params))
|
||||
self.log.error(e)
|
||||
return "001" #错误代码001
|
||||
|
||||
def select_all(self,query,params=None):
|
||||
'''
|
||||
查询数据表的单条数据
|
||||
:param query:包含%s的sql字符串,当params=None的时候,不包含%s
|
||||
:param params:一个元祖,默认为None
|
||||
:return:如果执行未crash,并以包含dict的列表的方式返回select的结果,否则返回错误代码001
|
||||
'''
|
||||
try:
|
||||
self.cur.execute(query,params)
|
||||
self.cur.scroll(0,"absolute") #光标回到初始位置,感觉这里得这句有点多余
|
||||
return self.cur.fetchall()
|
||||
except BaseException as e:
|
||||
self.log.info("[sql_str_message]-%s" % self.cur.mogrify(query, params))
|
||||
self.log.error(e)
|
||||
return "001" #错误代码001
|
||||
|
||||
def insert_many(self,query,params):
|
||||
'''
|
||||
向数据表中插入多条数据
|
||||
:param query:包含%s的sql字符串,当params=None的时候,不包含%s
|
||||
:param params:一个内容为元祖的列表
|
||||
:return:如果执行过程没有crash,返回True,反之返回False
|
||||
'''
|
||||
try:
|
||||
self.cur.executemany(query,params)
|
||||
self.conn.commit()
|
||||
return True
|
||||
except BaseException as e:
|
||||
self.conn.rollback()
|
||||
self.log.info("[sql_str_message]-%s" % self.cur.mogrify(query, params))
|
||||
self.log.error(e)
|
||||
return False
|
||||
|
||||
|
||||
def delete_all(self,query):
|
||||
try:
|
||||
self.cur.execute(query)
|
||||
self.conn.commit()
|
||||
self.log.info("%s——--》清空表成功" %query)
|
||||
return True
|
||||
except BaseException as e:
|
||||
self.conn.rollback()
|
||||
self.log.info("[sql_str_message]-%s" % self.cur.mogrify(query))
|
||||
self.log.error(e)
|
||||
return False
|
||||
|
||||
|
||||
def dis_db(self):
|
||||
self.cur.close()
|
||||
self.conn.close()
|
||||
self.log.info("断开数据库")
|
||||
|
||||
#
|
||||
# def __del__(self):
|
||||
# '''
|
||||
# 当该对象的引用计数为0的时候,python解释器会自动执行__dell__方法,自动释放游标和链接
|
||||
# '''
|
||||
# # self.cur.close()
|
||||
# self.conn.close()
|
||||
# print("数据库连接关闭")
|
||||
|
||||
if __name__ == "__main__":
|
||||
# test
|
||||
user = OpMysql('192.168.253.55',14316,'arkproxy','P@ssw0rd','user')
|
||||
uuid = user.select_one("SELECT UUID FROM project WHERE NAME LIKE '%湖北%' ")
|
||||
print(uuid["UUID"])
|
||||
|
||||
#rack.op_sql("UPDATE region_group SET hub_vregion_id= '413c625c-323b-4f2c-8910-fdfb44de2219' WHERE name = %s;",("hub_vregion1",))
|
||||
|
||||
|
||||
|
|
@ -9,6 +9,7 @@ import os
|
|||
import time
|
||||
import allure
|
||||
from config import globalparam
|
||||
from public.common.mysql_pub import OpMysql
|
||||
|
||||
|
||||
# 截图放到report下的img目录下
|
||||
|
@ -37,10 +38,16 @@ def is_Chinese(char):
|
|||
else:
|
||||
return False
|
||||
|
||||
def get_project_id(projectname):
|
||||
user = OpMysql('192.168.253.55',14316,'arkproxy','P@ssw0rd','user')
|
||||
uuid = user.select_one("SELECT UUID FROM project WHERE NAME LIKE '%s' "%projectname)["UUID"]
|
||||
return uuid
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from public.common import pyselenium
|
||||
dr = pyselenium.PySelenium(globalparam.browser)
|
||||
dr.max_window()
|
||||
dr.open('http://192.168.54.13/#/login')
|
||||
get_img(dr, "登录界面")
|
||||
# dr = pyselenium.PySelenium(globalparam.browser)
|
||||
# dr.max_window()
|
||||
# dr.open('http://192.168.54.13/#/login')
|
||||
# get_img(dr, "登录界面")
|
||||
print(get_project_id("湖北"))
|
||||
|
|
|
@ -151,7 +151,7 @@ class PySelenium(object):
|
|||
elif by == "css":
|
||||
WebDriverWait(
|
||||
self.driver, secs, 1).until(
|
||||
EC.presence_of_element_located(move_to_element
|
||||
EC.presence_of_element_located(
|
||||
(By.CSS_SELECTOR, value)), messages)
|
||||
else:
|
||||
raise NameError(
|
||||
|
@ -474,6 +474,18 @@ class PySelenium(object):
|
|||
"{0} send the key esc, Spend {1} seconds".format(
|
||||
success, time.time() - t1))
|
||||
|
||||
def END(self):
|
||||
"""
|
||||
send END key
|
||||
:return:
|
||||
"""
|
||||
t1 = time.time()
|
||||
ActionChains(self.driver).send_keys(Keys.END).perform()
|
||||
self.my_print(
|
||||
"{0} send the key END, Spend {1} seconds".format(
|
||||
success, time.time() - t1))
|
||||
|
||||
|
||||
def backspace(self,css):
|
||||
"""
|
||||
send esc key
|
||||
|
@ -754,7 +766,7 @@ class PySelenium(object):
|
|||
all_handle = self.driver.window_handles
|
||||
flag = 0
|
||||
while len(all_handle) < 2:
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
all_handle = self.driver.window_handles
|
||||
flag += 1
|
||||
if flag == 5:
|
||||
|
|
|
@ -20,7 +20,7 @@ class AuthProductPage(basepage.Page):
|
|||
"/csdp/manage/#/manage-view/adminManage/folder/prodCateg")
|
||||
|
||||
def click_crate_product_classify_button(self):
|
||||
self.log.debug("点击创建产品分类按钮")
|
||||
self.log.debug("单击创建产品分类按钮")
|
||||
self.dr.click("xpath->(//button[@type='button'])[10]")
|
||||
|
||||
def input_clssifyname(self, value):
|
||||
|
@ -32,7 +32,7 @@ class AuthProductPage(basepage.Page):
|
|||
self.dr.clear_type("xpath->/html/body/app-component/div[1]/main-component/div/div/manage-component/div/div/div/div/div[1]/div[1]/div[2]/form/div[1]/div/div[3]/div/input", value)
|
||||
|
||||
def click_select_classify_button(self):
|
||||
self.log.debug("点击选择产品分类图标按钮")
|
||||
self.log.debug("单击选择产品分类图标按钮")
|
||||
self.dr.click("xpath->/html/body/app-component/div[1]/main-component/div/div/manage-component/div/div/div/div/div[1]/div[1]/div[2]/form/div[1]/div/div[4]/div/div/span/button")
|
||||
|
||||
def click_select_classify_menu_button(self, value):
|
||||
|
@ -40,7 +40,7 @@ class AuthProductPage(basepage.Page):
|
|||
self.dr.click("xpath->/html/body/div[4]/div/div[2]/div/ul/li[2]/i")
|
||||
|
||||
def click_assure_button(self):
|
||||
self.log.debug("点击确定按钮")
|
||||
self.log.debug("单击确定按钮")
|
||||
self.dr.click("xpath->/html/body/div[4]/div/div[3]/div/button[1]")
|
||||
|
||||
def input_description(self, value):
|
||||
|
@ -49,5 +49,5 @@ class AuthProductPage(basepage.Page):
|
|||
"/html/body/app-component/div[1]/main-component/div/div/manage-component/div/div/div/div/div[1]/div[1]/div[2]/form/div[1]/div/div[5]/div/textarea",value)
|
||||
|
||||
def click_new_product_classify_save_button(self):
|
||||
self.log.debug("点击保存按钮")
|
||||
self.log.debug("单击保存按钮")
|
||||
self.dr.click("xpath->/html/body/app-component/div[1]/main-component/div/div/manage-component/div/div/div/div/div[1]/div[1]/div[2]/form/div[2]/div/div/button[1]")
|
||||
|
|
|
@ -19,11 +19,11 @@ class AuthUsertPage(basepage.Page):
|
|||
"/csdp/manage/#/manage-view/adminManage/auth/user")
|
||||
|
||||
def click_crate_user_button(self):
|
||||
self.log.debug("点击创建用户按钮")
|
||||
self.log.debug("单击创建用户按钮")
|
||||
self.dr.click("xpath->(//button[@type='button'])[10]")
|
||||
|
||||
def click_selcet_tenant(self):
|
||||
self.log.debug("点击选择运营部门按钮")
|
||||
self.log.debug("单击选择运营部门按钮")
|
||||
self.dr.click("xpath->//span/button/i")
|
||||
|
||||
def input_select_tenant(self, value):
|
||||
|
@ -36,13 +36,13 @@ class AuthUsertPage(basepage.Page):
|
|||
# ,value)
|
||||
|
||||
def click_radio_tenant_name(self):
|
||||
self.log.debug("点击运营部门单选框")
|
||||
self.log.debug("单击运营部门单选框")
|
||||
self.dr.click(
|
||||
"xpath->//div[@id='selectClientModal']/div[@class='modal-body']/div[@class='box-body form']/"
|
||||
"table-component/div/table/tbody/tr/td[1]/div/span/input[@type='radio']")
|
||||
|
||||
def click_commit_button(self):
|
||||
self.log.debug("点击确定按钮")
|
||||
self.log.debug("单击确定按钮")
|
||||
self.dr.click(
|
||||
"xpath->//div[@id='selectClientModal']/div[@class='modal-footer']/"
|
||||
"button[@class='btn btn-flat btn-primary']")
|
||||
|
@ -68,7 +68,7 @@ class AuthUsertPage(basepage.Page):
|
|||
self.dr.clear_type("xpath->(//input[@name='email'])[2]", value)
|
||||
|
||||
def click_new_user_save_button(self):
|
||||
self.log.debug("点击保存按钮")
|
||||
self.log.debug("单击保存按钮")
|
||||
self.dr.click("xpath->//form/div[2]/div/div/button")
|
||||
|
||||
def input_select_user(self, value):
|
||||
|
@ -77,13 +77,13 @@ class AuthUsertPage(basepage.Page):
|
|||
"xpath->//div[@class='table-toolbar']/div/div//form/div/div/input", value)
|
||||
|
||||
def click_user_more_button(self):
|
||||
self.log.debug("点击更多按钮")
|
||||
self.log.debug("单击更多按钮")
|
||||
self.dr.click("xpath->//span[contains(.,'更多')]")
|
||||
|
||||
def click_user_delete_button(self):
|
||||
self.log.debug("点击删除按钮")
|
||||
self.log.debug("单击删除按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'删除')]")
|
||||
|
||||
def click_user_delete_success_button(self):
|
||||
self.log.debug("点击确定按钮")
|
||||
self.log.debug("单击确定按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'确定')]")
|
||||
|
|
|
@ -18,11 +18,11 @@ class AuthProjectPage(basepage.Page):
|
|||
"/csdp/manage/#/manage-view/adminManage/auth/projects")
|
||||
|
||||
def click_new_create_buttun(self):
|
||||
self.log.debug("点击创建项目按钮")
|
||||
self.log.debug("单击创建项目按钮")
|
||||
self.dr.click("xpath->//div[5]/button/i")
|
||||
|
||||
def click_select_tenant(self):
|
||||
self.log.debug("点击选择运营部门")
|
||||
self.log.debug("单击选择运营部门")
|
||||
self.dr.click("xpath->//span[contains(.,'请选择运营部门')]")
|
||||
|
||||
def input_and_select_tenant(self, value):
|
||||
|
@ -30,7 +30,7 @@ class AuthProjectPage(basepage.Page):
|
|||
self.dr.type_and_enter("xpath->(//input[@type='search'])[3]", value)
|
||||
|
||||
def click_select_zzjg(self):
|
||||
self.log.debug("点击选择组织机构按钮")
|
||||
self.log.debug("单击选择组织机构按钮")
|
||||
self.dr.click("xpath->//div[3]/div/div/button[2]/i")
|
||||
|
||||
def input_project_name(self, value):
|
||||
|
@ -46,7 +46,7 @@ class AuthProjectPage(basepage.Page):
|
|||
self.dr.click("xpath->//a[contains(text(),'%s')]" % value)
|
||||
|
||||
def click_save_new_project(self):
|
||||
self.log.debug("点击保存项目按钮")
|
||||
self.log.debug("单击保存项目按钮")
|
||||
self.dr.click("xpath->(//button[@type='button'])[10]")
|
||||
|
||||
def input_and_search_project(self, value):
|
||||
|
@ -55,19 +55,19 @@ class AuthProjectPage(basepage.Page):
|
|||
"xpath->//div/div/div/div/div/div/div/div/form/div/div/input", value)
|
||||
|
||||
def click_project_more_button(self):
|
||||
self.log.debug("点击更多按钮")
|
||||
self.log.debug("单击更多按钮")
|
||||
self.dr.click("xpath->//span[contains(.,'更多')]")
|
||||
|
||||
def click_project_delete_button(self):
|
||||
self.log.debug("点击删除按钮")
|
||||
self.log.debug("单击删除按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'删除')]")
|
||||
|
||||
def click_project_delete_success_button(self):
|
||||
self.log.debug("点击确定按钮")
|
||||
self.log.debug("单击确定按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'确定')]")
|
||||
|
||||
def click_project_network_button(self):
|
||||
self.log.debug("点击网络按钮")
|
||||
self.log.debug("单击网络按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'网络')]")
|
||||
|
||||
def click_project_name_button(self,value):
|
||||
|
@ -92,7 +92,7 @@ class AuthProjectPage(basepage.Page):
|
|||
self.dr.click("xpath->//a[contains(text(),'管理用户')]")
|
||||
|
||||
def input_serach_user_box(self,value):
|
||||
"""点击选择用户后的页面"""
|
||||
"""单击选择用户后的页面"""
|
||||
self.log.debug("查询用户:%s"%value)
|
||||
self.dr.type_and_enter("xpath->(//input[@type='search'])[7]",value)
|
||||
|
||||
|
@ -109,5 +109,5 @@ class AuthProjectPage(basepage.Page):
|
|||
|
||||
def click_remove_button(self):
|
||||
"""操作下的移除按钮"""
|
||||
self.log.debug("点击移除按钮")
|
||||
self.log.debug("单击移除按钮")
|
||||
self.dr.click("")
|
|
@ -18,7 +18,7 @@ class AuthTenantPage(basepage.Page):
|
|||
"/csdp/manage/#/manage-view/adminManage/auth/tenant")
|
||||
|
||||
def click_create_tenant_button(self):
|
||||
self.log.debug("点击新建运营部门按钮")
|
||||
self.log.debug("单击新建运营部门按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'新建运营部门')]")
|
||||
|
||||
def input_tenant_name(self, value):
|
||||
|
@ -34,7 +34,7 @@ class AuthTenantPage(basepage.Page):
|
|||
self.dr.clear_type("name->phoneNo", value)
|
||||
|
||||
def click_save_button(self):
|
||||
self.log.debug("点击保存按钮")
|
||||
self.log.debug("单击保存按钮")
|
||||
self.dr.click("xpath->//button[@type='submit']")
|
||||
|
||||
def input_secrch_tenant(self, value):
|
||||
|
@ -43,33 +43,33 @@ class AuthTenantPage(basepage.Page):
|
|||
"xpath->//div[@class='col-md-3 padding-0']/form/div/div/input", value)
|
||||
|
||||
def click_pull_down_button(self):
|
||||
self.log.debug("点击下拉按钮")
|
||||
self.log.debug("单击下拉按钮")
|
||||
self.dr.click("xpath->//div[@id='card']/div/div[2]/div/a[2]/i")
|
||||
|
||||
def click_tenant_delete_button(self):
|
||||
self.log.debug("点击删除按钮")
|
||||
self.log.debug("单击删除按钮")
|
||||
self.dr.click("xpath->//a[contains(text(),'删除')]")
|
||||
|
||||
def click_tenant_delete_success_button(self):
|
||||
self.log.debug("点击确定按钮")
|
||||
self.log.debug("单击确定按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'确定')]")
|
||||
|
||||
def click_tenant_view_details_button(self):
|
||||
self.log.debug("点击查看详细按钮")
|
||||
self.log.debug("单击查看详细按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'查看详细')]")
|
||||
|
||||
def click_post_button(self):
|
||||
self.log.debug("点击岗位按钮")
|
||||
self.log.debug("单击岗位按钮")
|
||||
self.dr.click("xpath->//a[contains(text(),'岗位')]")
|
||||
|
||||
def click_user_num_button(self):
|
||||
self.log.debug("点击用户数量按钮")
|
||||
self.log.debug("单击用户数量按钮")
|
||||
self.dr.click("xpath->//td[3]/div/a")
|
||||
|
||||
def click_remove_user_button(self):
|
||||
self.log.debug("点击移除按钮")
|
||||
self.log.debug("单击移除按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'移除')]")
|
||||
|
||||
def click_remove_user_success_button(self):
|
||||
self.log.debug("点击确定按钮")
|
||||
self.log.debug("单击确定按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'确定')]")
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
from public.common import log
|
||||
from config import globalparam
|
||||
from public.common import publicfunction
|
||||
|
||||
class Page(object):
|
||||
"""
|
||||
|
@ -20,7 +21,7 @@ class Page(object):
|
|||
|
||||
|
||||
def click_res_node_mag(self):
|
||||
self.log.debug("点击资源节点管理")
|
||||
self.log.debug("单击资源节点管理")
|
||||
self.dr.click("xpath -> //li[contains(.,'资源节点管理')]")
|
||||
|
||||
def open_resource_overview(self):
|
||||
|
@ -38,7 +39,7 @@ class Page(object):
|
|||
self.dr.move_to_element("xpath->//div[@id='app']/section/header/div/div/div[3]/div[3]/span/i")
|
||||
|
||||
def click_logout_button(self):
|
||||
self.log.debug("点击退出按钮")
|
||||
self.log.debug("单击退出按钮")
|
||||
self.dr.click("xpath->//ul/li[text()='退出']")
|
||||
|
||||
def click_common_confirm_button(self):
|
||||
|
@ -64,7 +65,7 @@ class Page(object):
|
|||
|
||||
|
||||
def click_project_view_button(self):
|
||||
self.log.debug("点击项目视图按钮")
|
||||
self.log.debug("单击项目视图按钮")
|
||||
self.dr.click("xpath->//li[contains(.,'项目视图')]")
|
||||
|
||||
def move_to_project_cloud_host_button(self):
|
||||
|
@ -74,11 +75,36 @@ class Page(object):
|
|||
def click_control_center_button(self):
|
||||
page = self.dr.origin_driver.page_source
|
||||
print(page)
|
||||
self.log.debug("点击控制中心-云主机按钮")
|
||||
self.log.debug("单击控制中心-云主机按钮")
|
||||
self.dr.click("xpath->//span[text()='云主机快照']")
|
||||
# self.dr.js("arguments[0].click();", el)
|
||||
`
|
||||
|
||||
def click_cloud_host_snap_button(self):
|
||||
self.log.debug("点击云主机快照")
|
||||
self.log.debug("单击云主机快照")
|
||||
self.dr.click("xpath->//span[contains(.,'云主机快照')]")
|
||||
|
||||
def click_control_view(self):
|
||||
self.log.debug("鼠标单击概览按钮")
|
||||
self.dr.get_("xpath->//body/app-component")
|
||||
|
||||
|
||||
#项目视图
|
||||
def open_pv_cloudhost(self,projectname):
|
||||
self.log.debug("打开项目视图的控制中心云主机页面")
|
||||
prject_id = publicfunction.get_project_id(projectname)
|
||||
self.dr.open(globalparam.url+"/csdp/project/#/project/%s/control/manage_vm"%prject_id)
|
||||
|
||||
def open_pv_managevolume_page(self,projectname):
|
||||
self.log.debug("打开项目视图的控制中心云磁盘页面")
|
||||
prject_id = publicfunction.get_project_id(projectname)
|
||||
self.dr.open(globalparam.url+"/csdp/project/#/project/%s/control/manage_volume"%prject_id)
|
||||
|
||||
def open_shoppingcar_page(self,projectname):
|
||||
self.log.debug("打开申请单页面")
|
||||
prject_id = publicfunction.get_project_id(projectname)
|
||||
self.dr.open(globalparam.url+"/csdp/project/#/project/%s/shoppingcar"%prject_id)
|
||||
|
||||
|
||||
def page_to_bottom(self):
|
||||
self.log.debug("下滑页面到底部")
|
||||
self.dr.END()
|
|
@ -10,9 +10,191 @@ import allure
|
|||
from public.pages import basepage
|
||||
from config import globalparam
|
||||
|
||||
class CloudHostPage(basepage.Page):
|
||||
|
||||
def click_123(self):
|
||||
print("1234")
|
||||
class ControlCenterPage(basepage.Page):
|
||||
def click_entry_form_button(self):
|
||||
self.log.debug("单击加入申请单按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'加入申请单')]")
|
||||
|
||||
def click_confirmation_form_button(self):
|
||||
self.log.debug("单击取人申请单按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'确认申请单')]")
|
||||
|
||||
class CloudHostPage(ControlCenterPage):
|
||||
|
||||
def click_apply_cloudhost_button(self):
|
||||
self.log.debug("单击申请云主机按钮")
|
||||
self.dr.click("xpath->//button[contains(.,' 申请云主机')]")
|
||||
|
||||
def click_box_vpool(self):
|
||||
self.log.debug("单击可用区下拉框")
|
||||
self.dr.click("xpath->//form[@id='serviceForm']/div/form-group-attr-component/div/div/div/div/span/span[2]/span")
|
||||
|
||||
def input_and_search_box_vpool(self,value):
|
||||
self.log.debug("输入要选择的可用区")
|
||||
self.dr.type_and_enter("xpath->(//input[@type='search'])[3]",value)
|
||||
|
||||
def click_ipv6_button(self):
|
||||
self.log.debug("单击IPV6按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'6')]")
|
||||
|
||||
def click_ipv4_button(self):
|
||||
self.log.debug("单击IPV4按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'4')]")
|
||||
|
||||
def click_subnet_box(self):
|
||||
self.log.debug("单击子网选择框")
|
||||
self.dr.click("xpath->//form-group-select-component/div/div/div/div/span/span[2]/span")
|
||||
|
||||
def input_and_select_subnet(self,value):
|
||||
self.log.debug("输入要选择的子网,并按回车确定")
|
||||
self.dr.type_and_enter("xpath->(//input[@type='search'])[4]",value)
|
||||
|
||||
def click_ip_box(self):
|
||||
self.log.debug("单击IP地址选择框")
|
||||
self.dr.click("xpath->//div[2]/div/div/div/input")
|
||||
|
||||
def input_and_select_ip(self,value):
|
||||
self.log.debug("输入要选择的IP地址,并按回车确定")
|
||||
self.dr.type_and_enter("xpath->//div[2]/div/div/div/input",value)
|
||||
|
||||
#目前只模板部署,后续添加
|
||||
def input_cpu(self,value):
|
||||
self.log.debug("输入CPU核数")
|
||||
self.dr.clear_type("xpath->//csdp-ui-slider/input",value)
|
||||
|
||||
def input_mem(self,value):
|
||||
self.log.debug("输入内存,单位G")
|
||||
self.dr.clear_type("xpath->//form-group-attr-component[3]/div/div/csdp-ui-slider/input",value)
|
||||
|
||||
def input_boot_disk(self,value):
|
||||
self.log.debug("输入系统盘大小,单位G")
|
||||
self.dr.clear_type("xpath->//form-group-attr-component[4]/div/div/csdp-ui-slider/input",value)
|
||||
|
||||
def select_data_disk_button(self):
|
||||
self.log.debug("单击选择数据盘按钮")
|
||||
self.dr.click("xpath->//div[4]/div/div/button")
|
||||
|
||||
def input_data_disk_size(self,value):
|
||||
self.log.debug("输入数据盘大小")
|
||||
self.dr.clear_type("xpath->//div/div/div/csdp-ui-slider/input",value)
|
||||
|
||||
def input_cloud_host_name(self,value):
|
||||
self.log.debug("输入云主机名称")
|
||||
self.dr.clear_type("xpath->//input[@name='']",value)
|
||||
|
||||
def click_add_host_num(self):
|
||||
self.log.debug("单击申请数量‘+’")
|
||||
self.dr.click("xpath->//form[@id='serviceForm']/div/form-group-number-component/div/div/div/a[2]/i")
|
||||
|
||||
|
||||
class ShoppingcarPage(ControlCenterPage):
|
||||
"""上项目视图申请单页面"""
|
||||
|
||||
def click_submission_apply_form(self):
|
||||
self.log.debug("单击提交申请单")
|
||||
self.dr.click("xpath->//button[contains(.,'提交申请单')]")
|
||||
|
||||
def commit_submit_button(self):
|
||||
self.log.debug("单击确认提交按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'确认提交')]")
|
||||
|
||||
class ManageVolumePage(ControlCenterPage):
|
||||
def click_apply_volume_button(self):
|
||||
self.log.debug("单击申请云磁盘按钮")
|
||||
self.dr.click("xpath->//button[contains(.,' 申请云磁盘')]")
|
||||
|
||||
def click_vpool_box(self):
|
||||
self.log.debug("单击可用去按钮")
|
||||
self.dr.click("xpath->//form[@id='serviceForm']/div/form-group-attr-component/div/div/div/div/span/span[2]/span")
|
||||
|
||||
def select_vpool(self,value):
|
||||
self.log.debug("选择可用去")
|
||||
self.dr.type_and_enter("xpath->//form-group-attr-component/div/div/div/input",value)
|
||||
|
||||
def input_volume_capacity(self,value):
|
||||
self.log.debug("输入云磁盘的容量")
|
||||
self.dr.clear_type("xpath->//csdp-ui-slider/input",value)
|
||||
|
||||
def click_independent_disk(self):
|
||||
self.log.debug("单击独立磁盘按钮")
|
||||
self.dr.click("xpath->//form-group-attr-component[3]/div/div/input")
|
||||
|
||||
def input_volume_name(self,value):
|
||||
self.log.debug("输入云磁盘名称")
|
||||
self.dr.clear_type("xpath->//form-group-attr-component[3]/div/div/input",value)
|
||||
|
||||
def click_number_application_add(self):
|
||||
self.log.debug("单击申请数量加按钮")
|
||||
self.dr.click("xpath->//form[@id='serviceForm']/div/form-group-number-component/div/div/div/a[2]")
|
||||
|
||||
def click_cloud_host_category(self):
|
||||
self.log.debug("单击云主机类别")
|
||||
self.dr.click("xpath->//form-group-select-component/div/div/div/div/span/span[2]/span")
|
||||
|
||||
def select_cloud_host_category(self,value):
|
||||
self.log.debug("选择云主机类别")
|
||||
self.dr.type_and_enter("xpath->//form-group-select-component/div/div/div/input",value)
|
||||
|
||||
def select_cloud_host(self,value):
|
||||
self.log.debug("选择云主机")
|
||||
self.dr.click("xpath->//span[contains(.,'%s')]"%value)
|
||||
|
||||
def select_volume(self,valume):
|
||||
self.log.debug("选择磁盘:%s"%valume)
|
||||
self.dr.type_and_enter("xpath->(//input[@type='text'])[10]",valume)
|
||||
|
||||
def click_attach_button(self):
|
||||
self.log.debug("单击挂载按钮")
|
||||
self.dr.click("xpath->//td[8]/span/button")
|
||||
|
||||
def click_exclusive_button(self):
|
||||
self.log.debug("单击独享按钮")
|
||||
self.dr.click("xpath->(///input[@type='checkbox'])[4]")
|
||||
|
||||
def click_share_button(self):
|
||||
self.log.debug("单击共享按钮")
|
||||
self.dr.click("xpath=(//input[@type='checkbox'])[5]")
|
||||
|
||||
def click_host_for_attach_box(self):
|
||||
self.log.debug("单击云主机选择框")
|
||||
self.dr.click("xpath->//div[4]/div/div/div/div/div/span/span[2]/span")
|
||||
|
||||
def select_host_for_attach(self,value):
|
||||
self.log.debug("选择要挂载的虚拟机")
|
||||
self.dr.type_and_enter("xpath->(//input[@type='search'])[6]",value)
|
||||
|
||||
def click_commit_for_attach_buttton(self):
|
||||
self.log.debug("单击确定按钮")
|
||||
self.dr.click("xpath->//div[@id='attachVolumeModal']/div[3]/button")
|
||||
|
||||
def click_volume_more_botton(self):
|
||||
self.log.debug("单击更多按钮")
|
||||
#这个按钮需要先把鼠标移动上去
|
||||
self.dr.move_to_element("xpath->//div/a/span")
|
||||
self.dr.click("xpath->//div/a/span")
|
||||
|
||||
def click_release_button(self):
|
||||
self.log.debug("单击释放按钮")
|
||||
self.dr.click("xpath->//div/ul/li[2]/button")
|
||||
|
||||
def click_release_commit_button(self):
|
||||
self.log.debug("单击确定按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'确定')]")
|
||||
|
||||
#创建快照
|
||||
def click_create_snap_button(self):
|
||||
self.log.debug("单击创建磁盘快照按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'创建快照')]")
|
||||
|
||||
def input_volume_sanp_name(self,value):
|
||||
self.log.debug("输入磁盘快照名称")
|
||||
self.dr.clear_type("xpath->//input[@name='snapshotName']",value)
|
||||
|
||||
def input_volume_snap_des(self,value):
|
||||
self.log.debug("输入磁盘快照的描述信息")
|
||||
self.dr.clear_type("xpath->(//textarea[@type='text'])[2]",value)
|
||||
|
||||
def click_create_button_yellow(self):
|
||||
self.log.debug("点击创建按钮")
|
||||
self.dr.click("xpath->//div[@id='createVolumesnapshotModal']/form/div[2]/button")
|
|
@ -100,11 +100,11 @@ class DataCenterPage(basepage.Page):
|
|||
|
||||
#保存
|
||||
def click_save_phy_net_button(self):
|
||||
self.log.debug("点击保存按钮")
|
||||
self.log.debug("单击保存按钮")
|
||||
self.dr.click("xpath->(//button[@type='submit'])[2]")
|
||||
|
||||
#取消
|
||||
def click_cancel_phy_net_button(self):
|
||||
self.log.debug("点击确定取消")
|
||||
self.log.debug("单击确定取消")
|
||||
self.dr.click("xpath->//div[@id='net_modal']/form/div[3]/button[2]")
|
||||
|
||||
|
|
|
@ -10,88 +10,327 @@ from public.pages import basepage
|
|||
from config import globalparam
|
||||
|
||||
|
||||
|
||||
class FolderPgae(basepage.Page):
|
||||
pass
|
||||
|
||||
class ProdCateg(FolderPgae):
|
||||
|
||||
class ProdCategPage(FolderPgae):
|
||||
"""产品分类"""
|
||||
|
||||
@allure.step("服务目录-产品分类页面")
|
||||
def open_prod_catg_page(self):
|
||||
self.log.debug("打开服务目录-产品分类页面")
|
||||
self.dr.open(globalparam.url + "/csdp/manage/#/manage-view/adminManage/folder/prodCateg")
|
||||
self.dr.open(
|
||||
globalparam.url +
|
||||
"/csdp/manage/#/manage-view/adminManage/folder/prodCateg")
|
||||
|
||||
@allure.step("点击新建按钮")
|
||||
def click_new_create_button(self):
|
||||
self.log.debug("点击新建按钮")
|
||||
self.dr.click("xpath=//button[contains(.,'新建')]")
|
||||
@allure.step("单击新建按钮")
|
||||
def click_new_create_prod_button(self):
|
||||
self.log.debug("单击新建按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'新建')]")
|
||||
|
||||
#新建产品分类
|
||||
# 新建产品分类
|
||||
@allure.step("")
|
||||
def input_systematic_name(self,value):
|
||||
def input_systematic_name(self, value):
|
||||
self.log.debug("输入分类名称")
|
||||
self.dr.type_and_enter("xpath=//input[@name='name']",value)
|
||||
self.dr.type_and_enter("xpath->//input[@name='name']", value)
|
||||
|
||||
def input_systematic_number(self,value):
|
||||
def input_systematic_number(self, value):
|
||||
self.log.debug("输入分类序号")
|
||||
self.dr.type_and_enter("xpath=//input[@name='id']",value)
|
||||
self.dr.type_and_enter("xpath->//input[@name='id']", value)
|
||||
|
||||
def click_produc_category_icon(self):
|
||||
self.log.debug("点击产品分类图标")
|
||||
self.dr.click("xpath=//button[contains(.,'选择产品分类图标')]")
|
||||
self.log.debug("单击产品分类图标")
|
||||
self.dr.click("xpath->//button[contains(.,'选择产品分类图标')]")
|
||||
|
||||
def click_cloud_host(self):
|
||||
self.log.debug("点击云主机图标")
|
||||
self.dr.click("xpath=//li[contains(.,'云主机')]")
|
||||
def click_cloud_host_icon(self):
|
||||
self.log.debug("单击云主机图标")
|
||||
# self.dr.click("xpath->//div/ul/li[contains(.,'云主机')]")
|
||||
self.dr.click("xpath->//div[2]/div/ul/li[2]/i")
|
||||
|
||||
def click_cloud_disk(self):
|
||||
self.log.debug("点击云磁盘图标")
|
||||
self.dr.click("xpath=//li[contains(.,'云磁盘')]")
|
||||
def click_cloud_disk_icon(self):
|
||||
self.log.debug("单击云磁盘图标")
|
||||
self.dr.click("xpath->//li[contains(.,'云磁盘')]")
|
||||
|
||||
def click_bare_metal_server_icon(self):
|
||||
self.log.debug("点击裸金属服务器图标")
|
||||
self.dr.click("")
|
||||
self.log.debug("单击裸金属服务器图标")
|
||||
self.dr.click("xpath->//div[2]/div/ul/li/i")
|
||||
|
||||
def click_phy_res_icon(self):
|
||||
self.log.debug("单击物理资源图标")
|
||||
self.dr.click(
|
||||
"xpath->//div[@id='selectprodcateModal']/div[2]/div/ul/li[4]/i")
|
||||
|
||||
def click_loadbalance_icon(self):
|
||||
self.log.debug("单击负载均衡器图标")
|
||||
self.dr.click(
|
||||
"xpath->//div[@id='selectprodcateModal']/div[2]/div/ul/li[5]/i")
|
||||
|
||||
def click_public_ip_icon(self):
|
||||
self.log.debug("单击公网IP图标")
|
||||
self.dr.click(
|
||||
"xpath->//div[@id='selectprodcateModal']/div[2]/div/ul/li[6]/i")
|
||||
|
||||
def click_cloud_host_backup_icon(self):
|
||||
self.log.debug("单击云主机备份图标")
|
||||
self.dr.click(
|
||||
"xpath->//div[@id='selectprodcateModal']/div[2]/div/ul/li[7]/i")
|
||||
|
||||
def click_container_service_icon(self):
|
||||
self.log.debug("单击容器服务图标")
|
||||
self.dr.click(
|
||||
"xpath->//div[@id='selectprodcateModal']/div[2]/div/ul/li[8]/i")
|
||||
|
||||
def click_bandwidth_icon(self):
|
||||
self.log.debug("d单击外网带宽图标")
|
||||
self.dr.click(
|
||||
"xpath->//div[@id='selectprodcateModal']/div[2]/div/ul/li[9]/i")
|
||||
|
||||
def click_commit_button(self):
|
||||
self.log.debug("点击确认按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'确定')]")
|
||||
self.log.debug("单击确认按钮")
|
||||
self.dr.click(
|
||||
"xpath->//div[@id='selectprodcateModal']/div[3]/div/button")
|
||||
|
||||
def click_cancel_button(self):
|
||||
self.log.debug("点击取消按钮")
|
||||
self.log.debug("单击取消按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'取消')]")
|
||||
|
||||
def input_describ(self,value):
|
||||
|
||||
def input_describ(self, value):
|
||||
self.log.debug("输入描述")
|
||||
self.dr.type_and_enter("xpath=//div[5]/div/textarea",value)
|
||||
self.dr.type_and_enter("xpath->//div[5]/div/textarea", value)
|
||||
|
||||
def click_submit_button(self):
|
||||
self.log.debug("点击保存按钮")
|
||||
self.dr.click("xpath=//button[@type='submit']")
|
||||
self.log.debug("单击保存按钮")
|
||||
self.dr.click("xpath->//button[@type='submit']")
|
||||
|
||||
def click_create_page_cancel_button(self):
|
||||
self.log.debug("点击取消按钮")
|
||||
self.log.debug("单击取消按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'取消')]")
|
||||
|
||||
def select_product_class(self, value):
|
||||
self.log.debug("查找产品分类")
|
||||
self.dr.type_and_enter("xpath->(//input[@type='text'])[12]", value)
|
||||
|
||||
def get_table_text(self):
|
||||
self.log.debug("获取表格下的数据")
|
||||
text = self.dr.get_text(
|
||||
"xpath->//manage-component/div/div/div/div/div/div/div/table-component/div")
|
||||
return text
|
||||
|
||||
|
||||
class ProductManagePage(FolderPgae):
|
||||
@allure.step("打开产品管理页面")
|
||||
def open_product_manage_page(self):
|
||||
pass
|
||||
self.log.debug("打开产品管理页面")
|
||||
self.dr.open(
|
||||
globalparam.url +
|
||||
"/csdp/manage/#/manage-view/adminManage/folder/productManage")
|
||||
|
||||
|
||||
#操作系统管理
|
||||
class OperationSystemPage(FolderPgae):
|
||||
def click_create_product_button(self):
|
||||
self.log.debug("单击新建产品按钮")
|
||||
self.dr.click("xpath->//div[3]/button")
|
||||
|
||||
def click_product_class_box(self):
|
||||
self.log.debug("单击产品分类框")
|
||||
self.dr.click("xpath->//div[2]/div/div/div/span/span[2]/span")
|
||||
|
||||
def select_product_class_name(self, value):
|
||||
self.log.debug("输入:%s并且按enter" % value)
|
||||
self.dr.type_and_enter("xpath->(//input[@type='search'])[3]", value)
|
||||
|
||||
def click_platform_box(self):
|
||||
self.log.debug("单击平台选择框")
|
||||
self.dr.click("xpath->(//input[@type='search'])[4]")
|
||||
|
||||
def select_platform(self, value):
|
||||
self.log.debug("输入:%s,并按enter" % value)
|
||||
self.dr.type_and_enter("xpath->(//input[@type='search'])[4]", value)
|
||||
|
||||
def click_resource_type_box(self):
|
||||
self.log.debug("单击资源类型框")
|
||||
self.dr.click("xpath->//div[4]/div/div/div/span")
|
||||
|
||||
def select_resource_type(self, value):
|
||||
self.log.debug("选择资源类型")
|
||||
self.dr.type_and_enter("xpath->(//input[@type='search'])[5]", value)
|
||||
|
||||
def input_product_name(self, value):
|
||||
self.log.debug("输入产品名称")
|
||||
self.dr.clear_type("xpath->//input[@name='name']", value)\
|
||||
|
||||
|
||||
def input_product_num(self, value):
|
||||
self.log.debug("输入产品序号")
|
||||
self.dr.clear_type("xpath->//input[@name='id']", value)
|
||||
|
||||
def click_get_url_button(self):
|
||||
self.log.debug("单击获取url按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'获取URL')]")
|
||||
|
||||
def click_cloud_res_openup_button(self):
|
||||
self.log.debug("勾选云资源沟通")
|
||||
# self.dr.click("xpath->//span[contains(.,'云主机资源开通')]")
|
||||
self.dr.click("xpath->//div[2]/div/form/div/div/div/div/label")
|
||||
|
||||
def click_cloud_dick_openup_button(self):
|
||||
self.log.debug("单击云磁盘开通")
|
||||
self.dr.click("xpath->//div[@id='uniform-optionsRadios22']/span")
|
||||
|
||||
def click_commit_button(self):
|
||||
self.log.debug("单击确定按钮")
|
||||
self.dr.click(
|
||||
"xpath->//div[@id='load_formUrl_Modal']/div[2]/div[2]/button")
|
||||
|
||||
def input_product_des(self, value):
|
||||
self.log.debug("输入产品描述")
|
||||
self.dr.clear_type("xpath->//div[8]/div/textarea", value)
|
||||
|
||||
def click_save_button(self):
|
||||
self.log.debug("单击保存按钮")
|
||||
self.dr.click("xpath->//form/div[2]/div/div/button")
|
||||
|
||||
def select_product(self, value):
|
||||
self.log.debug("查询产品")
|
||||
self.dr.type_and_enter("xpath->(//input[@type='text'])[12]", value)
|
||||
|
||||
def click_more_button(self):
|
||||
self.log.debug("单击更多按钮")
|
||||
self.dr.move_to_element("xpath->//span[contains(.,'更多')]")
|
||||
self.dr.click("xpath->//span[contains(.,'更多')]")
|
||||
|
||||
def click_online_button(self):
|
||||
self.log.debug("单击上线按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'上线')]")
|
||||
|
||||
def click_offline_button(self):
|
||||
self.log.debug("单击下线按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'下线')]")
|
||||
|
||||
def get_table_text(self):
|
||||
self.log.debug("获取产品表格下的数据")
|
||||
text = self.dr.get_text(
|
||||
"xpath->//manage-component/div/div/div/div/div/div/div/table-component/div")
|
||||
return text
|
||||
|
||||
|
||||
class SpecificationPage(FolderPgae):
|
||||
def open_specification_page(self):
|
||||
self.log.debug("打开产品规格")
|
||||
self.dr.open(
|
||||
globalparam.url +
|
||||
"/csdp/manage/#/manage-view/adminManage/folder/specification")
|
||||
|
||||
def click_create_sp_button(self):
|
||||
self.log.debug("单击新建按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'新建')]")
|
||||
|
||||
# 新建规格页面
|
||||
def select_product_name(self, value):
|
||||
self.log.debug("单击产品名称后的输入框")
|
||||
self.dr.click("xpath->//div[2]/div/div/div/span/span[2]/span")
|
||||
self.log.debug("选择产品名称")
|
||||
self.dr.type_and_enter("xpath->(//input[@type='search'])[3]", value)
|
||||
|
||||
def input_spn_name(self, value):
|
||||
self.log.debug("输入规格名称")
|
||||
self.dr.clear_type("xpath->//input[@name='specName']", value)
|
||||
|
||||
def click_new_create_box(self):
|
||||
self.log.debug("点击新建选择框")
|
||||
self.dr.click("xpath->//label/div/span")
|
||||
|
||||
def click_change_box(self):
|
||||
self.log.debug("点击变更选择框")
|
||||
self.dr.click("xpath->//label[2]/div/span")
|
||||
|
||||
def input_sp_tag(self, value):
|
||||
self.log.debug("输入标签")
|
||||
self.dr.clear_type("xpath->(//input[@type='text'])[14]", value)
|
||||
|
||||
def input_sp_des(self, value):
|
||||
self.log.debug("输入描述")
|
||||
self.dr.clear_type("xpath->//div[6]/div/textarea", value)
|
||||
|
||||
def click_next_step_button(self):
|
||||
self.log.debug("单击下一步按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'下一步')]")
|
||||
# 配置属性
|
||||
|
||||
def select_vpool(self, value):
|
||||
self.log.debug("单击vpool选择框")
|
||||
self.dr.click("xpath->(//input[@type='search'])[3]")
|
||||
self.log.debug("选择可用去")
|
||||
self.dr.type_and_enter("xpath->(//input[@type='search'])[3]", value)
|
||||
|
||||
def input_volume_type(self, value):
|
||||
self.log.debug("输入磁盘类型")
|
||||
self.dr.clear_type("xpath->//input[@name='volume_disk_type']", value)
|
||||
|
||||
def input_volume_disk_type_tag(self, value):
|
||||
self.log.debug("输入底层存储标签")
|
||||
self.dr.clear_type(
|
||||
"xpath->//input[@name='volume_disk_type_tag']", value)
|
||||
|
||||
def select_host_type(self, value):
|
||||
self.log.debug("单击云主机类型选择框")
|
||||
self.dr.click("xpath->(//input[@type='search'])[4]")
|
||||
self.log.debug("选择云主机类型")
|
||||
self.dr.type_and_enter("xpath->(//input[@type='search'])[4]", value)
|
||||
|
||||
def select_test_period(self, value):
|
||||
if value not in range(1, 6):
|
||||
self.log.error("测试期限必须在1-6个月之间,请输入1,2,3,4,5,6")
|
||||
self.log.debug("单击测试期限选择框")
|
||||
self.dr.click("xpath->(//input[@type='search'])[5]")
|
||||
self.log.debug("选择测试期限")
|
||||
self.dr.type_and_enter("xpath->(//input[@type='search'])[5]", value)
|
||||
|
||||
def click_complete_button(self):
|
||||
self.log.debug("单击完成按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'完成')]")
|
||||
|
||||
|
||||
def click_more_button(self):
|
||||
self.log.debug("单击更多按钮")
|
||||
self.dr.move_to_element("xpath->//span[contains(.,'更多')]")
|
||||
self.dr.click("xpath->//span[contains(.,'更多')]")
|
||||
|
||||
def click_online_button(self):
|
||||
self.log.debug("单击产品规格上线按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'上线')]")
|
||||
|
||||
def click_offline_button(self):
|
||||
self.log.debug("单击产品规格下线按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'下线')]")
|
||||
|
||||
def click_delete_sp_button(self):
|
||||
self.log.debug("单击删除按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'删除')]")
|
||||
|
||||
def select_sp_name(self, value):
|
||||
self.log.debug("选择产品规格名称")
|
||||
self.dr.type_and_enter("xpath->//div/div/div/div/div/div/div/div/form/div/div/input", value)
|
||||
|
||||
def get_table_text(self):
|
||||
self.log.debug("获取表格下的数据")
|
||||
text = self.dr.get_text(
|
||||
"xpath->//manage-component/div/div/div/div/div/div/div/table-component/div")
|
||||
return text
|
||||
|
||||
# 操作系统管理
|
||||
|
||||
|
||||
class OperationSystemPage(FolderPgae):
|
||||
@allure.step("打开:服务目录-操作系统管理")
|
||||
def open_operation_sys_page(self):
|
||||
self.log.debug("打开操作系统管理页面")
|
||||
self.dr.open(globalparam.url+ "/csdp/manage/#/manage-view/adminManage/folder/operationsystem")
|
||||
self.dr.open(
|
||||
globalparam.url +
|
||||
"/csdp/manage/#/manage-view/adminManage/folder/operationsystem")
|
||||
|
||||
@allure.step("点击新建按钮")
|
||||
@allure.step("单击新建按钮")
|
||||
def click_new_create_button(self):
|
||||
self.log.debug("点击新建按钮")
|
||||
self.dr.click("xpath=//button[contains(.,'新建')]")
|
||||
self.log.debug("单击新建按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'新建')]")
|
||||
#
|
||||
# @allure.step("")
|
||||
# @allure.step("")
|
||||
|
|
|
@ -34,8 +34,8 @@ class LoginPage(basepage.Page):
|
|||
|
||||
def click_loginbutton(self):
|
||||
'''
|
||||
点击登录按钮
|
||||
单击登录按钮
|
||||
:return:
|
||||
'''''
|
||||
self.log.debug("点击登录按钮")
|
||||
self.log.debug("单击登录按钮")
|
||||
self.dr.click("xpath -> //button[contains(.,'登录')]")
|
||||
|
|
|
@ -13,15 +13,15 @@ from config import globalparam
|
|||
class NetwoekPage(basepage.Page):
|
||||
|
||||
def click_new_create_button(self):
|
||||
self.log.debug("点击新建网络按钮")
|
||||
self.log.debug("单击新建网络按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'新建')]")
|
||||
|
||||
def click_ipv4_button(self):
|
||||
self.log.debug("点击ipv4按钮")
|
||||
self.log.debug("单击ipv4按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'4')]")
|
||||
|
||||
def click_ipv6_button(self):
|
||||
self.log.debug("点击ipv6按钮")
|
||||
self.log.debug("单击ipv6按钮")
|
||||
self.dr.click("xpath->//button[contains(.,'6')]")
|
||||
|
||||
def input_network_name(self,value):
|
||||
|
@ -29,7 +29,7 @@ class NetwoekPage(basepage.Page):
|
|||
self.dr.type("xpath->//input[@id='networkName']",value)
|
||||
|
||||
def click_vlan_input_box(self):
|
||||
self.log.debug("点击vlan输入框")
|
||||
self.log.debug("单击vlan输入框")
|
||||
self.dr.click("xpath->//div[@id='addNet_modal']/div[2]/form/div/div[7]/div/div/div/span")
|
||||
|
||||
def input_text_new_create(self):
|
||||
|
@ -67,11 +67,11 @@ class NetwoekPage(basepage.Page):
|
|||
self.dr.type("xpath->(//input[@type='text'])[25]",value)
|
||||
|
||||
def click_enable_dhcp(self):
|
||||
self.log.debug("点击开启dhcp")
|
||||
self.log.debug("单击开启dhcp")
|
||||
self.dr.click("xpath->//div[@id='addNet_modal']/div[2]/form/div/div[12]/div/div/span")
|
||||
|
||||
def click_save_button(self):
|
||||
self.log.debug("点击保存按钮")
|
||||
self.log.debug("单击保存按钮")
|
||||
self.dr.click("xpath->//div[@id='addNet_modal']/div[3]/button")
|
||||
|
||||
def select_network(self,value):
|
||||
|
@ -93,7 +93,7 @@ class NetwoekPage(basepage.Page):
|
|||
self.dr.click("xpath->//button[contains(.,' 删除')]")
|
||||
|
||||
def click_commit_delsubnet_button(self):
|
||||
self.log.debug("点击删除确认按钮")
|
||||
self.log.debug("单击删除确认按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'确定')]")
|
||||
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ class ResSyncPage(basepage.Page):
|
|||
"/csdp/manage/#/manage-view/resource/sys_ResourceSynchroniz/osphysicalsync")
|
||||
|
||||
def click_phy_res_sync(self):
|
||||
self.log.debug("点击物理资源同步到云管")
|
||||
self.log.debug("单击物理资源同步到云管")
|
||||
self.dr.click("xpath->//span[contains(.,'物理资源同步到云管')]")
|
||||
|
||||
def click_select_region(self):
|
||||
|
@ -65,7 +65,7 @@ class ResSyncPage(basepage.Page):
|
|||
self.dr.switch_to_frame("id->syncModal")
|
||||
|
||||
def click_refresh_button(self):
|
||||
self.log.debug("点击刷新按钮")
|
||||
self.log.debug("单击刷新按钮")
|
||||
self.dr.click("xpath->//button[contains(.,' 刷新')]")
|
||||
|
||||
def get_text_status(self, value):
|
||||
|
|
|
@ -14,3 +14,7 @@ class SysimagePage(basepage.Page):
|
|||
self.log.debug("打开镜像管理页面")
|
||||
self.dr.open(globalparam.url + "/csdp/manage/#/manage-view/resource/sys_image")
|
||||
|
||||
def select_image_name(self,value):
|
||||
self.log.debug("搜索镜像:%s"%value)
|
||||
self.dr.type_and_enter("xpath=(//input[@type='text'])[12]",value)
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ class VdcPage(basepage.Page):
|
|||
"/csdp/manage/#/manage-view/adminManage/resVDCMgr")
|
||||
|
||||
def click_new_vdc_buttun(self):
|
||||
self.log.debug("点击新建vdc按钮")
|
||||
self.log.debug("单击新建vdc按钮")
|
||||
self.dr.click("xpath->//div[3]/button")
|
||||
|
||||
def input_vdc_name(self, value):
|
||||
|
@ -26,7 +26,7 @@ class VdcPage(basepage.Page):
|
|||
self.dr.clear_type("id->vdcName", value)
|
||||
|
||||
def click_save_buttun(self):
|
||||
self.log.debug("点击保存按钮")
|
||||
self.log.debug("单击保存按钮")
|
||||
self.dr.click("css->.modal-footer:nth-child(3) > .btn-warning")
|
||||
|
||||
def search_vdc(self, value):
|
||||
|
@ -34,11 +34,11 @@ class VdcPage(basepage.Page):
|
|||
self.dr.type_and_enter("xpath->(//input[@type='text'])[12]", value)
|
||||
|
||||
def click_az_buttun(self):
|
||||
self.log.debug("点击可用区按钮")
|
||||
self.log.debug("单击可用区按钮")
|
||||
self.dr.click("css->.btn-link:nth-child(1)")
|
||||
|
||||
def click_new_az_buttun(self):
|
||||
self.log.debug("点击新建可用区")
|
||||
self.log.debug("单击新建可用区")
|
||||
self.dr.click("css->.mr-5")
|
||||
|
||||
def input_az_name(self, value):
|
||||
|
@ -46,7 +46,7 @@ class VdcPage(basepage.Page):
|
|||
self.dr.clear_type("id->vPoolName", value)
|
||||
|
||||
def click_resource_type(self):
|
||||
self.log.debug("点击资源类型")
|
||||
self.log.debug("单击资源类型")
|
||||
self.dr.click(
|
||||
"xpath->//*[@id='AddandEdit_form']/div/div[2]/div/div/div[1]/span/span[2]/span")
|
||||
|
||||
|
@ -55,7 +55,7 @@ class VdcPage(basepage.Page):
|
|||
self.dr.type_and_enter("css->.open > .form-control", value)
|
||||
|
||||
def click_type(self):
|
||||
self.log.debug("点击类型")
|
||||
self.log.debug("单击类型")
|
||||
self.dr.click(
|
||||
"xpath->//*[@id='AddandEdit_form']/div/div[5]/div/div/div[1]/span/span[2]/span")
|
||||
|
||||
|
@ -64,7 +64,7 @@ class VdcPage(basepage.Page):
|
|||
self.dr.type_and_enter("css->.open > .form-control", value)
|
||||
|
||||
def click_data_center(self):
|
||||
self.log.debug("点击数据中心")
|
||||
self.log.debug("单击数据中心")
|
||||
self.dr.click(
|
||||
"xpath->//*[@id='AddandEdit_form']/div/div[6]/div/div/div[1]/span/span[2]/span")
|
||||
|
||||
|
@ -77,7 +77,7 @@ class VdcPage(basepage.Page):
|
|||
self.dr.clear_type("id->vPoolDesc", value)
|
||||
|
||||
def click_save_az_buttun(self):
|
||||
self.log.debug("点击保存按钮")
|
||||
self.log.debug("单击保存按钮")
|
||||
self.dr.click("xpath->//*[@id='AddandEdit']/div[3]/button[1]")
|
||||
|
||||
def search_vpool(self, value):
|
||||
|
@ -85,25 +85,25 @@ class VdcPage(basepage.Page):
|
|||
self.dr.type_and_enter("xpath->(//input[@type='text'])[12]", value)
|
||||
|
||||
def click_vpool_more_button(self):
|
||||
self.log.debug("点击更多按钮")
|
||||
self.log.debug("单击更多按钮")
|
||||
self.dr.click("xpath->//td[10]/div/a")
|
||||
|
||||
def click_delete_vpool_buttun(self):
|
||||
self.log.debug("点击删除vpool按钮")
|
||||
self.log.debug("单击删除vpool按钮")
|
||||
self.dr.click("xpath->(//button[@type='button'])[13]")
|
||||
|
||||
def click_vpool_delete_btn_success(self):
|
||||
self.log.debug("点击确定按钮")
|
||||
self.log.debug("单击确定按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'确定')]")
|
||||
|
||||
def click_vdc_delete_button(self):
|
||||
self.log.debug("点击删除按钮")
|
||||
self.log.debug("单击删除按钮")
|
||||
self.dr.click("xpath->(//button[@type='button'])[14]")
|
||||
|
||||
def click_vdc_more_button(self):
|
||||
self.log.debug("点击更多按钮")
|
||||
self.log.debug("单击更多按钮")
|
||||
self.dr.click("xpath->//td[5]/div/a")
|
||||
|
||||
def click_vdc_delete_btn_success(self):
|
||||
self.log.debug("点击确定按钮")
|
||||
self.log.debug("单击确定按钮")
|
||||
self.dr.click("xpath->//a[contains(.,'确定')]")
|
||||
|
|
|
@ -34,7 +34,7 @@ def driver(request):
|
|||
|
||||
def end():
|
||||
log.info("用例全部执行完毕,关闭浏览器")
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
driver.quit()
|
||||
|
||||
request.addfinalizer(end)
|
||||
|
|
|
@ -15,7 +15,7 @@ class TestLoin():
|
|||
"""登录测试"""
|
||||
@allure.story("系统管理员登录系统")
|
||||
@allure.severity(allure.severity_level.BLOCKER)
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_login(self,login_admin):
|
||||
dr = login_admin
|
||||
dr.wait(5)
|
||||
|
|
|
@ -16,7 +16,7 @@ from public.common.publicfunction import *
|
|||
class TestCreateUser():
|
||||
"""创建用户"""
|
||||
@allure.story("创建用户")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_user(self,login_admin):
|
||||
dr = login_admin
|
||||
datas = datainfo.get_xls_to_dict("user.xlsx", "Sheet1")["创建域管理员"]
|
||||
|
|
|
@ -19,7 +19,7 @@ class TestAllDomainAdmin():
|
|||
"""域添加域管理员"""
|
||||
|
||||
@allure.story("域添加域管理员")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_allocation_domain_admin(self,login_admin):
|
||||
dr = login_admin
|
||||
datas = datainfo.get_xls_to_dict("user.xlsx", "Sheet1")["创建域管理员"]
|
||||
|
|
|
@ -20,7 +20,7 @@ class TestTeant():
|
|||
"""创建运营部门"""
|
||||
|
||||
@allure.story("创建运营部门")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create(self,login_domain):
|
||||
dr = login_domain
|
||||
t_data = datainfo.get_xls_to_dict("tenantdata.xlsx", "Sheet1")["创建运营部门"]
|
||||
|
@ -34,7 +34,7 @@ class TestTeant():
|
|||
# 搜索运营部门
|
||||
time.sleep(2)
|
||||
tpg.input_secrch_tenant(t_data["tenantname"])
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
a = dr.get_text("id->card")
|
||||
add_image(dr,"创建运营部门")
|
||||
assert t_data["tenantname"] in a, "%s不在预期结果%s中" % (
|
||||
|
|
|
@ -20,7 +20,7 @@ class TestCreateUser():
|
|||
"""创建运营部门下的用户测试"""
|
||||
|
||||
@allure.story("创建运营部门下的用户")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_authuser(self,login_domain):
|
||||
dr = login_domain
|
||||
data1s = datainfo.get_xls_to_dict("user.xlsx", "authuser")["创建运营部门用户"]
|
||||
|
|
|
@ -17,7 +17,7 @@ class TestProject():
|
|||
"""测试创建项目"""
|
||||
|
||||
@allure.story("创建项目")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_project(self,login_admin):
|
||||
dr = login_admin
|
||||
p_data = datainfo.get_xls_to_dict("projectdata.xlsx", "Sheet1")["创建项目"]
|
||||
|
|
|
@ -21,7 +21,7 @@ class TestCreateRegion():
|
|||
"""测试添加资源节点"""
|
||||
|
||||
@allure.story("创建资源节点")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_region(self,login_domain):
|
||||
dr = login_domain
|
||||
p_data = datainfo.get_xls_to_dict("res_node_data.xlsx", "region")["创建资源节点"]
|
||||
|
@ -36,7 +36,7 @@ class TestCreateRegion():
|
|||
regDesc=p_data["regDesc"])
|
||||
|
||||
srmpg.open_sys_regionMgr_page()
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
dr.wait(5)
|
||||
add_image(dr,"创建资源节点")
|
||||
flag = dr.element_exist(
|
||||
|
|
|
@ -19,7 +19,7 @@ class TestCreateService():
|
|||
"""测试添加service"""
|
||||
|
||||
@allure.story("创建VMware服务")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_service_vmware(self,login_domain):
|
||||
dr = login_domain
|
||||
self.arn = resnodeaction.Add_Res_Node(dr)
|
||||
|
@ -45,7 +45,7 @@ class TestCreateService():
|
|||
assert flag
|
||||
|
||||
@allure.story("创建opentack服务")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_service_openstack(self,login_domain):
|
||||
dr = login_domain
|
||||
self.arn = resnodeaction.Add_Res_Node(dr)
|
||||
|
|
|
@ -17,7 +17,7 @@ class TestCreateEndpoint():
|
|||
"""测试添加Endpoint"""
|
||||
|
||||
@allure.story("VMware创建endpoint")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_vmware_endpoint(self,login_domain):
|
||||
"""
|
||||
测试添加vmware,endpoint
|
||||
|
@ -36,7 +36,6 @@ class TestCreateEndpoint():
|
|||
p_data["url"])
|
||||
|
||||
time.sleep(0.5)
|
||||
dr.wait(5)
|
||||
add_image(dr,"VMware创建endpoint")
|
||||
text = dr.get_text(
|
||||
"xpath->//table[@id='accessPoint']/tbody/tr[2]")
|
||||
|
@ -44,7 +43,7 @@ class TestCreateEndpoint():
|
|||
|
||||
|
||||
@allure.story("openstack创建endpoint")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_openstack_endpoint(self,login_domain):
|
||||
"""
|
||||
测试添加openstack,endpoint
|
||||
|
|
|
@ -21,7 +21,7 @@ class TestPhySunc():
|
|||
"""物理资源同步"""
|
||||
|
||||
@allure.story("同步物理资源")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_sync_phy_res(self,login_domain):
|
||||
dr = login_domain
|
||||
p_data = datainfo.get_xls_to_dict("phy_sync_data.xlsx", "Sheet1")["物理资源同步"]
|
||||
|
@ -45,7 +45,6 @@ class TestPhySunc():
|
|||
count1 += 1
|
||||
if count1 == 10:
|
||||
break
|
||||
dr.wait(5)
|
||||
add_image(dr,"同步物理资源-DC1")
|
||||
assert status1 == "执行成功"
|
||||
status2 = dr.get_text(
|
||||
|
@ -59,7 +58,6 @@ class TestPhySunc():
|
|||
count2 += 1
|
||||
if count2 == 10:
|
||||
break
|
||||
dr.wait(5)
|
||||
add_image(dr,"同步物理资源-DC2")
|
||||
assert status2 == "执行成功"
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ class TestCreateVDC():
|
|||
"""测试创建VDC"""
|
||||
|
||||
@allure.story("创建vdc")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_vdc(self,login_domain):
|
||||
dr = login_domain
|
||||
vdc_a = vdcaction.VdcACction(dr)
|
||||
|
|
|
@ -22,7 +22,7 @@ class TestCreateVpool():
|
|||
"""测试创建vpool"""
|
||||
|
||||
@allure.story("创建VPOOL")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_vpool(self,login_domain):
|
||||
dr = login_domain
|
||||
vdc_a = vdcaction.VdcACction(dr)
|
||||
|
@ -37,14 +37,13 @@ class TestCreateVpool():
|
|||
p_data["vpooldesc"])
|
||||
|
||||
vdc_pg.open_vdc_page()
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
vdc_pg.search_vdc(p_data["vdcname"])
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
vdc_pg.click_az_buttun()
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
vdc_pg.search_vpool(p_data["vpoolname"])
|
||||
# 校验能查询到
|
||||
dr.wait(5)
|
||||
add_image(dr,"创建VPOOL")
|
||||
text = dr.get_text("xpath->//td")
|
||||
assert p_data["vpoolname"] in text
|
||||
|
|
|
@ -21,7 +21,7 @@ class Test_Vpool_Delete():
|
|||
"""测试删除vpool"""
|
||||
|
||||
@allure.story("删除VPOOL")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_delete_vpool(self,login_domain):
|
||||
dr = login_domain
|
||||
vdc_a = vdcaction.VdcACction(dr)
|
||||
|
@ -29,10 +29,10 @@ class Test_Vpool_Delete():
|
|||
p_data = datainfo.get_xls_to_dict("vdc_vpool.xlsx", "vpool")["创建vpool"]
|
||||
vdc_a.delete_vpool(p_data["vdcname"], p_data["vpoolname"])
|
||||
vdc_pg.open_vdc_page()
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
vdc_pg.search_vdc(p_data["vdcname"])
|
||||
vdc_pg.click_az_buttun()
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
vdc_pg.search_vpool(p_data["vpoolname"])
|
||||
# 校验能查询到
|
||||
dr.wait(5)
|
||||
|
|
|
@ -19,7 +19,7 @@ class Test_Vpool_Vdc():
|
|||
"""测试删除VDC"""
|
||||
|
||||
@allure.story("删除VDC")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_delete_vdc(self,login_domain):
|
||||
dr = login_domain
|
||||
vdc_a = vdcaction.VdcACction(dr)
|
||||
|
@ -27,7 +27,7 @@ class Test_Vpool_Vdc():
|
|||
p_data = datainfo.get_xls_to_dict("vdc_vpool.xlsx", "vdc")["创建vdc"]
|
||||
vdc_a.delete_vdc(p_data["vdcname"])
|
||||
vdc_pg.open_vdc_page()
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
vdc_pg.search_vdc(p_data["vdcname"])
|
||||
# # 校验能查询到
|
||||
dr.wait(5)
|
||||
|
|
|
@ -20,7 +20,7 @@ class TestDeleteUser():
|
|||
"""删除运营部门下的用户测试"""
|
||||
|
||||
@allure.story("删除运营部门下的用户")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_delete_tenant_user(self,login_domain):
|
||||
dr = login_domain
|
||||
data1s = datainfo.get_xls_to_dict("user.xlsx", "authuser")["创建运营部门用户"]
|
||||
|
|
|
@ -20,7 +20,7 @@ class TestProjectDelete():
|
|||
"""删除项目测试"""
|
||||
|
||||
@allure.story("删除项目")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_delete_project(self,login_domain):
|
||||
dr = login_domain
|
||||
p_data = datainfo.get_xls_to_dict("projectdata.xlsx", "Sheet1")["创建项目"]
|
||||
|
|
|
@ -17,7 +17,7 @@ from public.appmodel.loginaction import Login
|
|||
class TestTenantDelete():
|
||||
"""删除运营部门测试"""
|
||||
@allure.story("删除运营部门")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_delete_tenant(self,login_admin):
|
||||
dr = login_admin
|
||||
t_data = datainfo.get_xls_to_dict("tenantdata.xlsx", "Sheet1")["创建运营部门"]
|
||||
|
@ -32,7 +32,6 @@ class TestTenantDelete():
|
|||
# 搜索运营部门
|
||||
tpg.input_secrch_tenant(t_data["tenantname"])
|
||||
time.sleep(2)
|
||||
dr.wait(5)
|
||||
add_image(dr,"删除运营部门")
|
||||
flag = dr.element_exist("id->card")
|
||||
assert flag is False
|
||||
|
|
|
@ -25,7 +25,7 @@ class TestDeleteEndpoint():
|
|||
"""测试删除Endpoint"""
|
||||
|
||||
@allure.story("VMware删除endpint")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_delete_vmware_endpoint(self,login_domain):
|
||||
"""
|
||||
测试删除vmware,endpoint
|
||||
|
@ -40,7 +40,7 @@ class TestDeleteEndpoint():
|
|||
p_data["regionname"],
|
||||
p_data["nodename"],
|
||||
p_data["servicename"])
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
dr.wait(5)
|
||||
add_image(dr,"VMware删除endpint")
|
||||
flag = dr.element_exist(
|
||||
|
@ -48,7 +48,7 @@ class TestDeleteEndpoint():
|
|||
assert flag is False
|
||||
|
||||
@allure.story("openstack删除endpoint")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_delete_openstack_endpoint(self,login_domain):
|
||||
"""
|
||||
测试删除openstack,endpoint
|
||||
|
@ -63,7 +63,7 @@ class TestDeleteEndpoint():
|
|||
p_data["regionname"],
|
||||
p_data["nodename"],
|
||||
p_data["servicename"])
|
||||
time.sleep(1)
|
||||
time.sleep(globalparam.small)
|
||||
dr.wait(5)
|
||||
add_image(dr,"openstack删除endpoint")
|
||||
flag = dr.element_exist(
|
||||
|
|
|
@ -24,7 +24,7 @@ from public.common.log import Log
|
|||
class TestDeleteService():
|
||||
"""测试删除service"""
|
||||
@allure.story("删除VMware服务")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_delete_service_vmware(self,login_domain):
|
||||
dr = login_domain
|
||||
self.arn = resnodeaction.Add_Res_Node(dr)
|
||||
|
@ -46,7 +46,7 @@ class TestDeleteService():
|
|||
assert flag is False
|
||||
|
||||
@allure.story("删除openstack服务")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_delete_service_openstack(self,login_domain):
|
||||
dr = login_domain
|
||||
self.arn = resnodeaction.Add_Res_Node(dr)
|
||||
|
|
|
@ -22,7 +22,7 @@ class TestDeleteRegion():
|
|||
"""测试添加资源节点"""
|
||||
|
||||
@allure.story("删除资源节点")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_delete_region(self,login_domain):
|
||||
dr = login_domain
|
||||
p_data = datainfo.get_xls_to_dict("res_node_data.xlsx", "region")["创建资源节点"]
|
||||
|
@ -30,7 +30,6 @@ class TestDeleteRegion():
|
|||
srmpg = sys_regionMgrPage.SysRegionMgrPage(dr)
|
||||
arn.delete_res_node(p_data["regionname"], p_data["nodename"])
|
||||
# 搜索项目
|
||||
dr.wait(5)
|
||||
add_image(dr,"删除资源节点")
|
||||
srmpg.open_sys_regionMgr_page()
|
||||
flag = dr.element_exist(
|
||||
|
|
|
@ -23,7 +23,7 @@ class TestRemoveDomainAdmin():
|
|||
"""移除域管理员"""
|
||||
|
||||
@allure.story("移除域管理员")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_remove_domain_admin(self,login_admin):
|
||||
|
||||
dr = login_admin
|
||||
|
|
|
@ -23,7 +23,7 @@ class TestDeleteUser():
|
|||
|
||||
"""测试删除域管理员"""
|
||||
@allure.story("删除域用户")
|
||||
@pytest.mark.flaky(reruns=3)
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_delete_user(self,login_admin):
|
||||
dr = login_admin
|
||||
datas = datainfo.get_xls_to_dict("user.xlsx", "Sheet1")["创建域管理员"]
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/02/12 11:05
|
||||
# @Author : zn
|
||||
# @Site :
|
||||
# @File : test_22_create_product_classify.py
|
||||
# @Software: PyCharm
|
||||
|
||||
import pytest
|
||||
from public.common import datainfo
|
||||
from public.pages import sysUorgMgrPage
|
||||
from public.common.publicfunction import *
|
||||
from public.appmodel import productaction
|
||||
|
||||
@allure.feature("服务目录管理")
|
||||
class TestCreateProduct():
|
||||
"""创建产品分类"""
|
||||
@allure.story("创建产品分分类")
|
||||
# @pytest.mark.flaky(reruns=3)
|
||||
def test_create_product(self,login_admin):
|
||||
dr = login_admin #实现系统管理员登录
|
||||
dr.wait(10)
|
||||
datas = datainfo.get_xls_to_dict("product.xlsx", "Sheet1")["创建产品分类"]
|
||||
upage = sysUorgMgrPage.SysUorgMgrPage(dr)
|
||||
pa = productaction.ProductAction(dr)
|
||||
pa.create_productclassify(
|
||||
datas["cname"],
|
||||
datas["cnum"],
|
||||
datas["description"])
|
||||
# upage.input_select_user(datas["username"])
|
||||
# 查看用户,进行校验
|
||||
#upage.input_select_user(datas["username"])
|
||||
#add_image(dr, "创建用户")
|
||||
#assert dr.element_exist(
|
||||
# "xpath->//span[contains(.,'%s')]" %
|
||||
# datas["username"])
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_22_create_product_classify.py"])
|
|
@ -0,0 +1,88 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/11/7 14:21
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : conftest.py
|
||||
# @Software: PyCharm
|
||||
"""
|
||||
conftest.py 全局变量,主要实现以下功能:
|
||||
1、添加命令行参数broswer, 用于切换不用浏览器
|
||||
2、全局参数driver调用
|
||||
"""
|
||||
|
||||
|
||||
import time
|
||||
import pytest
|
||||
from public.common import pyselenium
|
||||
from public.common import datainfo
|
||||
from public.appmodel import loginaction
|
||||
from config import globalparam
|
||||
from public.common import log
|
||||
|
||||
domain_data = datainfo.get_xls_to_dict("user.xlsx", "Sheet1")["创建域管理员"]
|
||||
user_data = datainfo.get_xls_to_dict("user.xlsx", "authuser")['创建运营部门用户']
|
||||
log = log.Log()
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def driver(request):
|
||||
global driver
|
||||
'''只打开浏览器和关闭浏览器'''
|
||||
log.info("打开浏览器")
|
||||
driver = pyselenium.PySelenium(globalparam.browser)
|
||||
driver.max_window() # 最大化
|
||||
def end():
|
||||
log.info("用例全部执行完毕,关闭浏览器")
|
||||
time.sleep(globalparam.small)
|
||||
driver.quit()
|
||||
|
||||
request.addfinalizer(end)
|
||||
return driver
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def login_admin(request, driver):
|
||||
"""系统管理员登录"""
|
||||
log.info("系统管理员登录")
|
||||
login = loginaction.Login(driver)
|
||||
login.login('系统管理员', '123456')
|
||||
|
||||
def end():
|
||||
log.info("测试用例执行完成,登出系统")
|
||||
driver.origin_driver.delete_all_cookies()
|
||||
|
||||
request.addfinalizer(end)
|
||||
return driver
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def login_domain(request, driver):
|
||||
"""域管理员登录"""
|
||||
log.info("域管理员:%s登录" % domain_data["username"])
|
||||
login = loginaction.Login(driver)
|
||||
login.login(domain_data["username"], domain_data["password"])
|
||||
|
||||
def end():
|
||||
log.info("测试用例执行完成,登出系统")
|
||||
driver.origin_driver.delete_all_cookies()
|
||||
|
||||
request.addfinalizer(end)
|
||||
return driver
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def login_user(request, driver):
|
||||
"""用户登录"""
|
||||
|
||||
log.info("用户登录:%s登录" % domain_data["username"])
|
||||
login = loginaction.Login(driver)
|
||||
login.login(user_data["username"], user_data["password"])
|
||||
|
||||
def end():
|
||||
log.info("测试用例执行完成,登出系统")
|
||||
driver.origin_driver.delete_all_cookies()
|
||||
|
||||
request.addfinalizer(end)
|
||||
return driver
|
||||
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/2/6 16:27
|
||||
# @Author : mrwuzs
|
||||
# @Email : mrwuzs@outlook.com
|
||||
# @File : test_01.py
|
||||
# @Software: PyCharm
|
||||
import pytest
|
||||
|
||||
@pytest.mark.dependency()
|
||||
@pytest.mark.xfail(reason="deliberate fail")
|
||||
def test_a():
|
||||
assert False
|
||||
|
||||
@pytest.mark.dependency()
|
||||
def test_b():
|
||||
pass
|
||||
|
||||
@pytest.mark.dependency(depends=["test_a"])
|
||||
def test_c():
|
||||
pass
|
||||
|
||||
@pytest.mark.dependency(depends=["test_b"])
|
||||
def test_d():
|
||||
pass
|
||||
|
||||
@pytest.mark.dependency(depends=["test_b", "test_c"])
|
||||
def test_e():
|
||||
pass
|
|
@ -0,0 +1,43 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/10/25 11:05
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : test_01_create_user.py
|
||||
# @Software: PyCharm
|
||||
|
||||
import pytest
|
||||
from public.common import datainfo
|
||||
from public.appmodel import useraction
|
||||
from public.pages import sysUorgMgrPage
|
||||
from public.common.publicfunction import *
|
||||
|
||||
@allure.feature("用户管理")
|
||||
class TestCreateUser():
|
||||
"""创建用户"""
|
||||
@allure.story("创建用户")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_user(self,login_admin):
|
||||
dr = login_admin
|
||||
datas = datainfo.get_xls_to_dict("user.xlsx", "Sheet1")["创建域管理员"]
|
||||
upage = sysUorgMgrPage.SysUorgMgrPage(dr)
|
||||
ua = useraction.UserAction(dr)
|
||||
ua.create_user(
|
||||
datas["mgrname"],
|
||||
datas["username"],
|
||||
datas["firstname"],
|
||||
datas["password"],
|
||||
datas["repassword"],
|
||||
datas["email"])
|
||||
# upage.input_select_user(datas["username"])
|
||||
# 查看用户,进行校验
|
||||
upage.input_select_user(datas["username"])
|
||||
add_image(dr, "创建用户")
|
||||
assert dr.element_exist(
|
||||
"xpath->//span[contains(.,'%s')]" %
|
||||
datas["username"])
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_01_create_user.py"])
|
|
@ -1,7 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/2/6 16:28
|
||||
# @Author : mrwuzs
|
||||
# @Email : mrwuzs@outlook.com
|
||||
# @File : test_02.py
|
||||
# @Software: PyCharm
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/10/25 16:35
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : test_02_allocation_domain_administrator.py
|
||||
# @Software: PyCharm
|
||||
import pytest
|
||||
import allure
|
||||
|
||||
from time import sleep
|
||||
from public.common import datainfo
|
||||
from public.common.publicfunction import *
|
||||
from public.appmodel import useraction
|
||||
from public.pages import sysUorgMgrPage
|
||||
|
||||
@allure.feature("域管理")
|
||||
class TestAllDomainAdmin():
|
||||
"""域添加域管理员"""
|
||||
|
||||
@allure.story("域添加域管理员")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_allocation_domain_admin(self,login_admin):
|
||||
dr = login_admin
|
||||
datas = datainfo.get_xls_to_dict("user.xlsx", "Sheet1")["创建域管理员"]
|
||||
upage = sysUorgMgrPage.SysUorgMgrPage(dr)
|
||||
ua = useraction.UserAction(dr)
|
||||
ua.allocation_domain_administrator(datas["mgrname"], datas["username"])
|
||||
# 校验已分配域管理角色
|
||||
upage.open_uorgmgrpage()
|
||||
upage.input_select_user(datas["username"])
|
||||
sleep(2)
|
||||
character = dr.get_text(
|
||||
"css->.ng-scope:nth-child(4) > .wordBreak")
|
||||
add_image(dr,"域添加域管理员")
|
||||
assert character == "1"
|
||||
# self.assertTrue(dr.element_exist(""]), "用户未创建成功,请查看日志")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_02_allocation_domain_administrator.py"])
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/10/25 17:12
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : test_03_create_tenant.py
|
||||
# @Software: PyCharm
|
||||
|
||||
|
||||
import time
|
||||
import pytest
|
||||
import allure
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from public.appmodel import tenantaction
|
||||
from public.pages import auth_tenant_page
|
||||
|
||||
@allure.feature("运营部门管理")
|
||||
class TestTeant():
|
||||
"""创建运营部门"""
|
||||
|
||||
@allure.story("创建运营部门")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create(self,login_domain):
|
||||
dr = login_domain
|
||||
t_data = datainfo.get_xls_to_dict("tenantdata.xlsx", "Sheet1")["创建运营部门"]
|
||||
tpg = auth_tenant_page.AuthTenantPage(dr)
|
||||
ta = tenantaction.TenantAction(dr)
|
||||
ta.create_tenant(
|
||||
t_data["tenantname"],
|
||||
t_data["linkmanname"],
|
||||
t_data["linkmanphoneno"])
|
||||
tpg.open_authtenant()
|
||||
# 搜索运营部门
|
||||
time.sleep(2)
|
||||
tpg.input_secrch_tenant(t_data["tenantname"])
|
||||
time.sleep(globalparam.small)
|
||||
a = dr.get_text("id->card")
|
||||
add_image(dr,"创建运营部门")
|
||||
assert t_data["tenantname"] in a, "%s不在预期结果%s中" % (
|
||||
t_data["tenantname"], a)
|
||||
assert t_data["linkmanname"]in a, "%s不在预期结果%s中" % (
|
||||
t_data["linkmanname"], a)
|
||||
assert t_data["linkmanphoneno"]in a, "%s不在预期结果%s中" % (
|
||||
t_data["linkmanphoneno"], a)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_03_create_tenant.py"])
|
|
@ -0,0 +1,50 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/10/25 18:01
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : test_04_create_auth_user.py
|
||||
# @Software: PyCharm
|
||||
import pytest
|
||||
import allure
|
||||
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from public.appmodel import useraction
|
||||
from public.pages import authUserPage
|
||||
|
||||
|
||||
|
||||
@allure.feature("用户管理")
|
||||
class TestCreateUser():
|
||||
"""创建运营部门下的用户测试"""
|
||||
|
||||
@allure.story("创建运营部门下的用户")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_authuser(self,login_domain):
|
||||
dr = login_domain
|
||||
data1s = datainfo.get_xls_to_dict("user.xlsx", "authuser")["创建运营部门用户"]
|
||||
aupg = authUserPage.AuthUsertPage(dr)
|
||||
ta = useraction.UserAction(dr)
|
||||
ta.create_tenant_user(
|
||||
data1s["tenantname"],
|
||||
data1s["username"],
|
||||
data1s["firstname"],
|
||||
data1s["password"],
|
||||
data1s["repassword"],
|
||||
data1s["email"])
|
||||
aupg.open_authuser()
|
||||
aupg.input_select_user(data1s["username"])
|
||||
add_image(dr,"创建运营部门下的用户")
|
||||
text = dr.get_text(
|
||||
"xpath->//div[@class='box-body']/table-component/div/table/tbody")
|
||||
|
||||
assert data1s["username"] in text, "%s不在预期结果%s中" % (
|
||||
data1s["username"], text)
|
||||
assert data1s["firstname"] in text, "%s不在预期结果%s中" % (
|
||||
data1s["firstname"], text)
|
||||
assert data1s["email"] in text, "%s不在预期结果%s中" % (data1s["email"], text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_04_create_auth_user.py"])
|
|
@ -0,0 +1,43 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/10/25 17:58
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : test_05_create_project.py
|
||||
# @Software: PyCharm
|
||||
import pytest
|
||||
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from public.appmodel import projectaction
|
||||
from public.pages import auth_project_page
|
||||
|
||||
@allure.feature("项目管理")
|
||||
class TestProject():
|
||||
"""测试创建项目"""
|
||||
|
||||
@allure.story("创建项目")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_project(self,login_domain):
|
||||
dr = login_domain
|
||||
p_data = datainfo.get_xls_to_dict("projectdata.xlsx", "Sheet1")["创建项目"]
|
||||
ppg = auth_project_page.AuthProjectPage(dr)
|
||||
pac = projectaction.PojectAction(dr)
|
||||
pac.create_project(
|
||||
p_data["tenantname"],
|
||||
p_data["projectname"],
|
||||
p_data["projectdesc"])
|
||||
ppg.open_authproject()
|
||||
ppg.input_and_search_project(p_data["projectname"])
|
||||
add_image(dr,"创建项目")
|
||||
text = dr.get_text(
|
||||
"xpath->//div[@class='box-body']/table-component/div/table/tbody")
|
||||
# 搜索项目
|
||||
assert p_data["projectname"] in text, "%s不在预期结果%s中" % (
|
||||
p_data["projectname"], text)
|
||||
assert p_data["tenantname"] in text, "%s不在预期结果%s中" % (
|
||||
p_data["tenantname"], text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_05_create_project.py"])
|
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/10/25 18:55
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : test_06_create_region.py
|
||||
# @Software: PyCharm
|
||||
|
||||
import pytest
|
||||
import time
|
||||
import allure
|
||||
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from public.appmodel import resnodeaction
|
||||
from public.pages import sys_regionMgrPage
|
||||
|
||||
|
||||
@allure.feature("资源节点管理")
|
||||
class TestCreateRegion():
|
||||
"""测试添加资源节点"""
|
||||
|
||||
@allure.story("创建资源节点")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_region(self,login_domain):
|
||||
dr = login_domain
|
||||
p_data = datainfo.get_xls_to_dict("res_node_data.xlsx", "region")["创建资源节点"]
|
||||
arn = resnodeaction.Add_Res_Node(dr)
|
||||
srmpg = sys_regionMgrPage.SysRegionMgrPage(dr)
|
||||
arn.add_res_node(
|
||||
p_data["regionname"],
|
||||
p_data["nodename"],
|
||||
business_type=p_data["business_type"],
|
||||
platform=p_data["platform"],
|
||||
virtual_type=p_data["virtual_type"],
|
||||
regDesc=p_data["regDesc"])
|
||||
|
||||
srmpg.open_sys_regionMgr_page()
|
||||
time.sleep(globalparam.small)
|
||||
add_image(dr,"创建资源节点")
|
||||
flag = dr.element_exist(
|
||||
"xpath->//a[contains(text(),'%s')]" %
|
||||
p_data["nodename"])
|
||||
assert flag, "未查询到资源节点%s" % p_data["nodename"]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_06_create_region.py"])
|
|
@ -0,0 +1,72 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/10/27 19:15
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : test_07_create_service.py
|
||||
# @Software: PyCharm
|
||||
|
||||
import pytest
|
||||
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from public.appmodel import resnodeaction
|
||||
from public.pages import sys_regionMgrPage
|
||||
|
||||
|
||||
@allure.feature("资源节点管理")
|
||||
class TestCreateService():
|
||||
"""测试添加service"""
|
||||
|
||||
@allure.story("创建VMware服务")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_service_vmware(self,login_domain):
|
||||
dr = login_domain
|
||||
self.arn = resnodeaction.Add_Res_Node(dr)
|
||||
self.srmpg = sys_regionMgrPage.SysRegionMgrPage(dr)
|
||||
p_data = datainfo.get_xls_to_dict(
|
||||
"res_node_data.xlsx",
|
||||
"vmwareapi")["创建service-vmware"]
|
||||
self.arn.add_resource_service_node_vmware(
|
||||
p_data["regionname"],
|
||||
p_data["nodename"],
|
||||
p_data["servicename"],
|
||||
p_data["servicetype"],
|
||||
p_data["username"],
|
||||
p_data["passwrd"])
|
||||
# 校验
|
||||
dr.wait(5)
|
||||
add_image(dr,"创建VMware服务")
|
||||
self.srmpg.open_sys_regionMgr_page()
|
||||
|
||||
flag = dr.element_exist(
|
||||
"xpath->(//a[contains(text(),'%s')])" %
|
||||
p_data["servicename"])
|
||||
assert flag
|
||||
|
||||
@allure.story("创建opentack服务")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_service_openstack(self,login_domain):
|
||||
dr = login_domain
|
||||
self.arn = resnodeaction.Add_Res_Node(dr)
|
||||
self.srmpg = sys_regionMgrPage.SysRegionMgrPage(dr)
|
||||
p_data = datainfo.get_xls_to_dict(
|
||||
"res_node_data.xlsx", "openstackapi")["创建service-keystone"]
|
||||
self.arn.add_resource_service_node_vmware(
|
||||
p_data["regionname"],
|
||||
p_data["nodename"],
|
||||
p_data["servicename"],
|
||||
p_data["servicetype"],
|
||||
p_data["username"],
|
||||
p_data["passwrd"])
|
||||
# 校验
|
||||
self.srmpg.open_sys_regionMgr_page()
|
||||
add_image(dr,"创建opentack服务")
|
||||
flag = dr.element_exist(
|
||||
"xpath->(//a[contains(text(),'%s')])" %
|
||||
p_data["servicename"])
|
||||
assert flag
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_07_create_service.py"])
|
|
@ -0,0 +1,71 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/10/27 20:24
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : test_08_create_endpoint.py
|
||||
# @Software: PyCharm
|
||||
import pytest
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from public.appmodel import resnodeaction
|
||||
from public.pages import sys_regionMgrPage
|
||||
|
||||
@pytest.mark.usefixtures("driver")
|
||||
@allure.feature("资源节点管理")
|
||||
class TestCreateEndpoint():
|
||||
"""测试添加Endpoint"""
|
||||
|
||||
@allure.story("VMware创建endpoint")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_vmware_endpoint(self,login_domain):
|
||||
"""
|
||||
测试添加vmware,endpoint
|
||||
依赖已添加vmware服务
|
||||
:return:
|
||||
"""
|
||||
dr = login_domain
|
||||
self.arn = resnodeaction.Add_Res_Node(dr)
|
||||
self.srmpg = sys_regionMgrPage.SysRegionMgrPage(dr)
|
||||
p_data = datainfo.get_xls_to_dict("res_node_data.xlsx", "endpoint")[
|
||||
"创建vmware-endpoint"]
|
||||
self.arn.add_endpoint(
|
||||
p_data["regionname"],
|
||||
p_data["nodename"],
|
||||
p_data["servicename"],
|
||||
p_data["url"])
|
||||
time.sleep(globalparam.tiny)
|
||||
add_image(dr,"VMware创建endpoint")
|
||||
text = dr.get_text(
|
||||
"xpath->//table[@id='accessPoint']/tbody/tr[2]")
|
||||
assert p_data["url"] in text
|
||||
|
||||
|
||||
@allure.story("openstack创建endpoint")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_openstack_endpoint(self,login_domain):
|
||||
"""
|
||||
测试添加openstack,endpoint
|
||||
依赖已添加openstack服务
|
||||
:return:
|
||||
"""
|
||||
dr = login_domain
|
||||
self.arn = resnodeaction.Add_Res_Node(dr)
|
||||
self.srmpg = sys_regionMgrPage.SysRegionMgrPage(dr)
|
||||
p_data = datainfo.get_xls_to_dict(
|
||||
"res_node_data.xlsx", "endpoint")["创建os-l-endpoint"]
|
||||
self.arn.add_endpoint(
|
||||
p_data["regionname"],
|
||||
p_data["nodename"],
|
||||
p_data["servicename"],
|
||||
p_data["url"])
|
||||
|
||||
time.sleep(globalparam.tiny)
|
||||
add_image(dr,"openstack创建endpoint")
|
||||
text = dr.get_text(
|
||||
"xpath->//table[@id='accessPoint']/tbody/tr[2]")
|
||||
assert p_data["url"] in text
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_08_create_endpoint.py"])
|
|
@ -0,0 +1,66 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/10/30 19:05
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : test_09_sync_phy_resource.py
|
||||
# @Software: PyCharm
|
||||
|
||||
import time
|
||||
import pytest
|
||||
import allure
|
||||
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from public.appmodel import ressyncaction
|
||||
from public.pages import resSyncPage
|
||||
|
||||
|
||||
@allure.feature("资源同步")
|
||||
class TestPhySunc():
|
||||
"""物理资源同步"""
|
||||
|
||||
@allure.story("同步物理资源")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_sync_phy_res(self,login_domain):
|
||||
dr = login_domain
|
||||
p_data = datainfo.get_xls_to_dict("phy_sync_data.xlsx", "Sheet1")["物理资源同步"]
|
||||
sync_a = ressyncaction.ResSync(dr)
|
||||
sync_pg = resSyncPage.ResSyncPage(dr)
|
||||
sync_a.phy_res_sync(
|
||||
p_data["regionname"],
|
||||
p_data["nodename"],
|
||||
"DC1",
|
||||
"DC2")
|
||||
time.sleep(20)
|
||||
sync_pg.click_refresh_button()
|
||||
status1 = dr.get_text(
|
||||
"xpath->//td[contains(.,'DC1')]/../td[3]").strip()
|
||||
count1 = 0
|
||||
while status1 == "执行中":
|
||||
time.sleep(10)
|
||||
sync_pg.click_refresh_button()
|
||||
status1 = dr.get_text(
|
||||
"xpath->//td[contains(.,'DC1')]/../td[3]").strip()
|
||||
count1 += 1
|
||||
if count1 == 10:
|
||||
break
|
||||
add_image(dr,"同步物理资源-DC1")
|
||||
assert status1 == "执行成功"
|
||||
status2 = dr.get_text(
|
||||
"xpath->//td[contains(.,'DC2')]/../td[3]").strip()
|
||||
count2 = 0
|
||||
while status2 == "执行中":
|
||||
time.sleep(globalparam.long)
|
||||
sync_pg.click_refresh_button()
|
||||
status2 = dr.get_text(
|
||||
"xpath->//td[contains(.,'DC1')]/../td[3]").strip()
|
||||
count2 += 1
|
||||
if count2 == 10:
|
||||
break
|
||||
add_image(dr,"同步物理资源-DC2")
|
||||
assert status2 == "执行成功"
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_09_sync_phy_resource.py"])
|
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/10/27 19:16
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : test_10_craete_vdc.py
|
||||
# @Software: PyCharm
|
||||
|
||||
import pytest
|
||||
import allure
|
||||
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from public.appmodel import vdcaction
|
||||
from public.pages import vdcPage
|
||||
from public.appmodel.loginaction import Login
|
||||
|
||||
|
||||
@allure.feature("VDC管理")
|
||||
class TestCreateVDC():
|
||||
"""测试创建VDC"""
|
||||
|
||||
@allure.story("创建vdc")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_vdc(self,login_domain):
|
||||
dr = login_domain
|
||||
vdc_a = vdcaction.VdcACction(dr)
|
||||
vdc_pg = vdcPage.VdcPage(dr)
|
||||
p_data = datainfo.get_xls_to_dict("vdc_vpool.xlsx", "vdc")["创建vdc"]
|
||||
vdc_a.ceate_vdc(p_data["vdcname"])
|
||||
vdc_pg.open_vdc_page()
|
||||
vdc_pg.search_vdc(p_data["vdcname"])
|
||||
# 校验能查询到
|
||||
dr.wait(5)
|
||||
add_image(dr,"创建vdc")
|
||||
text = dr.get_text(
|
||||
"xpath->//div[@class='box-body']/table-component/div/table/tbody")
|
||||
assert p_data["vdcname"] in text
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_10_craete_vdc.py"])
|
|
@ -0,0 +1,54 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2019/10/27 19:18
|
||||
# @Author : mrwuzs
|
||||
# @Site :
|
||||
# @File : test_11_ceate_crate_vpool.py
|
||||
# @Software: PyCharm
|
||||
|
||||
import time
|
||||
import pytest
|
||||
import allure
|
||||
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from public.appmodel import vdcaction
|
||||
from public.pages import vdcPage
|
||||
from public.appmodel.loginaction import Login
|
||||
|
||||
|
||||
@allure.feature("VPOOL管理")
|
||||
class TestCreateVpool():
|
||||
"""测试创建vpool"""
|
||||
|
||||
@allure.story("创建VPOOL")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_vpool(self,login_domain):
|
||||
dr = login_domain
|
||||
vdc_a = vdcaction.VdcACction(dr)
|
||||
vdc_pg = vdcPage.VdcPage(dr)
|
||||
p_data = datainfo.get_xls_to_dict("vdc_vpool.xlsx", "vpool")["创建vpool"]
|
||||
time.sleep(globalparam.middle)
|
||||
vdc_a.create_vpool(
|
||||
p_data["vdcname"],
|
||||
p_data["vpoolname"],
|
||||
"虚拟资源",
|
||||
"数据中心",
|
||||
"DC1",
|
||||
p_data["vpooldesc"])
|
||||
|
||||
vdc_pg.open_vdc_page()
|
||||
time.sleep(globalparam.small)
|
||||
vdc_pg.search_vdc(p_data["vdcname"])
|
||||
time.sleep(globalparam.small)
|
||||
vdc_pg.click_az_buttun()
|
||||
time.sleep(globalparam.small)
|
||||
vdc_pg.search_vpool(p_data["vpoolname"])
|
||||
# 校验能查询到
|
||||
add_image(dr,"创建VPOOL")
|
||||
text = dr.get_text("xpath->//td")
|
||||
assert p_data["vpoolname"] in text
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_11_ceate_crate_vpool.py"])
|
|
@ -0,0 +1,57 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/2/25 14:33
|
||||
# @Author : mrwuzs
|
||||
# @Email : mrwuzs@outlook.com
|
||||
# @File : test_12_prodcate.py
|
||||
# @Software: PyCharm
|
||||
|
||||
import time
|
||||
import pytest
|
||||
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from config import globalparam
|
||||
from public.appmodel import folderaction
|
||||
|
||||
|
||||
CASE_DATA = datainfo.get_xls_to_dict("flolderdata.xlsx","产品分类")
|
||||
|
||||
@allure.feature("产品分类")
|
||||
class TestProdCate():
|
||||
"""测试产品分类"""
|
||||
@allure.story("创建产品分类-云主机")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_prodcate_cloudhost(self,login_domain):
|
||||
self.dr = login_domain
|
||||
self.pda =folderaction.ProdCategAction(self.dr)
|
||||
data = CASE_DATA["创建产品分类-云主机"]
|
||||
time.sleep(globalparam.middle)
|
||||
self.pda.create_product_class(classname=data["classname"],
|
||||
classnum=data["classnum"],
|
||||
classdes=data["classdes"],
|
||||
prodclass=data["prodclass"])
|
||||
time.sleep(globalparam.tiny)
|
||||
response = self.pda.search_product_class(data["classname"])
|
||||
assert data["classname"] in response
|
||||
assert data["classdes"] in response
|
||||
|
||||
@allure.story("创建产品分类-云磁盘")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
def test_create_prodcate_clouddisk(self,login_domain):
|
||||
self.dr = login_domain
|
||||
self.pda =folderaction.ProdCategAction(self.dr)
|
||||
data = CASE_DATA["创建产品分类-云磁盘"]
|
||||
time.sleep(globalparam.middle)
|
||||
self.pda.create_product_class(classname=data["classname"],
|
||||
classnum=data["classnum"],
|
||||
classdes=data["classdes"],
|
||||
prodclass=data["prodclass"])
|
||||
time.sleep(globalparam.tiny)
|
||||
response = self.pda.search_product_class(data["classname"])
|
||||
assert data["classname"] in response
|
||||
assert data["classdes"] in response
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_12_prodcate.py"])
|
|
@ -0,0 +1,91 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/2/25 16:25
|
||||
# @Author : mrwuzs
|
||||
# @Email : mrwuzs@outlook.com
|
||||
# @File : test_13_product_manage.py
|
||||
# @Software: PyCharm
|
||||
|
||||
import pytest
|
||||
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from config import globalparam
|
||||
from public.appmodel import folderaction
|
||||
from config import globalparam
|
||||
|
||||
|
||||
CASE_DATA = datainfo.get_xls_to_dict("flolderdata.xlsx","产品管理")
|
||||
@allure.feature("产品分类")
|
||||
class TestProductMange():
|
||||
|
||||
@allure.story("创建产品-云主机")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
@pytest.mark.dependency(depends=["test_create_prodcate_cloudhost"])
|
||||
def test_create_product_cloud_host(self,login_domain):
|
||||
self.dr = login_domain
|
||||
self.pra = folderaction.ProductManageAction(self.dr)
|
||||
data = CASE_DATA["创建产品-云主机"]
|
||||
time.sleep(globalparam.middle)
|
||||
self.pra.create_product(productclass=data["productclass"],
|
||||
platform=data["platform"],
|
||||
resourcetype=data["resourcetype"],
|
||||
productname=data["productname"],
|
||||
productbnum=data["productbnum"],
|
||||
description=data["description"])
|
||||
time.sleep(globalparam.tiny)
|
||||
response = self.pra.search_product(productname=data["productname"])
|
||||
assert data["productname"] in response
|
||||
assert data["productclass"] in response
|
||||
assert data["productbnum"] in response
|
||||
|
||||
|
||||
@allure.story("创建产品-云磁盘")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
@pytest.mark.dependency(depends=["test_create_prodcate_cloudhost"])
|
||||
def test_create_product_cloud_disk(self,login_domain):
|
||||
self.dr = login_domain
|
||||
self.pra = folderaction.ProductManageAction(self.dr)
|
||||
data = CASE_DATA["创建产品-云磁盘"]
|
||||
time.sleep(globalparam.middle)
|
||||
self.pra.create_product(productclass=data["productclass"],
|
||||
platform=data["platform"],
|
||||
resourcetype=data["resourcetype"],
|
||||
productname=data["productname"],
|
||||
productbnum=data["productbnum"],
|
||||
description=data["description"])
|
||||
time.sleep(globalparam.tiny)
|
||||
response = self.pra.search_product(productname=data["productname"])
|
||||
assert data["productname"] in response
|
||||
assert data["productclass"] in response
|
||||
assert data["productbnum"] in response
|
||||
|
||||
|
||||
@allure.story("产品上线-云主机")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
@pytest.mark.dependency(depends=["test_create_product_cloud_host"])
|
||||
def test_onine_product_cloud_host(self,login_domain):
|
||||
self.dr = login_domain
|
||||
self.pra = folderaction.ProductManageAction(self.dr)
|
||||
data = CASE_DATA["产品上线-云主机"]
|
||||
time.sleep(globalparam.middle)
|
||||
self.pra.product_online(productname=data["productname"])
|
||||
time.sleep(globalparam.tiny)
|
||||
response = self.pra.search_product(productname=data["productname"])
|
||||
assert "已上线" in response
|
||||
|
||||
@allure.story("产品上线-云磁盘")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
@pytest.mark.dependency(depends=["test_create_product_cloud_host"])
|
||||
def test_onine_product_cloud_disk(self,login_domain):
|
||||
self.dr = login_domain
|
||||
self.pra = folderaction.ProductManageAction(self.dr)
|
||||
data = CASE_DATA["产品上线-云磁盘"]
|
||||
time.sleep(globalparam.middle)
|
||||
self.pra.product_online(productname=data["productname"])
|
||||
time.sleep(globalparam.tiny)
|
||||
response = self.pra.search_product(productname=data["productname"])
|
||||
assert "已上线" in response
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_13_product_manage.py"])
|
|
@ -0,0 +1,86 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/2/25 21:33
|
||||
# @Author : mrwuzs
|
||||
# @Email : mrwuzs@outlook.com
|
||||
# @File : test_14_product_specification.py
|
||||
# @Software: PyCharm
|
||||
|
||||
|
||||
import pytest
|
||||
|
||||
from public.common.publicfunction import *
|
||||
from public.common import datainfo
|
||||
from config import globalparam
|
||||
from public.appmodel import folderaction
|
||||
from config import globalparam
|
||||
|
||||
|
||||
CASE_DATA = datainfo.get_xls_to_dict("flolderdata.xlsx","产品规格管理")
|
||||
@allure.feature("产品分类")
|
||||
class TestProductSp():
|
||||
@allure.story("创建产品规格-云主机")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
@pytest.mark.dependency()
|
||||
# @pytest.mark.dependency(depends=["test_create_product_cloud_host"])
|
||||
def test_create_product_sp_cloud_host(self,login_domain):
|
||||
self.dr = login_domain
|
||||
data = CASE_DATA["创建产品规格-云主机"]
|
||||
self.sp = folderaction.SpecificationAction(self.dr)
|
||||
self.sp.create_specification(productname=data["productname"],
|
||||
spname=data["spname"],
|
||||
sptype=data["sptype"],
|
||||
spdes=data["spdes"],
|
||||
vpool=data["vpool"]
|
||||
)
|
||||
response = self.sp.search_sp(spname=data["spname"])
|
||||
assert data["spname"] in response
|
||||
assert data["productname"] in response
|
||||
|
||||
@allure.story("创建产品规格-云磁盘")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
@pytest.mark.dependency()
|
||||
# @pytest.mark.dependency(depends=["test_create_product_cloud_disk"])
|
||||
def test_create_product_sp_cloud_disk(self,login_domain):
|
||||
self.dr = login_domain
|
||||
data = CASE_DATA["创建产品规格-云磁盘"]
|
||||
self.sp = folderaction.SpecificationAction(self.dr)
|
||||
self.sp.create_specification(productname=data["productname"],
|
||||
spname=data["spname"],
|
||||
sptype=data["sptype"],
|
||||
spdes=data["spdes"],
|
||||
vpool=data["vpool"]
|
||||
)
|
||||
response = self.sp.search_sp(spname=data["spname"])
|
||||
assert data["spname"] in response
|
||||
assert data["productname"] in response
|
||||
|
||||
@allure.story("产品规格上线-云主机")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
@pytest.mark.dependency(depends=["TestProductSp::test_create_product_sp_cloud_host"])
|
||||
def test_onine_product_cloud_host(self,login_domain):
|
||||
self.dr = login_domain
|
||||
self.sp = folderaction.SpecificationAction(self.dr)
|
||||
data = CASE_DATA["产品规格上线-云主机"]
|
||||
time.sleep(globalparam.middle)
|
||||
self.sp.online_sp( spname=data["spname"])
|
||||
time.sleep(globalparam.tiny)
|
||||
response = self.sp.search_sp(spname=data["spname"])
|
||||
assert "已上线" in response
|
||||
|
||||
@allure.story("产品规格上线-云磁盘")
|
||||
@pytest.mark.flaky(reruns=globalparam.RENUM)
|
||||
@pytest.mark.dependency(depends=["TestProductSp::test_create_product_sp_cloud_disk"])
|
||||
def test_onine_product_cloud_disk(self,login_domain):
|
||||
self.dr = login_domain
|
||||
self.sp = folderaction.SpecificationAction(self.dr)
|
||||
data = CASE_DATA["产品规格上线-云磁盘"]
|
||||
time.sleep(globalparam.middle)
|
||||
self.sp.online_sp( spname=data["spname"])
|
||||
time.sleep(globalparam.tiny)
|
||||
response = self.sp.search_sp(spname=data["spname"])
|
||||
assert "已上线" in response
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "test_14_product_specification.py"])
|
|
@ -0,0 +1,2 @@
|
|||
1,页面直接的切换不稳定,隐式等待和显示等待不能很好的出来,目前只能在页面切换的地方用强制sleep来处理
|
||||
2.磁盘和云主机的操作,对于重名的资源,只能,处理排在第一个
|
Loading…
Reference in New Issue