Swagger和WireMock的简单使用

本文介绍了如何在Spring Boot项目中使用Swagger自动生成API文档,并通过实例演示了如何配置WireMock来快速搭建RESTful服务的模拟环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Swagger自动生成HTML文档

在springboot项目中导入依赖

<!--利用Swagger生成HTML文档-->
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.8.0</version>
</dependency>

在启动类上加上@EnableSwagger2注解,启动项目,访问http://localhost:8002/swagger-ui.html

即可查看所有接口。

对接口进行描述

@RequestMapping(value = "/",method = RequestMethod.GET)
@ApiOperation("前往首页")//对Swagger2生成的接口进行一个描述
public String root(){
    return "redirect:index";
}

在实体类中对返回的数据对象的属性进行描述:

@ApiModelProperty(value="用户的介绍属性")

private String description;

在RESTful风格中解释传入的数据

@GetMapping("/{id}/deletion")
public ModelAndView delete(Model model,@PathVariable("id") @ApiParam("传入一个博客的id") Integer id){
    System.out.println("controller。。。");
    blogService.deleteBlog(id);
    model.addAttribute("blogsList",blogService.getBlogs());
    return new ModelAndView("blog/list","blogModel",model);
}

2.WireMock快速伪造RESTful服务

前端并行开发的时候,我们给它提供了一套伪造的RESTful服务,避免了app,pc端,小程序开发人员 ,对接口的理解不一致,写的假的接口不一致 ,最好不好对接后台。

swagger的使用必须在该服务开发测试好了,才能给前端来浏览swagger来调用。

1.下载,运行 jar

官网==》doc ==》running-standalone 作为一个独立服务器运行

$ java -jar wiremock-standalone-2.23.2.jar

2.在项目中添加依赖

<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock</artifactId>
    <version>2.22.0</version>
</dependency>

不要加入scope为test环境,否者在主函数中找不到jar

3.编写运行函数

import com.github.tomakehurst.wiremock.client.WireMock;
//相当于一个wiremock的客户端
public class Test {
    public static void main(String[] args) {
//        System.out.println(new BCryptPasswordEncoder().encode("123456"));
        WireMock.configureFor(8000);//连接8000端口的服务器
        WireMock.removeAllMappings();//清空以前的服务
////向服务器发送get请求的接口服务,返回json串和200状态码
        WireMock.stubFor(
                WireMock.get(
                        WireMock.urlPathEqualTo("/order/1"))
                        .willReturn(WireMock.aResponse().withBody("{\"id\":1}").withStatus(200)));
    }
}

运行在服务器上访问该伪服务接口

简化代码:

public class MockServer {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        configureFor(8062);
        removeAllMappings();

        mock("/order/1", "01");
        mock("/order/2", "02");
    }

    private static void mock(String url, String file) throws IOException {
        ClassPathResource resource = new ClassPathResource("mock/response/" + file + ".txt");
        String content = StringUtils.join(FileUtils.readLines(resource.getFile(), "UTF-8").toArray(), "\n");
        stubFor(get(urlPathEqualTo(url)).willReturn(aResponse().withBody(content).withStatus(200)));
    }

}

