# TicketSystem **Repository Path**: jygong/TicketSystem ## Basic Information - **Project Name**: TicketSystem - **Description**: 本案例为上海计算机软件技术开发中心《微服务接口自动化测试》培训示例代码 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2022-03-07 - **Last Updated**: 2024-11-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Ticket System 说明 本案例为上海计算机软件技术开发中心《微服务接口自动化测试》培训示例代码。 Postman接口测试的Workspace见:[https://www.postman.com/lunar-star-34551/workspace/ticket-system-test-project/overview](https://www.postman.com/lunar-star-34551/workspace/ticket-system-test-project/overview) ## 项目结构 本案例包含注册中心一个、服务提供者一个、服务消费者两个,合计共四个服务,不设网关,具体内容如下表: | 服务名 | 服务类型 | 端口 | |:------------:|:-----:|:----:| | EurekaServer | 注册中心 | 8888 | | Tickethouse | 服务提供者 | 9000 | | Audience | 服务消费者 | 9001 | | Cinema | 服务消费者 | 9002 | ## 运行说明 **注意:每个服务请在单独的命令行终端中启动。如不是手动停止服务,bootRun不会自动终止。** **Windows用户执行命令时,请将路径中的“/”修改为“\”。** 启动注册中心服务EurekaServer,等待服务启动完成后,再启动其它服务。 `./gradlew :eurekaServer:bootRun` 启动服务提供者Tickethouse: `./gradlew :tickethouse:bootRun` 启动后可访问注册中心UI,查看服务注册情况[http://localhost:8888/](http://localhost:8888/) ![Eureka Server](docs/Eureka-screenshot.png) Tickethouse启动后,可访问[http://localhost:9000/ticket/findAudience/aud2](http://localhost:9000/ticket/findAudience/aud2) ,查看名为'aud2'的用户信息 ![访问Tickethouse](docs/TicketHouse.png) 如有需要可启动其他消费者服务。 Audience服务启动: `./gradlew :audience:bootRun` Cinema服务启动: `./gradlew :cinema:bootRun` ## 功能说明 本案例模拟一个电影购票系统。 观众服务(Audience)可实现业务:注册、登录、登出、查询所有排片、按电影名称查询排片、购票、查询已购电影票。具体见[Audience接口](audience/README.md) 影院服务(Cinema)可实现业务:登录、登出、排片、按电影名称查询排片。 具体见[Cinema接口](cinema/README.md) 票务服务(Tickethouse):Audience和Cinema的支撑服务。具体见[Tickethouse接口](tickethouse/README.md) ## 数据说明 数据库结构见:*tickethouse/src/main/resources/db/schema.sql* 预置数据见:*tickethouse/src/main/resources/db/data.sql* ## 测试说明 本案例包含单元测试、集成测试、组件测试和契约测试。 ### 单元测试 xxxUnitTest.java为JUnit实现的单元测试代码: >+ JUnit实现测试的执行与结果验证; >+ Mockito实现测试替身的模拟和依赖调用的验证。 xxxUnitSpec.groovy为Spock实现的单元测试代码: >+ Spock实现测试替身的模拟、验证,并执行测试。 单元测试运行: `./gradlew unitTest` 单元测试结果可在各服务目录下的 *build/reports/tests/unitTest/index.html* 中查看 ### 集成测试 xxxIntegrationTest.java为JUnit实现的集成测试代码: >+ JUnit实现测试的执行; >+ @WebMvcTest注解启动Spring容器,注入MockMvc; >+ Mockito实现测试替身的模拟和验证; >+ Rest-Assured实现接口验证。 xxxIntegrationSpec.groovy为Spock实现的单元测试代码: >+ Spock实现测试替身的模拟、验证,并执行测试; >+ @WebMvcTest注解启动Spring容器,注入MockMvc; >+ Rest-Assured实现接口验证。 集成测试运行: `./gradlew integrationTest` 集成测试结果可在各服务目录下的 *build/reports/tests/integrationTest/index.html* 中查看 ### 组件测试 xxxComponentTest.java为JUnit实现的组件测试代码: >+ JUnit实现测试的执行; >+ @SpringBootTest注解启动Spring容器,注入内部依赖; >+ WireMock实现外部HTTP RESTful接口的模拟和验证,以及弱网模拟; >+ Rest-Assured实现接口验证; >+ H2Database实现数据源的模拟。 xxxComponentSpec.groovy为Spock实现的组件测试代码: >+ Spock实现测试的执行; >+ @SpringBootTest注解启动Spring容器,注入内部依赖; >+ WireMock实现外部HTTP RESTful接口的模拟和验证,以及弱网模拟; >+ Rest-Assured实现接口验证; >+ H2Database实现数据源的模拟。 组件测试运行: `./gradlew componentTest` 组件测试结果可在各服务目录下的 *build/reports/tests/componentTest/index.html* 中查看 ### 契约测试 XXXContractTest.java为JUnit实现的契约测试代码: >+ JUnit实现测试的执行; >+ 消费者端使用PACT根据提供者接口编写契约,模拟提供者; >+ 提供者端使用PACT验证契约。 XXXContractSpec.groovy为Spock实现的契约测试代码: >+ Spock实现测试的执行; >+ 消费者端使用PACT根据提供者接口编写契约,模拟提供者。 集成测试运行: `./gradlew :tickethouse:contractTest` 契约测试结果可在tickethouse服务目录下的 *build/reports/tests/contractTest/index.html* 中查看