第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

Python 進(jìn)階應(yīng)用教程

Python 進(jìn)階應(yīng)用教程
01 Python 的對(duì)象和類(lèi) 02 Python 類(lèi)屬性和實(shí)例屬性 03 Python類(lèi)的構(gòu)造方法、析構(gòu)方法、實(shí)例方法 04 Python 類(lèi)的私有屬性和私有方法 05 Python 類(lèi)的繼承和多繼承 06 Python 類(lèi)實(shí)戰(zhàn) 07 Python 中的迭代器實(shí)現(xiàn)原理 08 Python 中的迭代器趣味實(shí)踐 09 Python 中的生成器實(shí)現(xiàn)原理 10 Python 中的生成器趣味實(shí)踐 11 Python 中的錯(cuò)誤和異常 12 Python 中的異常處理 13 Python 中的模塊 14 Python 標(biāo)準(zhǔn)庫(kù)之 os 模塊 15 Python 標(biāo)準(zhǔn)庫(kù)之 sys 模塊 16 Python 標(biāo)準(zhǔn)庫(kù)之 math 模塊 17 Python 標(biāo)準(zhǔn)庫(kù)之 random 模塊 18 Python 標(biāo)準(zhǔn)庫(kù)之 Json 模塊 19 Python 標(biāo)準(zhǔn)庫(kù) datetime 模塊 20 Python 中的常用第三方模塊 21 Python 中的命名空間 22 Python 中的作用域 23 Python 中的文件 IO 操作 24 Python 基礎(chǔ)實(shí)戰(zhàn) 25 Python 內(nèi)置函數(shù) 26 Python 中使用正則表達(dá)式 27 使用 Python 操作 MySQL 數(shù)據(jù)庫(kù) 28 使用 Python 操作 Mongo 數(shù)據(jù)庫(kù) 29 使用 Python 操作 Redis 數(shù)據(jù)庫(kù) 30 使用 Python 發(fā)送一封郵件 31 threading 之 Thread 的使用 32 threading 之 Lock 的基本使用 33 Python 生產(chǎn)者消費(fèi)者模型 34 Python 的內(nèi)存管理與垃圾回收 35 Python 領(lǐng)域運(yùn)用:網(wǎng)絡(luò)爬蟲(chóng) 36 Python 領(lǐng)域運(yùn)用:Web 開(kāi)發(fā) 37 Python 領(lǐng)域運(yùn)用:自動(dòng)化運(yùn)維 38 Python 領(lǐng)域運(yùn)用:自動(dòng)化測(cè)試
首頁(yè) 慕課教程 Python 進(jìn)階應(yīng)用教程 Python 進(jìn)階應(yīng)用教程 38 Python 領(lǐng)域運(yùn)用:自動(dòng)化測(cè)試

Python 領(lǐng)域運(yùn)用之:自動(dòng)化測(cè)試

1. 自動(dòng)化測(cè)試簡(jiǎn)介

1.1 手工測(cè)試

手工測(cè)試是由人逐個(gè)的輸入測(cè)試用例,然后觀(guān)察程序運(yùn)行結(jié)果,和預(yù)期結(jié)果進(jìn)行比對(duì)。人工測(cè)試是一種低效的測(cè)試方法,對(duì)程序進(jìn)行修改后,都需要人工重新執(zhí)行測(cè)試用例,屬于典型的重復(fù)勞動(dòng)。

根據(jù) 51testing 的《中國(guó)軟件測(cè)試從業(yè)人員調(diào)查報(bào)告》,在軟件項(xiàng)目的測(cè)試環(huán)節(jié),手工測(cè)試占到 89%,相對(duì)開(kāi)發(fā)來(lái)說(shuō),測(cè)試的門(mén)檻底,薪資普遍較底,所要求的知識(shí)面雖然有一定廣度,但缺乏深度。

因?yàn)槭止y(cè)試人門(mén)檻不高,使大量的畢業(yè)生、甚至是非專(zhuān)業(yè)人員涌入這個(gè)行業(yè),從而加劇了這個(gè)行業(yè)的激烈競(jìng)爭(zhēng)。對(duì)于工作幾年仍處于手工測(cè)試的人員來(lái)說(shuō),都會(huì)有強(qiáng)烈的危機(jī)感。由于工作的技術(shù)含量不高,薪資的漲幅遇到瓶頸,另一方面受到新進(jìn)入者的威脅,公司花 5K 招來(lái)的人能夠勝任測(cè)試工作,那么就不會(huì)花 8K 招聘人做同樣的工作。

