随着软件规模的日益庞大,对软件测试也提出了更高的要求,当软件经过前期的单元测试,集成测试,系统测试后,已经达到了一个相对稳定的版本后,我们就可以考虑引入自动化测试,这对于后续bug修复,软件细微改动后的回归测试尤为重要,不仅可以节约人力成本,更重要的可以大大缩短软件发布的周期。
如何选择一款自动化测试框架,对于每个测试负责人来说,都具有一定的挑战,首先自动化测试框架没有万能的,不是任何一款自动化测试框架都可以直接引入到项目中,也不是流行的或者优秀的自动化测试框架就一定适合当前的项目。
我们可以从以下几个维度去选择一款适合项目的自动化测试框架。
项目的技术类型
自动化测试框架必须适应当前项目的技术类型,如,web UI,web Service,desktop应用程序,移动应用程序, 嵌入式应用程序。
项目测试需求
引入自动化测试框架是为了完成哪方面的测试需求,比如功能测试,系统测试,性能测试,可靠性测试。
测试人员代码能力
作为自动化测试人员,首先还是应该具有一定的代码能力,虽然现在有一些自动化测试工具可以通过录制,或者通过一些简单参数配置来实现自动化用例的编写,但这种框架灵活性就大大的降低,也不利于更深层次的开发自动化用例,比如做一些逻辑性层面的处理。
不同的自动化测试框架特点分析
分析每种自动化测试框架的优劣性,选中一种自动化框架擅长领域正是我们需要的,那最好不过了。
测试框架的扩展能力
因为每个项目的具有不同的特点,所以我们很难去找到一款完全满足需求的测试框架,因此测试框架的扩张能力就显得尤为重要,选择一款具有一定扩展能力的框架,在框架不能很好的满足项目需求的时候,我们可以主动去做一些修改。
测试框架的成熟度
测试框架在满足当前项目测试需求的情况,优选那些相对成熟,稳定的,这样在项目实施过程中遇到问题,也能及时找到解决方案。
常见的自动化测试框架及特点:
RobotFramework
基于Python的可扩展关键字驱动的自动化框架,用于接受测试,接受测试驱动开发(ATDD),行为驱动开发(BDD)和机器人流程自动化(RPA)。它可用于分布式,异构环境,在这些环境中,自动化需要使用不同的技术和接口。
启用易于使用的表格语法,以统一的方式创建测试用例;
提供从现有关键字创建可重用的高级关键字的功能;
提供易于阅读的结果报告和HTML格式的日志;
是平台和应用程序独立的;
提供了一个简单的库API,用于创建自定义的测试库,该库可以使用Python或Java本地实现;
提供命令行界面和基于XML的输出文件, 以集成到现有的构建基础结构(连续集成系统)中;
提供对Selenium的支持,以进行Web测试,Java GUI测试,正在运行的进程,Telnet,SSH等;
支持创建数据驱动的测试用例;
具有对变量的内置支持,特别适用于在不同环境中进行测试;
提供标记以分类和选择要执行的测试用例;
支持与源代码控制的轻松集成:测试套件只是可以使用生产代码进行版本控制的文件和目录;
提供测试用例和测试套件级别的设置和拆卸;
模块化体系结构甚至支持为具有多个不同接口的应用程序创建测试。
AutoTest Studio
基于Python的可扩展的通用自动化测试框架,直接使用python编写测试用例,继承了python语言的优雅和灵活性,借助于python社区提供的大量丰富的python包,使得该框架可以应用于多种复杂的测试场景,
官网:https://www.autoteststudio.com
提供一个强大的自动化测试用例集成开发环境,可以完成代码补全,代码格式化,python debug等操作;
高性能的数据字典管理器,可以轻松管理上百万条数据;
框架拥有一个可视化的python包管理器,可以轻松的管理项目中的python包;
支持创建python虚拟环境,可以将同一台电脑上的不同项目的python运行环境完全隔离;
灵活的任务调度引擎提供了多种细粒度控制,如超时终止用例执行,失败后重试,运行失败用例等;
框架提供了断言,日志,数据字典等通用API;
提供命令行调用,可以灵活的集成到现有的CI/CI系统中;
提供html格式测试报告和日志文件,如果需要,你还可以将报告发送到指定邮箱。
TestNG
TestNG是基于Java的一个自动化测试框架,拥有完善的用例管理模块,配合Maven能够很方便管理依赖第三方插件。使用TestNG可以做功能、接口、单元、集成的自动化测试。
在具有各种可用策略的任意大线程池中运行测试(所有方法都在各自的线程中,每个测试类一个线程,等等)。
测试您的代码是多线程安全的;
灵活的测试配置;
支持数据驱动的测试(使用@DataProvider);
支持参数;
强大的执行模型(不再需要TestSuite);
由各种工具和插件(Eclipse,IDEA,Maven等)支持;
嵌入BeanShell以获得更高的灵活性;
用于运行时和日志记录的默认JDK函数(无依赖项);
应用程序服务器测试的相关方法。
Unittest
Python内置单元测试框架,该试框架最初是由JUnit的启发,也有类似的味道在其他语言主要单元测试框架。它支持测试自动化,共享测试的设置和关闭代码,将测试聚合到集合中以及测试与报告框架的独立性。
官网:https://docs.python.org/3/library/unittest.html#module-unittest
Python语言编写测试用例;
基于TestSuite测试用例组织结构;
支持命令行启动,可以于CI/CD系统集成;
以html格式输出测试报告和测试日志。
Pytest
基于python的轻量级自动化测试框架,该pytest框架使编写小型测试变得容易,但可以扩展以支持针对应用程序和库的复杂功能测试。
官网:https://docs.pytest.org/en/6.2.x/
简单灵活,容易上手,文档丰富;
支持参数化,可以细粒度地控制要测试的测试用例;
自动发现测试模块和功能;
测试用例的skip和xfail处理;
可以很好的和CI工具结合,例如jenkins;
丰富的插件架构,拥有超过315个以上的外部插件和繁荣的社区。
总结了一些常用的自动化测试方案,供参考。
Web UI
AutoTest Studio + Selenium
Robot Framework + Selenium
TestNG+Selenium
Web Service
Postman
AutoTest Studio + requests
Robot Framework + requests
App
AutoTest Studio + Appium
Robot Framework + Appium
桌面应用
Robot Framework + pywinauto
AutoTest Studio + pywinauto
总之,自动化测试框架没有最好的,只有最适合的,主要还是取决于项目的测试需求及系统的特点。