首页 / 知识
Python在自动化测试系统中的应用
2023-11-12 13:35:00
自动化测试系统在敏捷开发、持续集成和持续交付中起着非常重要的作用。它对加快新功能发布,缩短现场问题解决时间,提升用户感受度,乃至提高企业竞争力都至关重要。本文结合笔者在自动化测试系统建设中的实践,具体描述了利用Python语言设计完成的基于机器人框架,关键字驱动的案例。最后指出了这套系统进一步改进的方向。
1自动化测试系统实现简介
笔者参与开发的自动化测试系统,和编译服务器关联,由系统扫描侦测,实现基于某种策略的版本自动下载(最大频度测试,最相关版本测试,如包含本测试组发现的软件缺陷版本优先,或指定版本测试等),然后分发到相应设备,进行版本升级安装,触发测试用例的运行,生成测试报告,发送邮件给项目干系人,更新测试记录等。
自动化测试系统,能实现在第一时间触发测试,能更频繁地测试各个版本,能运行更多、更繁琐的测试,进而在缺陷出現时及时发现,帮助开发团队缩小缺陷出现的代码范围,便于定位问题,解决问题,这为敏捷开发持续集成,持续发布提供了强有力的支撑。
自动化测试系统,基于机器人框架(robotFramework,RF),RF有丰富的库,使用关键字驱动技术,可以实现循环,选择等逻辑,测试用例中支持变量的使用,测试人员可以创建自己需要的关键字,具有很大的灵活性和可扩展性,可以实现定制的复杂或特殊的功能。ride是RF的编辑工具,测试用例可以用表格输入,使得测试人员以类似于自然语言的方式(关键字)来描述测试用例,即使没有编程基础的测试人员也容易上手,而RF会将关键字转化为测试动作(底层即Python类方法,函数的调用)。
Python是一种面向对象、解释型、跨平台的高级程序设计语言,可以应用于自动化测试,数据分析等众多领域,Python用代码缩进来代替花括号,表示语句块逻辑层次,既使得源程序风格接近,又提高了可读性;Python的类库齐全并且产出率高,实现相同的功能,Python比很多其他语言代码量少,这意味着易维护,出现问题的概率也下降。RF就是一种基于Python的可扩展关键字驱动的通用自动化测试框架。
2Python语言在自动化测试系统中的应用
利用RF编写定制的测试用例,需要开发自己的关键字,编写自定义python库。下文通过一个实例来介绍这个过程。
首先,在python安装目录c:\Python27\Lib\site-packages\下新建一个文件夹NewUE,文件夹名就是库名,然后,在该文件夹内创建一个python文件ueclass.py,代码中定义一个UEClass类,类中定义了一个ue1Behavior方法,该方法即RF中的新关键字。
在NewUE文件夹内再创建文件名__init__.py文件,RF通过这个初始化文件获取新关键字类。它的类名和库名相同,括号里的类是ueclass.py中定义的类:
fromueclassimportUEClass
classNewUE(UEClass):
ROBOT_LIBRARY_SCOPE='GLOBAL'
自定义的NewUE库就创建好了,在RF的编辑器ride中导入这个库,然后即可使用新创建的关键字。如果要新增关键字ue2Behavior,只要在UEClass类中增加名为ue2Behavior的方法即可。
导入新库,若库名显示为黑色,表明导入成功,若红色则表明导入失败。可以通过在一个python文件中importNewUE来调试,通常可以根据出错消息提示框,排除源文件中的错误。修正错误后,把原来的*.pyc全删除,运行如下命令编译,然后重新导入:
python-mcompileallueclass.py
python-mcompileall__init__.py
自动化测试系统的理想目标是全自动,在策略和任务定义好后,免予人工干预。为达到这一目标,需要实现RF和其他系统的配合。下文介绍在这套系统中开发的三个重要模块:下载,定制测试报告,邮件分发模块。
编译随时可能完成,系统需要有自动下载功能(关键字Auto_DL)以免浪费时间,基本的过程如下,首先系统处于空闲状态,即还未开始测试或上次测试任务已完成,Auto_DL会定时登录到指定服务器,检测是否有新版本编译完成,并判断该版本是否可用:按上文提及的某种特定的策略选择新版本,判断该版本是否符合自动化测试的最低要求,例如已通过冒烟测试,通过则可下载该版本,退出Auto_DL,触发下一个环节,升级安装该版本。这个过程循环往复,以达到尽快测试符合策略的版本或尽可能多地测试各种版本等目的.本系统用Python自带的标准模块urllib2,re实现新版本侦测和判断是否为可用版本,发送HTTPrequest,在获取的返回信息中,利用正则表达式标准模块re中的搜索函数findall和符合指定特征的正则表达式判断是否需要下载新版本;用Python自带的标准模块ftplib实现文件下载,直接导入ftplib,生成一个FTP对象,连接到ftp服务器,以写模式在本地打开接收文件,接收服务器上的文件并写入本地文件,最后关闭文件,完成下载工作。
下载完成后,系统自动安装并执行测试用例。RF能产生测试报告,但是无法定制测试报告,新开发的定制测试报告模块就是根据测试管理团队的特殊要求,提供符合需求的报告,可以包括测试团队名字,测试时间,测试环境的硬件配置,软件版本信息,测试用例运行结果汇总情况,是否更新测试记录或需要进一步分析等。测试结果由网页和附件的形式发送给指定接收人。同时,除了测试结果文件,还提供超链接,可以查看测试日志等,特别是当测试用例失败后,测试人员可以进一步分析日志,确定是哪个领域出现了软件缺陷,对应的开发人员也可以根据日志,修正软件缺陷,提供新版本给测试人员再次验证。
定制报告生成后,需要发送测试结果,邮件发送模块利用Python自带的标准库,smtplib,configparser,email等。为把数据和业务逻辑分离,通常把邮件服务器地址,用户名,密码,发件人等写入配置文件,在主程序中这些信息由configparser来解析,可以把主机名传递给SMTP构造函数,然后用smtplib.SMTP()创建一个smtp对象,用smtp.login()进行登录操作,最后用smtp.sendmail()發送邮件,用smtp.quit()方法关闭连接。
Sendmail(sender,recipients,message)方法可用于发送电子邮件,参数Sender,recipients分别是邮件发送者和接收者地址列表,从配置文件中读取,参数Message是一个长字符串格式的消息,本模块中将网页形式的测试报告解析后作为邮件正文发送给接收方。创建MIMEMultipart对象,获取邮件主题等信息,创建MIMEText对象,读取网页文件内容,再用MIMEMultipart对象的attach,把网页文件内容包含到MIMEMultipart对象中。Sendmail()方法最终完成邮件发送。
改进方向:
本测试系统主要是回归测试,不可能完全取代手工测试,有些情况下不适合自动化测试,例如探索性测试,软件版本很不稳定,测试仪表未提供脚本控制接口等。产品新的功能开发完成后,一般先经手工测试,所以通常自动测试比手工测试发现的缺陷要少些,但由于RF的可扩展性,我们可以方便地将新测试用例加入到自动化测试系统里来,不断提高该系统的测试覆盖率。
另一方面,可以进一步提高自动化测试系统的智能,实现对日志文件的分析。测试专家了解预期测试结果,熟悉日志和缺陷的映射关系,根据日志可推断可能的错误分支,出错模块等。本系统拟增加日志分析模块,用于替代人工判断,利用Python强大的文本分析和正则表达式搜索功能,结合业务知识及测试专家的经验,对失败的测试用例日志进行分析,由系统给出日志分析结果。
3结论
本测试系统主要用于发现已知的缺陷,确保新功能加入后原有功能不受影响。同时,由于自动化系统很方便进行相同测试用例的大量重复,进而可能发现手工测试不易检出的偶发问题。
由于新关键字易于扩展,随着产品功能的不断增加,测试用例集合也可以不断地扩充。由于RF的可扩充性,可以在自动化测试系统中增加新的模块,进一步提高系统的智能,大大提高测试效率并降低测试工程师重复劳动的强度。测试人员把精力放在深入理解业务逻辑,设计新测试用例,再把新用例应用于自动化测试系统中,进而形成测试工作的良性循环。
以上内容为大家介绍了Python在自动化测试系统中的应用,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们
最新内容
相关内容
python的单元测试框架
python的单元测试框架,代码,生态,信息,标准,测试,分析,工具,环境,条款,活跃,1、AutotestAutotest是Google、Redhat、IBM公司联合开发的分布式为什么开发人员喜欢在机器学习和人
为什么开发人员喜欢在机器学习和人工智能项目中使用Python?,代码,项目,数据,人工智能,平台,异常,增长,灵活,时间,工具,1.Python是灵活的PythoPython 3.6 中针对文件系统的神奇
Python 3.6 中针对文件系统的神奇方法,数字,代码,数据,标准,信息,培训,首次,工作,文件名,常数,Python3.6首次发布于2016年,尽管它已经发布了很为何你的Python代码应是扁平与稀疏
为何你的Python代码应是扁平与稀疏的,代码,培训,信息,观察,设计,工具,嵌套,闻闻,程序员,沉思,Python之禅之所以得名,正是由于它那简明扼要的规如何提速优化python代码?
如何提速优化python代码?,代码,时间,数据,新增,写法,包装,情况,下来,面临,工作,Python是一种脚本语言,相比C/C++这样的编译语言,在效率和性能方提升Python数据分析能力的方法
提升Python数据分析能力的方法,分析,数据,工具,代码,时间,环境,报告,信息,培训,标准,1.Pandas分析包这个工具的好处是显而易见的。下面的动画Python数据结构的时间复杂性
Python数据结构的时间复杂性,时间,项目,情况,平均,复杂度,培训,术语,数据,状态,操作,1.让我们了解大O符号的含义是什么?在算法中执行许多操作Python标准库之collections模块
Python标准库之collections模块,名字,标准,信息,电话号码,培训,工厂,位置,简介,异常,对象,collections模块简介collections是Python标准库里Web开发人员推荐的Python框架
Web开发人员推荐的Python框架,系统,公司,灵活,时间,项目,软件,框架,认证,管理,异常,您可以在没有框架的情况下创建出色的应用程序。如果您正Python集合和时间复杂度
Python集合和时间复杂度,项目,时间,数据,数字,照片,情况,通用,培训,平均,表示,在本文的这一部分中,我将记录CPython中的常见集合,然后概述它们Python 中如何实现参数化测试?
Python 中如何实现参数化测试?,密码,数据,测试,业务,情况,预期,培训,系统,参数,方法,之前,我曾转过一个单元测试框架系列的文章,里面介绍了unit如何让Python代码更易维护
如何让Python代码更易维护,代码,项目,标准,工具,质量,地方,一致,更正,培训,控制权,检查你的代码的质量,通过这些外部库使其更易维护。可读性很