因此,從自身的發(fā)展來(lái)說(shuō),測(cè)試人員非常需要通過(guò)自動(dòng)化技術(shù)來(lái)增加自己有競(jìng)爭(zhēng)力。

1.2 自動(dòng)化測(cè)試

自動(dòng)化測(cè)試是通過(guò)編寫(xiě)腳本的方式模擬手工測(cè)試的過(guò)程。通過(guò)運(yùn)行腳本來(lái)執(zhí)行測(cè)試用例,代替人工對(duì)系統(tǒng)的功能進(jìn)行驗(yàn)證,從而節(jié)省了大量的人力。

一切通過(guò)工具的方式來(lái)代替或輔助手工測(cè)試的行為都可以看做自動(dòng)化,包括性能測(cè)試、接口測(cè)試等,但凡用到測(cè)試工具的測(cè)試都稱(chēng)為自動(dòng)化測(cè)試。

自動(dòng)化測(cè)試得到廣泛的應(yīng)用,在招聘測(cè)試職位時(shí),都需要自動(dòng)化測(cè)試經(jīng)驗(yàn)。在計(jì)算機(jī)專(zhuān)業(yè)招聘網(wǎng)站,以 “自動(dòng)化測(cè)試” 作為關(guān)鍵字進(jìn)行搜索,能夠搜索到大量的職位,如下圖所示:

圖片描述

1.3 自動(dòng)化測(cè)試的優(yōu)點(diǎn)和缺點(diǎn)

自動(dòng)測(cè)試的優(yōu)點(diǎn):

  • 避免測(cè)試人員因重復(fù)勞動(dòng)產(chǎn)生厭倦
  • 提高測(cè)試效率
  • 保證每次測(cè)試地一致性和可重復(fù)性
  • 更好的利用無(wú)人值守時(shí)間
  • 能夠進(jìn)行一些手工無(wú)法進(jìn)行的測(cè)試

自動(dòng)測(cè)試的缺點(diǎn):

  • 編寫(xiě)和維護(hù)自動(dòng)化測(cè)試程序需要花費(fèi)成本
  • 部分測(cè)試工作還是依賴(lài)手工測(cè)試

2. 自動(dòng)化測(cè)試的前提條件

2.1 適合采用自動(dòng)化測(cè)試

考慮否采用自動(dòng)化測(cè)試,需要從三個(gè)方面進(jìn)行權(quán)衡:

  1. 軟件需求變動(dòng)不頻繁

測(cè)試腳本的穩(wěn)定性決定了自動(dòng)化測(cè)試的維護(hù)成本。如果軟件需求變動(dòng)過(guò)于頻繁,測(cè)試人員需要根據(jù)變動(dòng)的需求來(lái)更新測(cè)試用例以及相關(guān)的測(cè)試腳本,而腳本的維護(hù)本身就是一個(gè)代碼開(kāi)發(fā)的過(guò)程,需要修改、調(diào)試,必要的時(shí)候還要修改自動(dòng)化測(cè)試的框架。如果開(kāi)發(fā)、維護(hù)測(cè)試腳本的成本高于利用其節(jié)省的測(cè)試成本,即投入產(chǎn)出比太高,那么自動(dòng)化測(cè)試就失去了意義。

項(xiàng)目中的某些模塊相對(duì)穩(wěn)定,而某些模塊需求變動(dòng)性很大。我們便可對(duì)相對(duì)穩(wěn)定的模塊進(jìn)行自動(dòng)化測(cè)試,而變動(dòng)較大的仍是用手工測(cè)試。

  1. 項(xiàng)目周期足夠長(zhǎng)

軟件測(cè)試包含有如下環(huán)節(jié):

  • 自動(dòng)化測(cè)試需求的確定
  • 自動(dòng)化測(cè)試框架的設(shè)計(jì)
  • 自動(dòng)測(cè)試腳本的編寫(xiě)與調(diào)試

這樣的過(guò)程本身就是一個(gè)測(cè)試軟件的開(kāi)發(fā)過(guò)程,需要較長(zhǎng)的時(shí)間來(lái)完成。如果項(xiàng)目的周期比較短,沒(méi)有足夠的時(shí)間去支持這樣一個(gè)過(guò)程,則無(wú)法實(shí)施自動(dòng)化測(cè)試。

  1. 自動(dòng)化測(cè)試腳本可重復(fù)使用

