我们今天主讲的内容,就是测试框架Pytest,讲到这个测试框架对于没有做过Web自动化的伙伴来说,会觉得这个东西是陌生的,那么到底什么是框架呢?什么又是自动化呢?自动化为什么又要用框架呢?
难道我学自动化我不就是学一个Python+Selenium或者+Appium就可以了吗?
那这个框架它的作用是什么?
在这个过程中间呢,先跟大家来讲一下自动化测试,
所谓的自动化测试,你可以理解为它其实跟功能测试流程是一样的,比如说我们做功能测试的话呢,你需要去干什么?
你需要去分析需求。
功能测试:分析需求==》用例的设计==》手工执行测试用例==》Bug的提交==》测试报告
我们做功能测试首先要去分析需求,然后要去进行用例的设计,再有的话手工去执行用例,然后呢也要去进行Bug的一个提交,如果碰到Bug我们就要去提交Bug,提交完Bug之后,一个版本或者一个阶段测试完之后我们就要去出具测试报告。基本上对于我们功能测试来说就是这样子的一个环节流程。
自动化测试(分析需求==》设计自动化用例控==》代码(工具)执行用例)==》测试报告
其实自动化测试它也是这样子的一个环节流程,首先同样我们也会去分析需求,但是这个分析需求的话呢,它是指你对整个项目业务的需求,以及流程的需求。我要确定在这个项目中间哪一些业务、流程可以用自动化来实现,哪些是不能实现,能实现的用自动化来做,不能实现的就用手工来做。所以第一个阶段我们都是做需求的分析,然后在这一块你确定需求后需要设计自动化测试用例,在这个里面,我们说什么是自动化呢?
也就是说我们用代码或者用工具的形式代替人工来执行这个用例的过程,那么它就是自动化测试。
因为在功能测试工作中间,原本我们是通过手工的方式去点点点,点击输入以及一些其他的操作,只是在自动化环节是用代码或者工具方法进行替代。
代码工具怎么去进行执行,怎么样来进行判断,怎么进行测试报告的提交,那么这一些东西我们统统把它写在代码中间,因为在这个过程中间,既然你写了这么多测试用例,代码去实现的时候我们也会要去覆盖到自动化测试用例,从而进行实现。后面也是出具测试报告,只是这个测试报告不需要你人工去进行统计。
比如我人工去进行统计,一共多少个Bug,A类是多少,B类是多少,C类是多少,测试结果是通过还是不通过,这个是我们做功能测试时候会以这个方式去进行统计,进行衡量。
但是做自动化测试的时候呢,我们也可以通过代码的形式,让它生成指定的测试报告,中间会给你自动去统计有多少条用例是成功的有多少条测试用例是失败(出错的)
所以在这一块功能和自动化流程,最大的不同在是在代码(工具)执行用例这一个环节
那如果我们要用代码或者工具的方式,去覆盖或者说完成所有的自动化测试用例,我们怎么样去做?
难道都是用线性流程的方式来做吗?
线性流程:打开浏览器—进入登录界面—输入用户名—输入密码—点击登录
登录
1:正确的用户名Admin,正确的密码-123456 ==》结果==》写到测试报告中去
2:错误的用户名User,错误的密码-1234567890
3……
无论是你的第一条还是第二条用例,它做的都是前面的这样子一个线性流程,它们之间最大的差别是什么?-
最大的差别就是数据不同:
比如说正确的用户名Admin - 123456
错误的我就来一个User,密码匹配123456
再或者正确的用户名Admin,匹配一个错误的密码1234567890
所以在这里我们就要考虑,如何最大化的去重复使用脚本,只要通过不同的数据进行实现就OK,并且每一条用例它执行完成之后,会自动化的给你去生成对应的结果,写到我们的测试报告中间去。因为我们最终是通过测试报告中间的结果来判断你这个自动化测试是通过还是不通过。
因此在这样的情况下,如何来解决这一种用例覆盖的一个问题,因此这不得不跟大家讲一下,我们要解决用例的覆盖,就是用我们的
单元测试框架
比如说我们常见的
Java——junit
Python——unittest / Pytest
这些框架就是来规范自动化测试用例的覆盖,以及最大的程度去复用脚本。
在这个过程中间,单元测试框架作用不仅仅可以用于我们自动化测试过程中间,它还可以用作单元阶段的白盒测试,这是说这部分的工作我们测试工程师接触得不多,因为在企业中间,大部分白盒测试都会由开发来做。只是说如果你掌握这个东西的话,我们除了可以把它用在自动化层面,也可以用在单元白盒测试阶段。
那今天要和大家讲到的就是Pytest。
unittest / Pytest有什么区别?
我们简单的来阐述一下,
第一个他们两者的共同点就是说都是主流的单元测试框架
有些小伙伴比如他只会其中一种,比如说你会Pytest但不会用Unittest。
其实这也是一个面试题:你为什么用这一个不用另外一个,unittest / Pytest有什么区别?
在我们的学习过程中,既然这两个都是主流,基本上两个框架我们都必须要知道。
Unittest是Python自带的一个单元测试框架,而Pytest是一个第三方框架,这个是两者之间第一个区别。
自带框架和第三方的框架区别?
自带的不需要安装,可以直接使用,第三方你首先就得去安装。
第二个区别,Unittest的功能其实是没有Pytest那么强大的,因为Pytest它有很多的一些插件,并且全局性非常好。
第三个区别,Pytest的实现会比Unittest更为简洁,更轻便。
所以在企业中间我们去进行自动化框架搭建的时候,其实会选择Pytest会多于Unittest。
但是Unittest对于初学者入门,也是非常好的一个框架。