51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4432|回复: 0
打印 上一主题 下一主题

[转贴] Restful API接口测试四种方法

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:02
  • 签到天数: 1046 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-3-23 11:17:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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  
      如下图所示。即可对接口进行测试

      查看响应:


      二.POSTMAN
      同理,easy

      重点介绍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属性
      直接报空指针异常,这是由于接口测试需要全局上下文。。。。

      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 得到项目下所有接口信息

      5.进行接口测试

      得到响应:

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 00:46 , Processed in 0.064707 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表