综合练习
REST Assured + JMeter 测一个 Spring API。
40 分钟
综合练习
把本 track 串起来:用 Spring Boot 或 Javalin 实现图书 API,HikariCP + JPA 持久化,SLF4J 打日志,REST Assured 写集成测试,JMeter 做 baseline 压测。完成后进入 spring-boot-essentials 深化,或回顾 orm-essentials / java-core-essentials 薄弱环节。
学习目标
- 独立完成「持久化 + HTTP + 日志 + API 测试 + 压测」闭环
- 对照 jev-intro 至 jev-crypto 的知识点自检
- 输出一份可复现的 README(构建、测试、压测命令)
任务:Book Catalog API
1. 领域与持久化(jev-db + jev-hibernate)
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String isbn;
private String title;
// getters / setters
}
public interface BookRepository extends JpaRepository<Book, Long> {
Optional<Book> findByIsbn(String isbn);
}
application.yml 配置 HikariCP 与 H2/MySQL;开启 SQL 日志仅 dev 环境。
2. REST 层(jev-javalin 或 Spring Boot)
@RestController
@RequestMapping("/api/books")
public class BookController {
private final BookRepository repo;
@GetMapping("/{isbn}")
public Book get(@PathVariable String isbn) {
return repo.findByIsbn(isbn)
.orElseThrow(() -> new ResponseStatusException(NOT_FOUND));
}
@PostMapping
@ResponseStatus(CREATED)
public Book create(@RequestBody @Valid Book book) {
return repo.save(book);
}
}
3. 日志(jev-logging)
在 Service 或 Controller 用 SLF4J 记录 isbn、耗时;异常带栈,不打敏感字段。
4. REST Assured 测试(jev-rest-assured)
至少 5 个用例:创建成功、重复 isbn、404、非法 JSON 400、列表或查询。
@SpringBootTest(webEnvironment = RANDOM_PORT)
class BookApiIT {
@LocalServerPort int port;
@BeforeEach void setup() { RestAssured.port = port; }
@Test void createAndGet() { /* given-when-then */ }
}
5. JMeter baseline(jev-jmeter)
- 50 线程,Ramp-Up 10s,GET
/api/books/{isbn}循环 20 次 - 记录 Throughput、P90、Error %
- 若 Error % > 0,排查连接池或 SQL(jev-db / jev-hibernate)
6. 可选加分(jev-crypto)
为「管理员重置」接口加 HMAC 签名头校验,或演示 BCrypt 存后台用户密码(与 Book 无关的独立表)。