1. 程式人生 > 其它 >【自動化測試不求人】行為驅動behave環境搭建

【自動化測試不求人】行為驅動behave環境搭建

  行為驅動的概念(Behavior-DrivernDevelopment,簡稱BDD)在國內測試領域還不怎麼流行,應用面也不是特別廣泛。在行為驅動中運用結構化的自然語言描述測試場景 ,然後將這些結構化的自然語言轉化為可執行的測試指令碼或者其他形式。BDD的一種優勢是它建立了一種“通用語言”,而這種通用的語言可以同時被客戶和開發者拿來使用,因此建立在同一種語言之後的溝通就會避免很多不一致的問題。

1、環境安裝:

兵馬未動,糧草先行。需要把BDD的環境準備好。需要安裝模組behave,安裝步驟和在Python環境中安裝其他模組方式一樣,可以執行命令

#pip install behave

安裝好之後可以執行命令“pip list”用以檢視behave是否在已安裝列表中。

2、示例:

在開始瞭解具體BDD案例程式碼之前,可以先熟悉BDD的一些關鍵字。具體如下。

  • Given,表示“假設”,可以在此處設定一些前置條件之類,如在BDD之前,假設behave模組已經安裝等等。也可以理解成使用者或者外部系統等對應用在進行互動(操作)前,需要將系統處於一個已知狀態(如系統已安裝behave模組等)。
  • When表示“當”,從字面意思上理解是對條件判斷之意。此時或者某種條件滿足時使用者或者外部系統所採取的與被測系統的互動步驟。互動步驟能改變系統的狀態(與系統真實地產生了互動)。
  • And表示“和”,是和When關鍵字搭配使用的。
  • Then表示“那麼”,待觀察的結果或者期望結果。

通過以上對behaveScenario(測試場景)中關鍵字的描述,可能有和自然語言很像的感覺。這樣的場景描述可讀性較強,檔名為“example.feature

  1)、場景描述,其功能點(Feature)表示此指令碼是為了展示behave的用法;場景目的是“Run a simple test”;假設為“we have behave installed”;當“we implement 5 tests

時;那麼behave will testthem for us!”。以上對場景中用到的關鍵字的解釋加上對具體場景的分析

  2)、對以上類似自然語言一樣的場景描述進行程式碼實現,讓其轉換成可以執行的基於行為驅動的測試指令碼。檔名為example_steps.py”,其位置在steps包下。程式碼中的函式用到了assert語句用作斷言。其中有一點需要注意的是,裡面用到了引數context,它是全域性變數,其可以被程式中的所有物件或者函式呼叫,在行為驅動有承上啟下的作用。其次是需要匯入behave模組中的givenwhenthenstep等功能。

#coding=utf-8
from behave import given, when, then, step
@given('we have behave installed')
def step_impl(context):
    pass
# 數字型別number將會轉換成整數型別
#以下函式是為了獲取在場景檔案中設定的數字 5,然後做出判斷等操作。
@when('we implement {number:d} tests')
def step_impl(context, number):
    assert number > 1 or number == 0
    context.tests_count = number
@then('behave will test them for us!')
def step_impl(context):
    assert context.failed is False
    assert context.tests_count >= 0

  3)、執行指令碼。首先在命令列模式下切換到專案主目錄下,然後執行命令behave”即可。最後檢視執行結果如圖12.3所示,在測試結果中發現:1個功能通過;1個場景通過;3個步驟測試通過。

  4),以上步驟可以理解成為一個正向測試用例。現在以一個反向測試用例來驗證behave的測試輸出結果如何。首先更改step實現中的斷言條件,使其判斷為失敗。在程式碼檔案example_steps.py”中將斷言部分的“assert number > 1”改為“assert number > 10”更改之後的程式碼檔案內容如下,執行結果如下所示:

#coding=utf-8
from behave import given, when, then, step

@given('we have behave installed')
def step_impl(context):
    pass
#注意,以下的實現函式在校驗語句中將>1改成>10
@when('we implement {number:d} tests')
def step_impl(context, number):
    assert number > 10 or number == 0
    context.tests_count = number
@then('behave will test them for us!')
def step_impl(context):
    assert context.failed is False
    assert context.tests_count >= 0

視訊、學習筆記聯絡qq:2574674466
更多內容請關注公眾號:“大牛測試

歡迎加入交流群:Selenium學習群: 628908894