English | [简体中文](../../zh/test/3-0-how-to-edit-e2e-case.md)

For specific introduction and usage of Cypress, please refer to[Official document](https://docs.cypress.io/guides/overview/why-cypress)

Here we mainly give the E2E use cases corresponding to the resources in the front-end page of Skyline-console, and use function defined in `test/e2e/support`

The following is an introduction, taking the instance use case `test/e2e/integration/pages/compute/instance.spec.js` as an example

Generally, when testing the corresponding functions of a resource, follow the following order

1. Prepare relevant variables in text
   - Required parameters when creating a resource, such as: name, password
   - Required parameters when editing resources, such as: new name
   - When creating an associated resource, the name of the associated resource, such as: network name, router name, volume name

   ```javascript
   const uuid = Cypress._.random(0, 1e6);
   const name = `e2e-instance-${uuid}`;
   const newname = `${name}-1`;
   const password = 'passw0rd_1';
   const volumeName = `e2e-instance-attach-volume-${uuid}`;
   const networkName = `e2e-network-for-instance-${uuid}`;
   const routerName = `e2e-router-for-instance-${uuid}`;
   ```

2. Login before operation
   - If you are operating console resources, please use `cy.login`
   - If you are operating administrator resource, please use`cy.loginAdmin`
   - Generally, the variable `listUrl` is used in the `login` and `loginAdmin` functions, that is, directly access the page where the resource is located after logging in

   ```javascript
   beforeEach(() => {
     cy.login(listUrl);
   });
   ```

3. Create associated resources, use the resource creation function provided in `resource-commands.js`, take the test instance as an example
   - Create a network for testing to create a instance, attach interface

     ```javascript
     cy.createNetwork({ name: networkName });
     ```

   - Create router`cy.createRouter`to ensure that the floating IP is reachable when testing the associated floating IP
     - The router created in the following way will open the external network gateway and bind the subnet of the `networkName` network

     ```javascript
     cy.createRouter({ name: routerName, network: networkName });
     ```

   - Create floating ip`cy.createFip`，Used to test associat floating ip

     ```javascript
     cy.createFip();
     ```

   - Create volumr `cy.createVolume`(Used to test attach volume)

     ```javascript
     cy.createVolume(volumeName);
     ```

4. Write cases for creating resources
5. Write use cases for accessing resource details
6. Write use cases corresponding to all operations of resources separately
    - Generally, the use case of the `edit` operation is written later, and then the use case of the `delete` operation is written, so that you can test whether the editing is effective
7. To delete associated resources, use the resource-deleting function provided in `resource-commands.js`, this is to make the resources in the test account as clean as possible after the test case is executed
   - Delete Floating IP

     ```javascript
     cy.deleteAll('fip');
     ```

   - Delete Router`routerName`

     ```javascript
     cy.deleteRouter(routerName, networkName);
     ```

   - Delete Network`networkName`

     ```javascript
     cy.deleteAll('network', networkName);
     ```

   - Delete Volume`volumeName`

     ```javascript
     cy.deleteAll('volume', volumeName);
     ```

   - Delete all available volume

     ```javascript
     cy.deleteAllAvailableVolume();
     ```

The `4`, `5`, and `6` in the above steps are mainly used

- The function operation form in `test/e2e/support/form-commands.js`, please refer to the detailed introduction[3-1-E2E-form-operation](3-1-E2E-form-operation.md)
- The functions in `test/e2e/support/table-commands.js`, click on the buttons in the operation table, search, and enter for details. please refer to the detailed introduction[3-2-E2E-table-operation](3-2-E2E-table-operation.md)
- The functions in `test/e2e/support/detail-commands.js`, the operation returns the list page, the detection details, and the switching details Tab. please refer to the detailed introduction[3-3-E2E-detail-operation](3-3-E2E-detail-operation.md)

Create and delete associated resources mainly use the functions in `test/e2e/support/resource-commands.js`,. please refer to the detailed introduction[33-4-E2E-resource-operation](3-4-E2E-resource-operation.md)