广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot 利用RestTemplate http测试
  • 174
分享到

SpringBoot 利用RestTemplate http测试

2024-04-02 19:04:59 174人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录SpringBoot RestTemplate Http测试spring-boot有关spring-boot测试的一些问题具体的测试方法如下但是有个问题就是SpringBoot

SpringBoot RestTemplate http测试

spring-boot有关spring-boot测试的一些问题

这测试的时候主程序没有启动报错。错误如下

==org.springframework.WEB.client.ResourceAccessException: I/O error on GET request for "http://localhost:39900/migrate/test": Connect to localhost:39900 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect; nested exception is org.apache.http.conn.HttpHostConnectException: Connect to localhost:39900 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect

at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:666)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613)==

这是因为测试的类写了url 的问题

具体的测试方法如下


package api;
import com.hera.WebApplication;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Map;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = WebApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@EnableAutoConfiguration
public class Test {
    @Autowired
    public TestRestTemplate restTemplate;
    @org.junit.Test
    public void home(){
        String url="http://localhost:39900/migrate/test";
      Map map=restTemplate.getForObject(url,Map.class);
        System.out.println(map.get("red"));
    }
}

主函数如下


@ComponentScan(basePackages={"com.hera"})
@SpringBootApplication
@EnableJpaRepositories(repositoryFactoryBeanClass = ExtJpaRepositoryFactoryBean.class)
public class WebApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }
}

这样可以认为是服务没有启动的原因,确实,当服务启动的时候,这个错误就会没有,这时候可以得出一个结论,就是Test的时候主函数是没有启动。需要启动主函数参能测试,

但是有个问题就是

当测试时url不要http://localhost:39900没有起动主函数一样能成功

[INFO][2018-04-29T22:40:02.455+0800][BusinesshandlerInterceptor.java:28] 【LOG HANDLER】 url=http://localhost:63857/migrate/test, traceId=null
..............................
[INFO][2018-04-29T22:40:02.976+0800][BusinessHandlerInterceptor.java:48] 请求参数==> url: http://localhost:63857/migrate/test, spend:0.521秒, contentType: null, params: null, body_params: {}
green

但是端口号不是配置中的那个,还有就是每次端口号都会不一样,真的很奇怪;根本不按照配置来的,我觉得就是它没有都配置,但是默认端口不是8080吗,现在是每次都变,只是随机的一个端口号,从这一面又能看出,其实测试不用单独启动主函数的,测试类会启动,访问不了是因为,端口号不对,但是至于怎么解决目前没有想到. 但是也不影响开发,因为我认为服务端都没启动,客户端怎么能访问呢。

至于测试会加载springbootApplication但是端口不一样,没有执行加载端口类的结果。

SpringBoot RestTemplate测试Controller

1、功能测试类


package com.imooc.controller; 
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; 
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.Assert;
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate; 
import com.imooc.entity.Product;
import com.imooc.entity.enums.ProductStatus;
import com.imooc.util.RestUtil;
 
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)
@FixMethodOrder(MethodSorters.NAME_ASCENDING) // case执行顺序
public class ProductControllerTest { 
// @Autowired
// private TestRestTemplate rest; 
 private static RestTemplate rest = new RestTemplate(); 
 @Value("http://localhost:${local.server.port}/products")
 private String baseUrl; 
 // 正常数据
 private static List<Product> nORMals = new ArrayList<>(); 
 private static List<Product> exceptions = new ArrayList<>(); 
 @Before
 public void init(){  
  Product p1 = new Product("T0001", "零活宝1号", ProductStatus.AUDITING.getCode(),
    BigDecimal.valueOf(10), BigDecimal.valueOf(1), 7, 
    BigDecimal.valueOf(3.42), "memo", new Date(), new Date(), "zemel", "zemel");
  Product p2 = new Product("T0002", "零活宝2号", ProductStatus.AUDITING.getCode(),
    BigDecimal.valueOf(10), BigDecimal.valueOf(0), 6, 
    BigDecimal.valueOf(3.42), "memo", new Date(), new Date(), "zemel", "zemel");
  Product p3 = new Product("T0003", "零活宝3号", ProductStatus.AUDITING.getCode(),
    BigDecimal.valueOf(100), BigDecimal.valueOf(10),3, 
    BigDecimal.valueOf(3.42), "memo", new Date(), new Date(), "zemel", "zemel");
  normals.add(p1);
  normals.add(p2);
  normals.add(p3);  
  Product e1 = new Product(null, "零活宝1号", ProductStatus.AUDITING.getCode(),
    BigDecimal.valueOf(10), BigDecimal.valueOf(1), 7, 
    BigDecimal.valueOf(3.42), "memo", new Date(), new Date(), "zemel", "zemel");
  exceptions.add(e1);  
  // 异常处理对象
  ResponseErrorHandler errorHandler = new ResponseErrorHandler() {   
   @Override
   public boolean hasError(ClientHttpResponse response) throws IOException {    
    return true;
   }   
   @Override
   public void handleError(ClientHttpResponse response) throws IOException {
    // TODO Auto-generated method stub    
   }
  };
  rest.setErrorHandler(errorHandler);
 } 
 @Test
 public void testAddProduct() {
  normals.forEach(product -> {
   Product result = RestUtil.postJSON(rest, baseUrl, product, Product.class);
   Assert.notNull(result.getCreateAt(), "插入失败");
  });
 } 
 @Test
 public void testAddProductException() {
  exceptions.forEach(product -> {
   Map<String, String> result = RestUtil.postjsON(rest, baseUrl, product, HashMap.class);
//   Assert.notNull(result.getCreateAt(), "插入失败");
   System.out.println(result);
   Assert.notNull(result.get("message").equals(product.getName()), "插入成功");
  });
 }  
 @Test
 public void testFindOne() {
  normals.forEach(p->{   
   Product result = rest.getForObject(baseUrl+"/"+p.getId(), Product.class);
   Assert.isTrue(result.getId().equals(p.getId()));
  });  
  exceptions.forEach(p->{
   Product result = rest.getForObject(baseUrl+"/"+p.getId(), Product.class);
   Assert.isNull(result, "查询失败");     
  });
 } 
 @Test
 public void testQuery() {  
//  Page<Product> page = rest.getForObject(baseUrl, "", Page.class);  
  Map<String, Object> params = new HashMap<>();
  params.put("ids", "T0001,T0002");
//  Page<Product> page = RestUtil.postJSON(rest, baseUrl, params, Page.class);  
  Map page = rest.getForObject(baseUrl, HashMap.class, params);
  System.out.println(page);
  System.out.println(page.get("pageable"));
  System.out.println(page.get("content"));
  Assert.notNull(page);
 } 
}

