基本概念
-
庫 英文單詞叫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 在項目中的使用技巧 ,如果你有多年的接口測試經驗,也可以提一些意見交流交流。
你一個測試小白,上來就要 “開發測試框架” ,還要別人教你怎么開發?你咋不上天呢?