为了综合将测试部分的知识点学以致用,本文结合 12306官网、 拿个Offer 12306项目 ,集中在 功能测试(XMind提测+用例编写)、接口测试(Java+TestNG、Python+Pytest、Apifox工具)、自动化测试 等方面(性能测试涉及较多资源知识储备,笔者不具便不展开)。
😊若有错误或者读者有更便捷的思路、操作等等,敬请批评指出。
文章目录
前置知识
- 用例的撰写方法
软件测试教程,这个视频的笔记和讲解过程适合新手
- HTML基本结构,如div、内部的name、class、id属性之类。
如果是科班的,稍微复习一下就够用了
- TestNG、Pytest、Selenium等技术(相关内容内会附上参考文章)
- Apifox 测试工具
- 接口测试用了 拿个Offer 12306项目 项目,读者也可以 Git 开源代码和看公开的部分文档进行调试(基本够用,当然项目的内部的技术文章介绍挺不错的👍)
一、功能测试
1. 用户模块
1.1 注册功能
📃 用户名规则: 由6-30位字母、数字或“_”两钟类型以上组合而成,且开头必须为字母,未注册
在12306官方网中,用户名相当于人的身份证号一样,对用户来说是唯一且不可更改的。
- 如果注销后,曾用的用户名会变为可用
- 在项目中,将注销的用户名添加到,实现注销用户名后续可用的功能,因此针对这一特殊实现添加了测试用例。
1. 等价类划分法
从需求中去划分要测试的类别,6-30位字母、数字或“_”
包含了【长度】【类型】的类别,两钟类别以上组合,开头必须为字母,未注册过
为【特殊规则】,则在类别中去划分,得出有效数据和无效数据的规则以及具体测试数据。步骤如下:
1️⃣ 明确需求
由6-30位字母、数字或“_”两钟类别以上组合而成,且开头必须为字母
2️⃣划分有效等价和无效等价
有效等价 | 无效等价 |
---|---|
6-30位 | < 6、> 30位 |
字母、数字或“_” | 其他字符,如¥%& |
两类型以上组合 | 纯字母、纯数字、纯“_”等一种类型 |
开头为字母 | 开头不为字母 |
未注册 | 已注册 |
3️⃣ 提取数据编写测试用例
用例的撰写一般需要结合等价类和边界值两种方法,此处不先给出用例。
2. 边界值法
根据“开内闭外”原则,目标数据的范围为[6,30],则:
- 上点:6、30
- 内点:15(自由取)
- 离点:5、7(舍去)、29(舍去)、31
使用 XMind 提取测试点:
- 图中的具体测试数据和黑框的概要一般不用画,此处是为了方便笔者自己理解
使用 Excel 设计用例:
- Excel部分用例的截图
复制部分 Excel 用例如下:
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 用例数据 | 预期结果 |
---|---|---|---|---|---|---|---|
UserName-001 | 合法用户名(6位(字母、数字“_”,字母开头组成)+未注册) | User-Register | P0 | 进入注册界面 | 1.在用户名输入框输入用户名 2.点击其他任意框 |
a_1234 | 合法,无错误提示 |
UserName-002 | 合法用户名(30位(字母、数字“_”,字母开头组成)+未注册) | User-Register | P0 | 进入注册界面 | 1.在用户名输入框输入用户名 2.点击其他任意框 |
b_1234567890_12 34567890_123456 |
合法,无错误提示 |
UserName-003 | 合法用户名(15位(字母、数字“_”,字母开头组成)+未注册) | User-Register | P0 | 进入注册界面 | 1.在用户名输入框输入用户名 2.点击其他任意框 |
c_1234567890_12 | 合法,无错误提示 |
…… |
1.2 登录功能
- 登录先检验输入的 用户名/手机号/邮箱 是否符合规定的格式规范,符合规范的账号+符合位数的密码才会进行下一步的匹配判断是否登录成功。
- 账号不存在、账号存在密码错误 两者登录的提示相同,即不会另外提示账号不存在。
使用 XMind 提取测试点:
注意:逆向用例编写时,如下图中的红框内容在熟悉流程后都可以省去,仅是为了避免粗心写错用例测试数据。
- 在创建逆向用例时,可以代入高中物理的 控制变量法,如本登录逆向用例中的“密码错误”,除了“密码”这一变量,其他变量一定是正向的,比如测试的账号一定是符合规范格式、已经注册的。
2. 购票模块
完整的XMind 提取测试点的图片1 在文末。
二、接口测试【登录】
📖 接口文档为 12306项目接口文档 。
1. 代码实现
1)Java +TestNG 实现
以【登录用例】为例,代码基本搭建参考 TestNG 单元测试框架的入门与实践 文章,注意添加依赖代码即可。
pom.xml
完整依赖代码
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.10</version>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
</dependencies>
Java 代码
登录接口要求:
1、接口:/api/user-service/v1/login
2、Header:特定token值
3、Body (JSON格式):
{
"usernameOrMailOrPhone": "admin"
"password": "admin123456",
}
@BeforeSuite注解
:执行所有测试执行前运行一次添加测试的基础URI@DataProvider注解
:提供多组测试数据,可以模拟不同的测试场景@Test注解
:实际执行测试的方法,指定使用@DataProvider
提供的测试数据- 构建请求体:根据传入的参数构建JSON格式的请求体
- 发送请求:使用REST Assured构建POST请求,设置请求头(包括认证头部)和请求体,然后发送请求到登录端点。
import io.restassured.RestAssured;
import io.restassured.response.Response;
import org.json.JSONObject;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static io.restassured.RestAssured.given;
import static io.restassured.http.ContentType.JSON;
public class TestNG_12306 {
private static final String BASE_URL = "http://localhost:8080";
private static final String LOGIN_ENDPOI