自动化测试的流程和功能测试其实挺相似的,整个流程也是按照需求分析及测试计划阶段、测试设计阶段、测试执行和测试总结阶段,总结下来就是下面一张图,ppt中纯手绘,效果不好,大家见谅:
![](https://i-blog.csdnimg.cn/blog_migrate/ca651dbe2b6412f55bc5b88ae8a94e6a.png)
一、测试需求分析及计划阶段
自动化测试是要在手工测试之后进行的,也就是回归测试阶段,这时候其实是已经具备完善的功能测试用例啦,并且经过前期功能测试,系统版本也已经比较稳定啦,这就具备了自动化测试的必要条件,下面需要完成几个小任务:
1、抽样分析项目自动化测试的可行性
在进行项目自动化测试之前,第一步就是要确认其可行性,是否可以实行测试自动化。如果项目时间紧迫、项目周期短、项目需求变幻无常则建议和上级领导商议,不要开展自动化测试。想要开展自动化测试,还是应该遵循以下几个前提条件:
软件需求变动不频繁
项目周期足够长
自动化测试脚本可重复使用
通过可行性分析后,接下来需要做一个demo ,使用选定的框架尝试识别页面元素,运行简易脚本,如果没问题,即可采用该框架对该项目进行自动化测试,常见的需要的验证的环境有:
WEB端的自动化测试采用python+selenium+unittest框架是否可行?
App端自动化测试采用python+Appium+Junit框架是否可行?
https://www.bilibili.com/video/BV1hq4y1K75i/?spm_id_from=333.999.0.0
![](https://i-blog.csdnimg.cn/blog_migrate/19df2fb3fbd90879328eca3eb2e1ab80.png)
2、测试需求分析
对系统的功能需求进行再次梳理,划分出可以进行自动化测试的需求,划分的标准一般是简单、重复性高、业务复杂度低的需求,这样便于我们快速地实现一个版本,从而建立推进自动化的信心。相反,选择了业务复杂的需求,则会花费大量的时间在脚本制作上,并且各种异常情况的处理,会严重打击我们推进自动化测试的积极性和信心,最后也就丧失了我们做自动化的初衷(自动化测试是不需要也没有必要做到 100%覆盖率的)。所以,在测试需求分析这个阶段,确定测试覆盖率以及自动化测试粒度、测试用例上的筛选等都是重点工作。
![](https://i-blog.csdnimg.cn/blog_migrate/139cb38ff4ca8f5a8c4f37bebd34faeb.png)
3、制定测试计划
理想情况下,测试始于测试目标和测试策略的建立,测试策略应满足测试目标的要求。管理层的测试计划包括评估完成所有测试活动的时间,测试活动安排及资源分配,控制测试过程以及跟踪整个测试过程所需采取的活动,这些高层次活动应该在项目开始前就实施,并贯穿项目的整个开发过程。
![](https://i-blog.csdnimg.cn/blog_migrate/dc7326f3df1b4cb91f9630c7abe1c979.png)
测试计划是测试过程中最重要的活动,包括如下活动:
准入准出原则,确定什么时候可以开展自动化,达到什么标准,自动化项目可以结束
测试范围,鉴别和确定测试需求的优先级
进度安排,在什么时间交付什么成果
人员安排,根据团队成员情况,技术好的复杂脚本实现;业务能力强的进行功能步骤拆解等
风险评估,对项目过程中的风险进行预估
二、测试设计、开发阶段
本阶段主要的工作是测试用例的设计及脚本开发,一般情况下,我们是先进行测试用例的设计,在通过评定之后,保证测试用例已经覆盖了需求之后,再进行测试脚本的开发,这种方式是经过实践验证的,最为理想的做法。
1、测试用例设计
前面已经提到过,自动化测试用例不必从0开始,是完全可以从功能测试用例,通过筛选、简单修改就可以直接拿来用的,主要步骤为:
筛选功能测试用例
将其转化为自动化用例模板
补充、修改不适于自动化的用例
持续维护和优化自动化用例
筛选功能测试用例的标准参考如下:
不是所有的手工测试用例都要转为自动化测试用例
考虑到脚本开发的成本,不要选择流程太复杂的用例
选择的用例最好可以构建成场景
选取的用例可以是你认为是重复执行,很繁琐的部分
选取的用例可以是主体流程,这部分适用于冒烟测试
在设计(补充、修改)自动化测试用例过程需要遵循的原则:
一个用例为一个完整的场景,从用户登录系统到最终退出并关闭浏览器
一个用例只验证一个功能点,不要试图在用户登录后把所有的功能都验证一遍
尽可能少的编写逆向测试用例。
用例和用例之间尽量避免产生依赖
一条用例完成测试之后需要对测试场景进行还原,以免影响其它用例的执行
![](https://i-blog.csdnimg.cn/blog_migrate/a8fda0169ff6aad532e1eebacdf9950b.png)
2、测试脚本开发
测试脚本开发包括创建具有可维护性、可重用性、简单性、健壮性的测试程序。同时要注意确保自动测试开发的结构化和一致性。根据已经开发好的测试用例,编写各个功能点的自动化测试脚本,并添加检查点,进行参数化。该过程还需要编写数据文件处理脚本、日志文件处理脚本、数据库处理脚本、公共检查点处理脚本等。
在脚本开发中,常见的模型有:
线性模型:是我们开发脚本的基础
模块化驱动测试:需要将一些功能模块独立出来,便于维护和调用
数据驱动:看作者文章末尾
为了更好地团队合作进行自动化测试,我们需要对项目进行分层管理,可以根据需要划分公共模块部分、测试用例、测试数据、测试报告、测试日志等,并提供执行主模块。
![](https://i-blog.csdnimg.cn/blog_migrate/cd07e204863dcee149b83e6055b5a64d.png)
其中公共模块可以包括:日志模块,邮件发送模块,公共登录、退出模块、数据库操作模块等,主要是便于测试用例中调用。
执行主模块主要负责所有测试用例调度的,可以参考如下代码:
import unittest
import time
from HTMLTestRunner import HTMLTestRunner
from public.mailsend1 import mailsend
from public.Loginmodel import verylogin,veryLogout
import os
if __name__=='__main__':
path1 = os.path.dirname(__file__)+r"/test_cases/"
path2 = os.path.dirname(__file__)+r"/test_report/"
send = mailsend()
discover = unittest.defaultTestLoader.discover(path1,pattern='veryReg*.py')
filename1 = time.strftime("%Y-%m-%d-%H-%M-%S")
filename2 = filename1+r'.html'
filename = path2+filename2
with open(filename,'wb') as f:
runner = HTMLTestRunner(stream=f,title='测试结果',description='第一轮测试结果')
runner.run(discover)
time.sleep(3)
send.sendFujian(filename1)
最后为了生产一个可视化报告,我们可以选择二次开发的HTML格式报告,具体的使用:
一、HTMLTestRunner模块的使用
HTMLTestRunner是python标准库unittest单元测试框架的一个扩展,它生成易于使用的HTML测试报告。
在测试用例执行文件中,使用HTMLTestRunner运行运行测试集,按照指定的参数,结果文件会一HTML格式展示出来。
![](https://i-blog.csdnimg.cn/blog_migrate/d053a0fa2478330710697146798fba7f.png)
下图即为生成的HTML格式的报告
![](https://i-blog.csdnimg.cn/blog_migrate/eadf58930f47e175a8fef24531d40abe.png)
二、BeautifulReport模块的使用:
该模块除了可以提供HTML格式的可视化报告外,还可以在报告中附带异常用例的截图附件,在一定层度提高了报告的可读性,本文使用的BeautifulReport 为0.1.3。
使用步骤:
1、导包: from BeautifulReport import BeautifulReport
在类中创建save_img()方法
![](https://i-blog.csdnimg.cn/blog_migrate/c9c6a6c5d33da5cf4878257631a39efd.png)
3、在测试用例加修饰器,如果该条测试用例断言失败,则会截图保存在save_img方法指定的位置;也可以在用例任意位置调用save_img方法保存截图,注意修饰器中的参数可以是用例方法名,也可以是类名_方法名。
![](https://i-blog.csdnimg.cn/blog_migrate/f4b7e8a71b11a39b780427dd38df152f.png)
4、使用BeautifulReport运行测试集
![](https://i-blog.csdnimg.cn/blog_migrate/1131315923e71df9894336c6fcacc65c.png)
查看生成的可视化报告,如果想在报告中带截图附件,需要把图片保存在特定的img文件夹下(vscode的工程目录下:“./img/”),其他位置可以保存图片,但在报告中不能显示。
![](https://i-blog.csdnimg.cn/blog_migrate/21a1c8954f5f02f443df95ff31bcc115.png)
三、测试执行阶段
随着测试计划的建立和测试环境的搭建完毕,按照测试程序进度安排执行测试,可以通过手动或自动或半手动半自动方式执行,它们各自可以发现不同类型的错误。测试执行结束后,需要对测试结果进行比较、分析以及结果验证,得出测试报告(包括总结性报告和详细报告)。
如果脚本已经稳定,可以采用Jenkins工具进行持续集成,最终实现无人值守测试,集成方式
四、测试总结阶段
对测试结果文件中报告错误的记录进行分析,如果确实是由于被测系统的缺陷导致,则提交缺陷报告。对自动化测试的结果进行总结,分析系统存在的问题,并提交《测试报告》。
五、总结一下
自动化测试的局限性
![](https://i-blog.csdnimg.cn/blog_migrate/d46bc56458e12fdb7e01624347579c54.png)
对于自动化测试来说,不同的层次有不同的效率,项目中需要慎重考虑选择,按照测试金字塔模型以及投入/产出比,越向下,回报率越高。
单元自动化测试(数据处理层):指对软件中最小的可测试单元进行检查和验证,一般需要借助单元测试框架,如java的Junit、TestNG,python的unittest、pytest;
接口自动化测试(业务逻辑层):主要检查验证模块间的调用返回以及不同系统、服务间的数据交换,常见的接口测试工具有postman、jmeter、loadrunner等;
UI自动化测试(GUI界面层):UI层是用户使用产品的入口,所有功能通过这一层提供给用户,测试工作大多集中在这一层,常见的测试工具有UFT、Robot Framework、Selenium、Appium等;
以自动化测试行业领军者Google的自动化测试投入,不难看出那个梗有钱图:
小测试(Unit):占比70%;
中测试(Service):占比20%;
大测试(UI):占比10%;
![](https://i-blog.csdnimg.cn/blog_migrate/a7865671ca6137708163d1fa7c98132d.png)
自动化测试面临的最大挑战就是变化,因为变化会导致测试用例运行失败,所以需要对自动化脚本不断debug,如何控制成本、降低成本是对自动化测试工具以及人员能力的挑战。
2、如何推进实施自动化测试
自动化测试是现在企业中级测试工程师所要求的基本技能,如果想在软件测试行业具备核心竞争力,就需要在这方面下点功夫,希望对面试自动化测试工程师的同学提供面试时候的思路。对于在职的朋友,提供推进自己项目的自动化测试的方法。
作者还写过一篇如何提高团队中推行自动化测试成功率的文章,希望对已经具备自动化测试经验的朋友有所帮助:
总结:在测试行业摸爬滚打也有十几年了,在学习的途中也是收藏了很多的学习资源,下面是软件测试到测试开发全职业生涯全套学习资料
【需要的可以点击下方官方推广小卡片扫码备注000免费领取】
![](https://i-blog.csdnimg.cn/blog_migrate/31bfe65c060172dbcc137f9c7c08cdf9.png)