色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

BDD實現方式

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-01 11:08 ? 次閱讀

相信大部分的人都聽說過 BDD,即:行為驅動開發,但并未涉及到它的使用方和項目實戰。

所以,本篇文章將大家全面了解 BDD 及實現方式,最后使用 Python BDD 框架落地到實際項目中去。

1. BDD 及優勢

BDD,行為驅動開發是 敏捷軟件開發 的一種技術,鼓勵軟件項目的所有成員之間的相互協助

傳統的軟件開發方式主要缺點包含:測試用例比較單一,導致覆蓋率不高;業務和產品不能夠全面了解產品的行為表現

BDD 的出現主要優勢有下面 2 點,主要體現在:

  • 可以很好的減少項目成員之間的溝通成本,增加協作
  • BDD 能夠將上線之后的手工測試轉換為自動化測試,提升測試效率

2. 軟件開發流程

BDD 一般在產品需求文檔審核時就開始介入,產品或業務負責人提供產品需求文檔的同時,會提供具體的業務場景行為

開發人員根據定義的行為場景,開發軟件,并編寫場景下面的測試代碼

完成 BDD 先在本地進行自測,沒問題之后會提交到代碼倉庫,最后通過 CI 去持續集成,測試通過之后才能上線

BDD 的軟件開發流程圖如下:

圖片

3. Gherkin 語言及 Features

Gherkin 是 BDD 框架 Cucumber 的功能性語言,能夠通過自然語言,支持多國語言,描述一個具體的需求

Gherkin 語言使用的是主要英文關鍵詞包含:Scenario、Given、when 、And、Then 等;這些關鍵詞可以轉換成中文關鍵詞,比如:場景、加入、當、那么等。

Features 功能文件一般命名為:*.feature,此文件可以編寫具體的需求行為,最后可以支持自動化測試

功能文件的編寫規范如下:

  • 空格或者制表符用于縮進
  • 每一行以 BDD 框架中預設的關鍵字開頭
  • 使用 # 符號在文件內進行注釋
  • 無論是中文或英文編寫,「 : 」符號只能用英文格式的冒號,否則運行的時候會報錯

下面是一個簡單的功能文件,描述的是兩個數相加的邏輯:

# 功能文件(英文)
Feature: Adding
    Scenario: Adding two numbers
    Given the input "1+1"
    When the calculator is run
    Then output should be "2"

4. Behave

Behave 是 Python 的 BDD 框架,并且可以使用命令行工具進行測試,使用 pip 可以很方便地進行安裝

# 安裝 behave 框架
pip3 install behave

編寫完功能文件之后,就可以使用 behave 命令直接運行了

# 直接運行,控制臺查看結果
behave

# 以中文來運行測試
behave --lang=zh-CN

5. 實戰一下

下面以自動化測試 Google 搜索為例,來說說具體的使用方式

第 1 步,編寫 Features 文件,以中文為例

使用 behave --lang-help zh-CN 命令查看所有的中文關鍵字:

圖片

接著,利用這些關鍵字結合具體行為,編寫的 Feature 文件如下:

功能: Google搜索模塊測試
  場景大綱: Google搜索一個關鍵字功能
      假如 搜索框輸入一個關鍵字  keyword >
        當 點擊搜索按鈕
        那么 頁面標題應該為 < title >
      例子:
          |   keyword  |   title    |
          |   Python   |   Python - Google 搜索       |
          |   AirPython |   AirPython - Google 搜索   |

需要注意的是,文件中定義了兩個參數,即:keyword 和 title

實際項目中大部分的自動化測試都是基于數據驅動參數化,因此需要搭配「 場景大綱+例子」一起使用。

第 2 步,編寫 step 文件

在 Features 同級目錄下新建一個 steps 文件夾,接著,在此文件夾下再新建一個 step.py 文件

然后,就可以對照第 1 步編寫的 Features 文件編寫測試用例了

借助 @given、@when、@then 裝飾器,將文本內容和參數對應上

最后,使用 Selenium 定義的 API 方法操作元素即可

from time import sleep
from selenium.webdriver.common.keys import Keys
from behave import *


@given(u'搜索框輸入一個關鍵字 {keyword}')
def step_impl(context, keyword):
    element_input = context.driver.find_element_by_name('q')
    element_input.clear()
    print("準備輸入")
    element_input.send_keys(keyword)


@when(u'點擊搜索按鈕')
def step_impl(context):
    # 模擬Enter鍵
    context.driver.find_element_by_name("q").send_keys(Keys.ENTER)

    sleep(1)


@then(u'頁面標題應該為 {title}')
def step_impl(context, title):
    assert context.driver.title == title

