00:00
同学们大家好,在这一章节呢,我们要学习一个内容啊,就是自动化测试用例结构分析,好我们本课章节呢,会分为三个部分给大家去进行讲解,第一个呢,我们先来分析,我们先来看一下一个标准的用例,它应该有它的结构,应该有哪些内容,然后第二个呢,就是我们依据我们前面所录制的这样的一个用例呢,我们对这个录制的用例进行一个简单的分析,那分析完成之后呢,我们会发现啊,这个用例录制的用例它还存在一些结构上的问题,那我们在针对这些结构上的问题给它做一定的优化。好首先呢,我们先来看一个标准的功能测试用例的这样的一个结构是什么,那我在右边呢,写了一个简单的这样的一个功能测试用例,它对应过来的呢,就是一个搜狗的搜索功能,对吧,那它这个这条用例呢,比如说它会有什么,它会有类型,比如说它是一个正例,它是一个反例,那它会有什么呢?还会有前提条件,那它对应的前提条件。
01:00
可能是我们首先呢,要先进入到我们搜狗的首页,那它对应的用例步骤呢,第一个步骤就是输入搜索的这样的一个关键字,第二个步骤呢,就是需要按下我们的回车键,或者点击搜索的一个按钮,对吧?那用力步骤就是我们在实际测试过程当中,呃,对于这个用力场景的执行的每一个具体的步骤,那除了这个之外呢,还有一个叫做预期结果,就是说我们执行完成这个用例之后呢,我们希望它达成一个什么样子,还有最后一个叫做实际结果,那实际结果就是我们实际在测试的过程当中真实获取到的结果是什么,然后OK,那如果说预计结果和实际结果不一致,那很明显啊,这一条用力就是相当于测出bug来了,对吧?好,那从这呢?呃,当然了,这一条用力具体它做了什么?这不是我们关注的重点啊,而是我们要从这条用力里面反推出来,我们一个标准的用力结构至少要包含几大要素。那从这我们可以看出来,我们这个标准用力结果至少要包含比如有用例标题,前提条件,用例步骤,预习结果和实际结果这五大要素,对吧?那这五大要素呢,大家可以看到少一个类型,这个原因是因为类型,呃,就是在整个的用力结果里面呢,它不属于一个,呃,它不属于一个必须要有的这样的一个元素啊,我有没有都可以。
02:23
好,那接下来我们再来看一下前面我们抗日这个功能用例,之后我们再来看一下自动化测试用例,那自动化测试用例呢,基本和我们的功呃功能测试用例这个结构是一致的,它也有用例标题,前提条件,用例步骤,预习结果,实际结果,它和这个功能用例里呃比起来呢,它还体现出来一点,就是它需要有一个这样的一个后置动作,OK, 我们再来看一下在自动化测试用力里面,嗯,它的对应的这一些要素,然后它对应的具体的内容是什么,以及它的作用是什么,首先我们先来看用例标题啊,用例标题是什么呢?哎,比如说我的这条用例,我所在的测试的package在哪儿,文件对应的是什么类,对应的是什么,方法名称对应的是什么,通过这几项啊,我们加起来就可以构成一个这个独一无二的一个用例标题,就是它的一个唯一标识嘛,那它的作用呢,就是我们用力的一个唯一标识,比如说我们在搜索用例的过程当中,哎,我们就可以通过。呃,这些要。
03:24
速给它搜索出来,然后还有前提条件,那在自动化测试用例里面的前提条件呢,它通常是会放在比如说在setup setup class这个是对应的,这个叫做part里面,它叫setup setup class, 那在只unit里面呢,它可能是叫before each before all对吧?好,那这一部分呢,就是它的一个前提条件,那这一部分它对应的一个作用啊,就是一个测试用例,测试用例执行前的一些准备动作,哎,比如说我们在执行自动化测试用例的时候啊,需要先进行数据的读取呀,或者啊进行一个driver初始化啊等等,然后第三个部分呢,就是我们用例的一个具体的一个步骤,那它对应的过来,对应我们自动化测试用例的一个模块呢,其实就是我们测试方法里面的代码逻辑,比如说套用在我们的接口自动化里面,它可能就是诶你调了哪一些接口对吧?那呃,套用在我们UI自动化里面呢,可能就是你在哪个页面,然后做了哪一些点击,做了哪一些输入对吧,那它作用。
04:24
蹭呢,就是我们其实和我们的功能测试是用,呃用力是一样的啊,就是我们这一整条测试用例,它对应具体的一个步骤行为有哪一些,然后接下来还有是什么呢?就是它的一个预习结果和实际结果,呃,在自动化测试里面呢,这个预习结果和实际结果啊,通常都是绑定在一起的,为什么?因为他要去写一个断言信息。那比如说它的一个assert,可能就是去判断实际结果是否等,是否等于等于,这写这应该再写一个等于等于啊,就是双等于号是否和这个预习结果相等,那它的一个作用呢,就是去印证我们的这个自动化测试用例是否执行成功,然后除了这些之外呢,还有我们的一个后置动作,比如说对应在我们part里面,就是tear down和tear down class, 然后在journal里面呢,就可能有after each after all等等啊,然后这个后置动作啊,通常呃,对应在自动化测试里面,它会做一些脏数据的清理啊,或者说呃,关闭一些进程啊等等的一系列的操作,那这个呢,其实就是我们自动化测试用例它的一个呃,通常来说的几大要素,也就是我们常说的一个标准结构,那大家可以看到,那其实自动化测试用力和我们的功能测试用例啊,基本上是如出一辙的,基本上是如出一辙的,没有什么太大的一个区别。
05:45
好,那这时候我们了解完这个自动化测试用例它的几大要素之后,用力标题前提条件,用力步骤断言,那我这时候说断言呢,就代表的是预习结果加实际结果的一个对比啊,我们叫做它断言,还有我们的一个后置动作,那这时候呢,哎,我们以一个真实的脚本来做一个分析啊,那这个真实的脚本呢,就是我们在上一节课使用idea去录制的这样的一个脚本,好,那我们来看一下,呃,它的一个代码对应的是什么?那这个脚本我当时录制的一个步骤呢,是首先先访问这个搜狗的一个首页啊,然后在搜狗输入框输入或过在测试开发,然后点击搜索按钮,那大家整个的这个idea录制这个过程我就不做演示了,我直接把它这个脚本扒下来,我们来看一下它这个脚本啊,是否符合哎,我们前面所说的自动化测试用例的几大要素,那首先呢,哎,它是不是有它独特的一个这个类名,然后它还有它独特的这。
06:46
这样的一个方法名,所以说我们的这个用例标题是不是就有了呀,我把这个几大要素直接这个放到我们的旁边来。
07:00
好,从刚刚我们可以看到啊,这个用例标题我们是有的,那接下来我们再来看一下它是否包含对应的一个前提条件,那我们来看啊,呃,我们常说的这个前提条件可能就是我们setup里面的一个内容。那在这个setup当中呢,我们就可以看到它做了一个driver的一个初始化,所以它的这个idea录制这个脚本呢,它也是包含我们的一个用力的一个前置动作的,那除了前提条件之外呢,它有没有体现出来我们的用力步骤,就是比如说我们这个测试用例里面具体的一些行为步骤,OK, 那它对应的呢,就是我们测试方法代码类的逻辑,我们来看一下这是它的一个测试方法,哎,是不是有打开网页,输入搜索信息,点击搜索等等的一系列步骤,这个也是有的啊,OK, 那这时候我们可以看到,那是否有预习结果呢?哎,我们这时候看一下预习结果和实际结果,也就是我们断言的一个体现,哎,我们发现是不是这个用力。
08:01
他还缺少我们的一个断言的一个信息啊好,那这个呢,后面我们会给他去做一个优化啊,我们继续往后看,来一个一个学习做验证,而这时候我们再来看,那它是否具有这个后置动作,诶我们发现啊,这个后置动作就是会做一些招耳进程的关闭啊,或者数据清理等等操作,我们来看录制出来的OK也是有的,那说明呢,我们现在这个idea录制这个脚本啊,它的整个的这个用力的元素是有的有,有的没有,那我们来看一下,在这个脚本基础之上啊,我们可以怎么样去对它进行优化,好那这时候呢,哎,回到我们的这个脚本这个页面啊,我就是刚刚把PPT这个脚本copy在这里,然后大家也可以跟我一样啊,直接copy我们PPT里面的脚本,好,那这时候我们先来运行一下这个脚本,看看能不能够成功的运行。好,我们发现能够成功的运行,对吧,那这时候我们会发现有这样的一个问题,就是啊,我们其实并不知道,就是它的呃,就是这个断言对吧,我们并呃,我不,我们并不能知道这条用例是执行成功还是执行失败,来我们先说一下问题。
09:10
问题无法确定。用力执行,成功或失败。那解决方案是什么呢?解决方案添加断言信息,好,那接下来我们来看一下我们应该如何去添加这样的一个断言信息,那这时候他是所做的一个操作呢,就是输入后过的测试开发,那我们要做的一个呃,这个判断呢,就是。判断搜索。列表中是否含有?嗯,这个。霍格沃兹测试开发好的,那这时候呢,我们进入到我们的那个搜狗的这样的一个页面。
10:04
我们就以这个全部为以这个为例啊,我们输入霍格沃兹测试开发。OK, 然后接下来我们要判断这个列表里面啊,是否有我们搜索的这个对应的一个关键字,对吧?好,那这时候我们来找一下啊,我们发现诶,好像是呃,正好呢,它有一个叫做em的这样的一个标签啊,然后我们就可以定位到它对应的一个关键字,好那这时候我们来怎么样去做判断呢?比如说我们来找第一条里面的所有的一个,呃,这个文本信息吧,我们来找一下它的一个A标签。好,我们直接尝试复制一下吧。Copy.Copy element.好,那这时候呢,哎,我们直接这个让这个results。Element就等于一个self.driver.element,然后我们这里使用的是一个,呃。
11:06
我刚忘记了我怎么copy的呀。Copy.我们在这儿应该是选择一个定位方法啊呃,具体的定位方法我们后面讲,大家只要跟着我操作行,比如说我们copy select.好,然后我们用CSS,大家前面先照猫画虎啊,我们后面会来去做详细的这样的一个讲解,好那这时候呢,我们怎么样拿到它一个文本信息呢。获取到定位。这个后面也都会给大家去做每一个详细讲解啊。我们先尝试把这个用力跑通。点。TXT, 好,这样子呢,我们就能够获取到这个定位的一个文本信息了,接下来呢,我们做一个断言,Assert.这个文本。是不是等于等于等于等于什么呢?
12:00
获得我资测试开发,OK, 那添加这个之后呢,我们在这就可以看到这个,呃,断言判断。实际获取到的。这个。搜索。展示的列表和预期的是否一致。我们给它换一个位置吧,前面是前面是这个实际结果,后面是我们的一个预期结果,相当于这个Rex element, 呃,element.txt是我们的实际结果,后面这不是我们的预期结果啊,OK, 现在让我们来执行一下这条用例。OK, 这时候我们发现执行成功了,对不对,那添加完成这一个完整的这样的一个用例之后呢,才能够代表,哎,我们的用例是完整的,那我们也可以测试一下,我们在后果资测试开发后面随便加点,那这时候它一定是找不到的啊,因为和它上面输入的内容是不一致的,这时候我们执行一下,看他会不会报错。
13:10
OK, 这时候我们发现啊,他报错了对吧?我们看一下报错信息是什么,OK, 报错信息说哎,他的一个预期结果是什么,霍格沃兹后面带了一串数字,那他实际获取到的是货不沃兹测试开发,那通过这样一个方式啊,我们就可以把我们的一个呃,最最简单的一个外部自动化测试用例写完整,那在这一章节啊,希望大家能够了解到的这样的一个信息是什么呢?就是我们的一个自动化测试用例结构,它应该有什么对吧?我们再复习一遍,首先要我们的用例标题,通过我们的包,呃,通过我们的文件名、类名,还有我们的方法名,包名在一起是我们用例的唯一标识。那第二个是什么呢?第二个是我们的一个前提条件,比如说driver的一些初始化对吧,那这个对应的就是我们的前提条件。
14:00
那还有我们这个,呃,测试用例的一个步骤。那这个对应在就是我们的测试方法里面的代码对吧。好,那还有除了测试用例步骤之外呢,还有比如说我们的一个实际结果和预期结果,就是我们这个断言里面的这样的一个内容,好,那除了这一部分之外还有什么呢?哎,是不是还有我们的一个后置动作啊,比如说退出driver的一个进程,那这个呢,是我们的一个后置动作,OK, 那这些呢,其实通常来说啊,就是一个自动化测试用例的一个标准的结构。
我来说两句