<think>好的,我需要帮用户了解苍穹外卖接口的测试方法,包括性能测试UI自动化测试。首先,我得回忆一下常见的工具框架,然后结合用户提供的引用内容,看看有没有相关的信息可以利用。 用户提到了三个引用,分别是关于CGLIB、LambdaQueryWrapperSwagger的。虽然这些引用可能与测试没有直接关系,但Swagger部分提到API文档生成,可能对接口测试有帮助。因为Swagger可以用来查看API的结构,方便编写测试用例。 首先,性能测试方面,常用的工具有JMeterGatling。JMeter比较成熟,支持多种协议,适合做HTTP请求的压测。Gatling基于Scala,报告更直观,适合高并发场景。需要解释这两个工具的基本用法,并给出示例,比如如何配置线程组、断言等。同时,可能需要提到如何利用Swagger导出的API文档来辅助设计测试用例。 然后是UI自动化测试,常用的框架有SeleniumCypress。Selenium支持多浏览器,适合复杂的前端测试,而Cypress更现代化,适合快速执行调试。需要给出一个简单的示例,比如用Selenium打开浏览器,定位元素,模拟用户操作。此外,Appium可能也相关,如果苍穹外卖有移动端的话,但用户没有提到,可能暂时不考虑。 接下来,用户可能需要知道如何结合持续集成,比如Jenkins或者GitHub Actions,但用户的问题中没有提到,可能暂时不需要深入。另外,性能测试UI自动化测试的集成方法,或者最佳实践,是否需要提及? 另外,引用中的LambdaQueryWrapper是MyBatis-Plus的查询构造器,可能在后端代码中使用,但测试接口时可能不需要直接涉及,除非需要验证数据库操作,这时候可能需要结合单元测试,比如使用JUnitMockito来模拟数据库交互,但用户的问题集中在接口UI测试,可能不需要深入数据库测试部分。 Swagger的引用提到API文档生成,可以指导如何快速获取接口信息,方便编写测试用例。比如,使用Swagger UI来查看所有接口的端点、参数、请求方法,然后利用这些信息在JMeter中创建对应的HTTP请求。 现在需要考虑如何组织回答结构。用户需要的是方法、工具、框架示例。所以分两部分:性能测试UI自动化测试,每个部分下介绍工具、步骤示例代码。 在性能测试部分,步骤可能包括:1. 确定测试目标指标;2. 使用Swagger分析接口;3. 配置JMeter测试计划;4. 执行分析结果。示例给出JMeter的测试片段,比如HTTP请求断言配置。 UI自动化测试部分,步骤可能包括:1. 选择测试框架;2. 编写测试脚本;3. 执行生成报告。示例给出Selenium的Python代码片段,模拟登录、下单等操作。 需要注意用户提到的苍穹外卖是具体项目,可能需要假设其具有典型的WebAPI结构。同时,确保示例代码正确,比如Python的Selenium代码是否合理,JMeter的配置是否正确。 最后,生成相关问题,可能需要围绕工具选择、优化测试用例、持续集成、常见问题等方面提问。</think>### 苍穹外卖接口测试方法详解 #### 一、性能测试方法与工具 1. **工具选择** - **JMeter**:支持HTTP/HTTPS协议压测,可视化配置,可生成详细报告。 - **Gatling**:基于Scala的高性能工具,适合复杂场景模拟。 - **Locust**:基于Python的分布式压测工具,脚本编写灵活。 2. **步骤与示例** - **步骤1:通过Swagger获取API文档** 使用Swagger UI分析接口路径、参数及返回值,设计测试场景[^3]。 - **步骤2:JMeter脚本配置** 创建线程组、HTTP请求、断言监听器。 ```java // 示例:JMeter中HTTP请求配置 HTTP Request: - Path: /api/order/create - Method: POST - Body Data: {"productId": "123", "quantity": 2} ``` - **步骤3:执行与监控** 设置并发用户数(如100线程),运行测试后通过`Aggregate Report`分析响应时间吞吐量。 3. **关键指标** - 平均响应时间 ≤ 500ms - 错误率 < 1% - 95%请求的TP90值达标 --- #### 二、UI自动化测试方法与框架 1. **框架选择** - **Selenium + Python**:跨浏览器兼容性强,适合复杂交互验证。 - **Cypress**:实时重载快照调试,适合快速迭代。 - **Playwright**:支持多语言(Python/Java),可模拟移动端操作。 2. **步骤与示例** - **步骤1:元素定位** 使用浏览器开发者工具获取页面元素XPath或CSS选择器。 - **步骤2:编写测试脚本** ```python # Selenium示例:模拟用户下单流程 from selenium import webdriver driver = webdriver.Chrome() driver.get("https://demo.cangqiong.com/login") driver.find_element("id", "username").send_keys("test@example.com") driver.find_element("id", "password").send_keys("123456") driver.find_element("xpath", "//button[@type='submit']").click() driver.find_element("class", "product-card").click() driver.find_element("id", "checkout-button").click() assert "订单成功" in driver.page_source driver.quit() ``` - **步骤3:集成测试报告** 使用`pytest-html`生成可视化报告,标记失败用例。 --- #### 三、工具链整合建议 1. **持续集成(CI)** 将JMeterSelenium脚本集成到Jenkins或GitHub Actions,实现每日定时回归测试。 2. **Mock服务** 使用WireMock模拟支付网关等第三方依赖,提升测试稳定性。 3. **数据库验证** 结合MyBatis-Plus的`LambdaQueryWrapper`验证数据一致性[^2]: ```java LambdaQueryWrapper<Order> query = new LambdaQueryWrapper<>(); query.eq(Order::getUserId, "user123"); Assertions.assertEquals(1, orderMapper.selectCount(query)); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值