• 不寫程式就完成BDD (Behavior Driven Development)自動化測試工具 – bddfire

     

    Image result for BDD

    這篇文章主要介紹如何不用寫程式就完成 BDD的自動化測試,

    開始介紹如何運用開源工具之前, 先介紹BDD測試的基本概念與執行時的困難點

    這樣會更容易理解BDD測試所帶來的好處與該開源工具的優勢

     

    什麼是BDD的測試方式?

    簡單來說就是將每一個測試個案與測試用例依照 User Story的方式來書寫

    • Given : 某個條件下
    • When: 當使用者執行某些動作
    • Then: 預期的執行結果

    如此一來整個測試用例的執行結果就會更趨近於原本客戶的訴求

    達到 Acceptance Testing, 最終客戶為觀點的驗收測試

    Image result for BDD

    BDD困難點

    問題來了, 為了要將測試個案寫成這樣的形式,畢竟還是需要對應的程式碼才能執行

    • Given : 某個條件下
    • When: 當使用者執行某些動作
    • Then: 預期的執行結果

    因此會有下列過程:

    1.  寫下 user story ( 用英文描述的方式 Given, When, Then…)
    2. 編寫相對應的程式碼

     

    不寫程式如何完成 BDD?

    原則上BDD 有上述兩大步驟,

    1. 寫下 user story ( 用英文描述的方式 Given, When, Then…)
    2. 編寫相對應的程式碼

    因此, 我們會利用一個開源框架 BddFire, 該開源框架已經定義好許多 user story與相對應的程式碼

    我們只要將依據測試場景的需求增新修改必要的參數即可

    舉例來說, 對於瀏覽器的操作該開源框架提供下列操作

    我們只要針對 “” 的內容加以修改符合該測試場景

    Browser Actions

       When I navigate to another page ""
       When I go forward using browser
       When I go back using browser
       When browser is refreshed
       When I have switched to another window ""
       When browser window is resized to width "" and height ""
       When browser window is maximized
       When I closed browser window
       When page is zoomed in
       When page is zoomed out
       When I scrolled to element with selector ""
       When element with selector is hovered over
    

    User Actions

       Given  I am on “url”
       When I fill in “element” with the text “text”
       When I select the “link” link
       When I select the "button" button
       When I click on link having text “text"
       When I check “checkbox”
       When I uncheck “checkbox”
       When I choose “radio button”
       When I select option “option” from the dropdown “dropdown”
       When I attach the file “file_path" to the field “locator”
       When I hover over the element “locator"
    

    Assertions

       Then the page title is  “title"
       Then I see the element “element” with the text “text”
       Then page contains “element”
       Then I see element “element” “count” times
       Then page contains the link "link"
       Then page contains the button  “button”
       Then page contains the field “field”
       Then page contains the table “table”
       Then the element “element” is checked
       Then the element “element” is unchecked
       Then the page contains the following content "content"

     

    除此之外, BddFire還提供API測試的相關操作與驗證

    Given I send a GET request for "<your_uri>"
    
       Given I send a GET/PUT/POST/DELETE request for "<your_uri>" with the following: 
        """
       <your_payload>
        """
    
       Then the response should be JSON
    
       Then the response status code should be '200'
    
       Then the JSON response should have '<number_of_properties>' properties
    
       Then the JSON response has a "<id_of_property>" property
    
       Then the JSON "<id_of_property>" property equals "<value_of_property>" 
    
       Then the JSON response header has key "<header_name>" with value of "<header_name>" 
    
       Then /^the JSON response should be:
        """
         <your_json>
        """

     

    當要考慮將測試個案採用 BDD user story 的方式時, 不訪可以參考BddFire https://github.com/Shashikant86/bddfire

    範例程式

    安裝好BDDfire 相關套件之後, 例如下列範例程式,將會執行下列步驟

    1. 啟動瀏覽器瀏覽  www.google.com

    2. Google搜尋頁面中找到搜尋輸入框 q,  輸入 bddfire google Search文字

    3. 搜尋結果頁面會出現 Sign in的文字

    Feature: Google Search to explore BDDfire
    
    
    Scenario: View home page
      Given I am on "http://www.google.com"
      When I fill in "q" with the text "bddfire Google Search"
      Then I should see "Sign in"

     

    參考

    https://www.qatestingtools.com/compare-bdd-testing-tools

    http://jbehave.org/

     

  • Jmeter 3.1/3.2新版重大改進

    Related image

    Jmeter 被大量的應用在效能測試, WebAPI 測試,

    Jmeter 3.0 之後讓這開源的工具變得越來越人性化,

    這篇文章主要介紹幾個 3.1/3.2常用功能的重大改進

     

    Response Assertion

    這個功能是進行 Web 或是 rest API 測試一定會用到的

    因為我們測試每一個 Web API  會對於請求返回的響應Http Response做驗證

    查看該 Http Response 是否有預期的回傳值就可以使用這個 Response Assertion

    3.2 新版提供可以定義 OR 的功能

     

    XPath Extractor

    這用在什麼場景呢? 主要是我們希望針對 Http Response 的內容儲存在特定變數供之後使用, 例如

    1. 回傳登入成功的 SessionID或是 Token, 因為這些值都是亂數動態產生, 因為我們藉由 Xpath Extractor 動態將這些值儲存到指定變數, 方便之後使用
    2. 回傳大量的資料表, 我們希望將資料表特定的資料儲存在變數中

    如何取出成功的 sessoinID 呢? 主要靠的就是 Xpath 表示法, 支援regular expression

    該功能可以幫助我們將Http Response符合regular expression 的表示式的值取出

    問題來了, 如果該Http Response 內容中有很多符合該 Regular expression 表示式, 那究竟要取哪一個值呢?

    因此新版提供了許多方式可以取, 可以隨機取, 指定第幾個等

    自動錄製與重放功能

    對於JMeter 新手來說, 錄製與重放確實是一個最快而且方便的工具

    新版的 Jmeter 將錄製的介面變得更簡單

     

    模擬人的思考時間

    當我們要模擬人操作 Web 動作時候, 由於機器執行的緣故, 所以每個操作步驟間都需要加上等待時間

    每一個等待時間的設定都有些繁瑣

    新版可以時間加上 “Think Time”讓 Jmeter 重放自動化操作時的 Http Request 更接近人的操作行為

     

     

    測試統計報告

    提供更多的測試報告結果, 將每個操作步驟分為執行, 回覆與網路時間等

    這些豐富的測試報告的呈現也會讓整個測試的效果與價值的體現更加容易

    連線數

     

     

     

     

  •  

     

    https://www.rsaconference.com/writable/presentations/file_upload/asec-f02-writing-secure-software-is-hard-but-at-least-add-mitigations_final.pdf

     

    https://www.owasp.org/images/5/54/OWASPSpain8_VULNEX_BinSecSweeper.pdf

     

    Microsoft Security Development Lifecycle (SDL) Process Guidance – Version 5.2

    Exploitation相關技巧與防護

    http://hick.org/~mmiller/presentations/misc/exploitation_techniques_and_mitigations_on_windows.pdf

     

    工具  BinScope (Windows)

    https://www.microsoft.com/en-us/download/details.aspx?id=44995

     

    工具 checkSec.sh (Linux)

    http://www.trapkit.de/tools/checksec.html

     

    Compiler/Tool Minimum Required Version
    and Switches/Options
    Optimal/Recommended Version
    and Switches/Options
    Comments
    C/C++ Compiler Microsoft Visual Studio .NET 2008
    cl.exe Version 14.00.50727.42

    Use /GS

    Use /GS

     

    Link.exe Version 8.00.50727.762
    Use /SAFESEHUse /NXCOMPAT and don’t use /NXCOMPAT:NO.See Appendix F: SDL Requirement: No Executable Pages for more information.
    Use /SAFESEH

    Use /functionpadmin:5

    Use /DYNAMICBASE

    Visual Studio 2008 SP1 is needed for /DYNAMICBASE
    MIDL.exe Version 6.00.0366

    Use /robust

    Use /robust
    Source code analysis

     

    Visual Studio 2008 Code Analysis Options (“/analyze”)

    For Visual Studio 2008 code analysis, all warning IDs from the following list must be fixed: 4532 6029 6053 6057 6059 6063 6067 6200 6201 6202 6203 6204 6248 6259 6260 6268 6276 6277 6281 6282 6287 6288 6289 6290 6291 6296 6298 6299 6305 6306 6308 6334 6383

     

     

    Visual Studio 2008 Code Analysis Options (“/analyze”).

    For Visual Studio 2008 code analysis, all warning IDs from the following list must be fixed: 4532 6029 6053 6057 6059 6063 6067 6200 6201 6202 6203 6204 6248 6259 6260 6268 6276 6277 6281 6282 6287 6288 6289 6290 6291 6296 6298 6299 6305 6306 6308 6334 6383

     

    Standard Annotation Language (SAL): Code annotated with SAL should correct additional warnings, in addition to those listed above. See Appendix H: SDL Standard Annotation Language (SAL) Recommendations for Native Win32 Code for more information. The warnings are summarized as follows:

     

    SAL Compliance

    Visual Studio 2008: 26020–26023

     

    /analyze

    Visual Studio 2008: 6029 6053 6057 6059 6063 6067 6201–6202 6248 6260 6276 6277 6305

    Visual Studio 2008 Team Edition contains a publicly available version that is branded as “C/C++ Code Analysis.”

     

    Protecting Against Heap Corruption n/a All executable programs written using unmanaged code (.EXE) must call the HeapSetInformation interface. See Appendix I: SDL Requirement: Heap Manager Fail Fast Setting for more information.
    C4700 and C4701 Compiler Warnings n/a Compile code with C4700 and C4701 compiler warnings enabled and fix all instances of these warnings.