• 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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   1. Excercise in a Box  Excercise in a Box是由英国国家网络安全中心(National Cyber Security Center)所推出的在线工具。它可以帮助用户获悉自己的应用是否容易遭受到网络攻击。  同时,该工具可以提供各种场景,以便贵组织在安全的环境中,根据自己所设定的允许的时间,反复演练自身面对安全攻击事件的响应能力。可以说,它汇聚了您需要执行的各种计划、设置、交付、以及事后整改活动等一切资源。  2. Needle  作为iOS版的测试框架,Needle是由美国黑帽公司(Black Hat USA)所推出的。它是一种模块化的开源框架,其目标...
            0 0 693
            分享
          • 选择题一、数量关系1、甲乙2人比赛爬楼梯,已知每层楼梯相同,速度不变,当甲到3层时,乙到2层,照这样计算,当甲到9层时,乙到( D )层A.5 B.6C.7 D.82、有一份选择题试卷共6个小题,其得分标准是:一道小题答对得8分,答错得0分,不答得2分,某位同学得了20分,则他( D )A.至多答对一道题 B.至少有三个小题没答 C.至少答对三个小题 D.答错两小题3、有只蜗牛要从一口井底爬出来。井深20尺。蜗牛每天白天向上爬3尺,晚上向下滑2尺。请问该蜗牛几天才能爬出井口? (A)A.20B.19C.18D.154、下列哪一个计算结...
            0 0 904
            分享
          •   手机用户可直接点击链接:返回双旦活动游戏,网页用户识别二维码跳转回双旦游戏。  产品的软件质量对于产品的重要性众所周知,但不同公司在产品软件处于研发阶段的质量管理却是相距甚远。今天叶子就用西游世界中的天、地、神、人、鬼五种仙级侃侃不同的公司在软件研发质量管理方面修炼到何种仙级?  一、质量管理全无—鬼仙级  读研期间,我到导师朋友的公司A公司实习,A公司的主要业务是出售**行业软件和根据自行开发的软件平台实施客户项目的二次开发。  当时A公司的研发人员10人左右,其中包含了我们4个实习生。我进入的团队里,其实就是一个资深的系统架构师+ 4个实习生。我们实习生的工作是在已经搭建好的软件架构上...
            0 0 1408
            分享
          •   写在前面  前几天五一放假期间,偶然在一个测试群里看到一位群友提问“Jmeter如何生成合法的身份证号”。我们都知道,如果是Python或Java语言,借助第三方库,很容易就能够模拟出合法的身份证号。在此之前,我也遇到过使用Jmeter生成身份证号的场景,但那时候我们的接口没有身份证号的合法校验。为了方便起见,在传参时都是用函数助手生成18位长度的随机数字字符串传递。于是,出于好奇和热心,在经过自己一番实践过后,解答了他的问题。因此,本篇也是一次解答群友问题的实践记录。  Jmeter生成身份证号的三种方法  方法一:通过RandomString函数  熟悉Jmeter的人都知道,Jmet...
            0 0 4233
            分享
          • 我希望大家能认真思考后给出一个属于自己的答案,无论你是新手入门,还是资深专家。回答这个问题请不要凭一腔热血,也不用过分消极,别总和钱挂钩,平心而论即可,就当是对这份职业的一个规划。01、先说说我的测试之路…我个人年过30,参加工作至今从事时间最长的就是测试工程师职业,我内心深处很希望一直把这份职业长久的做下去。虽然我的技术并不出众,但最少我也有了一些经验和经历,虽然在如今测试行当的现状没有高深点技术的经验可能不太受待见,但最少我一直在坚持着,我会一直坚持到这个行当没我容身之处或者侥幸成为测试的终身职业者。在广东这些年,我见过不少与我同龄的测试人离开这个行当了,比较悲哀的是我遇到的离开者多数人都...
            0 0 704
            分享
      • 51testing软件测试圈微信