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请求/小时