00:00
嗯,哈喽,大家好啊,最近一直在录那个阿尔萨斯的视频,然后接口测试的这块有点落下了,呃,主要原因是呃,讲完接口测试的,呃,功能啊,自动化,呃性能的框架的一些东西,然后一些简单的使用,呃下面讲实战的话,实在没找到什么比较好的例子,呃,自己想了。呃,一段时间吧,觉得还是自己写一个项目,然后自己去做一些测试的实践,这样会好一点,呃,总是去拿别人的接口的话,呃,第一呃,可能接口文档呃也看不到,也不好去演示那个测试的点在哪啊,第二呢。呃,功能自动化还是比较OK的。呃,性能这一块呢,就是基本上是不太可能去对别人的接口进行压测的啊啊所以呢,呃就想写,呃之前自己是过一个的。
01:05
呃,Mo这个可能大家都会用到过,然后它主要的工作形式呢,呃,是一个架包,然后启动一个呃,Jason格式的配置文件。呃,然后去做一些呃呃接口的模拟这一块,呃呃某口API呢,呃就是它同样的框架,然后但是它提供的是API接口,然后我们通过写脚本去提供一个呃接口模拟的这么一个功能,然后我是。你先看一下代码吧。呃,我是对它的接口的功能进行了一些呃更新吧,我看它的官方文档,还有包括它的价包里面都有好多都没有更新的,还有一些嗯嗯,不能说明显的bug吧,就是一些功能不太完善的地方,我是做了一点点更新,然后是做了一些封装,呃封装的话,呃是狗脚本写的,但是。
02:09
呃,大家看应该还是。呃,还还是可以,就是就是那个。嗯,就能看懂的,因为这个脚本的话。那个都是比较简单的,呃,然后我们看一下这个项目的结构,呃,这个项目的这个Mo这个呃包里,呃文件夹下面呢,有这么几个,呃,有一个包啊。呃,Port这个呃这个就是新提供的一些支持,呃,Circle handle就是在呃响应的时候让它循环啊,因为原来那个模块API的它的一个循环的话,呃它是循环到最后一个之后就一直返回最后一个了,没有那种循环呢,就是呃到最后一个之后又回到第一个这么一个功能,然后这个是一个杰森的。
03:06
呃,因为他呃在呃标准API里面没有提供,就是对返呃请求数据的一个解析。或者一些做一些判断是这样的,呃,然后。呃,限制limit这个,呃,主要是提供嗯。呃,请求受限的情况,还有就是频率,主要是频率,就比如说我一秒钟只能请求一次,然后。呃,多了不行啊这样的,然后这个。呃,这个随机啊,随机的话也是是基于上面这个circleq去做的啊,都差不多就是呃,我给定几个返回的,呃,可以说返回的内容吧,或者返回的一个对象,然后让。呃,反馈内容随机的在这,呃这几个对象里面去挑啊是这样的,然后我们把这个。嗯,这几个我应该用不太用不太到啊,这个很简单的,就是抄别人的代码,其实。
04:05
呃,Hand就是呃,其实比较简单,Hander就是呃,其中一个比较关键的方法就是呃,EQ返回处的话就表示拦截到了,就是匹配到了啊,返回for的话就没有匹配到啊,接这个呢,就是你怎么从呃这个request的对象里面把它这个接呃把它这个接的数据给解析出来,是这样的,嗯你看也是解析出来之后呃就OK了。然后我们,嗯,先把它关掉,看一下手机。啊,稍等一下。啊,工作上的事啊,就继续啊,就这几个呃,大家看看就行了,然后可能用到的机会也也是比较有限的吧,然后都是已经写好的仿照的源码去抄这一个做一个简单的修改啊完了之后我们看这三个比较,呃比较怎么说呢。
05:13
比较核心的吧,我们看一下这个,先看看一下这个server吧,啊server它是这样的,就是呃哦不不能先看server。嗯,看一下server,先看一下server,大概就是它server就提供每一个服务嘛。呃,服务有端口,有自证明,还有一些呃,Monitor,呃,监控的一些对象,然后有一个run方法是这样的。然后request的呢,呃就是匹配请求的呃,请求的分为呃,URL,呃参数,参数又分为三种类型,一个是Jason,一个是还有一个是还有一批是呃。啊啊,应该有,还有海,还有COOKIE1类的。
06:04
我看一眼。啊,就是header和cookie啊是这样啊,Header和cookie呢,呃没嗯原码里面没有提供,就是呃,Equal这个方法,嗯嗯我也没有拓展,主要原因呢,呃是因为用的真的是不太多,嗯如果大家有有兴趣有需要去拓展的话,就可以把它,嗯也把它拓展出来,一个方法是这样的,OK。呃,我们我打算分三批吧,分三次我们把这个讲完,然后我们去,呃利用自己去写,呃非常快速的去写一个项目,然后去针对这些项目去做呃测试啊,包括接口的功能啊,呃自动化性能,主要是性能啊OK。嗯,我们看这个request request的过滤呢,嗯,我们先看一下这个,呃,这个类啊,我给大家展示一下,就这个类,Head这个Mo这个类,它这里面的包括一些主要的方法全都在类是它APS进行了一次封装之后,主要体现在这个Mo类里面了啊,我给大家。
07:13
你看包括它的server的这些方法返回server呢,还有这还有一个烧ET server,呃烧server呢,这个我不是太,嗯,用的真不不太多,我就直接就跳过去了,呃,包括。呃,后面还有一个,嗯,还有一个呃异步的一个东西,嗯,这个我也给跳过去了,因为用的用的不是太多,还有这个叉ML的,呃这这个的话s seq的话就是那它那个随机那个,嗯包括文件的我也给跳过去了,然后呃重定向的啊,包括是海象重定向的这些我都给跳过去了,因为那个呃嗯在测试中用的不太多,然后。呃,在测试中用的不多,而且嗯就是嗯官嗯就是官方给的文档里面的封装好的这些方法就这样那相代理的形式了,嗯已经比较,我觉得已经是比较完善了啊,所以呢。
08:15
嗯,我就。啊,你懂的就就直接跳过去了,大家如果是呃有需要的话,直接去看一下这个,呃,看一下这个这个类,基本上所有的方法都在这一个类里面的啊,嗯,然后我们就直接就跳过去了。OK,然后我们看这个,嗯,这个封装的,嗯封装的就第一类吧,就是URL的,还得再看一下手机。呃,URL的这种是URL的。哦,谢,我真讨厌这个钉钉。URL的这种,嗯,我这个。
09:02
这个是一个,嗯,它是把URL就是包括呃域名。因为我们的本地一般就是起的本地域名嘛,呃,域名端口之后的,包括从那个端口之后那个斜杠开始的,就当做一串,嗯嗯,可以当做一串字符串来处理的啊,可以理解为一传字符串,如果是get的话,就是在啊第一个斜杠开始,呃,不是就是端口后面第一个斜杠到问号之前这一段。URL是这样的,然后匹配一个UR,嗯,是这样的,OK。就是。这个就是,呃,之后就完全匹配可以,哎,不对,说错了,差点翻车。就正则匹配,如果它符合正则表达式的话,呃,我们就就算匹配成功了,匹配成功的话,我们就会呃拦截到这个请求,然后根据我后面的脚本去返回相应的东西。呃,URL的话就是URL就是全就可以理解为呃,Java里面的equal这种这种方式。
10:09
嗯,开头啊这样的,嗯,有开头啊,就结尾啊,然后。嗯,还有这个URL包含文本啊这样的,然后这就是URL的匹配,然后我们先说一下这个URL的匹配,URL匹配是这样的,它是因为我们的脚本是一行一行的嘛,它是从上面开始匹配,然后到下面。就是如果这呃有一个请求,它是同时符合两条规则的话,就看哪一条规则在呃优先执行。嗯,就是谁先到先得。如果优先被匹配到的话,把这个接口把这个请求弄走响应的话,那要下面这个,呃,匹配下返回内容就不会被匹配到啊,是这样的啊,所以有一些这里面如果我们。
11:03
嗯,比较多比较复杂的话,就是极有可能就我们的一个请求,其实是可以是是符合很多个。呃,匹配,呃匹配条件的,然后这是URL的,嗯,URL的这个呃也都也都比较简单吧,嗯,你看这个BI和这个URL都是官方提供好的文档,呃我之所以就这么写呢,呃大家可以待会儿给大家演示一下,大家就可以知道了,因为官方它那个文档大家看,我再再给大家也看一下,它那个是非常非常的全面,但是复杂。你看它有返回http server的,呃,Http server呢,嗯,就需这HTPS的证书就算了,呃,就需要一个pod,嗯证书,还有就是Mo,它需要传很多的Mo con,然后Mo con怎么来的呢?呃,就是这些,呃,URLURL里面呢,呃,这个U使ul使URL,你看还有一个request的,还有。
12:07
啊是这些的,然后还有一个某。呃,这是监控,这可以略掉,然后request,你看这么多request,然后如果是按照它的使用的,呃,话来说的话,应该还有and。还有这个哦啊,还有这个呃,Not啊啊。哦哦这样的,嗯哦和not not这个我还没有封装啊,这个其实还是还还是有用的。啊,先记下来就是它反应类型很乱,嗯,但包括包括这个后面这个respond的,嗯,比较乱,然后所以而且用的方法会比较复杂,你看我现在都掉了他两个方法。一个match,还有一个UI,而且它这个呃同时呃这个呃这个UI。还有十的位置呃和这个UI,呃,还有就的位置加UI,所以说这是我个人不是太喜欢他这种,呃对外提供API这种方法,嗯就是嗯没有一个比较整,没有一个整理过的感觉啊,我所以说我就整理,我就是做了一下封装,一般就调用一个方法,然后。
13:23
嗯。嗯,我们先把这个,呃,刚才落掉的一个二和。和not。我们给它,呃,先先把它标记掉,让我想想啊。Come get up there。对点没口点。累点啊。嗯,是这样啊,我这这个boss我是把它去掉了,所以说大家,嗯,我为了避免那个方法名重复嘛,这里面我就先先用他的,用他原来的。
14:12
OK,然后我们现在比较那个呃参数这块的这个参数也是比较简单的,嗯参数的话,呃分两类呃三种参数,每个参数有两类,呃三种参数呢,就是get的请求的一个参数,呃都就只有一种啊,Post有两种,一个表单,一个是Jason,呃然后呢,每种请每每个每种参数呢,就每种请求的参数呢。K呢有两种校验,一种是呃,K等于什么什么,还有一种是判断这个K存不存在啊这样的,呃这里面这个呃你有相信这封装,封装过后的方法大家都是能懂的。就是E扣,然后得得得得得。啊,一口哒哒哒哒哒哒。很好。呃,Equal,呃,From得得得,呃,Get exist,呃,呃,Parents exist exist form这种形式啊,还有一些就是。
15:11
呃,判断。呃,那个呃参数的一些属性的,比如说我某一个参数传的实数类型的,它的我根据它的字符串长短呃去做呃不同的去判断啊是这样的啊是这样,然后呢,我们这里没有封装啊,因为用的是太少了。而且是。嗯,真的用的太少了,封装起来也非常简单,我给大家看一下,其实我们呃,Exist就是Chris Jason。这个写好的。嗯,就是就就是这么简单。然后还有什么内容嘞,这就是就是这个参数不是不是为空,Exist就为空。然后去返回一个。这个request就应该是这个这个东西就可以了。
16:03
OK,这这这就可以了。然后check no,只要保证这个参数存在,那就OK了啊是这样的。然后。嗯,这个大家看啊啊。按照照这个提取啊,返回来还是一个string值。我们如果要要进行封装的话,应该就是在,呃,我看这个是哪掉的啊,OK,不是这掉的。嗯,Quite strange,它是返回那个strange。我们看刚才看错了。Exist。哦哦,这不不不为难就可以了。嗯,相当于就是。呃,在这里面,我们在如果进行嗯拓展的话,就在这个位置。呃,这个这个位置去拿到这个参数之后,去跟我们的条件,呃,比如说大于,呃大于十。
17:05
比如说传出来一个int类型大于十,如果大于十的话,我们就返回一个string类型的东西,嗯,就表示它那个。呃,就是匹配OK了啊是这样的。嗯,应该是他跟exist是一样的,嗯,我看一下exist。New'然后把它转成这个checkout on nine。这个,然后这should be not be,难,我们看它一下切,应该比较简单的。就会返回一个东西,然后会return,然后return这个me。这两面就就就不拓展了,因为属性太复杂了,大于小于呃还有长度啊这些一类的,呃,我们可以完全通过一种就是格式要求吧,就比如说呃,你传1万的时候给你返回什么,你传9000的时候给你返回什么,是这样的OK。
18:03
呃,然后我们看这个,呃,Head header刚才跟大家也讲过了,海也是比较简单的,然后就是。啊,存在。是否存在于某个,呃呃,刚才看过了,呃,是否存在于某个K,然后我们看他官官网的,呃代码啊,不是官网代码,就是官方的一个代码,就是这个。嗯,传回来一个header,然后切,嗯。这个OK,这是它的strange,然后我们not不OK,然后返回strange,然后应该是呃拆房的,嗯,应该这个吧。嗯,内部的,然后校验的话,应该就会校验的,就是这个啊,还写这图标掉这这一段啊,如果我们去那个重写的话,就是把这一个对象重写一遍就行啊,不是不就是抄过来完了之后做一些合理的操作,大家看这个地方就是他获取。
19:05
获取那个呃,Key的。你看kid的认识。呃,大于零吗?啊,如果是的话,然后就得得得,呃,如果不是的话,然后就是呃这个是Java的一个东西,我不是太了解,但是我我理解的就是呃,操作的就是一个呃,True,呃,For啊这样的一个东西。然后看它这个value。啊,操作这个操作这个value。应该是放弃,应该就是放弃操作的意意思。OK,嗯,我们这个就讲完了啊,Exist呢就是这个。呃,是否存在这某一个,呃cookie啊cookie,呃我们上之前是讲过,Cookie其实就是海里面的一个IE。呃,我们但是在这里面我们不能去,呃,我们是区分的,跟那个特处理是一样的黑,然后cookie归cookie cookie也是value形式的,我们不必去管它里面的一些PA啊,或者说apitime啊这种,呃属性我们这里面都是不管的,只是取它的K和value这两个值,呃。
20:17
嗯,剩下的就是。呃,这一个比较,嗯,多种选项的嘛,满足任意条件即可。这个是排除选项。OK,嗯,这这就是呃,Request request API的一个封装,我看时间啊,时间快快到了,呃,我简单的给大家演示一下吧,这个是刚才我直接做好的。
我来说两句