通常情況下,專(zhuān)職的測(cè)試人員對(duì)多個(gè)產(chǎn)品進(jìn)行測(cè)試,需要考慮自動(dòng)化測(cè)試腳本能否重復(fù)使用:

  • 所測(cè)試的項(xiàng)目之間是否很大的差異性
  • 所選擇的測(cè)試工具是否適應(yīng)這種差異

如果測(cè)試腳本的重復(fù)使用率很低,致使其間所耗費(fèi)的成本大于所創(chuàng)造的價(jià)值,自動(dòng)化測(cè)試就失去了意義。

  1. 敏捷開(kāi)發(fā)、頻繁的版本迭代

敏捷開(kāi)發(fā),增量式開(kāi)發(fā),持續(xù)集成項(xiàng)目由于這種開(kāi)發(fā)模式是頻繁的發(fā)布新版本,需要頻繁的回歸測(cè)試,自動(dòng)化能把能從回歸測(cè)試中解脫出來(lái)測(cè)試新的功能。

2.2 不適合采用自動(dòng)化測(cè)試

如果項(xiàng)目具備如下特征,則不適合做自動(dòng)化測(cè)試:

  1. 被測(cè)系統(tǒng)或需求不穩(wěn)定

在自動(dòng)化測(cè)試用例的更新、維護(hù)、調(diào)試的頻率太高,自動(dòng)化測(cè)試完全得不償失。

  1. 項(xiàng)目時(shí)間非常緊張

建自動(dòng)化測(cè)試框架,開(kāi)發(fā)測(cè)試腳本需要時(shí)間,對(duì)時(shí)間比較緊張的項(xiàng)目可以先不考慮自動(dòng)化。

  1. 項(xiàng)目周期很短

測(cè)試腳本不能得到重復(fù)的利用,不值得花精力去進(jìn)行自動(dòng)化測(cè)試。

  1. 涉及人的感觀(guān)、物理交互等方面的測(cè)試

易用性測(cè)試、需要人的主觀(guān)判斷,涉及物理交互,自動(dòng)化工具無(wú)法完成與物理設(shè)備的交互,例如打印、攝像等操作,不適合采用自動(dòng)化測(cè)試。

4. 主流自動(dòng)化測(cè)試框架

4.1 PyUnit 單元測(cè)試框架

PyUnit 是 Python 內(nèi)置的 Python 單元測(cè)試框架(The Python unit testing framework),可對(duì)程序中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。它的主要特點(diǎn)如下:

  • 內(nèi)置的標(biāo)準(zhǔn)模塊,在 Python 3 中,PyUnit 是標(biāo)準(zhǔn)模塊,安裝 Python 后引入 unittest 模塊即可使用
  • PyUnit 是 JUnit 的衍生產(chǎn)品,其工作原理與其他 JUnit 框架十分類(lèi)似,熟悉 JUnit 的開(kāi)發(fā)者可以很快上手
  • 能夠以簡(jiǎn)單的方式運(yùn)行單個(gè)測(cè)試用例
  • 能夠快速的生成各種測(cè)試報(bào)告

PyUnit 是 Kent Beck 和 Erich Gamma 設(shè)計(jì)的 JUnit 的 Python 版本,是 JUnit 的衍生產(chǎn)品,在工作原理、命名規(guī)則上保留了很多 Java 語(yǔ)言的特征。例如,PyUnit 要求所有的測(cè)試用例都必須繼承于 TestCast,示例如下:

#!/usr/bin/python3
import unittest

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

class MathTest(unittest.TestCase):
    def testAdd(self):
        self.assertEqual(add(1, 1), 2)

    def testSub(self):
        self.assertEqual(sub(2, 1), 1)

unittest.main()
  • 定義了類(lèi) MathTest,繼承于 unittest.TestCase
  • 定義了測(cè)試用例 testAdd,測(cè)試函數(shù) add
  • 定義了測(cè)試用例 testSub,測(cè)試函數(shù) sub

4.2 PyTest 測(cè)試框架

Pytest 是一個(gè)第三方單元測(cè)試框架,比內(nèi)置的 PyUnit 更簡(jiǎn)潔和高效,Pytest 主要特點(diǎn)有以下幾點(diǎn):

  • 簡(jiǎn)單靈活,容易上手,測(cè)試的可讀性強(qiáng)
  • 支持參數(shù)化,可以細(xì)粒度地控制要測(cè)試的測(cè)試用例
  • 能夠支持單元測(cè)試、集成測(cè)試、功能測(cè)試、接口測(cè)試多種類(lèi)型
  • Pytest 具有豐富的第三方插件,并且可以自定義擴(kuò)展,例如如 pytest-selenium(集成selenium)、pytest-html(完美html測(cè)試報(bào)告生成)等
  • 可以很好的和 CI 工具結(jié)合,例如 jenkins

