其他测试框架 你真的会开发测试框架?

虫师 for Klook测试团队 · 2019年09月29日 · 最后由 膨化先生 回复于 2019年10月02日 · 3197 次阅读

基本概念

  • 英文单词叫 Library,库是由代码集合成的一个产品,供程序员调用。面向对象的代码组织形成的库叫类库,面向过程的代码组织形成的库叫函数库。

  • 框架 英文单词叫 Framework,框架是为解决一个或一类问题而开发的产品,用户一般只需要使用框架提供的类或函数,即可实现全部功能。

  • 工具 英文单词叫 Tools,在我看来工具与框架所做的事情类似,只是工具提供了更高层次的封装,屏蔽了底层的代码,提供单独的操作界面供用户操作。例如,UFT(QTP)、Katalon 属于自动化测试工具。

常见库

根据上面的概念,Requests 是HTTP库,请看官方的简介。

Requests is an elegant and simple HTTP library for Python, built for human beings.

它的使用是这样的:

import requests
r = requests.get('https://api.github.com/events')

那么,其实 Selenium Webdriver 也只是一个而已。

from selenium import webdriver
browser = webdriver.Firefox()

browser.get('http://www.yahoo.com')

注意:我说的可不是整个 Selenium 工具,整个 Selenium 包含:Selenium IDE, Selenium Grid, Selenium Webdriver 等。

我们只需要用到库里面的某个类、函数就可完成自己想要实现的功能。

常见框架

再来说说框架, unittest 叫单元测试框架,请看官方的简介。

The unittest unit testing framework was originally inspired by JUnit and has a similar flavor as major unit testing frameworks in other languages. It supports test automation, sharing of setup and shutdown code for tests, aggregation of tests into collections, and independence of the tests from the reporting framework.

所以,我们在使用 unittest 的时候是这样的。

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')


if __name__ == '__main__':
    unittest.main()

这应该是编写的最简单的一条测试用例了。

django 叫 Web开发框架,我想你应该也没意见。

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py

这是一个框架的目录结构。那怕我只是想用 django 在 Web 页面上展示一行"hello world",那么也要涉及到多个文件的代码编写。

框架的学习和使用成本更高,我们要想使用框架可能需要到它所提供的多个类、函数,而且还要遵循它的代码结构或目录结构。

常见工具

工具很好理解,postman、JMeter、fiddler...这些需要下载安装的一般都叫工具。这不是我们讨论的重点。

一个的框架诞生过程

回到框架的话题上,一般一个框架的诞生过程会经历三个阶段。

  • 学会使用
    一般就是看框架的官方文档,首先,安装,然后,拿它来做项目。这一用就是好多年。比如,我用 django 好几年了,从来没完整的看过它的官方文档了,更别说读用它的源码了。

  • 阅读源码
    一般牛 B 一点,或经验丰富开发,当然不想只局限于框架的使用层面上。他们会花几周,甚至几个月来阅读框架的源码。这样有助于框架使用过程的各种问题的处理和排查。

  • 自研框架
    能够自研框架,除了天赋,还要有机遇。比如你们公司对性能有着极高的要求,所有的开源或商业的框架都无法满足你们需求。于是乎走上了自研的道路,分析整个框架性能瓶颈,用更高性能的语言替换关键模块,或更牛 B 的算法实现关键功能。

阿里的 dubbo 叫框架,应该没人反对吧?

Apache Dubbo™ is a high-performance, java based open source RPC framework.

自动化测试框架

而我们测试人员口中说的,开发自动化测试框架 大多数情况是:

  • python + unittest + HTMLTestRunner + page objects

  • python + pytest + allure + page objects

开发人员.... ? 这不就是我用:

python + django + pymysql + HTML + CSS + JavaScript 实现一个 Web 系统

这不是叫"项目开发"么?你只是拿一堆现成的东西整合到了一起,实现了自己的想要的某某功能。这叫 项目开发,不叫 框架开发

robot framework 是框架

robot framework 当然是自动化测试框架了。

Robot Framework is a generic open source automation framework for acceptance testing.

为什么它能叫框架?就因为它带个"framework"?当然不是,因为它实现的自动化测试的一整套东西。

  • 如何编写用例
  • 如何组织用例
  • 如何运行测试用例
  • 如何统计用例结果
  • 如何生成测试报告
  • 如何扩展测试库

如果上面这些都是你自己设计和封装的,那么你也可以说自己开发了一个自动化测试框架,明明用着 unittest/pytest 却说自己开发的自动化测试框架!要么被误导,要么不要脸。

开发框架能教么?

那么问题来了,有人能教你开发测试框架么?

你问 尤大神 教你怎么开发一个 前端框架 ? 嗯,他可以给你讲一讲 Vue.js 在项目中的使用 ,或者你是前端开发大牛,你们可以坐一起聊聊 Vue.js 的设计思想。你也可以参与到 vue.js 的项目维护当中。

你问 debugtalk 教你怎么开发一个 接口自动化测试框架? 嗯,他可以给你讲一讲 HttpRunner 在项目中的使用技巧 ,如果你有多年的接口测试经验,也可以提一些意见交流交流。

你一个测试小白,上来就要 “开发测试框架” ,还要别人教你怎么开发?你咋不上天呢?

共收到 8 条回复 时间 点赞
1楼 已删除

我的理解吧,框架的价值绝不在于封装,而是在于解耦后带来的,效率和标准化。
js 还是那个 js,但是实现了双向绑定其实是对数据的解耦,.vue+babel 是对编码格式的标准化, component 是对元素的解耦,vue-router 是对路由的解耦。
这个方向去理解的话一个框架如果没有对现有的实现进行进一步解耦和标准化,确实算不上是一个框架。
说白了就是,框架是分解再集成的过程,而不是单纯的继承。
班门弄斧,虫师轻喷。

哈哈哈 登录点赞

这年头测开,不说自己写过 xxx 框架,感觉自己都不够格,也许这个框架自始至终只跑了登录

不点个赞说不过去

jackyin 回复

你要把我笑死然后继承我的蚂蚁花呗嘛😎

la 回复

你把房子过户给我吧,花呗和债务就算了。不过你 gameover 之前,一定要给我留一份过户税,不然估计你给我房子,我还给不了过户税。😈

开发框架,先得定下开发所有的库和知识栈,跟随业务开发需求和差异性修正在多次迭代。
如果先把基础工具类和通用性以及内建通信定义好,在写框架还是蛮快的。

一直在项目开发的路上越走越远😂

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册