• 0
  • 0
分享

  1.Rest-Web-Service-Client

  2.postman

  3.Mock单元测试

  4.swagger

  现有如下API接口:

  请求方式:POST

  url:http://localhost:60000/v1/login

  请求体:{"username":"admin","password":"admin"}

  返回状态码:200 成功

  先介绍两款简单使用的客户端产品

  一.Rest-Web-Service-Client  

  如下图所示。即可对接口进行测试:

1-1.png


  查看响应:

1-2.png

1-3.png

  二.POSTMAN

  同理,easy

1-4.png

  重点介绍SpringBoot环境下的Mock API接口测试。

  三.Mock单元测试

  1.pom文件中加入如下依赖

  <!--单元测试-->
  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
  </dependency>

  2.Controller:

  @RequestMapping(value = "/login", method = RequestMethod.POST)
  public ResponseBean authLogin(@RequestBody LoginVo login) {
      if (login == null)
          throw new ClientException(ErrorCode.API_EC_CLIENT_EXCEPTION);
      if (StringUtils.isEmpty(login.getUsername()))
          throw new ClientException(ErrorCode.API_EC_CLIENT_EXCEPTION);
      if (StringUtils.isEmpty(login.getPassword()))
          throw new ClientException(ErrorCode.API_EC_CLIENT_EXCEPTION);
      LoginResultBean token = userService.login(login);
      return ResponseBean.success(token);
  }

  3.编写Mock测试类

  @RunWith(SpringRunner.class)
  @SpringBootTest(classes = { LoginController.class, MockServletContext.class })
  @EnableAutoConfiguration  
  @ComponentScan(basePackages= {"com.offcn.*"})
  @WebAppConfiguration   ##声明测试加载WebApplicationContext
  public class LoginTest  {
      @Autowired
      WebApplicationContext webApplicationContext;
      private MockMvc mockMvc;
      @Before
      public void SetUp(){
            this.mockMvc= MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
      }
      @Test
      public void login() throws Exception {
          RequestBuilder request = null;
          LoginVo loginVo=new LoginVo();
          loginVo.setUsername("admin");
          loginVo.setPassword("admin");  ##构造请求体JSON格式
          String  LoginVoJson=JSONObject.toJSONString(loginVo); 
          request = MockMvcRequestBuilders.post("/v1/login")
                  .contentType(MediaType.APPLICATION_JSON)
                  .content(LoginVoJson);
         String requestJson = mockMvc.perform(request).andDo(print())
                  .andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
         System.out.println(requestJson);
      }
  }

  这里注意一下,最开始看网上SetUp()方法中这样写,坑!:

  mockMvc= MockMvcBuilders.standaloneSetup(new LoginController()).build();

  然后没有WebApplicationContext属性。

  直接报空指针异常,这是由于接口测试需要全局上下文。。。。

1-5.png

  4.启动测试类,显示测试通过

  四.swagger

  swgger可以不仅可以测试,还可以生成API接口文档

  1.pom文件中加入如下依赖

  <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.6.1</version>
  </dependency>
  <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.6.1</version>
  </dependency>

  2.加入@ApiOperation用于生成API文档信息

  3.编写Swagger配置

  @Configuration
  @EnableSwagger2
  public class SwaggerConfig extends WebMvcConfigurerAdapter {
      @Value("${swagger.host}")
      private String swaggerHost;
      ApiInfo apiInfo() {
          return new ApiInfoBuilder()
                  .title("swagger接口文档")
                  .description("基于shiro和jwt的前后端分离权限系统")
                  .termsOfServiceUrl("")
                  .version("v1")
                  .contact(new Contact("", "", ""))
                  .build();
      }
      @Bean
      public Docket createRestApi() {
          ParameterBuilder builder = new ParameterBuilder();
          Parameter parameter = builder
                  // 从cookie中获取token
                  .parameterType("cookie") //参数类型支持header, cookie, body, query etc
                  .name("token") //参数名
                  .defaultValue("") //默认值
                  .description("请输入token")
                  .modelRef(new ModelRef("string")) //指定参数值的类型
                  .required(false).build(); //非必需,这里是全局配置,然而在登陆的时候是不用验证的
          List<Parameter> parameters = Lists.newArrayList(parameter);
          return new Docket(DocumentationType.SWAGGER_2)
                  .host(this.swaggerHost)
                  .select()
                  .apis(RequestHandlerSelectors.basePackage("com.offcn.login.controller"))
                  .paths(PathSelectors.any())
                  .build()
                  .apiInfo(this.apiInfo())
                  .globalOperationParameters(parameters);
      }
      /**
       * swagger ui资源映射
       * @param registry
       */
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
          registry.addResourceHandler("swagger-ui.html")
                  .addResourceLocations("classpath:/META-INF/resources/");
          registry.addResourceHandler("/webjars*")
                  .addResourceLocations("classpath:/META-INF/resources/webjars/");
      }
      /**
       * swagger-ui.html路径映射,浏览器中使用/api-docs访问
       * @param registry
       */
      @Override
      public void addViewControllers(ViewControllerRegistry registry) {
          registry.addRedirectViewController("/api-docs","/swagger-ui.html");
      }
  }

  4.启动项目,输入http://localhost:60000/swagger-ui.html 得到项目下所有接口信息

