00:00
Hello。今天我们来看一下那个接口测试框架里面的关于http client连接的一些设置。然后呃,我用的是自己写的那个框架,然后大概就主要的呃,关于接口请求的类啊,排排除性能测试之外就这两个。啊,这个client manage是做一些通用的处理,比如说连接词啊,呃,连接请求的配置啊,还有一些常量的配置啊,都放在这里面。然后library里面主要就是跟呃提供给呃更更更上一层的类去用的发送请求啊,组装请求啊,然后去解析响应啊,啊一些通用的类,它通用的方法。啊,今天我们就先讲一下第一个client manager manager里面的呃东西,然后它其实里面就是,嗯,主要就是几个对象。
01:05
各种控制器对象,然后还有最后面有一个初始化方法,还有一个线程,呃,不是连接,还有一些其他资源的异步回收方法。然后我们先从上面开始往下看。然后下面是在这个请求超时控制器。但是好像只是一个请求控制器而已,然后它里面会涉及到很多呃,乱七八糟的,呃,参数设置,然后这个里面其实没有什么。可以多讲的就是,呃,连接超时,呃响应超时,还有这个socket超时,呃还有这个在cookie模式这个,还有重定向模式这个,呃后面这两个参数是比较重要的。呃因为。嗯,在http client,它在设置这个,如果是你采用create deful接的话,这个cooking模式是用的是default,嗯,Default有个什么好处呢,就是。
02:13
如果你是一个登录的接口,请求发过去之后,然后服务器响应完,会在响应头里面会有设置,呃,Set cookie,那么一个一个或者多个字段。然后你就可以不用去自己手动处理这些字段,然后你在你连接词不关闭的情况下,在同一个域名下再去发送其他请求,你这个cookie是自动可以带上去的。就不用你再解析,也响应头里面的set cookie里面的可能一些token啊,啊,有一些别的校验值啊,就不用单独处理了,但它带来了另外一个问题,就是说。他在一个连接池里面,如果我可能需要有,比如说呃,三五个用户一起登录的话。
03:05
那么如果是同样一个token cookn里面放token,或者说呃,放一些别的东西的话,字段相字段的名字相同的话,它就会有冲突。就导致无法实现多用户同时登录。有这么一个疑问,然后。这个重定向这个问题。嗯,我设置的是重定向是for,然后呃,主要的原因就是。这个是自动充电项。如果你把它开了之后,你拿到的响应,比如说你请求了一个A地址,然后A地址去,呃,返回出来一个结果是那个它的里面有location这个字,有有有location这个字段,这个字段值就是要跳转到的。呃,B地址就是你其实访问的是A地址,但是你最终去B地址去拿的结果,这个地方有一点不太好的就是如果你A地址获取到的东西,比如说会有一些黑带,或者说别的信息拿拿过来,呃,需要存本地的话。
04:11
然后再直接去获取,直接去跳转到BA的信息,可能会丢失掉。如果你设的是自动模式的话,A的访问A地址得到的信息可能会丢失,它就会自动跳转到B地址,然后把B地址访问的结果返回给你。这是这两个,然后。嗯,这个地方我建议就是不要采用那个create default那个,因为你一旦create default之后。你很难再去对它进行一些呃,所有的参数进行一些限制或者说更改。然后。回到上面这个这个请求控制器啊。这个请求控制器。啊,其实它就是一个,呃,在发送请求的过程中,如果你失败了,然后根据失败的不同的。
05:08
呃。呃,异常抛出的异常,然后去做不同的处理,然后这个比较简单,然后大家看一下就一个new,实现一个这个这这这个这个类。然后他实现一个。呃,Request这个方法,那这个方法的话,嗯,资质你都可以忽略掉,然后最比较重要的就是这个time。这time这个这个东西就是你超,嗯从事的次数,如果我现在的,我现在的request time是达到的是三。三的话就是我从事三次。重试三次,我就不重试了。然后。嗯,剩下的就是。
06:00
这个没有响应异常啊,这些乱七八糟,其实都都没有太多太多作用,然后会记录一个这个东西,然后如果是呃,这个时候你比如说嗯,超时或者说一些别的证书啊,或者说经常发生这种问题的话,你可以在里面多加一些日志,因为它这里面是有一个呃上下文HTTP。这个上下文那个都,呃,那那这这个参数大家可以把它加到呃,统一的加到最上面,最开始在这个地方。可以把它加到加过去,然后后面这个。啊,这个就有有点悬了啊,就是密等的,密密等的,这这种幂等性的情况下,就是一个接口,一个同样的地址的参数去访问不同的,呃,访问同一个呃地址参数,然后访问的次数,呃,每一次访问结果都是一样的,这就是密的。
07:02
然后密等性的话,之前本来想打算写篇文章写的,其实没什么鬼用。但是面试的时候可能会用到。就是这个密等性的话,如果是,呃,同样的。请求再重申很多次,这个地方我返回的是true。就继续从事。但是因为这个地方。那个是所有的异常,处理完异常之后,大家会发现。这里面除非是我这前面这些异常我都没有捕捉的情况下。然后我就记录一下,然后再去走下面的,呃,其实在这工作这么长时间的工作过程中,我就发现前面的异常已经全部包含了。就是能见到的都包含了,所以说下面这几行,这几行代码就是从来没有用过。然后看下一个。
08:01
重试控制器啊,这个连接词啊,这个在poing啊,Http client connection manager这个这个类其实是应该是在HTP版本4.3以后。应该是我用的是版本4.5,应该4.3以后才会有的,据说这个版本比之前那个什么manager要好很多,嗯,我没有做过对比测试。但是就用官方指定的吧,然后首先它是创建那个。那个套间纸工厂,然后这些都是安全一模一样的,在这里面,在整个这个连接器,呃,那个管理器里面,唯一呃呃,比较几个比较重要的参数,就是它会设置一个呃。在在这里最大的路由连路由数和最大的呃,每个路由的连接数。
09:01
那这个地方有一点问题,就是嗯,在压测的过程中,你这个呃,对于如果你是对同一个域名下压测的话,呃,你压测的并发数一定要。小于这个最大连接,呃,每个路由的最大连接数,因为如果超过的话,就可能会导致线程。自己的并发的线程去线,呃,连接池里面取连接的时候会发生等待,导致那个压测结果不准。OK,然后下一个是那这个这个这个连接词管理器,跟上面那个连接词管理器是一模一样的,然后。中间有一点点不太相同的,这连接池管理器主要是用来异步异步连接池的。创建那个异步连接词,它这里面创建的,嗯,因为因为是异步嘛,所以说它有些那个是用这种con啊,这个东西去实现啊对。
10:05
呃,请求的,呃不对,连接的请连接请求的一些配置,然后后面这些都是一模一样的。这个都一模一样的,嗯,大家可以对比一下,然后中间缺少的可呃,主要是这个。就是套接字,套接字的话,我看了一下源码,然后嗯,那个在可大家看那个LCH这个类里面瑞。Read里面。呃,它会里面会涉及到一个会创建一个default的一个连接制工厂。等会儿再看吧。OK,到哪里去了?看这个,然后。在。这个地方,然后他这个不是,诶这什么鬼地方。
11:11
好像找不到,应该是在这个地方。好像有点忘了。是这个地方还是。这个地方。哦,不对,是是那个在连接池那个地方记错了,记错了待会儿给大家展示看一下,源码里面,它会创建自动创建一个default的那个连接,呃,套结式工厂,嗯,它里面的内容跟这个我看的是差不太多的,但是它是一个default的,然后就是呃,官方文档里面也是要求,呃,就直接用这个,呃,因为是异步的嘛,所以说也无所谓了,其他的。然后看下一个。啊,这个就是创建那个,呃,SSL那个。上下文的。这个非常简单,你就照抄就可以了,然后唯一一个不太呃一样的就是SL这个版本。
12:05
呃,目前这个版本,呃,我这儿我遇到的都是1.2的,呃,之前遇到过1.1的。之前这个嗯,之前写过一篇文章,然后这个版本不对的话,可能会导致那个收费连接异常,呃这个里面,这个里面就是他是呃这个。这个是什么trust manager实现的一些方法啊。直接你看看最后结果就直接返回处就可以了,没问题。所以说这个地方就是本地就不做验证,直接就是,呃,默认的直接就是通过就检验通过。一下这个地方。然后回到上一个。
13:06
啊,这个就是创建连接词,呃,连接池这个地方有一有其中有一个。就是V这个地方,它会有一个。冷几个方法。Createault。然后create create这个。呃,其实没什么,没什么多大区别,就是在创建你看它的系统配置,它那个源码里面就是可以在系统配置,就是你看用的它就这个用,呃,这个用的就是那个,呃,我刚才说的那个连接池的管理器。你看这个就是你有他的一个还是用还是用这个。然后但是这个管理器是HT这个。就不太一样,它主要就是管理器不太一样。
14:00
然后教的方法都是一致的,嗯,在这个地方有一有一个小的知识点,就是一。Request conve。这个问题呢,就是request con,它可以在呃创建连接词的时候,就设置一个统一的request con,呃也可以在请求的时候,比如说一个request点,对于某一个请求去设置一个request con。然后这个就结束了,然后我给你看一眼那个这个这个异步的。啊,这个义务的。异步的,他是跟。你看这个是什么,NLC的那个包里面的。然后这个你看customult都是一样的,那个功能都是一致的,然后我在这里面用到的那个字的话就是。
15:02
这个草碟子就一样,跟那个那个。呃呃,同串行的那个同步的连接词可以共用一个。因为这里面它也可以直接创建那个default。Cat。这个。它里面也会呃,创建一些通用的,包括那个cookie的模式啊,都会创建掉,但是这个类用的实在是太少了。非常非常少,我也是刚接触到这个呃这个这这这个鬼东西啊,因为我呃是通通过一篇文章发现了这个异步的连接词,异步的连接词,但是呃后来想了想,其实他这个嗯嗯使用场景还是非常的窄的。你像现在异步的,他都现在都采用那种队列啊,任务任务队列这种形式去做那个异步的请求了,而且他这个异步请求。
16:09
如果是你要获取他的响应结果的话,那你还是要等。你要是不不你你还是要等他那个响应完了之后,它会呃,他在请求,呃,发送一个请求的时候,它会有有一个回调方法。就是测呃,OK之后就把可以你可以重写这个回调方法,或者怎么重写这个回调的方法的对象完了之后吧。呃,响应结果做完处理或者做干啥,再再弄到别的地方,或者说弄到弄到其他地方,觉得对测试来讲意义意义不是很大,所以也只是在代码里面把这个东西给写出来,然后还有一个就是当你不需要这个。关心他的请求结果的时候,哎,你就可以用这玩意儿。你比如说嗯,在测试,在我的那个测试框架里面会有一个功能,就是把呃,请求的响应的时间,响应结果啊,客户的响应大小啊,呃,Host地址啊全都会记录下来,然后会异步的去发给一个自己的一个测试服务,然后测试服务拿到这些东西之后,就会把它放到数据库里面存着。
17:22
包括在性能测试过程中,所有得到的所有的数据都存在数据库里面存一份,在这个时候啊,这个业务连接词就非常有用了,就你不关心它的响应结果,还有就是在呃,比如说出错了,然后你会异步的去发送呃请求去提醒,发送提醒或者发送报警,这种你可以。用这个,但是呃,有用处,效果不是特别大。
我来说两句