Rest-Assured API 测试:基于 Java 和 TestNG 的接口自动化测试
1. 右键点击项目的文件夹,选择 New > File。
2. 输入文件名,例如 notes.md,然后点击 OK。
3. 选择项目类型
- 在左侧的 Generators 部分,选择 Maven Archetype,这将为你生成一个基于 Maven 的项目。
4. 配置项目基本信息
- Name: 在 Name 输入框中填写项目名称(例如
test
)。 - Location: 设置项目的存储路径。这里路径为
F:\java_api\api
,可以根据需要更改。 - Create Git repository: 勾选该选项,将为项目初始化 Git 仓库。
5. 配置 JDK
- JDK: 在 JDK 下拉框中选择所需的 JDK 版本。这里选择了 Oracle OpenJDK version 1.8.0_211。你也可以选择其他版本,或者点击 Manage catalogs 来管理 JDK。
6. 配置 Maven 构建设置
- Archetype: 选择
org.apache.maven.archetypes:maven-archetype-quickstart
,这是一个常见的 Maven 构建原型。 - Version: 设置 Maven 构建版本为
1.1
,或者可以选择适合的版本。
7. 高级设置
- GroupId: 设置为
org.example
。这通常是你项目的唯一标识符。 - ArtifactId: 设置为
test
,这通常是你的项目名称或模块名称。 - Version: 设置为
1.0-SNAPSHOT
,表示项目的当前版本。
8. 创建项目
配置完成后,点击 Create 按钮,IntelliJ IDEA 将会根据这些设置创建一个新的 Maven 项目。
这些步骤完成后,你的 Maven 项目就已经创建好,接下来可以开始在项目中编写代码和配置依赖了。
Rest-Assured API 测试笔记
1. 配置步骤
首先,确保你正确添加了 Rest-Assured 和 TestNG 依赖到你的 pom.xml
文件中:
<dependencies><!-- Rest-Assured 依赖 --><dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><version>4.2.0</version><scope>test</scope></dependency><!-- TestNG 依赖 --><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>7.0.0</version><scope>test</scope></dependency>
</dependencies>
配置步骤:
- 打开你的
pom.xml
文件。 - 找到
<dependencies>
标签。如果没有此标签,请手动添加。 - 将以上两段依赖代码添加到
<dependencies>
标签内。 - 保存文件后,点击右侧 Maven 工具窗口中的 Refresh 按钮,确保所有依赖被正确下载。
这样,你就完成了 Rest-Assured 和 TestNG 的依赖配置。接下来,你可以开始编写接口测试代码了。
2. 创建 API 测试类
我们创建一个名为 ApiTest.java
的类,来编写不同类型的 API 请求(POST 和 GET)。以下是每个方法的详细解释。
3. test_post_json()
方法
@Test
public void test_post_json() {String jsonData = "{\"principal\":\"lemon_auto\",\"credentials\":\"lemon123456\",\"appType\":3,\"loginType\":0}";given()// 设置请求头,指定请求体的类型为 JSON.header("Content-Type", "application/json; charset=UTF-8")// 设置请求体为 JSON 格式的数据.body(jsonData) .when()// 发送 POST 请求,请求的 URL 为指定的登录接口.post("http://shop.lemonban.com:8107/login").then()// 打印响应的所有信息,包括响应体、状态码、响应头等.log().all();
}
代码逻辑解释:
-
@Test
: TestNG 的注解,表示这是一个测试方法。 -
given()
: 用于设置请求的预处理阶段,在这里你设置了请求头和请求体。header("Content-Type", "application/json; charset=UTF-8")
: 设置请求头,告诉服务器请求体是 JSON 格式。body(jsonData)
: 设置请求体为 JSON 数据,这里包含了用户的登录信息。
-
when().post()
: 指定 HTTP 方法(POST)并发送请求。请求的 URL 为"http://shop.lemonban.com:8107/login"
。 -
then().log().all()
: 打印请求和响应的所有日志信息,以便查看服务器的返回数据。
4. test_post_form()
方法
@Test
public void test_post_form() {given()// 设置请求头,指定请求体的格式为表单数据.header("Content-Type", "application/x-www-form-urlencoded")// 设置表单数据参数.formParam("loginame", "admin").formParam("password", "e10adc3949ba59abbe56e057f20f883e").when()// 发送 POST 请求,请求的 URL 为指定的登录接口.post("http://erp.lemfix.com/user/login").then()// 打印响应日志.log().all();
}
代码逻辑解释:
formParam()
: 用于设置表单参数。在这个方法中,传递了loginame
(用户名)和password
(密码)。这些参数将作为表单数据发送给服务器。header("Content-Type", "application/x-www-form-urlencoded")
: 设置请求头,告诉服务器请求体是表单数据格式。- 其他逻辑和
test_post_json()
方法类似,最终打印响应日志。
5. test_post_xml()
方法
@Test
public void test_post_xml() {String xmlData = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +"<suite name=\"测试套件\">\n" +" <test name=\"test\">\n" +" <classes>\n" +" <class name=\"com.lemon.testcases.TestLogin\"/>\n" +" <class name=\"com.lemon.testcases.TestTiku\"/>\n" +" </classes>\n" +" </test>\n" +"</suite>";given()// 设置请求头,指定请求体的格式为 XML.header("Content-Type", "application/xml")// 设置请求体为 XML 数据.body(xmlData).when()// 发送 POST 请求,请求的 URL 为指定的接口.post("http://httpbin.org/post").then()// 打印响应日志.log().all();
}
代码逻辑解释:
body(xmlData)
: 这里设置了 XML 格式的请求体。xmlData
包含了一个测试套件的 XML 配置。header("Content-Type", "application/xml")
: 设置请求头为 XML 格式。- 其他步骤与之前的 POST 请求类似,最后打印响应日志。
6. test_post_upload()
方法
@Test
public void test_post_upload() {given().log().all() // 打印请求日志// 设置文件上传.multiPart(new File("F:\\test.txt")).when()// 发送 POST 请求,请求的 URL 为指定的接口.post("http://httpbin.org/post").then()// 打印响应日志.log().all();
}
代码逻辑解释:
multiPart()
: 用于文件上传,multiPart()
方法将文件作为请求的一部分发送给服务器。这里上传了本地文件F:\\test.txt
。- 其他步骤和之前的 POST 请求相同,打印文件上传的响应日志。
7. test_get()
方法
@Test
public void test_get() {given().log().all() // 打印请求日志// 设置查询参数.queryParam("prodName", "%E9%9E%8B%E5%AD%90").queryParam("sort", 0).queryParam("orderBy", 0).queryParam("current", 1).when()// 发送 GET 请求,请求的 URL 为指定的接口.get("http://mall.lemonban.com:8107/search/searchProdPage").then()// 打印响应日志.log().all();
}
代码逻辑解释:
queryParam()
: 设置 GET 请求的查询参数。这里设置了四个参数:prodName
、sort
、orderBy
和current
。这些参数会附加在 URL 后面,作为查询字符串发送。when().get()
: 使用 GET 请求从服务器获取数据,URL 为"http://mall.lemonban.com:8107/search/searchProdPage"
。- 其他步骤和之前的方法相似,最终打印响应日志。
8. 总结
每个方法的核心逻辑是:
- 请求的构建(
given()
): 在given()
阶段设置请求头、请求体、查询参数等请求配置。 - 发送请求(
when()
): 使用相应的 HTTP 方法(如post()
或get()
)发送请求。 - 响应的处理(
then()
): 打印服务器的响应,或者进行响应的验证。
通过这种方式,我们能够方便地测试不同类型的请求,验证 API 的行为和响应。所有请求类型(JSON、表单、XML、文件上传、GET)都可以通过类似的方式进行设置和测试。
9. 测试执行
你可以通过 IntelliJ IDEA 右键点击每个测试方法并选择 Run 来执行单个测试。所有日志会显示在 Run 控制台中。