1-6.png

  5.进行接口测试

1-7.png

  得到响应:

1-8.png


作者:呼吸的小鱼(李仕亮)    

来源:http://www.51testing.com/html/27/n-4473527.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   MySQL数据库作为目前流行的数据库大量应用于PHP、JAVA、Python等Web语言开发项目中,大多数情况下,数据库的操作性能成为整个应用的性能瓶颈。数据库的性能是程序员需要去关注的事情,当设计数据库表结构以及操作数据库(尤其是查询数据时),都需要注意数据操作的性能。  一、优化目标  1、减少 IO 次数  IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。  2、降低 CPU 计算  除了 IO 瓶颈之外,S...
            15 15 1498
            分享
          • 为什么我们应该从手动测试转向自动化测试测试自动化可以克服很多手动测试挑战,尤其是在敏捷项目中。1)测试可重用性自动化测试用例和测试套件可以在不同的测试周期和测试环境中多次重复使用。因此,每次应用程序更改时,您都可以运行自动化回归测试套件来检查回归错误,避免重复手动进行回归测试。这是自动化降低操作失败风险的最重要优势之一。2)更高的测试覆盖率由于测试是自动执行的,因此您有更多时间专注于新场景并编写更多自动化测试用例来验证和验证被测应用程序(AUT)。您和您的团队可以自由地进行更多探索性测试,以确保产品质量。自动化测试也可以在不同的平台和设备上同时或并行执行。更多执行的测试意味着可能会发现更多的回...
            0 1 1787
            分享
          •   前言:  在当今的数字时代,图像创作和设计领域正经历着巨大的变革。随着人工智能技术的迅猛发展,AI 绘图软件应运而生,为设计师、艺术家以及普通用户提供了全新的创作工具和体验。本评测报告旨在深入探讨这类软件的特点、功能和性能,以帮助用户更好地了解它们的优势和局限性。  在接下来的篇章中,我们将对美图AI、即时灵感、通义千问和文心一言等多款常用AI工具进行全面的评测。我们将从以下几个方面进行评估:软件的易用性、功能丰富度、绘图质量、效率和稳定性,以及大概的费用情况。通过实际的使用和测试,我们将尽力提供客观、准确的评价,为您提供有价值的参考,帮助您决定是否适合使用该软件来满足您的绘图需求。  希...
            0 0 1452
            分享
          •   测试用例编写完之后,我们在测试过程中往往会发现,有一些用例其实是重复的,造成很多重复工作,那么我们应当如何去除这些重复用例呢?  尤其使用等价类划分和边界值分析编写用例时,很容易造成用例重复。  举例  下面我们通过一个例子来具体分析一下。  首先选择一个场景,后台维护前台账号,主要有以下几个字段(字段太多,这里只列举三个字段进行分析)。  账号:4~8位字母和数字组合  密码:8~16位字母数字组合  姓名:字母、数字、特殊字符和汉字组合,长度4~20  下面我们对他们的等价类和边界值进行分析。  账号  有效等价类:6位数字和字母组合,5位纯数字组合,7位纯字母组合。  无效等价类:3...
            0 0 934
            分享
          • postman是测试接口经常使用的工具,它是一个很强大的工具。那么在测试中若是存在接口依赖的现象改怎么测试呢?下面就介绍下postman上一个接口返回的数据作为下一个接口的参数,以百度接口为例:1.创建一个请求接口,并在tests中添加下面两段代码并点击send//获取响应报文中的json var jsonData = JSON.parse(responseBody); //设置全局表量 pm.globals.set("access_token", jsonData.access_token);2.点击postman类似眼睛的按钮,可...
            0 0 3785
            分享
      • 51testing软件测试圈微信