00:00
Hello,大家好啊,今天给大家分享一下那个接口测试中是如何去做那个业务验证的,呃,这里的呃接口测试场景呢,选用的是一种呃,就是独立性比较高的,还不是呃一个自动化测试项目,我们还是以之前给大家分享过的一个呃开源社区的他们一个接口啊,主要就是那个开发者注册为已经写完,就是注册登录,然后用户的登录,呃用户的注册,用户的更新呃这几个接口给大家演示一下啊,就是我们在平时的呃做接口测试的时候,或者说是在嗯这一类场景的接口自动化的时候,是如何做那个接口呃业务验证的。首先我们看一下那个呃之前的代码,呃,这些都是我之前那个上期视频已经写好的,然后有那个呃开发者登录,然后是那个注册用户,然后我们就先以注册用户这个接口为例为例去呃看一下怎么做那个接口测试验证啊啊,我们先先运行一下,看他这个注册这个用户到底是它的详细结果。
01:27
OK,想要结果这个用户已存在啊,我们看一下他这个,嗯,用户注册它有没有啊,没有啊,文档只是显示了一个扣的等于200的成功的一个情况啊,我们看它的参数啊,上期我们已经讲过,就是怎么去做那个简单的参数验证啊,这一次就不讲就是验证参数了啊,就直接去验证他的业务啊,因为他这个文档里面没有写太多的关于这个,呃,接口的业务逻辑的情况,所以说我们也就是。
02:06
嗯是呃四的,就比如说像我们刚才就是那们发送了一个请求,就是注册用户重复的情况下,它会返回400,那这样我们可以拿就就当我们试的结果,就是它接口文档给的结果啊,我们看一下这个apik之前也讲过,这就是一个name和password。它会有一个长度的校验。这个name也是。然后这个na是这个呃,这个图片这个phone都是呃,完全不必要的。呃,不必要的参数,然后我们也没有去验证这些非必然参数,它有可能的业务校验。啊,我们现在回到我们的代码里面。啊,这里面我们就需要对这个,呃,这个方法进行一些那个。改一下,因为需要去做验证的话。
03:06
就是P的8P。啊,这个单词好像有点怪,大家看一下,我就做一个参数化。啊,因为后面的这些nickname这个啊,Nickname这个我们都因为嗯,上期的视频已经测试我了,后面都是不必要的,所以说我们也不用管。然后嘞。嗯,我们再再多测一个吧,这个mark。做一下验证。那没有手机,手机也不验证了,就验证这三个就够了。假设它都是一个具体的参数。
04:02
啊,这样啊,我们就是先用这个,因为在这个大家看一下这个地方的,就是这个,如果是API为空的话,然后我们就去重新注册一下,注册的接口的话,会对注册的接口会对这个AK,如果是他呃验证通过的话,会对这个apik进行赋值。然后这一般登录的这个比较相当于一个项目比较基础的一个,所以说我可以在这个呃,这里面直接进行一些业务写写就是呃,对于这个全局的变量apik赋值进行写出来。啊,这样是可以的。然后这我们就报错了。然后首先呢,呃,我们是。嗯。写一个方法,不能直接去在那个在这个MY方法里面去写了啊,我们需要P。呃,真正其实测试用例的话都还是写,我一般都是写成一个方法,呃,没有用那个,呃单元测试框架一些乱七八糟的东西啊,因为。
05:11
嗯嗯,同事里面也有那种发邮件啊,统计一些错误率啊。呃,比如说100个接口有测试用例,然后多少个通过,多少个失败,就是我个人的想法就是,嗯,发这个其实是没必要的,你通过一个跟通过两个其实没有,通过100个跟通过99个是是有区别的,但是你通过九九跟通过98个是没有区别的,因为它都是失败的,因为我们的要求就是所有的用户测试用例都必须通过。如果是你这个车子用力。呃,不通过也不会,如果不测试用力不通过,但可能是呃,你测用力写的有问题什么的,然后你测试结果报出来不通过,最后发现一下,其实程序项目是没问题的。那你这个设置用例就不应该运行,所以说就是失败一个,失败零个跟失败一个是有区别的,失败一个跟失败N个是没有什么区别的,所以说就写一个方,每一个都写一个呃方法,然后把这些方法全部重新运行,然后我们就看有没有报错就OK了,然后这里面呢是一个。
06:19
嗯,比较独立性比较。独立性比较那个,呃,高的一个那个。嗯,项目吧,然后。嗯,我们就。只是写几个方法,写到一个类里面,然后如果是写那个自动化测试框架的话啊,就会比较复杂一些。嗯,首先一个我们看一下那个,这个就是先测一下。呃,名字相同,然后passwor。嗯,STEM这个类呢,就是嗯,怎么说呢,就是一个关于字符操作的类啊,一看就是get。
07:08
十个吧。随机十个。呃,是一个随机长度为十的子字符串,然后面mark呢,也用它那个string get string。也给了40个。然后嘞,嗯。我们在嗯,接口测试的过程中呢,一般我们都会把这个接算对象返回回来,每个方法都会把它的响应结果解析完之后的响应结果,但不一定是他。呃,真正的响应呃就是实际接口的反馈值,这里面呃有一些业务的处理,比如说它响应不是200,还有就是cookie,还有就是那个处理项等参数的时候,但一般呃业务业务呃接口的话不会出现那些情况,然后我们现在就注册的一个。
08:01
他在这个。呃,健身对象,呃当然大家也可以呃单独写一个有点类,或者说是呃返回一个什么,嗯把那个他这几一些,嗯对后面这些用户属性变成一个U类去做返回一个优端对象,这个大家都嗯就看个人爱好,我一般就直接返回杰,然后这里面我们是之前注册过这个范泰的呃名字的用户的话,我们就可以去验证他这个。那个接口返回的应该是400,那message的话,Message的话可以其实可以是不验证的,然后如果我们先获取它那个返回值吧,Get in。厚的。那就是400。这不,这就是返回的扣的,然后我们就验证扣的。
09:05
等于四,然后我们让它抛出来一个长,一一长就行,大家看这个F呢,是一个通用的。呃,通用,哎呀。是一个。抛出一个通用的异常。嗯,当然这里也可以的,自己大家可以自己去做别的,比如说像这个时候可以用那个太子单机啊,或者说别的什么东西的。做一个异常,然后这是我封装的一个简单方法,就是做异常,然后这个。就算完了,我们可以运行一下这个方法。写到一个卖方法里面。我们运行一下外方法。哎,点击成功了。有没有报错?嗯,关于就我们把它改成200,关于报错这个的,因为如果是他接口响应的,在刚之前介绍过测试框架的时候,我们都已经呃做过了那个。
10:12
呃,这一套接测试框架的预警,一般就是通过一个第三方的,呃,或者说现在很多就可以接那个钉钉,还有企业微信这种,嗯,比如说我报什么错,发送给什么样的人啊这样的,这个大家可以从这个file里面去自定义。嗯,这里面呢,是一个。呃,比独立性比较高的一个场景,就是说这个场景用完之后,我可能不会就把这个功能纳到自己的呃测自动化测试框架里面,所以说这个大概率就是。一个测试脚本运行一下,比如说我测试环境提测了,然后运行一下这个脚本啊,如果OK的话就是呃,这个脚本所验证的测试点就OK了,那就不会去放到做自放到自动化项目里面,这里面我们就给它放到这个,当大家看这个也。
11:04
我刚才把它改成200了,这里面就报错了。那如果是想那个在这个验证的时候,呃,发一些预警信息的话,也可以去封装一个啊,同样的方法,然后在他抛出异常之前,那我们把那个异常的信息给报出来,呃发呃那个微信消息啊,或者说钉钉消息啊都可以啊,这就是一个。简单的测试用例啊,大家可以用那个断言,呃,那个紧因内测的断言挺好的,这在这种情况下,在这个场景下用紧因内测断言是非常不错的。因为我很少用,然后一般现在涉及的这种独立场景的测试也比较少。所以说呃,之前用显示那个断言还翻车了啊,所以说就先在这里就不演示了,这时候我们用一个这样。我我们现在去注册一个正常的用户啊,我们如何去注册一个正常的用户呢?嗯,首先我们就名字不能重复啊,不能重复的话,嗯,什么样的名字不能重复呢?这这里头我不不有一个建议,就是大家最好用时间戳。
12:16
因为时间戳。是不会跟前面的重复的啊,不需要不要像后面这种啊,去随机,你随机总会有重复,你随机不管你随机在场,他总会有重复的可能,如果有可能你会去排查问题,排查的话就会很麻烦。所以说减少误报,然后我们就用时间窗。嗯,这get mark方法就是获取以秒为单位的时间,戳这个。十位的以秒为单位,这个我应该我们先试一下,看他那个对不对。啊,这个戴帽的。
13:07
啊,最长不超过16位,密码最长不超过18位,我们是这十位啊,这上面有那个有点。啊不对,这不这个是一啊,这个有点多了,然后我们就把它那个干掉。把太色的干掉。这里应该就可以了。诶,这个可以的。然后我这时候需要一个先把它注册掉。OK,然后这就是一个我注册一个用户的一个测试用例,那我验证这里验证200肯定是,嗯不太够的,嗯,我们先把这几个参数都给调出来。Has ju name。啊,这个啥来着。
14:01
这个应该是password吧。啊,Pass,不用校验啊。这remark。啊,这个多余不用校验。想不用校验也得写。然后呢?你看我们接口返回回来一般,嗯,大家不知道还记不记得之前那个find library里面有a right方法,A方法就校验那个想用体的结构的,像这个就是首先它包括code message,然后result,这是这是一个基本的响应结构,Result里面是一个呃。应该是一个用户信息的一个东西,嗯,这里面如果是这种,呃,就是独立用户独立场景的这种测试的话,嗯,就算了,就不用调那个right方法,那个一般就是非静态方法,放到自动化的项目里面去做的,完了之后我们现在去校验,我们首先应该校验它的name,然后我们就是嗯。
15:04
这个。然后。我们先把这个获取到。然后嘞。获取到之后这个内内,这就是佩内。啊,这就是验证用户用户的名称。然后我们再验证那个那个mark。
16:07
Mark。哎,这就是我们验证的结果完了,然后我们我接着啊,我们再运行一下二。诶,报错了。Mark分。诶,他是不等。我们啊,这里面有点怪,我们打印一下。
17:08
啊,这地方是有点奇怪。空Mar。哦哦哦,这个这个尴尬尴尬尴尬。OK,这这个验证通过了,这都是验证通过。这个嗯,我们因为这个参数,我们就假设它只验证了两个参数,一个呃,一个是那个pass name和remark啊这个passwor呢,呃其实在之前呢,应该就是验证过的,就呃怎么证明这个是成功的,然后我们就需要呃用户登录,如果登录的话,呃登录成功的话,那我们就认为这个呃用户的注册用户的name passor成功的,然后我看一下好像没有写登录,这有点尴尬。
18:19
嗯,只有一个开发者登录模式啊,我们再写一下那个。嗯,用户登录的吧,呃,用户登录的apik内发word就是三个。写到这儿。我看他的注册结果和那个注册是一样的。
19:03
Name password on APK。这个时候还是要复制啊,嗯,千万不要手。叫做手抖。然后呢,我们需要在这个地方重新去校验一下,这个这个一般,嗯,一般来说大家平时在写自动化测试项目的时候是不用的啊。在这里面我们应该也是strange password。啊,这个是name。WD。这个啊,Log,呃,Output,这个我们先啊先放一边,然后先运行一下。我们的戴帽。
20:02
然后就是user name name个屁的。我先用一下看这个接口返回什么东西。一般这种登录的像那种就是门接口,就是有个名词叫做门接口,就这是这个接口是什么项目的门进去了才能做后面的事情,进不去就拉拉倒。嗯,这个应该是登录成功了。登录成功,然后我们去去验证这个吧。这儿就像我们之前那个登录一样,做一个简单的验证。It value。如果他。
21:01
嗯。哎,怎么又报错了?是这个算符号的问题,哎呀。点错。如果它不等于。200的话,那就报错。啊,这这是做一个啊,简单的啊。那我们就再运行一下。你看我们这个DEMO2肯定是通过的,我们待会演示一个,这就是说嗯,我用户反啊DEMO2。我用我注册接口返回回来的用户。名和我选择一个mark参数是返回业务校验是通过的,而且我如何验证我这个用户注册成功了呢?我就拿用户名和密码登录一下,然后我们这儿也是一个,呃,不一样的。
22:11
加三这说明就密码肯定就错了。哎,大家看这他他已经不是200了,所以我们就报错了,就这里面就在这。然后我们就把它删掉,那这就是一个。呃测这是一个算是稍微嗯稍微完整一点的,就是一个接口测试用例的一个呃,DEMO。就是我先把我,你看这个方法有三个参数,我把三个参数全拿到,我怎么校验这三个参数,嗯都是,嗯是跟我,呃实际值跟那个期望值是一样的呢,首先我先校验它的显应扣的是不是200 HTTP扣的不用管,因为框架自动校验了,这里面这个校压200。
23:05
然后我在校验,呃,拿到他这个返回对象的。信息就result这个反应结果。然后从结果里面取到返回回来的name,然后再取到它返回回来的mark。然后我吧,因为我这两个和都是呃。自定完全是自定义的,所以说我就可以把期望值跟我自定义的值相比较,如果不一样的话就报错,还有一个就是我校验,怎么校验pass word呢?呃,就是把,嗯这个。用户登录,登录就完成了,然后在这个地方呢,呃,还有一点就是用户登录完之后的信息要,呃。哦,我现在登录成功了。看下登录返回什么。登录完之后的信息也可以跟这个name和这个remark,诶对大家看登录完之后,它也会返回一个的信息,然后信息呢,它里面还有name,还有remarks。
24:08
我们还是可以跟他进行一些比较。就是登录完之后,再获取用户信息的时候,再把这name和remark进行啊验证,呃这样就是更严谨一些,因或者说我们就根本就不呃呃就是根本就不管第一个接口,或者直直接从第二个接口,我们认为呃当前接口可能返回回来,它不是说从库里面去查的信息,而是呃直接返回回来的是我们请求的参数,他成成功了之后把参数返给我们,然后他可能插扣的时候输失败啊或者别的,那我们就再去。嗯,就再进一步验证,然后呃,第二个就是登录成功返回这个返回回来的这个用户信息接口,我们认为它是比登呃比注册那个接口返回回来的个人信息要是更可靠的这个数据,因为这个数据一般就是查库,或者说是啊查一些直接去查数呃那个数据。
25:12
的结果,而第一注册的那个返回回来信息,有可能不是查数据的结果,是直接把参数返回回来的,然后这个就算是完了,然后假今天时间不太够了,就写这两个DEMO,然后我们组呃用的时候就把这个DEMO1DEMO2这方法写上,然后嗯,手动处理的,手动验证的话就直接。验证通过验证,比如说我在测试环境上已经测试OK了,然后今天上线测完线之后,然后我们就,诶执行一下,说明这个接口呃,已经通过了。然后呃,大家如果是做在做自动化的话,会有这个这个呃。这个方法啊,这个类,这个类就是为了执行嗯,某个包下面的某个方法的这样的,然后我们就可以对自己写过的所有的方法进行一些,呃,你像我一般就写T单001002,然后会做一些什么标记什么的,也会有一些,呃,就是类似于内的忽略啊,依赖啊这些测试,但是一般我不建议大家把那个相当于一个配置里,不建议把这种依赖关系写到配置里面,如果比如说我T001,嗯,有一个项目上有一个项目需求更改,T001不运行,我就把T001配置给注掉。
26:39
呃,点变成零啊,或者是不运行,这样是OK的,但是你不能把T001的,呃项目依赖哪个东西,这些东西放到一个配置里面,因为这个非常麻烦的,而且嗯,好多什么啊,嗯,那参数化的,你看我这个地方从来都没有说方法,这个TDEMO里面没有方法参数,但是这里面也是可呃在代码里面我就避免了那个问题。
27:04
我觉得这是这比那个什么Excel啊,嗯,一大堆参数过来要要简单的多,而且非常的可靠,这个接口,你像这个这这两个接口DEMO,我无无论怎么运行它都是OK的。我不依赖于任何东西。对吧,等下看。我不依,我没有依赖任何的什么数据源啊什么的,我就这个接口,就我我一直运行下去,比如说我每十分钟,每20分钟一直运行下去都OK的这样。然后如果我拿勾去把这个做成脚本的话,丢到服务器上,然后写个定时任务,哎,这个脚本就可以保证。呃,用户注册。这个注册包括一部分在这里,这个地方包括一部分登录的功能,就是业务验证是OK的,就可以做自动化的监控啊这样的。
28:09
好,今天的分享就到这里,欢迎大家关注我的公众号啊。
我来说两句