00:00
嗯,Hello,大家好,那个我今天分享一下这测试框架里面一个非常重要的辅助类啊,嗯,就是这个范request,呃,它主要的功能就是。那个呃,本来一开始是想了重写一下library里面的呃功能,然后用一个呃,那个叫做建造者模式,重写一下那个发送组装和发送请求的这么一个功能,然后后来就是拓展了一些别的。呃,比较重要的自定义,呃自定义方法,然后大家看啊,这个它是继承了library的,然后实现了这两个方法啊,这两个接口啊,这个接口是那个序列化用的,呃因为嗯嗯如果是在做并发,或者说是嗯请求的管理的时候,就有些呃接口来说,一个请求只能请求一次。
01:02
这样的,然后我们需要把这个切口,呃,重新拷一份,然后或做一些别的操作,就需要用到这个,但用的非常非常少,呃,我也不建议用,我用的时候就踩了很多的坑,很麻烦,这个呢,就是有一个的方法。好,就在这儿,可能方法。嗯呃,一旦我们去呃调用某些呃那个参呃不就是我copy什么东西的时候,Copy request的时候,它就会自动调用这个方法,然后还有一个呃,专门用深拷贝去做,呃呃用户对象拷贝的话,去调用的是这个接口用的方法,它没有方法,但是它只是一个接口,它用的是那个流的形式去拷贝对象。然后我们看一下这个,它主要是大家看这就是request request type呢就是。Get post饭。
02:02
呃,为什么要多一种呢?因为就是区分那个请求参数的那个形式啊,Post的,你看这后面会有post,还有放这都是post的接口请求,但是就传参格式不一样,呃,这请求对象就是那个htp request对象,然后这个是那个号,呃,域名。那接口地址。然后一会,哎。海集合。然后这是一个呃,Get请求的传单,呃,那个对象,这是postose的请求表单传送对象,然后post的请求接省传单对象。我没有用一个统一的呃监视对象去存储的原因就在于呃,它呃很有可能是多呃多种请求参数同时存在的。啊,一般就是get和POS的啊,总是同时存在,然后嗯,之前一家公司经常做这么个操作,而且get和POS的参数都是必传的,里面都有一些业务的验证。
03:06
所以说比较惨,当时就是为了有备无患嘛,然后就是把所三种请求方式的参数全都给拿下来了,单独存成不一样的。然后这个的话,然后就是存一个请求对象啊,为什么要先序列化呢?嗯,待会大家就知道了,就是如果我这个接口只是存一个请求的话,而不存在的响应的话是呃,如果不呃先创建的话,其实是有些问题的,就会把控制针什么的,大家看这个钩位是没有分号的,就以断以行为标准,这个是构造方法,这个这个比较简单嘛,就是先嗯构造一个请求啊,它的类型这是是是有的,完了之后它这还有get get这个方法。
04:03
Get post,然后设置请求的啊,这个this是那个go里面是没有return的,可以没有return还可以有,如果没有的话,呃,它是默认最后一行,呃,执行的最后一行代码的返回值是整个方法的返回值。就像就看大家看到就是,呃,设置完就this this,它的就是一个返回,返回值就是一个认对象,然后就把它返回嘛,设一是get参数,这是get参数,然后这是post,呃,没错的话,应该表单post表单参数,然后post节省参数完了之后。海,嗯,这是k value的形式,然后get key value,因为这海里面可能又有那个数字,或者说是别的类型的,所以说就用的那个object这种参数,然后后面是调它的to方法,然后添加海,就往里面添加海单啊大家刚才看这个。
05:07
嗯,这个就是gra里面是可以重写操作符的,这种操作符重写完就是ADD,对于这个对象来说就是A,因为我的,呃,大家看我的海带,海带是一个例子,这样就是把箭头这边的添加到箭头这边啊。开口不一样,就是把开口大的添加到开口间的地方。表达爱的方法。啊,这个是你看艾header,因为我已经呃有如果是传一个历史的他的类型的话啊,就有一个LA的写法啊,跟那个Java稍微有点不太一样,那也差不多,它Java是for一起,这个是直接一起就可以,Java是那个括号,然后这是大括号。啊,增加head是一样的,增加跟那个增加cookie是一样的,只这后面是set,不是一个一个添加参数的,只直接set那个参数的,但是是用的PUT2,大家看我用的是PUT2,而不是呃,那个等于就如果是之前有参数值的话,它还会有参数了,Get就是如果是这个respond不为。
06:21
不为空,然后就用这个,如果我就直接去发这个请求,请求得回来啊这个呃,响应结果,如果不是的话啊,就是大家看后面就是不会空的话,就直接把它返回回来。这因为呃在遇到某些呃,我存储对象,我把这个对象呃存到这个翻request里面啊,把这个http request的base对象存到那个里面之后,我去啊直接去get respond就可以,而且是可以支持重复的,那比如说。呃,我可能对一个对一个请求,请求一次请求两次这样的操作,我想获取它的显示值之后,然后我去存储这样的,呃,需求的话。
07:09
呃就可以调用这个方法,大家看这个get request的方法,如果request播音,那然后就把这个返回单加返回,然后去校验啊uri等于先是有uri u如果是我这里是把uri等于那个house加API内,然后我这里十位体,呃get,然后就直接拿参数,然后post的话,那这里有一个三元的操作,三元的呃逻辑式去做的,呃看起来可能会有点长,就是呃先去判断它是为空,为空的话,然后就不为空的话,然后就是呃表单形式了,然后返回这为request的,如果为空的话,诶那就是。那个那个那个JA形式的返回这个request,然后中间还有一个你看这个argument这个地方就是会把get参数也给拼上去,然后呃,这个for each in这个,然后就挨里面。
08:15
嗯,整个来说就是因为之前这个类似一个格位的呃测试啊,就想就是想练习一下,然后中间会出现很多,呃中间出现了很多就语法不一致的情况,比如说at head,呃这个写法其实用的for啊,其实应该就是用那个一起就可以了,然后这是request的,然后可能这个方法是呃比较重要的,然后我给大家看一眼这个in from request。就是我从一个http request的basic对象去创建我当前这个request,呃,Request这个对象的时候,呃是怎么操作的?嗯,这个主要是用来因为这个翻request的这个对象呢,它包含了很多呃我自己的呃就是设置的那些属性,然后我设置完这个属性之后,我可以将这个属性呃属性的对象去存起来,存到如果是存那个文件的话,还好,直接to string存下来就可以了,如果是存数据库的话,我这个对象形式可以就把这个对象直接呃用那个嗯呃表单形式传给那个服务端,服务端直接把这个对象就是它的属性,属性对应那个数据库的某张表,然后就可以存下来了,这个是比较方便的,当时是呃写这个呃做这个功能,还有这么一个呃就是想法吧,然后还有一个就是copy。
09:49
这个request也是http request的这个对象,我这个为什么要copy这个对象呢?就我刚才提到的有些对象他。
10:00
不是,那么在并发的时候,他有时候呃,一个对象只能请求一次,或者说做别的什么操作的时候也有可能,嗯,因为到后来会讲到性能测试类的时候,就会有,就是有一些我实现的专门针对HTTP请求的,呃,那个性能测试类它就会有一个request这样的属性,然后如果copy的话,就一定会涉及到copy request,呃,Copy这个http request这个对象,所以说这个功能我是在这个范request里面实现的,用的是静态方法,可以直接调用的,然后是先获取它的方法名,然后通过方法名获取我request type。这个那个枚举类,然后获取它的计划A,然后获取它的所有的黑,然后根据它的啊不同的那个呃呃,方法名,我先创建我request的对象,然后看这个,这是范request的对象不是http request的非对象是如果是这个get的话,就is get,这大家也可以看一下这个流线型接口设置框架的那个使用啊,It get,然后set u,然后set header,就等它完了,然后如果是post,然后或者它等于fun的时候。
11:25
啊,就这样,大家看一下这个在内。就是这样的,看如果请求方式,然后解决方式,然后这个这个这个通过me,然后不不对的话啊,就放一半,然后这个后面呢。这是先把这个TP呃的请求对象先拿的转成posts,然后再获取它的响应体验,然后在这里面还是用这个呃,Inity u这个类去解析这个响应题,解析响应体完了之后,大家看下面这响应体其实类型的来看这个value,这个value是呃get这个,那那个响应的体的呃T这个信息的,然后在这里面如果是等于这个这个看这个就test in这个,或者它等于杰森get value就是这个这个东西,如果它相等的话啊,它就是杰森传在对象,然后我就会把它的这个呃它的大家可以看一下,如果是杰森的话,他其实。
12:44
打印出来的string是跟那个get是一样的,所以说is post,然后得啵得啵得啵得啵,呃,把这个放进去了。来看。这个如果不是呢,如果它是form表单,大家看这个表单形式呢,然后就会这个sleep这个啊啊这个这个应该会比较比较简单吧,因为这里面没有,嗯,大家可能可能不会对这个对象进行操作,嗯,所以有兴趣的话可以打印一下,这里就嗯不操作这个东西了,嗯,因为那个这些东西都是经过验证之后都是可用的,然后呃,这里面之所以没有区分那个呃post和范,呃是因为在这区分的set URL set Jason set就是表单形式在这里面区分的,而且我那个request的时候,呃不只是区分那个post和呃,Post和find,这是主要还是以这个他的这个两个身对象的,呃值的是不是空这种。
13:56
的属性去操作,然后介绍完了,然后返回当前创建好的对象。
14:03
然后大家看看这一下都靠边。这个是那个,呃,HT官方里面的拷方法。然后。嗯,这个呢,是我自己写的那个,先由这个BA去创建这个当前泛水快的对象,然后再去get get快的对对象,呃,这个方法去。那个copy的那个属性。然后这里面是save这个。就是先有这个request at ettp request的basic对象去呃创建翻request的对象,然后再用泛request的对象去设置这个,把那个响应值给放到这个呃,呃,当前这个范水开的这个对象的,然后呃再去save。
15:01
呃,这个这个大家都应该都比比较简单,就是把呃传一个呃时间,然后乱七八糟的,然后把这个一会I放到那个文件文件名里面,然后是two string,就这样大家看一下to。透视方法是这样,就是,呃,我把重要的值都给。都都给打印出来了,就是托俊to,就这样,然后保存完了,结果呢,我就能看到这个请求的,呃请求呃包括他的header什么的,然后它的响应啊,这个响应里面,呃,我是只保存了响应的解析完的响应值,这个值里面,呃不包含响应所有的header,但它包含响应header里面的,呃,有可能的两个字段的信息,一个就是那个set cookie,一个就是那个location,就是302重庆下那个地方。
16:00
然后在什么时候用到呢?嗯,就在这个时候用到的,如果我的shift开关是开着的话,我就会每请求一次我就save一下,每请求一次就save一下,嗯,这个是嗯嗯,这也这也是有备无患嘛,用的比较少,就如果是在某些情况下,我需要去保存我的响应的请求和响应的时候,我就会打开这个开关,然后把呃,所有的请求响应全都打印下来。然后我们回到刚才那个方法。然后嗯,这个方法这个类用的比较少。然后我们跟那个,呃,看一下我之前写过的一些,哎呀好多啊。有一个翻request test的一个功能啊,这个是框架,再看一下这个,嗯,测试对象Mo啊,这个写的有点多了,Mo这个好像没讲过,是一个呃,虚拟化的一个呃框架吧,它用来呃做单元测试,非常非常的有用,然后。
17:23
我看一下后面不用这个。呃,后面还没有,大家可以,我这个就看一下使用方法吧,这个有点有点尴尬,嗯,你看find get attp get,然后这样,然后就获得一个request。呃,Request的对象,然后用这个request对象去copy这个对象,然后呃,Copy完之后是一个http request的对象,然后。我们就可以重新去get到AB纸筷子的,从这个对象再去拿一个响应结果,然后这样。
18:00
是这样的,然后就copy,然后用完之后我们去save,嗯,这个是不是,这个是什么功能呢?就是我之前是在测试框架里面,会把那个所有最后一次在这儿,然后我每请求一次,我就会记录最后一次发送的请求,请求对象站,然后如果是那个我在不打开这个开关的情况下。然后我就只比如说我发了一个请求,我想把当前的请求存下来啊,请求响应都存到某一个地方,存到我的日志里的某个文件文件里面,然后我就可以呃发送完请求对象之后,我用这个呃就调用这个request的方法,然后这request规定呢,就可以直接呃get,可以用fun library get last。
19:07
这样的功能我就直接保存,发送完之后,我肯定拿到响应了,拿到响应之后,我就可以直接把把这个请求保存下来啊,以便我啊,以备不时之需啊,也有方法是用那个啊,大家看那个翻library,呃,Request里面有一个最后他这个方法。呃,来看这个save,呃,Save方法最后调用,呃是用用这个baby和这个respond去组装成一个泛request的对象,然后request的对象呢,然后去呃真正存的存的数据还是泛request的对象去to string是这样的。啊,当然我们也可以在这里面。OK,嗯,对,在这。Save质量。
20:00
或者说我们直接可以,因为我们已经创建了。呃。在呃呃,不对,应该是用request request,嗯含义,然后这是一个有快子的对象,然后Q.set。Respond。这样完了之后我们也可以用点啊。大家看save里面跟那个呃这个方法是调用的结果是一样的,就是request点就完事,但这个结果呢,会存在一个默认的文件夹下面如果是save,用这个含request save的话,它会有一个固定的一个文件夹啊,方便我们查找吧,嗯,这些方法用的不是特别多,嗯,所以说嗯,这个就是算呃筷子这个类里面,嗯。
21:23
除了。啊,这个。Cne request这个方法会用到,还有这个do copy这俩会用到之外啊,其他用到的比较少,主要原因还是在于呃,呃在那个性能测试的时候,我们需要呃把每个线程对象去拷贝的话,呃,如果线程对象里面会有那个request对象的话,这个拷贝呃,浅拷贝是不行的,嗯,我们需要去用那个深拷贝,或者说是用自己实现好的那个拷贝request的对象的方法去做这么个操作啊,今天的分享就到这里结束了,然后呃。
22:04
可能我看合入规代码有点不太习惯,但是嗯这个也是一个,怎么说呢?呃比较我觉得认为是G是一个非常不错的测试语言,呃嗯主要原因呢,因为是呃两点,呃一点是它基本99%兼容Java啊,第二点呢,嗯,它弥补了Java的不足啊,就说我一个G位的,就像这个对象的脚本我直接就可以,呃丢到服务器上就文本形式直接可以运行。不用像Java一样打包编译打包,然后再传到服务器一个加包,然后直接再解去就行了啊,这个就非常非常非常的方便了,然后还有呢。就是go的使用场景非常的广泛。比如说。
23:06
我们那个我可以看看一下这个这个build gra build里面这些这些其实全部都是格位的语法,你看这是我这是这是这是自定义的方法,构建方法啊,这全部都是格的这方法,还有jackins,呃jackins,呃,之前好像我看到的资料之前也是用格写的,但是那个后来就改了,改为加法了,然后啊,他是也是完全支持格的啊这种,然后你在JA里面,特别是那个papla里面直接写狗,那是非常非常的方便啊,是这样,然后可以给大家推荐一下这个狗,学起来特别简单,只要会加,把狗给秒秒钟上手啊,今天就到这儿啊,欢迎大家关注自己的我的公众号。
我来说两句