需要指出的是,方法名中的第一個參數 context 是一個全局的字典,可以在步驟方法之間傳遞數據

第 3 步,編寫配置環境文件 environment.py

環境配置文件定義了測試腳本運行過程中,具體步驟、場景之前和之后要執行的內容

比如,我們在 before_feature 方法( 每一個 feature 場景執行之前執行 )前初始化 ChromeDriver,打開目標網站首頁;然后在 after_feature 方法( feature 場景測試完成之后執行 )后關閉瀏覽器

def before_feature(context, feature):
    context.driver = webdriver.Chrome()
    context.driver.get("https://www.google.com/")


def after_feature(context, feature):
    context.driver.quit()

第 4 步,轉換 cucumber 測試報告

為了保證下一步在 Jenkins 中能正常顯示測試報告,需要將 behave 生成的測試報告轉換為 cucumber 兼容的 json 測試報告

首先,安裝依賴 behave2cucumber

# json測試報告文件轉換
pip3 install behave2cucumber

然后,在上一步的環境配置文件中重寫 after_all 方法,將 behave 格式的測試報告轉換為 cucumber 兼容的測試報告

def after_all(context):
    """
    所有測試完成之后執行
    注意:behave1.2.6生成的json沒法正常轉換為cucumber兼容的json報告,建議降級為:1.2.5
    :param context:
    :return:
    """

    # 轉換
    with open('./test_report.json',encoding='utf-8') as behave_json:
        # 格式轉換
        cucumberJson = behave2cucumber.convert(json.load(behave_json))

    jsonStr = json.dumps(cucumberJson)

    # 寫入
    jsonReport = open(r'./report/jsonReport.json', 'w',encoding='utf-8')
    jsonReport.write(jsonStr)
    jsonReport.close()

需要注意的是,behave 最新版本轉成的 cucumber 測試報告,在 Jenkins 中沒法展示出來,建議降低為 1.2.5 版本

第 5 步,本地運行

在 Features 文件同級目錄下,執行下面的命令,將在本地生成格式化后 json 格式的測試報告

# 以中文語言的形式在本地運行
# 在本地產生測試報告
behave --lang=zh-CN -f json.pretty -o './test_report.json'

第 6 步,持續集成

首先搭建 Jenkins 環境,然后安裝 Cucumber reports 插件

https://plugins.jenkins.io/cucumber-reports

接著,新建一個 Freestyle project 的任務,添加構建步驟 - Execute Shell,寫入要執行的 Python 腳本

# 打開目標項目位置
cd /Users/xingag/Desktop/xag/git/marks/Python/測試/Demo/feature_chrome

# 執行測試,并生成測試報告
behave --lang=zh-CN -f json.pretty -o './test_report.json'

最后,添加構建后的操作 - Cucumber reports,指向第 4 步轉換后的 json 格式的測試報告

圖片

第 7 步,構建

構建后,測試腳本會自動進行執行,然后會在結果欄生成可視化測試報告

圖片

6. 最后

文章只是通過 Python 中的 Behave 框架來談 BDD 在實際項目中的用法