與其它測(cè)試框架相比 Pytest 簡(jiǎn)單易學(xué),舉例如下:

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

def test_add():
    assert add(1, 1) == 2

def test_sub():
    assert sub(2, 1) == 1
  • 定義了函數(shù) test_add,它測(cè)試函數(shù) add 的功能
  • 定義了函數(shù) test_sub,它測(cè)試函數(shù) sub 的功能
  • 運(yùn)行 pytest ,發(fā)現(xiàn)所有名稱(chēng)以 test_ 為前綴的函數(shù)、并運(yùn)行

憑借著其開(kāi)源和易學(xué)的特點(diǎn),該工具被質(zhì)量分析團(tuán)隊(duì)、開(kāi)發(fā)團(tuán)隊(duì)、個(gè)人團(tuán)隊(duì)、以及各種開(kāi)源項(xiàng)目廣泛使用。許多大型互聯(lián)網(wǎng)應(yīng)用,如 Dropbox 和 Mozilla,均采用 Pytest。

4.3 Robot 測(cè)試框架

Robot Framework 是一個(gè)基于 Python 的,可擴(kuò)展的關(guān)鍵字驅(qū)動(dòng)的測(cè)試自動(dòng)化框架,主要被用在測(cè)試驅(qū)動(dòng) (test-driven)類(lèi)型的開(kāi)發(fā)與驗(yàn)收中。

Robot Framework 具有高度模塊化的架構(gòu),用戶(hù)通過(guò)編寫(xiě) Python 腳本擴(kuò)展功能,如下圖所示:

圖片描述

  • 測(cè)試數(shù)據(jù) (Test Data) 是簡(jiǎn)單、易于編輯表格格式
  • 啟動(dòng) Robot Framework 時(shí),它會(huì)處理測(cè)試數(shù)據(jù),執(zhí)行測(cè)試用例并生成日志和報(bào)告
  • 測(cè)試庫(kù) (Test library) 可以直接使用應(yīng)用程序接口

Robot Framework 具有如下優(yōu)點(diǎn):

  • 通過(guò)使用關(guān)鍵字驅(qū)動(dòng)測(cè)試的方法,幫助測(cè)試人員創(chuàng)建具有可讀性的測(cè)試用例,進(jìn)而簡(jiǎn)化了整個(gè)自動(dòng)化的過(guò)程。

  • 啟用易于使用的表格語(yǔ)法,以統(tǒng)一的方式創(chuàng)建測(cè)試用例。

  • 提供易于閱讀的結(jié)果報(bào)告和 HTML 格式的日志。

  • 提供一個(gè)簡(jiǎn)單的庫(kù) API,可以使用 Python 創(chuàng)建自定義測(cè)試庫(kù)。

4.4 Selenium Web 應(yīng)用程序測(cè)試

Selenium 是一個(gè)用于 Web 應(yīng)用程序測(cè)試的工具,它使用 JavaScript 模擬真實(shí)用戶(hù)對(duì)瀏覽器進(jìn)行操作。Selenium 支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。

Selenium 支持使用 Python 語(yǔ)言編寫(xiě)動(dòng)作測(cè)試腳本,測(cè)試腳本執(zhí)行時(shí),瀏覽器自動(dòng)按照腳本代碼做出點(diǎn)擊、輸入、打開(kāi)、驗(yàn)證等操作,就像真實(shí)用戶(hù)所做的一樣,從終端用戶(hù)的角度測(cè)試應(yīng)用程序。

用戶(hù)使用 Python 編寫(xiě)測(cè)試腳本:

  • 測(cè)試應(yīng)用程序的瀏覽器兼容性,驗(yàn)證應(yīng)用程序是否能夠工作在不同瀏覽器和操作系統(tǒng)之上
  • 創(chuàng)建回歸測(cè)試檢驗(yàn)軟件功能和用戶(hù)需求

Selenium 主要用于測(cè)試 Web 應(yīng)用程序,學(xué)習(xí) web 自動(dòng)化測(cè)試前,需要補(bǔ)充 Web 相關(guān)的知識(shí),包括:

  • HTTP 協(xié)議
  • HTML 的基礎(chǔ)知識(shí),如何使用 Javascript 操縱 DOM
  • Firebug 或者 Chrome 開(kāi)發(fā)者工具的使用,用于抓取元素