2、工具类


package com.imooc.util; 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate; 
import java.util.Arrays;
import java.util.List;
import java.util.Map;  
public class RestUtil { 
    static Logger log = LoggerFactory.getLogger(RestUtil.class); 
    
    public static <T> T postJSON(RestTemplate restTemplate, String url, Object param, Class<T> responseType) {
        HttpEntity<String> formEntity = makePostJSONEntiry(param);
        T result = restTemplate.postForObject(url, formEntity, responseType);
        log.info("rest-post-json 响应信息:{}", JsonUtil.toJson(result));
        return result;
    } 
    
    public static HttpEntity<String> makePostJSONEntiry(Object param) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
        headers.add("Accept", MediaType.APPLICATION_JSON_VALUE);
        HttpEntity<String> formEntity = new HttpEntity<String>(
                JsonUtil.toJson(param), headers);
        log.info("rest-post-json-请求参数:{}", formEntity.toString());
        return formEntity;
    }  
    public static HttpEntity<String> makePostTextEntiry(Map<String, ? extends Object> param) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        headers.add("Accept", MediaType.APPLICATION_JSON_VALUE);
        HttpEntity<String> formEntity = new HttpEntity<String>(
                makeGetParamContent(param), headers);
        log.info("rest-post-text-请求参数:{}", formEntity.toString());
        return formEntity;
    }  
    
    public static String makeGetParamContent(Map<String, ? extends Object> param, String... excluedes) {
        StringBuilder content = new StringBuilder();
        List<String> excludeKeys = Arrays.asList(excluedes);
        param.forEach((key, v) -> {
            content.append(key).append("=").append(v).append("&");
        });
        if (content.length() > 0) {
            content.deleteCharAt(content.length() - 1);
        }
        return content.toString();
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: SpringBoot 利用RestTemplate http测试

本文链接: https://www.lsjlt.com/news/133030.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot 利用RestTemplate http测试
    目录SpringBoot RestTemplate http测试spring-boot有关spring-boot测试的一些问题具体的测试方法如下但是有个问题就是SpringBoot ...
    99+
    2022-11-12
  • java中http请求之restTemplate配置超时时间(亲测有用!)
    问题:http请求发起后接收不到返回数据!!!【测试环境没出问题,发到正式环境就有问题】 项目中通过restTemplate发起请求: log.info("请求入参:{}",JSON.toJSONString(reques...
    99+
    2023-09-06
    java http servlet
  • Spring使用RestTemplate和Junit单元测试的注意事项
    目录使用RestTemplate和Junit单元测试的注意事项springboot中的单元测试MockMVC和TestRestTemplate的使用与对比MockMVCRestTem...
    99+
    2022-11-12
  • 使用springboot单元测试对weblistener的加载测试
    目录springboot单元测试对weblistener的加载测试原监听器代码测试类springboot web做单元测试springboot单元测试对weblistener的加载测...
    99+
    2022-11-12
  • SpringBoot 使用@WebMvcTest测试MVC Web Controller
    目录依赖Web 控制器的职责单元测试还是集成测试?使用 @WebMvcTest 验证控制器职责@ExtendWith使用带或不带 controllers 参数的 @WebMvcTes...
    99+
    2022-11-12
  • 使用Apache ab进行http性能测试
    Mac自带了Apache环境 打开“终端(terminal)”,输入 sudo apachectl -v,(可能需要输入机器秘密)。如下显示Apache的版本 接着输入 sudo apachectl start,这样A...
    99+
    2022-06-04
    Apache ab http 性能测试
  • Spring使用RestTemplate和Junit单元测试的注意事项有哪些
    小编给大家分享一下Spring使用RestTemplate和Junit单元测试的注意事项有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!使用RestTemplate和Junit单元测试的注意事项对于之前写单元测试注入的...
    99+
    2023-06-25
  • HTTP Slow Attack测试工具SlowHTTPTest有什么用
    这篇文章主要为大家展示了“HTTP Slow Attack测试工具SlowHTTPTest有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTTP Slow Attack测试工具SlowH...
    99+
    2023-06-04
  • 如何使用Jmeter进行http接口测试
    这篇文章给大家介绍如何使用Jmeter进行http接口测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言:  主要针对http接口进行测试,使用Jmeter工具实现。  Jmter工具设计之初是用于做性能测试的,它...
    99+
    2023-06-21
  • HTTP/FTP压力测试工具siege怎么用
    HTTP/FTP压力测试工具siege怎么用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。HTTP/FTP压力测试工具siege压力测试可以检测服务器的承载能力...
    99+
    2023-06-04
  • SpringBoot 应用程序测试实现方案
    目录PreSpring Boot 中的测试解决方案测试 Spring Boot 应用程序初始化测试环境@SpringBootTest@SpringBootTest - webEnvi...
    99+
    2022-11-12
  • Idea中HTTP Client请求测试工具怎么用
    这篇文章主要介绍了Idea中HTTP Client请求测试工具怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。正文:使用HTTP Client的Idea版本最好在2018...
    99+
    2023-06-15
  • 使用Jmeter进行http接口测试的实践
    目录前言:一、开发接口测试案例的整体方案:二、接口自动化适用场景:三、接口测试环境准备四、创建工程:前言:   本文主要针对http接口进行测试,使用Jmeter工具实现。   Jm...
    99+
    2022-11-12
  • 利用drozer进行Android渗透测试
      一、安装与启动   1. 安装   第一步:从http://mwr.to/drozer下载Drozer (Windows Installer)   第二步:在An...
    99+
    2022-06-06
    drozer 测试 Android
  • springBoot整合rabbitmq测试常用模型小结
    目录1.添加依赖2.编写配置3.编写并测试之前我们记录了原生java代码使用rabbitmq的方法,很简单,类似于原生jdbc代码一样,将连接对象抽离出来作为工具类,生产者和消费者通...
    99+
    2022-11-12
  • 怎么在SpringBoot中使用Mockito单元测试
    这期内容当中小编将会给大家带来有关怎么在SpringBoot中使用Mockito单元测试,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Mock 测试Mock 测试就是在测试过程中,创建一个假的对象,避免你...
    99+
    2023-06-15
  • 如何在PHP中使用HTTP负载测试工具?
    PHP是一种广泛使用的编程语言,因此,了解如何使用HTTP负载测试工具对PHP应用程序进行测试非常重要。HTTP负载测试工具可以帮助我们在不同的条件下模拟用户对应用程序的访问,以便我们了解我们的应用程序在不同的负载下的表现如何。在本文中,我...
    99+
    2023-10-01
    http load shell
  • 如何使用PHP编写HTTP负载测试脚本?
    在今天的互联网时代,网站的性能越来越重要。对于一个成功的网站来说,它必须能够承受高并发的访问流量,而在实际部署之前,我们需要对网站进行负载测试,以确保网站能够在高流量下正常工作。在本文中,我们将介绍如何使用PHP编写HTTP负载测试脚本来...
    99+
    2023-09-30
    http load shell
  • 如何在HTTP协议接口测试中使用HttpClient
    本篇文章为大家展示了如何在HTTP协议接口测试中使用HttpClient,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、GET请求: GET请求时,参数一般是写在链接上的,代码如下:public&...
    99+
    2023-05-31
    http httpclient
  • 怎么利用Python实现网络测试
    Speedtest CLI 专为软件开发人员、系统管理员和计算机爱好者等打造,是 Ookla&reg; 提供技术支持的首款正式 Linux 本机 Speedtest 应用程序。Python语言编写的Speedtest CLI可在命令...
    99+
    2023-05-17
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作