自动化测试框架设计-02框架设计基础
- 2022-01-11 09:00:00
- 虫师
- 转贴:
- 公众号
- 6439
假如我们决定要去开发一个测试框架,应该确定框架的定位,以及起一个名字,同时也应该知道版本命名规则。
框架是独立
我们应该把框架开发当成一个独立的项目来开发、维护、升级。
首先,应该为你的框架起一个独立的名字。可以以某个动物、植物命名,例如:python
蛇、lettuce
生菜。也可以按照框架的本意命名,例如 robot framework
自动化框架 、unittest
单元测试。也可以是缩写合成词,例如 pytest
= python
+ test
、 appium
= application
+ selenium
等。关键是简单好记,甚至随着框架的流程,可以赋予这个词新的含义。例如,程序员看到 python
第一个想到的是编程语言
,而不是蛇
。
其次,框架应该有自己的版本号。推荐使用GNU风格的版本号命名:
格式
主版本号.子版本号[.修正版本号[.编译版本号]]
主版本号:重构版本
子版本号:重大功能改进
修正版本号:小升级或者bug修复
编译版本号: 一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为的控制。
最后,框架应该独立的安装,在Python中,需要创建setup.py
安装文件,提交到pypi.org
仓库。通常使用pip
命令进行安装。
框架实现通用的功能
作为一款框架,他应该解决的是一类问题。以自动化测试框架为例,如何定义用例、测试运行器、断言类型、测试报告格式、数据驱动设计等问题。
Robot Framework就是一款非常优秀的自动化测试框架。他独立完成了一款自动化测试框架的所有基础功能,并在此基础上设计自己的DSL(domain-specific language 领域特定语言),以及独立的IDE - Robot Framework-ride,建议读者能够学习和研究他。
相反,他不应该是解决具体的问题,例如封装一个登录,有些系统是用户名+密码登录、有些是手机号+验证码登录,有些是第三方帐号登录,而且,验证码也各式各样。这个问题应该在自动化测试项目中根据具体功能去做封装,不应该有框架层面去解决。
框架设计应该有清晰的目标定位
不管是框架或库被设计的初衷一定为了更好的解决某一类问题。在设计之初,我们应该定位好目标。
从无到有的解决一类问题
SUnit 在单元测试框架领域具有开创性意义,接下来是关于他的一段wikipedia
介绍。
xUnit是几个单元测试框架的集合名称,它们的结构和功能都源自Smalltalk的
SUnit
。SUnit是Kent Beck在1998年设计的,它是用一种高度结构化的面向对象风格编写的,这种风格很容易适用于Java和C#等当代语言。在Smalltalk中引入该框架之后,Kent Beck和Erich Gamma将其移植到Java,并获得了广泛的普及,最终在当前使用的大多数编程语言中获得了支持。其中许多框架的名称是SUnit
的变体,通常替换S
。例如Java 语言的JUnit
, Python语言的unittest
等。
更加简单的解决一类问题
Flask是一个使用Python编写的轻量级Web应用框架,以其简洁API,可以通过简单的几行代码搭建一个Web服务。至于后来出现的Sanic、fastapi等框架都参考了Flask的设计风格。
Flask代码:
from flask import Flask
app = Flask(__name__) @app.route("/") def hello_world(): return "<p>Hello, World!</p>"
提供更加强大且丰富的功能
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。
Django虽然学习成本比较高,但他自带的有 ORM(关系对象映射)、Admin管理系统、模板系统、Cache系统、表单处理、会话(session)、国际化等,当你完成一个稍微复杂一点的系统的时候,他所提供的这些功能几乎是开箱即用的。
当然,一款优秀的框架可能同时具备以上所有特点。
本文把设计一款自动化测试框架应该剧本的基础知识做了简单介绍。设计一款框架并非易事,尤其是一款能够被大众认可并使用的框架,他一定在易用性设计、功能、代码可靠性、使用文档上面比较完备,同时对作者的编程能力和素养也有一定的要求。希望我们能对框架设计保持一点敬畏之心。
- 联系人:阿道
- 联系方式:17762006160
- 地址:青岛市黄岛区长江西路118号青铁广场18楼