HttpClient接口测试之会话保持

    HttpClient4.X自带会话保持功能,使用同一个HttpClient未关闭的连接即可保持登陆会话,如果多个HttpClient想要使用一个登陆会话,则需要保存会话信息,其中一种方法是使用HttpClientContext。
 
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
 
import com.test.tools.Regular;
 
public class HttpClientTest {
 
        String loginUrl = "http://**.***.com/user/login.do";
        private static HttpContext localContext = new BasicHttpContext();
        private static HttpClientContext context = HttpClientContext.adapt(localContext);
 
        @Test
        public void Test() throws Exception {
               CloseableHttpClient httpClient = HttpClients.createDefault();
 
               try {
                       // 模拟表单
                       List<NameValuePair> params = new ArrayList<NameValuePair>();
                       params.add(new BasicNameValuePair("username", "admin"));
                       params.add(new BasicNameValuePair("password", "admin"));
                       UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
                       
                       HttpPost httpPost = new HttpPost(loginUrl);
                       httpPost.setEntity(entity);
                       // 将HttpClientContext传入execute()中
                       CloseableHttpResponse response = httpClient.execute(httpPost, context);
 
                       try {
                               HttpEntity responseEntity = response.getEntity();
                               System.out.println(EntityUtils.toString(responseEntity));
                               
                       } finally {
                               response.close();
                       }
               } finally {
                       httpClient.close();
               }
               
 
               CloseableHttpClient httpClient2 = HttpClients.createDefault();
 
               try {
                       //进入首页
                       HttpGet httpGet = new HttpGet("http://**.***.com/front/investmentList.html");
                       // 设置相同的HttpClientContext
                       CloseableHttpResponse response = httpClient2.execute(httpGet, context);
                       try {
                               HttpEntity entity = response.getEntity();
                               System.out.println("**************************");
                               String aString =EntityUtils.toString(entity);
                               System.out.println(aString);
                               //正则提取响应信息中的用户名
                               String bsString = "loginName = \"(.+?)\"";
                               Regular regular = new Regular(); 
                               System.out.println(regular.getRegular(aString, bsString));
 
                       } finally {
                               response.close();
                       }
               } finally {
                       httpClient2.close();
               }
 
        }
}
通过这种方式可以进行接口测试,也可以加入断言事务,添加多线程并发进行接口性能测试。

HttpClient接口测试之会话保持的更多相关文章

  1. SoapUI接口测试之实战运用操作(五)

    SoapUI接口测试之实战运用操作(五)

  2. WebAPI接口测试之matthewcv.WebApiTestClient

    WebAPI接口测试之matthewcv.WebApiTestClient matthewcv.WebApiTestClient 1.安装matthewcv.WebApiTestClient包 打开v ...

  3. 老李分享:接口测试之jmeter

    老李分享:接口测试之jmeter   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.移动端自动化测试很多人把他仅仅理解成appu ...

  4. SoapUI SoapUI接口测试之编码设置

    SoapUI接口测试之编码设置 by:授客 QQ:1033553122 问题描述: 实际测试过程中发现,SoapUI提交后的数据,在数据库中查看数据值存储,发现是乱码,如下图: 查找原因,show c ...

  5. SoapUI 接口测试之post提交本地数据文件

    SoapUI接口测试之post提交本地数据文件 by:授客 QQ:1033553122 本文主要是针对用SoapUI POST提交本地数据文件的方法做个简单介绍 举例: 文件同步接口 接口地址:htt ...

  6. API Test Postman接口测试之高级篇2

    API Test  Postman接口测试之高级篇2 一.继承父类的设置: 二.导出及导入: 三.分享文档: 四.发布接口文档: 五.常用脚本: 右边框选的是一些常用的脚本,postman提供的,可以 ...

  7. API Test Postman接口测试之高级篇1

    API Test  Postman接口测试之高级篇1 一.postman中的请求参数简介: 1.请求参数简介: 点击params下面会出现key,value等信息,这里填写的会自动追加在url地址后面 ...

  8. python接口测试之mock(二)

    上一篇对mock-server已经做了初步的介绍,今天这里继续接着之前的介绍进行,我们先看之前的mock-server部分,之前编写了一个登录的mock,具体json文件见如下的内容: 小王子1110 ...

  9. 接口测试之HttpClient

    HttpClient使用详解   Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客 ...

随机推荐

  1. [Java] - Google API调用

    由于Google已经完成被墙,要上Google必需使用代理或VPN. 这里使用的是Google的GoAgent代理做开发.(如何使用GoAgent,这里不写了,忽略500字.....) 本地测试的Go ...

  2. 查看Visual Studio异常内容

    If Entity Framework throws a validation exception when saving, Visual Studio reports the message, Va ...

  3. 服务 在初始化安装时发生异常:System.IO.FileNotFoundException: "file:///D:\testService"未能加载文件或程序集。系统找不到指定文件。

    @echo.@if exist "%windir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" goto INSTALL ...

  4. 使用SQL语句 检测 MSSQL死锁

    select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name from sys.sysprocesse ...

  5. FLASH结构

    mergedir/code.tmp.bin 压缩未加密文件的FLASH文件 mergedir/sfs/nvm.bin   shareData数据文件,未加密.未压缩 数据克隆:DATA/ALL APP ...

  6. 动态linq to list排序

    public class QeurySort { public static IList<T> Sort<T>(IList<T> list,string sidx, ...

  7. JAVA使用堆外内存导致swap飙高

    https://github.com/nereuschen/blog/issues/29 堆内内存分析一般用Memory Analyzer Tool http://tivan.iteye.com/bl ...

  8. css中 input的button默认原始的样子

    以往我们写css时,让一行文字垂直居中. 会设置line-height等于height比如: 当我把这个原理 放在button上时  会是这个样子的. 以下都是火狐浏览器环境 有没有发现一个现象,他们 ...

  9. Java项目往数据库中插入数据,出现中文乱码

    项目环境: JSP+Servlet+Mysql数据库 需要检查的地方: 1. java项目整体的编码格式为utf-8.并且将数据传递给数据库之前,数据是否依旧是正常的(可以通过打断点的方式一步步跟踪查 ...

  10. 模块化编程时,#include到底要放在哪里?

    结合我自己的经验,谈一谈模块化编程时#include应该出现的位置.总结起来大体有二条规则: 一.规则1:只包含必要的头文件 看下面这个模块: ===foo.c==== #include <st ...