如果你想在 Java 或者 Golang 項目中使用,可以直接 JBehave 或者 GoDog 框架來實現,除了語法外,基本操作方法類似。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 軟件開發
    +關注

    關注

    0

    文章

    615

    瀏覽量

    27373
  • 代碼
    +關注

    關注

    30

    文章

    4791

    瀏覽量

    68679
  • BDD
    BDD
    +關注

    關注

    0

    文章

    6

    瀏覽量

    7536
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84744
收藏 人收藏

    評論

    相關推薦

    語音播報的實現方式

    請問目前語音播報的實現方式有哪些?會用訊飛語音合成嗎?
    發表于 11-29 11:01

    使用YOLOv3訓練BDD100K數據集之開始訓練

    (三)使用YOLOv3訓練BDD100K數據集之開始訓練
    發表于 05-12 13:38

    掃描方式和中斷方式實現串口收發的過程

    面向小白實現目標:掃描方式和中斷方式實現串口收發一、掃描方式和中斷方式
    發表于 02-21 07:20

    反饋控制方式實現均流的原理圖

    反饋控制方式實現均流的原理圖 圖 反饋控制方式實現均流的原理圖 圖是上述反
    發表于 07-17 08:31 ?1828次閱讀

    無線傳送方式實現室內通信系統

    目前,家庭網絡內部主要通過雙芯電纜直接對各種智能家電實現控制和訪問。這種方式安裝布線比較麻煩。為了克服安裝布線的麻煩,選用無線傳送方式實現家庭網絡內部的各種控制和
    發表于 08-23 11:54 ?1043次閱讀
    無線傳送<b class='flag-5'>方式</b><b class='flag-5'>實現</b>室內通信系統

    基于BDD結構和布爾差分思想電路測試應用

    引入布爾差分的思想,對被測電路函數的BDD結構進行判斷生成測試向量。本方案較傳統的以圖進行搜索的ATPG方法有效地減少了時空開銷,并將布爾差分的理論方法應用于實際。實驗表明,本方案可以有效地進行測試生成。
    發表于 09-08 14:25 ?1次下載

    采用LabVIEW實現Modbus通訊協議的方式

    針對Modbus的串口和TCP兩種不同的方式,在LabVIEW中通常可以通過以下幾種方法實現Modbus通訊。其中一些實現方式需要安裝LabVIEW 數據記錄與監控(DSC)模塊.
    的頭像 發表于 01-16 17:22 ?1.7w次閱讀

    單點登錄的實現方式有哪些

    前言 實現方式一:父域 Cookie 實現方式二:認證中心 實現方式三:LocalStorage
    的頭像 發表于 02-02 14:00 ?2236次閱讀
    單點登錄的<b class='flag-5'>實現</b><b class='flag-5'>方式</b>有哪些

    Python定時任務的實現方式

    在日常工作中,我們常常會用到需要周期性執行的任務,一種方式是采用 Linux 系統自帶的 crond 結合命令行實現。另外一種方式是直接使用Python。接下來整理的是常見的Python定時
    的頭像 發表于 10-08 15:20 ?5738次閱讀

    STM32上實現點燈(固件庫方式

    STM32上實現點燈(固件庫方式
    發表于 12-05 11:06 ?11次下載
    STM32上<b class='flag-5'>實現</b>點燈(固件庫<b class='flag-5'>方式</b>)

    一文詳解限流算法的實現方式

    不依賴外部庫的情況下,限流算法有什么實現的思路?本文介紹了3種實現限流的方式
    的頭像 發表于 05-25 12:00 ?1426次閱讀

    四種方式實現led點亮

    四種方式實現led點亮
    發表于 01-04 14:31 ?4次下載

    Redis實現限流的三種方式分享

    當然,限流有許多種實現方式,Redis具有很強大的功能,我用Redis實踐了三種的實現方式,可以較為簡單的實現
    的頭像 發表于 02-22 09:52 ?1088次閱讀

    汪立高:摻硼金剛石(BDD)在鋰電新能源行業中的應用

    BDD適用范圍:研究表明,BDD電極能有效降解各類有機廢水的污染物,例如醫藥/農藥化工、石化、焦化、冶煉、印染、造紙、制革、炸藥、制酒、垃圾滲濾液等領域的有機廢水。
    的頭像 發表于 05-24 14:30 ?2161次閱讀
    汪立高:摻硼金剛石(<b class='flag-5'>BDD</b>)在鋰電新能源行業中的應用

    java實現多線程的幾種方式

    Java實現多線程的幾種方式 多線程是指程序中包含了兩個或以上的線程,每個線程都可以并行執行不同的任務或操作。Java中的多線程可以提高程序的效率和性能,使得程序可以同時處理多個任務。 Java提供
    的頭像 發表于 03-14 16:55 ?719次閱讀
    主站蜘蛛池模板: 欧美丝袜女同| 2019中文字幕乱码免费| 成人永久免费视频| 色欲AV亚洲永久无码精品麻豆| 城中村快餐嫖老妇对白| 天天狠狠色综合图片区| 国产日韩欧美有码在线视频| 一个人的HD高清在线观看| 欧美精品99久久久啪啪| 国产日韩欧美另类| 57PAO强力打造高清免费| 色欲AV色欲AV久久麻豆| 久久精品国产亚洲AV未满十八| 99久久精品免费国产一区二区三区 | 97超碰97资源在线观看| 三叶草成人| 九九久久国产精品大片| h版动漫在线播放的网站| 亚洲AV无码国产精品色午夜情| 乱精品一区字幕二区| 国产69精品久久久久APP下载| 亚洲免费网站观看视频| 日本AAA片爽快视频| 久久精品国产亚洲AV蜜臀| 大肥婆丰满大肥奶bbw肥| 在教室伦流澡到高潮HNP视频| 色爱区综合激情五月综合激情| 精品第一国产综合精品蜜芽| 超碰免费视频部落格| 在教室轮流被澡高H林萌| 少妇仑乱A毛片| 欧美大片免费观看| 精品AV亚洲乱码一区二区| 国产69精品久久久久人妻刘玥| 中文字幕在线播放视频| 亚洲成年人影院| 日韩一级精品久久久久| 麻豆久久国产亚洲精品超碰热| 国产在线精品视频二区| 大伊人青草狠狠久久| 99久久国产综合精品国|