自动化测试与数据库实战指南

内容分享2小时前发布
1 0 0

table {
border-collapse: collapse;
width: 100%;
margin-bottom: 1rem;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
pre {
background-color: #f8f8f8;
padding: 15px;
border-radius: 4px;
overflow-x: auto;
}

1、使用 Java 和 Selenium WebDriver 创建一个自动化框架。前提条件是安装最新版本的 Java、你选择的集成开发环境(IntelliJ 是 Java 常用的 IDE)、Chrome 浏览器、Apache Maven 和 TestNG。请使用 Selenium WebDriver 编写测试代码,按照步骤设置项目、创建测试类,实现登录一个电子商务应用程序并验证主页标题的功能。

以下是使用 Java 和 Selenium WebDriver 创建自动化框架的详细步骤:

安装必备工具:

– 安装最新版本的 Java

– 选择的 IDE(如 IntelliJ)

– Chrome 浏览器

– Apache Maven

– TestNG

配置 Maven:

– 下载 Maven 并按官网说明安装

– 在

pom.xml

文件中定义依赖库、插件及其版本,示例如下:

xml
<?xml version="1.0">

创建 Maven 项目:

- 打开 IntelliJ

- 选择“File” → “New” → “Project” → “Maven”

- 选择下载的 Java 版本

- 输入项目名称、位置、groupID 和 artifactID

下载 ChromeDriver:

- 下载与本地 Chrome 浏览器版本兼容的 ChromeDriver 可执行文件

- 将其放在项目的

src/main/resources

文件夹下

添加项目依赖:

- 在

pom.xml

中添加 Selenium、Java 和 TestNG 库依赖

- 在 IntelliJ 的右侧 Maven 面板刷新并下载库

创建基础测试类:

- 在

src/test/java

下创建名为

base

的包

- 添加

BaseTests.java

类,代码如下:

```java

package base;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.testng.annotations.AfterMethod;

import org.testng.annotations.BeforeMethod;

import java.time.Duration;

public class BaseTests {

protected WebDriver driver;


@BeforeMethod
public void setUp(){
    System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver");
    driver = new ChromeDriver();
    driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    driver.get("http://eCommerce.com/sign_in");
}

@AfterMethod
public void teardown(){
    driver.quit();
}

}

```

创建页面类:

- 为应用的每个页面创建对应的页面类

- 页面类包含查找和交互元素的 Selenium WebDriver 方法

- 页面类可链式返回其他页面对象,例如:

```java

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.support.ui.ExpectedConditions;

import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

public class HomePage {

private WebDriver driver;

private By searchField = By.cssSelector(“input.searchBox”);


public HomePage(WebDriver driver) {
    this.driver = driver;
}

public String getTitle(){
    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    wait.until(ExpectedConditions.presenceOfElementLocated(searchField));
    return driver.getTitle();
}

}

```

编写测试方法:

- 在测试类中使用

@Test

注解标记测试方法

- 添加断言、设置和清理任务,示例:

```java

import org.testng.Assert;

import org.testng.annotations.Test;

public class LoginTest {

private base.BaseTests baseTests;


@Test
public void testLoginAndVerifyTitle() {
    base.BaseTests baseTests = new base.BaseTests();
    baseTests.setUp();
    HomePage homePage = new LoginPage(baseTests.driver).login();
    String actualTitle = homePage.getTitle();
    Assert.assertEquals(actualTitle, "预期的主页标题");
    baseTests.teardown();
}

}

```

运行测试:

- 可在 IDE 中右键点击

@Test

标签旁的绿色三角形运行测试

- 也可使用 Maven 命令行运行,如

mvn clean test


- 该命令会打开 Chrome 浏览器运行测试,并在

target/surefire-reports/index.html

生成 HTML 报告

2、使用Cypress和页面对象模型设置一个UI自动化框架。前提条件是已安装Node.js 12或更高版本、选择好集成开发环境(对于JavaScript项目,Visual Studio Code很受欢迎)以及浏览器(Cypress可与Chrome、Chromium、Edge、Electron和Firefox配合使用)。请按照步骤安装Cypress、创建package.json文件、打开Cypress应用程序、运行现有测试,然后创建自己的测试,用于打开一个电子商务应用程序、登录并验证主页标题。

创建项目目录,在终端的项目文件夹中运行以下命令安装 Cypress:

bash
$ npm install cypress --save-dev

在该文件夹中创建一个

package.json

文件,内容如下:

json
{
"name": "functional-tests",
"version": "1.0.0",
"description": "UI Driven End - to - End Tests",
"main": "index.js",
"devDependencies": {
"cypress": "^9.2.0"
},
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "",
"license": "ISC"
}

运行以下命令,将打开 Cypress 应用程序,并设置一个带有示例 Cypress 测试的引导自动化框架结构:

bash
$ node_modules/.bin/cypress open

设置完成后,从 Cypress 应用程序右上角的下拉菜单中选择你喜欢的浏览器,点击任何测试(

.spec.js

)文件,运行现有测试。

创建测试:

- 在

cypress/integration

下创建一个新的

tests

文件夹,例如

ecommerce-e2e-tests

,并在其中创建一个测试文件,例如

login_tests.spec.js



- 在

/integration

文件夹外创建一个新的

/page-objects

文件夹,并在其中创建页面模块:

login-page.js


home-page.js



- 在测试文件中引入页面模块并编写测试代码,如登录和验证主页标题。

测试可以直接从 Cypress 应用程序运行,也可以使用

npm test

命令运行。

3、如果你不熟悉 SQL 语言的各个方面,如排序、过滤、分组、嵌套、连接等,请尝试以下练习:设置一个关系型数据库(如果没有现成的,从官方网站下载相关软件包或安装程序,在本地机器上设置一个 PostgreSQL 数据库,启动 PostgreSQL 服务器并打开 psql 客户端)。然后执行以下操作:1. 创建一个名为 items 的新表,用于存储商品详细信息,如 SKU、颜色、尺寸和价格。2. 向表中填充数据。3. 从表中读取数据。4. 过滤和分组数据。5. 对数据进行排序。6. 使用函数和运算符。7. 使用表达式和谓词。8. 嵌套查询。9. 连接表。10. 更新和删除数据。

以下是完成各步骤的具体操作:

创建新表 items:在 psql 客户端中运行命令

sql
postgres=> create table items (item_sku varchar(10), color varchar(3), size varchar(3), price int);

填充表数据:运行命令

sql
postgres=> insert into items values ('ABCD0001', 'Blk', 'S', 200), ('ABCD0002', 'Yel', 'M', 200);


可按此方式插入更多不同价格、颜色和尺寸组合的商品。

读取表数据:使用命令

sql
postgres=> select * from items;


可读取全量数据,若要读取特定列,可指定列名,如:

sql
postgres=> select item_sku, color from items;

过滤和分组数据:过滤数据可使用

limit


where

关键字,如:

sql
postgres=> select item_sku, size from items limit 3;


或:

sql
postgres=> select color from items where size='S';


分组数据使用

group by

关键字,如:

sql
postgres=> select color, count(*) from items where size='S' group by color;


还可使用

having

进一步过滤分组结果,如:

sql
postgres=> select color, count(*) from items where size='S' group by color having count(*)>1;

排序数据:使用

order by

关键字,如:

sql
postgres=> select item_sku, color, size from items order by price asc;


进行单列升序排序,

sql
postgres=> select * from items order by price asc, size desc;


进行多列不同顺序排序。

使用函数和运算符:常见函数如

count()


sum()


avg()


min()


max()

,运算符如

and


or


not


null

,例如:

sql
postgres=> select * from items where size='S' and color='Blk';

使用表达式和谓词:表达式可以是数学公式,谓词是逻辑比较,如:

sql
postgres=> select * from items where price=100+50 and color is not NULL;

嵌套查询:可将子查询放在主查询的任何位置,如:

sql
postgres=> select count(*), (select avg(price) from items) from items;

连接表:先创建另一个表 orders 并插入数据:

sql
postgres=> create table orders (order_id varchar(10), item_sku varchar(10), quantity int);


sql
postgres=> insert into orders values ('PR123', 'ABCD0001', 1), ('PR124', 'ABCD0001', 3), ('PR125', 'ABCD0001',2);


然后使用

join

关键字连接表,如:

sql
postgres=> select * from orders o inner join items i on o.item_sku=i.item_sku;


还有

left join


right join


full outer join

等类型。

更新和删除数据:更新数据使用

update

语句,如:

sql
postgres=> update items set price = 250 where item_sku = 'ABCD0001';


删除数据使用

delete

语句,如:

sql
postgres=> delete from items where item_sku = 'ABCD0001';

4、扩展一个Java - Selenium WebDriver自动化框架,添加一个测试,从orders表中获取一个订单,并对order_id和quantity值进行断言。步骤如下:1. 在POM文件中添加PostgreSQL JDBC驱动作为依赖。2. 在tests包下创建一个名为DataVerificationTest.java的新测试类文件。3. 在每次测试前启动与PostgreSQL数据库的连接,并在测试运行后关闭连接。指定要执行的SQL查询并获取数据库记录。使用TestNG断言来验证返回的数据。4. 从命令行(使用mvn clean test)或IDE中运行测试。记得在测试运行前启动postgres服务器。

以下是具体操作步骤:

在POM文件中添加PostgreSQL JDBC驱动依赖。

在tests包下创建

DataVerificationTest.java

文件,示例代码如下:


package tests;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
import java.sql.*;

public class DataVerificationTest {
    private static Connection connection;
    private static ResultSet results;
    private static Statement statement;

    @BeforeTest
    public void initiateConnection() throws SQLException {
        connection = DriverManager.getConnection(
            "jdbc:postgresql://localhost/postgres", 
            "newuser", null);
    }

    public void executeQuery(String query) throws SQLException {
        initiateConnection();
        statement = connection.createStatement();
        results = statement.executeQuery(query);
    }

    @Test
    public void verifyOrderDetails() throws SQLException {
        executeQuery("select * from orders where item_sku='ABCD0006'");
        while (results.next()){
            assertEquals(results.getString("quantity"), "1");
            assertEquals(results.getString("order_id"), "PR125");
        }
    }

    @AfterTest
    public void closeConnection() throws SQLException {
        if (results != null) results.close();
        if (statement != null) statement.close();
        if (connection != null) connection.close();
    }
}

运行测试:可以从命令行使用

mvn clean test

命令运行测试,也可以从IDE中运行。运行前需确保已启动PostgreSQL服务器。

5、请简述使用 BackstopJS 创建视觉测试以在三种分辨率(平板电脑、手机和普通浏览器)下验证 Web 应用程序的步骤,前提条件是已设置 Node.js 和 Visual Studio Code。


本练习旨在指导使用 BackstopJS 对 Web 应用程序进行三种分辨率(平板、手机、普通浏览器)的视觉测试。前提需设置 Node.js 和 Visual Studio Code。具体步骤为:

1. 先创建新项目文件夹,用命令 `npm install -g backstopjs` 安装 BackstopJS;
2. 再用 `backstop init` 命令设置默认配置和项目脚手架。
3. 之后选公共示例网站测试,一是添加 backstop.json 配置;二是用 `backstop reference` 命令获取不同屏幕尺寸的参考截图;三是用 `backstop test` 命令运行测试。

6、请简述开始使用 Cypress 插件进行可视化测试的步骤。


要开始使用 Cypress 插件进行可视化测试,步骤如下:

1. 运行命令 `$ npm i cypress-plugin-snapshots -S` 安装插件。

2. 在 `cypress/plugins/index.js` 和 `cypress/support/index.js` 文件里添加导入插件命令的代码,示例如下:

   ```js
   // cypress/plugins/index.js
   const { initPlugin } = require('cypress-plugin-snapshots/plugin');
   module.exports = (on, config) => {
     initPlugin(on, config);
     return config;
   };
   ```

   ```js
   // cypress/support/index.js
   import 'cypress-plugin-snapshots/commands';
   ```

3. 在 Cypress 配置文件 `cypress.json` 添加测试配置,示例如下:

   ```json
   {
     "env": {
       "cypress-plugin-snapshots": {
         "autoCleanUp": false,
         "autopassNewSnapshots": true,
         "diffLines": 3,
         "excludeFields": [],
         "ignoreExtraArrayItems": false,
         "ignoreExtraFields": false,
         "normalizeJson": true,
         "prettier": true,
         "imageConfig": {
           "createDiffImage": true,
           "resizeDevicePixelRatio": true,
           "threshold": 0.01,
           "thresholdType": "percent"
         },
         "screenshotConfig": {
           "blackout": [],
           "capture": "fullPage",
           "clip": null,
           "disableTimersAndAnimations": true,
           "log": false,
           "scale": false,
           "timeout": 30000
         }
       }
     }
   }
   ```

之后,使用 `toMatchImageSnapshot()` 方法添加可视化测试,示例如下:

```js
describe('Application Home page', () => {
  it('Visits the Application home page', () => {
    cy.visit('<give application URL here>');
    cy.get('#twotabsearchtextbox').should('be.visible');
    cy.get('#pageContent').toMatchImageSnapshot();
  });
});

7、按照以下步骤设置命令行的Dependency - Check工具,并对Selenium WebDriver自动化测试项目进行扫描:1. 在macOS上安装Dependency - Check,使用以下命令:$ brew install dependency - check。对于其他操作系统,你可以从官方网站下载dependency - check的ZIP文件。2. 安装完成后,使用以下命令对Selenium WebDriver自动化项目进行扫描:// 在macOS上$ dependency - check –project project_name - s project_path –prettyPrint// 在Windows上(dependency - check.bat文件位于你上一步下载并解压后的文件夹的bin文件夹内)> dependency - check.bat –project “project_name” –scan “project_path”。此命令可集成到你的持续集成(CI)管道中,若检测到漏洞则使管道失败。3. 该命令将在同一文件夹中生成一个HTML扫描结果报告,列出所有发现的漏洞。Selenium WebDriver项目可能有也可能没有漏洞。

Dependency - Check 工具设置与扫描指南

按照以下步骤设置命令行的 Dependency - Check 工具并对 Selenium WebDriver 自动化测试项目进行扫描:

1. 安装


macOS

:使用命令安装:

$ brew install dependency - check


其他操作系统

:可从官方网站下载 Dependency - Check 的 ZIP 文件。

2. 扫描


macOS

使用命令:

$ dependency - check --project project_name -s project_path --prettyPrint


Windows

使用命令:

```

dependency - check.bat –project “project_name” –scan “project_path”

```

该命令可集成到 CI 管道,检测到漏洞时管道失败。

3. 报告

扫描命令会在同一文件夹生成 HTML 报告,列出所有发现的漏洞。

Selenium WebDriver 项目可能存在或不存在漏洞。

8、以在线图书馆管理应用程序为例,假设每月每个用户平均访问网站2次,每月有100,000个不同用户访问网站,每天按30天计算,每天开放时间为12小时,并发用户比例为0.166,每个用户每小时平均发起5次请求。计算每月访问网站的总用户数、平均每日用户数、平均每小时用户数、并发用户数、每小时请求数等,并确定系统响应时间和吞吐量的目标KPI。


- 每月访问网站的总用户数:100,000用户 * 2访问次数/月 = 200,000 每月用户
- 平均每日用户数:200,000每月用户 ÷ 30天/月 = 6,667 每日用户
- 平均每小时用户数:6,667平均每日用户 ÷ 12小时/天 = 555 每小时用户,考虑峰值,向上取整为1,000每小时用户
- 并发用户数:1,000峰值每小时用户 * 0.166 = 166并发用户
- 每小时请求数:5 * 1,000每小时用户 = 5,000请求/小时

### 系统性能目标KPI

- **系统响应时间目标KPI**:对于166个并发用户,系统应在3秒内响应
- **系统吞吐量目标KPI**:系统吞吐量需支持5,000请求/小时
© 版权声明

相关文章

暂无评论

none
暂无评论...