秒懂HTTPS接口(接口测试篇)

article/2025/10/12 12:37:04

在这里插入图片描述

文章目录

    • 一、前言
    • 二、具体实现
      • 1、引包
      • 2、采用绕过证书验证测试HTTPS接口
      • 3、采用设置信任自签名证书测试HTTPS接口
      • 4、验证数据库
    • 三、完整项目结构

一、前言

下面我们来测试下我们秒懂HTTPS接口(实现篇)写的HTTPS接口(Java版)

技术选型:

  • HTTP工具包:HttpClient 4.5.5
  • 测试框架:TestNG
  • Json序列化库:fastjson

二、具体实现

1、引包

引入相关包

<!--引入接口测试相关包--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.5</version></dependency><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.14.3</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>

测试HTTPS接口可以通过以下两种方式:

  • 采用绕过证书验证实现HTTPS
  • 采用设置信任自签名证书实现HTTPS

2、采用绕过证书验证测试HTTPS接口

src/test/util下创建HttpUtil工具类

实现绕过SSL验证方法

/*** 绕过SSL验证** @return* @throws NoSuchAlgorithmException* @throws KeyManagementException*/public static SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException {SSLContext sslContext = SSLContext.getInstance("SSLv3");// 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法X509TrustManager trustManager = new X509TrustManager() {@Overridepublic void checkClientTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate,String paramString) throws CertificateException {}@Overridepublic void checkServerTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate,String paramString) throws CertificateException {}@Overridepublic java.security.cert.X509Certificate[] getAcceptedIssuers() {return null;}};sslContext.init(null, new TrustManager[] { trustManager }, null);return sslContext;}

实现绕过SSL证书,发送Get请求方法

/*** 绕过SSL证书,发送Get请求* @param url* @param params* @return* @throws IOException* @throws KeyManagementException* @throws NoSuchAlgorithmException*/public static String doIgnoreVerifySSLGet(String url, Map<String,Object> params)throws IOException, KeyManagementException, NoSuchAlgorithmException {//采用绕过验证的方式处理https请求SSLContext sslContext = createIgnoreVerifySSL();final SSLConnectionSocketFactory sslsf;//设置协议http和https对应的处理socket链接工厂的对象sslsf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);final Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", new PlainConnectionSocketFactory()).register("https", sslsf).build();final PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(registry);cm.setMaxTotal(100);//创建自定义的httpclient对象CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(cm).build();String result = null;//装填参数StringBuffer param = new StringBuffer();if (params != null && !params.isEmpty()) {int i = 0;for (String key : params.keySet()) {if (i == 0) {param.append("?");} else {param.append("&");}param.append(key).append("=").append(params.get(key));i++;}url += param;}//创建get方式请求对象HttpGet httpGet = new HttpGet(url);//执行请求操作,并拿到结果(同步阻塞)CloseableHttpResponse response = httpClient.execute(httpGet);if (response.getStatusLine().getStatusCode() == 200){//获取结果实体HttpEntity httpEntity = response.getEntity();//按指定编码转换结果实体为String类型result = EntityUtils.toString(httpEntity,"UTF-8");}//释放链接response.close();return result;}

实现绕过SSL证书,发送Post请求(Json形式)方法

/*** 绕过SSL证书,发送Post请求(Json形式)* @param url* @param param* @return* @throws IOException* @throws KeyManagementException* @throws NoSuchAlgorithmException*/public static String doIgnoreVerifySSLPost(String url, JSONObject param)throws IOException, KeyManagementException, NoSuchAlgorithmException {//采用绕过验证的方式处理https请求SSLContext sslContext = createIgnoreVerifySSL();final SSLConnectionSocketFactory sslsf;//设置协议http和https对应的处理socket链接工厂的对象sslsf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);final Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", new PlainConnectionSocketFactory()).register("https", sslsf).build();final PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(registry);cm.setMaxTotal(100);//创建自定义的httpclient对象CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(cm).build();String result = null;//创建post方式请求对象HttpPost httpPost = new HttpPost(url);//装填参数StringEntity entity = new StringEntity(param.toString(),"utf-8");entity.setContentEncoding("UTF-8");entity.setContentType("application/json");//设置参数到请求对象中httpPost.setEntity(entity);//执行请求操作,并拿到结果(同步阻塞)CloseableHttpResponse response = httpClient.execute(httpPost);if (response.getStatusLine().getStatusCode() == 200){//获取结果实体HttpEntity httpEntity = response.getEntity();//按指定编码转换结果实体为String类型result = EntityUtils.toString(httpEntity,"UTF-8");}//释放链接response.close();return result;}

src/test/cases下创建HttpTest测试类
实现测试方法

@Test(enabled = true,description = "测试绕过SSL证书Post方法")public void doIgnoreVerifySSLPostTest() throws IOException, NoSuchAlgorithmException, KeyManagementException {String url = "https://localhost/springboot/person";//装填参数JSONObject param = new JSONObject();param.put("name","doIgnoreVerifySSLPost");param.put("age",20);//调用方法String response = HttpUtil.doIgnoreVerifySSLPost(url,param);//断言返回结果是否为空Assert.assertNotNull(response);System.out.println("【doIgnoreVerifySSLPost】"+response);}@Test(enabled = true,description = "测试绕过SSL证书Get方法")public void doIgnoreVerifySSLGetTest() throws IOException, NoSuchAlgorithmException, KeyManagementException {String url = "https://localhost/springboot/person";//调用方法String response = HttpUtil.doIgnoreVerifySSLGet(url,null);//断言返回结果是否为空Assert.assertNotNull(response);System.out.println("【doIgnoreVerifySSLGet】"+response);}

运行测试结果
在这里插入图片描述

3、采用设置信任自签名证书测试HTTPS接口

在HttpUtil工具类实现验证SSL证书,发送Get请求方法

/*** 验证SSL证书,发送Get请求* @param url* @param params* @return* @throws IOException*/public static String doVerifySSLGet(String url, Map<String,Object> params) throws IOException {//采用验证的SSL证书方式处理https请求SSLContext sslContext = SSLCustom("./src/main/resources/keystore.p12","zuozewei");final SSLConnectionSocketFactory sslsf;// 设置协议http和https对应的处理socket链接工厂的对象sslsf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);final Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", new PlainConnectionSocketFactory()).register("https", sslsf).build();final PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(registry);cm.setMaxTotal(100);//创建自定义的httpclient对象CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(cm).build();String result = null;//装填参数StringBuffer param = new StringBuffer();if (params != null && !params.isEmpty()) {int i = 0;for (String key : params.keySet()) {if (i == 0) {param.append("?");} else {param.append("&");}param.append(key).append("=").append(params.get(key));i++;}url += param;}//创建get方式请求对象HttpGet httpGet = new HttpGet(url);//执行请求操作,并拿到结果(同步阻塞)CloseableHttpResponse response = httpClient.execute(httpGet);if (response.getStatusLine().getStatusCode() == 200){//获取结果实体HttpEntity httpEntity = response.getEntity();//按指定编码转换结果实体为String类型result = EntityUtils.toString(httpEntity,"UTF-8");}//释放链接response.close();return result;}

实现验证SSL证书,发送Post请求(Json形式)方法

/*** 验证SSL证书,发送Post请求(Json形式)* @param url* @param param* @return* @throws IOException*/public static String doVerifySSLPost(String url, JSONObject param) throws IOException {//采用验证的SSL证书方式处理https请求SSLContext sslContext = SSLCustom("./src/main/resources/keystore.p12","zuozewei");final SSLConnectionSocketFactory sslsf;//设置协议http和https对应的处理socket链接工厂的对象sslsf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);final Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", new PlainConnectionSocketFactory()).register("https", sslsf).build();final PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(registry);cm.setMaxTotal(100);//创建自定义的httpclient对象CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(cm).build();String result = null;//创建post方式请求对象HttpPost httpPost = new HttpPost(url);//装填参数StringEntity entity = new StringEntity(param.toString(),"utf-8");entity.setContentEncoding("UTF-8");entity.setContentType("application/json");//设置参数到请求对象中httpPost.setEntity(entity);//执行请求操作,并拿到结果(同步阻塞)CloseableHttpResponse response = httpClient.execute(httpPost);if (response.getStatusLine().getStatusCode() == 200){//获取结果实体HttpEntity httpEntity = response.getEntity();//按指定编码转换结果实体为String类型result = EntityUtils.toString(httpEntity,"UTF-8");}//释放链接response.close();return result;}

在HttpTest测试类,实现测试方法

@Test(enabled = true,description = "测试验证SSL证书Post方法")public void doVerifySSLPostTest() throws IOException {String url = "https://localhost/springboot/person";//装填参数JSONObject param = new JSONObject();param.put("name","doVerifySSLPost");param.put("age",20);//调用方法String response = HttpUtil.doVerifySSLPost(url,param);//断言返回结果是否为空Assert.assertNotNull(response);System.out.println("【doVerifySSLPost】"+response);}@Test(enabled = true,description = "测试验证SSL证书Get方法")public void doVerifySSLGetTest() throws IOException {String url = "https://localhost/springboot/person";//调用方法String response = HttpUtil.doVerifySSLGet(url,null);//断言返回结果是否为空Assert.assertNotNull(response);System.out.println("【doVerifySSLGet】"+response);}

运行测试结果
在这里插入图片描述

4、验证数据库

查询数据库结果
在这里插入图片描述

三、完整项目结构

在这里插入图片描述

秒懂HTTPS接口系列源码:

  • https://github.com/zuozewei/blog-example/tree/master/Java-api-test

相关系列:

  • 秒懂HTTPS接口(原理篇)
  • 秒懂HTTPS接口(实现篇)
  • 秒懂HTTPS接口(JMeter压测篇)

http://chatgpt.dhexx.cn/article/xnZCEd5o.shtml

相关文章

postman进行http接口测试

无意中发现了一个巨牛的人工智能教程&#xff0c;忍不住分享一下给大家。教程不仅是零基础&#xff0c;通俗易懂&#xff0c;而且非常风趣幽默&#xff0c;像看小说一样&#xff01;觉得太牛了&#xff0c;所以分享给大家。点这里可以跳转到教程。 HTTP的接口测试工具有很多&a…

【测试】详解接口测试(2)- HTTP接口用例设计与测试方法(拿B站练手)

文章目录 前言接口测试是什么HTTP接口的测试用例设计接口用例设计小结 HTTP接口的测试方法手工测试自动化测试 接口测试策略结束语 前言 大家好&#xff0c;我是洋子。在之前的文章《详解接口测试&#xff08;1&#xff09;-常见的网络通信协议》当中&#xff0c;我们介绍了接…

接口测试入门(一)-HTTP协议基础

- 接口功能测试算是测试工程师绕不过去的一个重要技能。 - 而掌握接口测试&#xff0c;需要先知道什么是HTTP协议。 - 原理虽然很枯燥&#xff0c;但是同时也很重要。打好基础的情况下&#xff0c;才能将知识体系建的更高、更扎实 目录 一、HTTP协议基础-定义与起源 二、HTTP…

接口测试(http协议,get和post请求和响应)

TCP/IP四层协议模型 HTTP协议 超文本传输协议&#xff08;HTTP&#xff0c;HyperText Transfer Protocol)是互联网上应用最为广泛的一种网 络协议。是基于TCP/IP模型的应用层协议。 为什么叫超文本&#xff1f;不但可以传输文本数据&#xff0c;还可以传输音频、视频、超链接、…

HTTP接口测试

目录 一、什么是HTTP 1、定义 2、HTTP工作架构 3、结构&#xff08;取自菜鸟网站&#xff09; 3.1 客户端请求消息 3.2 服务端请求消息 二、如何进行HTTP接口测试 三、HTTP常用请求方式 1、GET请求 1.1 不带参数的GET请求 1.2 带参数的GET请求 2、POST请求 2.1 …

CAD图纸如何从低版本转换成高版本

我今天在绘制CAD图纸的时候突然发现&#xff0c;换个电脑后绘制好的CAD图纸打不开了。之后分析才发现是之前绘图的时候&#xff0c;保存的CAD图纸版本过低。这就需要把CAD图纸从低版本转换成高版本。今天小编就在这里给大家演示一下。 1.在电脑浏览器里搜索 xun jie CAD&#…

免费在线转换,CAD转换成PDF

为了提高我们绘图工作的效率&#xff0c;经常需要转换CAD文件的版本格式&#xff0c;例如把CAD转换成PDF格式。有没有一种不需要安装转换软件就可以快速操作方法呢&#xff1f;今天小编给大家介绍一种行之有效的方法&#xff0c;在线CAD转换器就可以帮我们快速完成这一操作。 …

cad转换器高版本转低版本怎么转?

CAD图纸由于版本过高导致无法查看和传输&#xff0c;是CAD制图工作中的小伙伴们都会遇到的问题之一。这一问题虽然不是什么大问题&#xff0c;但是也非 常影响我们正常的制图工作&#xff0c;该如何解决呢&#xff1f;今天我们就一起讨论一下&#xff0c;cad转换器高版本转低版…

cad批量转换低版本如何实现?

在CAD制图工作中&#xff0c;我们可能会遇到一些比较麻烦的问题。其中就有CAD图纸由于版本过高导致无法打开查看的问题&#xff0c;而且有时候CAD图纸过多&#xff0c;若是每 一张单独查看也会很麻烦。这时候该如何解决呢&#xff1f;cad批量转换低版本如何实现&#xff1f;今天…

怎么把高版本的CAD文件转换成低版本的

我们在打开CAD文件的时候有经常出现打不开的现象&#xff0c;这时候软件就会提示CAD版本过高&#xff0c;这时候就需要将CAD文件转换低版本了&#xff0c;那么怎么把高版本的CAD文件转换成低版本的呢&#xff1f; 这里小编就用迅捷PDF在线转换器&#xff0c;教大家CAD版本转换。…

CAD版本转换怎么操作?几个步骤教会你

CAD是建筑设计行业经常使用的图纸文件&#xff0c;但是有些图纸的格式可能会因为版本太高或者太低而打不开。不知道小伙伴们遇到这种情况是不是也束手无策呢&#xff1f;其实我们只需要使用一些软件来转换CAD版本即可。那么小伙伴们知道CAD版本转换怎么操作吗&#xff1f;还不了…

CAD版本转换怎么操作?这些方法了解了吗

目前市场上有很多CAD版本。每个人的使用习惯和计算机配置都不一样。不同版本的CAD软件生成不同的CAD文件。虽然制作CAD文件的操作方法相似&#xff0c;但新旧版本存在兼容性问题。高版本的CAD软件可以看到低版本软件制作的设计图纸&#xff0c;但低版本工具看不到高版本工具制作…

cad在线转换低版本_资源分享/CAD版本转换器

我们收集你的掌上玩物&#xff0c;我们COPY YOU。 YOU知唔知 CAD转换器 ◎消息来源&#xff1a;网络资源平台 文件预览 使用说明 1.将高版本文件拖动到转换器界面中打开 2.文件——另存问——类型选择低版本CAD格式&#xff0c;保存后的低版本文件就可以直接使用低版本CAD打…

CAD怎么转换版本?两个办法解决

CAD怎么转换版本&#xff1f;CAD文件相信建筑设计等相关行业的小伙伴都不会陌生&#xff0c;经常跟它打交道。它本身有不少版本&#xff0c;有时候同事发来的文件版本和我们的软件版本不同导致不兼容&#xff0c;这时候要进行处理就会比较麻烦&#xff0c;有没有什么方法能快速…

CAD如何免费转换PDF格式

有的时候,我们需要将我们的CAD文件转出PDF格式的文件发给客户,以便客户打开查看&#xff0c;那么我们如何将CAD文件转换为PDF格式&#xff1f;今天和大家分享一种简单的操作方法&#xff0c;并且是免费试用的。 1&#xff0c;首先打开百度首页&#xff0c;用“Speedpdf”作为关…

高版本CAD如何降低版本?来看这种降低版本方法

CAD文件的版本过高&#xff0c;我们该如何将它降低呢&#xff1f;如果有的小伙伴工作是关于CAD绘图方面的&#xff0c;就会经常使用CAD编辑软件&#xff0c;有时候在打开CAD文件时&#xff0c;会发现文件打不开&#xff0c;原因可能是文件本身受到损害&#xff0c;还有可能就是…

CAD版本怎么转换?试试这种方法

相信很多从事CAD绘图的小伙伴们对CAD版本转换应该不陌生吧&#xff0c;对于CAD版本通常有两种问题&#xff0c;一是CAD高版本可以打开低版本的图纸&#xff0c;相反低版本不能打开高版本图纸&#xff1b;二是高版本图纸转换为低版本可以直接在工具中另存为文件&#xff0c;就可…

怎么把高版本CAD转换成低版本?CAD版本转换方法分享

某些情况下&#xff0c;较新的CAD软件版本可能不被较旧的CAD软件版本所支持。如果你需要与使用较旧版本CAD的人进行交流、共享或协作&#xff0c;将高版本CAD转换为低版本可以确保文件能够顺利打开和编辑。那么问题来了&#xff0c;怎么将高版本CAD转换成低版本呢&#xff1f;教…

cad高版本怎么转换成低版本?这个办法挺实用

CAD软件是工程师、建筑师和设计师等专业人员最常用的工具之一。随着时间的推移&#xff0c;CAD软件的版本也在不断更新。但是&#xff0c;有时候你可能会遇到需要将CAD高版本转换为低版本的情况&#xff0c;比如在与其他人员合作时&#xff0c;他们使用的CAD软件版本比你的低。…

CAD版本转换怎么转?简单几步帮你解决

从事CAD相关行业的小伙伴每天都会接触到很多CAD图纸文件&#xff0c;有些图纸的格式会因为版本太低或者太高导致文件打不开。需要使用CAD版本转换器来转换图纸的版本。有的刚接触这一行的小伙伴就不是很明白怎么转换了&#xff0c;那么CAD版本转换怎么转呢&#xff1f;下面就和…