00:01
啊,Hello,大家好,然后昨天是呃,录了一个library,里面是如何获取那个HTTP请求的。那今天讲一下那个,呃,如何去把这个请求发送出去,然后去解析啊响应,然后。啊,这里面就涉及到一个核心的方法,就是这个。Get http responsible。然后它的参数就是这种,呃,Http request,那这个request之前给大家讲过了,可以看,呃,He get post,它都是继承于这个对象的。呃,所以说就直接把这个对象当做参数类型就可以,然后第一步的话会比较简单,然后是。先去校验这个request是否是呃,符合。呃,我们一定规则的request,然后。
01:00
嗯,这个地方是这个,然后他要首先有CTP开头,然后不能为空啊,这些乱七八糟的啊,主要是解决那还。测试过程中可能某些值是空的,然后直接就报错了,这种这种问题。然后第。嗯,这下面这些就是一直到最后。就是整个把这个请求执行,呃,发送出去,完了之后那个再解析他响应的啊这个方法了。然后我们先看一下。啊,最最最最最核心的一个方法,就是在哪呢,找一下就这个。我们用我们这个client manage创建好的连接词去。AQ的这个request,然后我们先看一下这个request的方法,你看这个在在在这个类里面,这个Q的方法被承载了很多次啊各种。
02:03
各样的。呃,参数类型,然后用的会比较常见的,呃对这个htp contact这个上下文的形式,还有就是呃自动解析,应该这里面应该还有个cookie的形式的。上下文CT。这里面可能会有那个属性,还能这个对象里面可能会有一些酷片,我记得好像是这个,但是我只采用了一个,就是这一个。因为我觉得呃呃,如果是把它各种乱七八糟的呃对象呃信息啊都封装,都让它自动去解析成不同的对象,这个是非常非常浪费时间的。而且不利于我们以后去自己去处理它,包括它的黑胆,呃,包括它自定义的纯净像啊,这些乱七八糟的东西啊,还有就是。
03:03
简单就直直接返回一个对象,就这个就是对象,然后。我们从头看一下这个方法,这个方法是比for request的。我们看一下before request里面做了什么。啊,这个里面我们目前只做了这一个功能,就是把一些通用的黑带放到这个。呃,就快速的里面,大家看一下我这个黑带里面其实是。啊,配置好的connection这这个这一堆。呃,是配置。其实我在这里面只放了一个,就connection这个海带,然后之前还有一些通用的海带,像这些IP这个。都会放,后来就觉得啊,其实没必要。因为有用的放,只放有用的就行了。然后。我们看下一步,下一步我是呃整体思路是把整个响应结果解析成一个健身对象,然后把所有的呃数据,我需要的数据啊,都放到这个健身对象里面,这个这么一个思路,然后我先去创建了一个健身对象,然后然后我再通过。
04:14
嗯,这个啊,Request这个类啊,获取这个request的,嗯,我需要的信息大家可以看一下,其实非常简单啊,就是呃,获取一下它的。从头看一下接口名。呃,URL,呃,UR呃这两其实在测试里面,呃没必要区分太太清楚啊,一个呃是呃,我在这里面区分的就是呃后面不带不带参数了,然后。方法啊,这个地方我个人建议还是用那个枚举类处理会比较合适一点。然后域名协议类型请求参数。呃,是否是黑名单啊,因为这个请求里面,呃,我在。
05:02
所有的请求都会经过这一个方法,然后发送出去。所以在有些请求是不需要去解析一些呃,乱七八糟的东西,或者说是他不需要去做额外的业务处理的,我就单独的去增加了这么一个字段。大家待会儿给大家演示一下它到底是做什么用的。然后回到这个方法。然后这个地方啊,主要是为了调试用的啊,我设置了一个head k全局的一个呃,变。然后在这里面主要是包括下面这个地方啊,如果我是把它,还有在这个finally finally这个地方都对他进行了处理,就是为了。打印。那控制台打印请求和响应的海带,然后以便自己去排查一些可能一些小问题,或者说海带里面啊打印的cookie是不是,呃,我存放进去,存放的cookie值是什么样子的这样子的,然后在这个地方我去拿到了一个时间戳。
06:06
嗯,这个,然后用串这种写法啊串。呃,这个连接词去发送这个请求,然后获取一个响应,那这种想法有一个好处,就是你不用在finally里面去把这个,你看这个,呃,Http response它了一个这个接口。啊,这个接口就是需要关闭的啊,在那个呃,官方的DEMO里面,这个接口是一定要需要关闭的,但是。在4.3以前啊,其实是个是request,是request这个对象。它可以release的connection,就是释放这个链接,把这个链接重新交回,交回给连接词。然后连接这个链接就可以,如果有别的请求过来,这个链接就可以去,呃,用于别的请求在4.3以后,嗯,我是用了4.5以后就是不用了,只需要把这个,如果你是用这个C,呃,HTP的话就不用了,只需要用它去调用。
07:14
Is close这个方法就可以了,然后这个close方法的来源呢,啊,就是这个接口。这个接口有一个close这个方法,然后。这种串这种写法的话,它就会自动调用它这个这个对象的close方法,而不用在final里面写了。就是然后。有一个。获取一个时间戳,呃,这个时间戳就跟这个时间戳相对应上,就是一个我从我发送请求到我收到响应这个时间差。然后这个是计算耗时的,然后这一行是那个根据这个K的呃值,然后去打印。
08:04
那个时间打印那个海带。跟这边这一行,然后把那个数字打开。跟324行是一样的。然后。这一行就是呃,获取响应的http code。然后这个地方是after。这个方法是。给大家看一下。它也是这个把这个对象,然后呃,这个对象里面,我把它head在里面的啊,就响应的responsible,呃,Response这个呃这个这个这个对象里面的set cookie这个字段全都拿出来,然后我会把它存放存呃存到一个。健身对象里面,然后。把这个竞争对象的结果返回。这个地方是用的一个lambda的写法。
09:01
大家可以看一下,然后看完之后就回去了。然后下面是呃处理的相应的body。上面是处理黑带,呃,这块是处理body的。然后。这个。你看响应他这个。Htp response,它会有一个集成仪,这个。呃,这个那个接口的话,它会有一个anything。这个getity这个方法,然后我们用这个get的方法,然后获取一个呃,相应的尸体。然后用这个。这个。官方提供的一个解析in的一个类,去把这个inity解析成一个呃,String的类型的数据,然后返给上一返返还回去,然后这里面会涉及到一个default。默认的支付编码,然后回一顿。
10:03
这是响应结果,然后这个可能它的认识这个是响应大小,嗯,这个地方说一下,就是在一般来说正常的响应结果里面,它都会有一个啊contact认识这个head里面就会有。啊,但是有些时候他是没有的啊,就是。我对比过它那个header跟这个获取到string的长度的一个值,正常情况下它们俩是相等的。嗯,我之所以没有直接用海带里面那个,嗯。那个值呢啊,就是因为呃,如果有海带里面那个值的话,还得再获取一遍,如果他没有的话,呃,如果有的话,我获取完之后,我还得再获取一下真正的。显示结果的这个对,大家可以看一下这个。刚才那个get。哦,找一下。就这个地方。
11:02
Get。Get it。Get。Message。好像是,我记得这个可以是。P一点。这个line里面,这个黑带里面。啊,不对。啊,可能是我记错了,反正是可以直接从海带里面拿到那个认识的,然后。在这个刚才好像是漏了这个方法,这个是获取那个那个HTTP的钱扣的,为什么会把这个,呃呃,我创建好的用于。呃,接收响应数据的接收对象拿过来呢,啊,主要是因为。你看我在这儿获取到一个相应的code了之后,然后如果它是不等于200的话啊,有一个日志的报错。
12:10
然然后在他如果是等于这个。啊,就302从零项的话。当然是三系列都是一个重定向相关的,这个重定向的另外一个,呃,地址的时候,它那个海带里面会有。Location这个字段,这个location这个字段,呃就是我需要把呃就是浏览器在拿到这个响应之后,会自动的去访问location这个字段后面所跟的URL的这个问题,所以说我是把这个location这个字段的值,然后把它放到这个响应结果里面去了,如果他有的话。然后刚才是漏了讲到这儿了。然后大家看我会把。这个想解析。
13:01
之后把刚才我们已经把那个相应的内容解析成strange,然后刚才我们还获取到了一个开里面的就set cookie的内容,然后我们是把这个方法打开。这里。这是先进行一步校验。呃,然后是把。用这个。嗯。把strange的响应内容变成JA的,然后呢,如果这个我们获取到的cookie不为空的话,然后我们就把这个。呃,介绍我的的里面,再把他cookie的信息给放进去,然后。大家看,这里面就是cookie。哎,不对。这个地方的key就是那个cookie。然后呃,结果呃,就是这个接诊的扣费对象就是KY6的形式,然后我们再把这个。
14:03
就是包装好的,想要结果返回。然后在这里面大家要注意一下这个这个对象A对象。这个对象是干什么用的呢?大家可以看一下,这个是。所有的也用这套框架去写,以后所有的那个呃项目它都必须实现的一个积累,这个积累是统一项目的基基础功能的一个方法。然后我们看到他先用了一个。Check code。就是。呃,有了etp扣的,我们还要业务响应的扣的这个方法就是获取业务响应扣的啊,之所以把这个。啊,Request这个传进去主要是因为。大家看这个check code啊,这个啊,这个check code里面,呃,就是跟那个。呃,Request in里面那个这个。
15:04
Request info,刚才看到有一个。It black是黑名单,他如果是,呃,这个URL在我们的黑名单里面的话,我就不进行下面的逻辑校验了,诶如果是。Attp扣的是二一般都是200嘛,然后如果是响应扣的一般都是正确的话,一般都是零,如果是123或者其他的话,都会有一个报警功能,这个方法主要实现这里,所以会把这个呃,Request的传进去。然后接下来是在这个地方。呃。如果他不为难,然后或者说他是正确的。A这个。Yes。他跟拆扣的差不多,然后但是它是校验这个,呃,通用的一个项目的响应的接的结构体的。这个是方法,是用来校验他的,比如说呃,你的结,呃Jason分,像我们现在的Jason,就是一般就是会有一个呃code,有一个message,有一个date,呃这三个,然后一般来说date都是有内容的。
16:12
如果是这样一个。比较一个非常初步的一个校验,如果在这个地方是OK的话,呃,如果在这个地方是不OK的话,我们还是会发送那个是在通用测试框架里面会发送这个错误的预警。而不是这个拆扣的这地方,如果拆扣的不一样的话,它是需要去在那个类里面自己去实现的,呃嗯,过几天吧,应该会给大家录一下,就是如何去实现这个杯子里面的类里面的那个接口里面的方法,以及这些方法都是干什么用的,都怎么用的。还有就是这个地方。嗯,这个地方是一个存储的过程,呃,大家稍微看一下吧,就是。呃,先校验一下这个,还是去校验一下那个啊request的ino,然后会把这些呃当做一个一条测试数据,或者存到那个测试数据库里面。
17:11
然后以以便将来呃做一些统计啊,比如说呃在比可能就比如说你每天都在测试的某一个接口,然后你前半年这个接口的平均响应时间是三百三百毫秒。然后到某一个版本,这个功能修改了,突然间变得500毫秒,那这个就是有问题的,也可以做一些啊数据分析啊,或者说是呃。在一个较长时间维度的话,去对某个接口的响应时间,或者说啊,某个接口的某些属性进行一些比对,这样的。然后。这个的话,这个CK也是一个波尔值的,一般就是负。呃,这个地方我主要是想法就是用来去记录这个响应。
18:00
然后还有它的响应结果。啊,这个主要的因素就是在于,因为这是一个。那个。呃,通用的就是这个,呃,整个项目写完之后是打成夹包丢到那个呃依赖里面去的,所以说就不会去改,嗯,就很少去改这里面的东西,如果是我某一个接口的。啊请求啊,想一下可能是哪块处理有问题的话,或者说我是想把这一段时间的,呃,请求或者说是可能是几十个几百个上上千个请求一下请求数据,我要排查问题的话,就会要需要把这些那个请求,每个请求的请求和响应同时记录下来。这个地方OK,点错了。这个地方是用的这个一个是方法。呃,这个。回头再讲到这个是一个非常重要的辅助工具类啊。大家记一下这个方法,就是保存某个请求的请求和响应就行,呃,接下来有时间的话会着重的介绍一下这个类。
19:07
然后这就是。呃,后面的话就是把所有的X异常全都捕捉到,完了之后,如果。有异常的话,还是会请发送那个预警,因为在这个是在这个。呃,请求呃,不在呃发出请求解析响应,整个过程中如果发生异常的话,都会去。呃,触发这个,呃,这个这个预警,呃预警,然后后面的话就是把这个黑制成for。然后这个last request这个。啊,会记录每一个,呃,会记录一个。最后请求的呃,Request,呃,这个做什么用呢?我给大家演示一下,看看一下这个方法,这个这个对象都谁用。在这个方法里面获取最后发出的一个请求,因为呃这个主要用于那个性能测试场景,然后是比如说我把一个请求呃参数乱七八糟的,我都组装好之后,我先让那个呃,如果这个接口呃不是单次请求的啊,它是密等性的啊,我就把它先发送成功一次,或者是我不发,我先把它呃组装好,组装好之后。
20:24
呃,只要是那个通过,呃,这不还是要发送这个请求,发送完之后通过这个方法就会把这最后一次的请求给记录下来。然后然后把这个请求当做一个对象,然后传到放到那个性能测试框架中,直接就可以啊执行性能测试了,是这么一个功能。然后再给再介绍一下这个里面最后一个方法啊,这个方法就比较啊,比较简单了,就是在测试结束之后会把呃连接池关掉,然后这个异务连接时也会关掉啊,这个异务连接池开启的方法也是呃稍微看一下就是如果他是在。
21:06
呃,不是在运行的状态的话啊,就把它start就开始,然后就可以执行这个request。这个暂时,嗯,当前项目没在用,只是提供了这么一个功能啊,但是它close这个方法就无所谓了,因为它在close。Close里面就已经校验了它那个状态了。然后啊,这里面还有一些。这个head to这种方,这个就是把因为header是那种呃数组,然后K6K形式嘛,然后还是把它那个当做呃,弄成一个健身对象这样的。啊,这个是别的地方用的。然后get,还有就是get header,包括那个cookie他都是最好,我觉得最好是封装一下,因为呃。怎么说呢,就是嗯嗯这一这个client它针对的可能呃稍微比较专业专业一下,因为你像cookie里面它需要很多的,呃,包括他的域名啊,过期时间啊,还有一些那个设置时间啊,乱七八糟,但是嗯对于测试来讲,其实呃cookie里面它就是一。
22:21
一群KY6。形式的数据。就string数据。然后。包括所有的header也是head也是K6KV6形式的这种数据。然后。Get cookie,就是把cookie的KY6呃,还是用监对象去啊,保存这些数据,然后把这些数据转化成,最终看到是head带,Head带怎么来的呢?就是headar的cookie。刚才给大家看过了,就是cookie,然后value呢,就是把这些,呃,把这个cookie呃。这个建设对象里面的数据拼成一个string字符串,就这么简单啊。
23:03
然后。这一个类就算是给大家讲完了。然后嗯,下一步呢,呃应该会讲一下,着重讲一下其他的,像这个范request的这个方法,这个类,这个类里面有一些比较,呃比较重要的,但是它是用那个勾类写的,呃看起来可能不是特别的,呃可阅读性可能比较差。然后今天的就到这儿。啊,欢迎关注我的公众号。
我来说两句