Skip to content

Latest commit

 

History

History
276 lines (236 loc) · 9.21 KB

3-4-E2E-resource-operation.md

File metadata and controls

276 lines (236 loc) · 9.21 KB

简体中文 | English

在E2E的过程中,创建资源的时候,往往需要先创建关联资源,而删除资源后,也需要删除掉相关资源,所以以完整创建/删除为原则,封装了对相关资源的操作。

  • createInstance

    • 创建云主机,并等待云主机变为运行中状态

    • 参数name,云主机的名称

    • 参数networkName,云主机创建时选择的网络名称

    • 以浮动IP关联云主机test/e2e/integration/pages/network/floatingip.spec.js为例

      • 为了能成功关联云主机,需要满足云主机网卡所在的子网所连接的路由器开启了公网网关
        1. 创建带有子网的网络networkName
        2. 创建开启了公网网关并连接网络networkName子网的路由器routerName
        3. 创建挂载了网络networkName上的网卡的云主机instanceName
      it('successfully prepare resource', () => {
        cy.createNetwork({ name: networkName });
        cy.createRouter({ name: routerName, network: networkName });
        cy.createInstance({ name: instanceName, networkName });
      });
  • createNetwork

    • 创建网络,该网络带有一个子网

    • 参数name,网络的名称

    • 参数networkName,云主机创建时选择的网络名称

    • 以路由器连接子网为例test/e2e/integration/pages/network/router.spec.js为例

      • 创建了名称为networkName的网络,为连接子网做准备
      it('successfully prepare resource', () => {
        cy.createNetwork({ name: networkName });
      });
  • createNetworkPolicy

    • 创建网络QoS策略

    • 参数name,策略的名称

    • 以端口修改QoS为例test/e2e/integration/pages/network/port.spec.js为例

      • 创建了名称为policyName的策略,为修改QoS做准备
      it('successfully prepare resource by admin', () => {
        cy.loginAdmin().wait(5000).createNetworkPolicy({ name: policyName });
      });
  • createRouter

    • 创建开启了公网网关的路由器

    • 参数name,路由器的名称

    • 参数network

      • 若设置,则路由器会连接network网络的子网
    • 以浮动IP关联云主机test/e2e/integration/pages/network/floatingip.spec.js为例

      • 为了能成功关联云主机,需要满足云主机网卡所在的子网所连接的路由器开启了公网网关
        1. 创建带有子网的网络networkName
        2. 创建开启了公网网关并连接网络networkName子网的路由器routerName
        3. 创建挂载了网络networkName上的网卡的云主机instanceName
      it('successfully prepare resource', () => {
        cy.createNetwork({ name: networkName });
        cy.createRouter({ name: routerName, network: networkName });
        cy.createInstance({ name: instanceName, networkName });
      });
  • deleteRouter

    • 删除路由器,会断开路由器的子网,关闭路由器的公网网关,最终成功删除路由器

    • 参数network

      • 若设置,则需要先断开路由器的子网
    • 参数name,路由器的名称

    • 以浮动IP删除关联资源test/e2e/integration/pages/network/floatingip.spec.js为例

      • 为了能成功关联云主机,需要满足云主机网卡所在的子网所连接的路由器开启了公网网关
      it('successfully delete related resources', () => {
        cy.forceDeleteInstance(instanceName);
        cy.deleteRouter(routerName, networkName);
        cy.deleteAll('network', networkName);
        cy.loginAdmin().wait(5000);
        cy.deleteAll('networkQosPolicy', policyName);
      });
  • forceDeleteInstance

    • 强制删除云主机,而不是使用软删除

    • 参数name,云主机的名称

    • 以删除云主机组test/e2e/integration/pages/compute/server-group.spec.js为例

      1. 先删除云主机组下的云主机
      2. 再成功删除云主机组
      it('successfully delete', () => {
        cy.clickFirstActionDisabled();
        cy.forceDeleteInstance(instanceName);
        cy.wait(5000);
        cy.visitPage(listUrl)
          .tableSearchText(name)
          .clickConfirmActionInFirst()
          .checkEmptyTable();
      });
  • createVolume

    • 创建云硬盘

    • 参数name,云硬盘的名称

    • 以云硬盘备份test/e2e/integration/pages/storage/backup.spec.js为例

      • 创建云硬盘的备份,需要先准备好云硬盘
      it('successfully prepare resource', () => {
        cy.createVolume(volumeName);
        cy.createNetwork({ name: networkName });
        cy.createInstance({ name: instanceName, networkName });
      });
  • createSecurityGroup

    • 创建安全组

    • 参数name,安全组的名称

    • 以虚拟网卡test/e2e/integration/pages/network/port.spec.js为例

      • 测试管理安全组,需要先准备好安全组
      it('successfully prepare resource', () => {
        cy.createFip();
        cy.createSecurityGroup({ name: securityGroupName });
        cy.createNetwork({ name: networkName });
        cy.createRouter({ name: routerName, network: networkName });
        cy.createInstance({ name: instanceName, networkName });
      });
  • createFip

    • 创建浮动IP

    • 以云主机test/e2e/integration/pages/compute/instance.spec.js为例

      • 测试绑定浮动IP,需要准备好可达的浮动IP
      it('successfully prepare resource', () => {
        cy.createNetwork({ name: networkName });
        cy.createRouter({ name: routerName, network: networkName });
        cy.createFip();
        cy.createVolume(volumeName);
      });
  • createUserGroup

    • 创建用户组

    • 参数name,用户组的名称

    • 以项目test/e2e/integration/pages/identity/project.spec.js为例

      • 测试管理用户组操作,需要准备好用户组
      it('successfully prepare resource', () => {
        cy.createUser({ name: username });
        cy.createUserGroup({ name: userGroupName });
      });
  • createUser

    • 创建用户

    • 参数name,用户的名称

    • 以项目test/e2e/integration/pages/identity/project.spec.js为例

      • 测试管理用户操作,需要准备好用户
      it('successfully prepare resource', () => {
        cy.createUser({ name: username });
        cy.createUserGroup({ name: userGroupName });
      });
  • createProject

    • 创建项目

    • 参数name,项目的名称

    • 以用户test/e2e/integration/pages/identity/user.spec.js为例

      • 测试创建用户,需要准备项目
      • 测试管理项目权限,需要准备项目
      it('successfully prepare resource', () => {
        cy.createProject({ name: projectName });
        cy.createProject({ name: projectName2 });
        cy.createUserGroup({ name: userGroupName });
      });
  • createIronicImage

    • 创建裸机使用的镜像

    • 参数name,镜像的名称

    • 以裸机test/e2e/integration/pages/compute/ironic.spec.js为例

      • 创建裸机,需要能创建裸机的镜像
      it('successfully prepare resource', () => {
        cy.createNetwork({ name: networkName });
        cy.createRouter({ name: routerName, network: networkName });
        cy.createFip();
        cy.createIronicImage({ name: imageName });
      });
  • deleteInstance

    • 删除云主机

    • 参数name,云主机的名称

    • 参数deleteRecycleBin,默认为true,表示需要进入回收站二次删除

    • 以云主机删除test/e2e/integration/pages/compute/instance.spec.js为例

      it('successfully delete', () => {
        cy.deleteInstance(newname);
      });
  • deleteAllAvailableVolume

    • 删除所有可用的云硬盘

    • 以云主机test/e2e/integration/pages/compute/instance.spec.js为例

      it('successfully delete related resources', () => {
        cy.deleteAll('fip');
        cy.deleteRouter(routerName, networkName);
        cy.deleteAll('network', networkName);
        cy.deleteAll('volume', volumeName);
        cy.deleteAllAvailableVolume();
      });
  • deleteAll

    • 删除符合条件的资源

    • 参数resourceName,资源名称,支持

      export default {
        // compute
        instance: instanceListUrl,
        image: imageListUrl,
      
        // storage
        volume: volumeListUrl,
        volumeSnapshot: volumeSnapshotListUrl,
        backup: backupListUrl,
        volumeType: volumeTypeListUrl,
      
        // network
        network: networkListUrl,
        router: routerListUrl,
        networkQosPolicy: policyListUrl,
        fip: fipListUrl,
        port: portListUrl,
      
        // security
        securityGroup: securityGroupListUrl,
      
        // identity
        project: projectListUrl,
        user: userListUrl,
        userGroup: userGroupListUrl,
      };
    • 参数name

      • 如设置,则删除指定名称的资源
      • 如不设置,则删除资源列表下的所有资源
    • 参数tab

      • 如设置,表示资源位于tab标签下,需要先切换到指定标签下
    • 以云硬盘类型test/e2e/integration/pages/storage/volume-type.spec.js为例

      • 删除管理QoS时准备的QoS
      it('successfully delete related resources', () => {
        cy.deleteAll('volumeType', qosName, 'QoS');
      });