Behave用戶自定義數據類型

在step句子中, 所有的參數默認是string類型, 如果用戶想使用復雜的或者其他數據類型, 就需要了解以下bahave中的數據類型.

behave的數據類型轉換器是在parse和cfparse中支持.

parse模塊是string.format的逆函數.? parse_type是基于parse的擴展, 簡化了自定義數據類型的產生.

parse feature

    • 在類型轉換器中可選pattern
    • 函數描述符with_pattern()

parse_type feature

    • 簡化類型轉換器的生成
    • 基于cardinality創建類型轉換器
    • 提供擴展的解析器支持cardinality field
      CardinalityExampleDescription
      0..1“{person:Person?}”Zero or one: For optional parts.
      0..*“{persons:Person*}”Zero or more: For list<T> (many0).
      1..*“{persons:Person+}”One or more: For list<T> (many).

如何定義自定義數據類型

  1. 用戶注冊一個數據類型, 例如在environment.py文件中
  2. parse.Parse匹配string作為一個數據類型, 然后它調用類型轉換器去轉換匹配的文本為目標數據類型
    #普通的類型轉換
    from behave import register_typedef parse_number(text):"""Convert parsed text into a number.:param text: Parsed text, called by :py:meth:`parse.Parser.parse()`.:return: Number instance (integer), created from parsed text."""return int(text)
    # -- REGISTER: User-defined type converter (parse_type).
    register_type(Number=parse_number)#帶有正則的類型轉換
    @parse.with_pattern(r"a\s+")
    def parse_word_a(text):"""Type converter for "a " (followed by one/more spaces)."""return text.strip()register_type(a_=parse_word_a)

parse中預定義的數據類型

http://jenisys.github.io/behave.example/datatype/builtin_types.html

Cardinality 0 or 1(optional)

#這個實現比上一個實現多了一步 TypeBuilder.with_optional(parse_word_a).
from behave import register_type
from parse_type import TypeBuilder
import parse@parse.with_pattern(r"a\s+")
def parse_word_a(text):"""Type converter for "a " (followed by one/more spaces)."""return text.strip()# -- SAME:
# parse_optional_word_a = TypeBuilder.with_zero_or_one(parse_word_a)
parse_optional_word_a   = TypeBuilder.with_optional(parse_word_a)
register_type(optional_a_=parse_optional_word_a)#step_impl中{:optional_a_}是一個可選項, 在step既可以有"a "也可以沒有
@when('attacked by {:optional_a_}{opponent}')
def step_attacked_by(context, a_, opponent):context.ninja_fight.opponent = opponent

?

Cardinality 1++

from behave import register_type
from parse_type import TypeBuildercompany_persons = [ "Alice", "Bob", "Charly", "Dodo" ]
parse_person = TypeBuilder.make_choice(company_persons)
register_type(Person=parse_person)# -- MANY-TYPE: Persons := list<Person> with list-separator = "and"
# parse_persons = TypeBuilder.with_one_or_more(parse_person, listsep="and")
parse_persons = TypeBuilder.with_many(parse_person, listsep="and")
register_type(PersonAndMore=parse_persons)# -- NEEDED-UNTIL: parse_type.cfparse.Parser is used by behave.
# parse_persons2 = TypeBuilder.with_many(parse_person)
# type_dict = {"Person+": parse_persons2}
# register_type(**type_dict)

?

  Cardinality 0++

from behave import register_type
from parse_type import TypeBuilderdef slurp_space(text):return text
slurp_space.pattern = r"\s*"
register_type(slurp_space=slurp_space)parse_color = TypeBuilder.make_choice([ "red", "green", "blue", "yellow" ])
register_type(Color=parse_color)# -- MANY-TYPE: Persons := list<Person> with list-separator = "and"
# parse_colors = TypeBuilder.with_many0(parse_color, listsep="and")
parse_colors0A= TypeBuilder.with_zero_or_more(parse_color, listsep="and")
register_type(OptionalColorAndMore=parse_colors0A)

?

  

?

?

轉載于:https://www.cnblogs.com/v394435982/p/6403179.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253417.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253417.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253417.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IC Compiler指南——數據準備

一、概述 ICC數據設置的文件關系框圖如圖&#xff1a; 后端工具在數據設置階段需要對兩大類數據進行設置&#xff0c;包括從前端設計繼承的綜合數據 以及后端設計需要的物理數據。 綜合數據主要包括前端邏輯綜合已經設置過的邏輯與時序庫文件、設計約束文件sdc以 及綜合網表文…

iOS Xcode全面剖析

前言 前幾天在公司內部做了一次關于iOS的入門分享&#xff0c;聽眾有PHP、Web、Android、測試、產品、UI等&#xff0c;主旨是力求不懂iOS的人能了解iOS的開發流程&#xff0c;聽后都能創建一個iOS項目并打印HelloWorld。&#xff08;這是背景&#xff09;你想想就這么點需求&a…

VS2013編譯OBS源碼

obs源碼來之&#xff1a;https://sourceforge.net/projects/obsproject/ 下載源碼之后直接打開sln索引文件就行 項目打開之后 obs作為啟動項 直接編譯就行&#xff0c;正常應該一下就能編譯成功。 在運行的時候可能會報錯&#xff1a; 這個問題就需要制定一下編譯輸出路徑&…

Y/C分離/2/3D濾波器

待整理http://blog.csdn.net/yangzhifu/article/details/7388101 http://wenku.baidu.com/view/f997d705cc1755270722086d.html

構建之法閱讀筆記04

敏捷開發是一系列價值觀和方法論的集合。在敏捷的大旗下&#xff0c;我們可以看到好幾種軟件開發的方法論&#xff0c;我們在這里主要分析Scrum這個方法論。 從Scrum方法論中分析&#xff0c;敏捷開發一共分四步&#xff1a; 第一步&#xff1a;找出完成產品需要做的事情——Pr…

js圖片切換

1.不同方式的圖片切換 功能點:   1.頁面默認循環切換,循環切換按鈕獲得焦點   2.點擊順序切換時,順序切換按鈕獲得焦點     點擊上一張時,當圖片為第一張時,圖片不再進行切換,圖片張數和描述也不在變動;     點擊下一張時,當圖片為最后一張時,圖片不再進行切換,圖片…

網絡攝象機常用傳輸協議

多播路由是一個很好的技術&#xff0c;在Internet上實現了對數據的“廣播”&#xff0c;不同于廣播的是&#xff0c;由于廣播風暴的問題&#xff0c;路由器是禁止廣播數據跨路由傳送的。而多播則很好的解決了這個問題。現在M$軟件如&#xff1a;Netmeeting&#xff0c;WMS就廣泛…

CIS關鍵工藝技術概覽

相機作為一種媒介&#xff0c;可以記錄光所體現的物體&#xff0c;使人們能夠主觀或客觀地表達各種情感和思想。當代人類身處于一個所謂的“數字游牧時代”&#xff0c;人們攜帶各類移動數碼設備&#xff0c;生活不受時空的限制。在當今時代&#xff0c;相較于膠片相機&#xf…

Properties

Properties配置文件說明 Properties類對應.properties文件。文件內容是鍵值對&#xff0c;鍵值對之間使用""或空格隔開。開頭是"#"的表示注釋Properties類在加載.properties文件時使用的iso8859-1的編碼。所以這個文件中的中文要特殊處理&#xff1a;如果這…

1215 - Cannot add foreign key constraint

2019獨角獸企業重金招聘Python工程師標準>>> 參考網頁 https://blog.csdn.net/yiwangxiblog/article/details/52269527 https://blog.csdn.net/ytm15732625529/article/details/53729155 原因--親測 兩張表的存儲引擎不一致。主鍵所在表和外鍵所在表的存儲引擎改成一…

陳敏敏-130242014024-實驗一

實驗報告一 課程 軟件體系結構與設計 實驗名稱 軟件設計的網絡環境 第 頁 專業 軟件工程 班級 1班 學號 130242014024 姓名 陳敏敏 實驗日期&#xff1a; 2017 年 9 月 14 日 報告退發 (訂正 、 重做) 一、實驗目的 1.復習軟件工程的重要概念&…

音頻編碼

http://jsjdmtjs.jpk.dlpu.edu.cn/jxzy/kecheng/4-2.html

jquery 滾動條位置的

$(#fixedHead).width()//div的寬度 $(#fixedHead)[0].scrollWidth//滾動條的寬度 兩者的差為滾動條的寬度var b1$("#div1").height();//div的高度 var b2$(this)[0].scrollTop;//滾動條距離頂端的位置 var b3$(this)[0].scrollHeight;//滾動區的高度 b3b1b2滾動條到底…

Css3實現波浪線效果1

一、波浪線 &#xff0c;常用 .info::before {content: ;position: absolute;top: 30px;width: 100%;height: 0.25em;background:linear-gradient(135deg, transparent, transparent 45%, #008000, transparent 55%, transparent 100%),linear-gradient(45deg, transparent, tr…

ZZUOJ 10508: 數列游戲IV

題目鏈接&#xff1a;http://acm.zzu.edu.cn:8000/problem.php?id10508 題目大意&#xff1a;給定一個序列&#xff0c;長度為N&#xff0c;每次詢問為一組區間[Li,Ri],輸出Li到Ri中出現恰好兩次的不同數的個數. N,M<2*10^5&#xff0c;序列中元素<10^9 解題思路&#x…

dm368ipnc 重寫架構中的swosd 實現中文osd

appro的ipnc中只實現了英文的osd疊加&#xff0c;就連小小的ascii碼表都沒有覆蓋全&#xff0c;而且該swosd架構灰常凌亂。 其實無非就是兩個功能&#xff0c;一是疊加文字&#xff0c;而是疊加圖片&#xff0c;由于考慮到兼容不同的分辨率的視頻流&#xff0c;所以處理的分支相…

JAVA加密算法系列-AesCBC

package ***;import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder;/** * AES 是一種可逆加密算法&#xff0c;對用戶的敏感信息加密處理 * 對原始數…

dubbo系列(一)

進入官網之后&#xff0c;找到 http://dubbo.apache.org/en-us/docs/user/quick-start.html 有一個鏈接跳轉到這里 http://dubbo.apache.org/en-us/docs/admin/install/provider-demo.html 使用git將項目下載下來 修改如下Service實現類 1 /*2 * Licensed to the Apache Softw…

基于Flask實現后臺權限管理系統 - 表設計

1.1. 設計 1.1.1. 用戶表 用戶表記錄系統中的所有用戶&#xff0c;是權限管理系統最基本的部分&#xff0c;和其他權限表都有一定的關聯關系&#xff0c;同時&#xff0c;一個還有一個重要的功能&#xff1a;系統登陸。 名稱 數據類型 允許空值 默認值 描述 ID VARCHAR …

DM8168的McSPI/McASP/McBSP接口

McSPI接口 SPI管腳&#xff1a; 管腳 類型 描述 SPI_SCLK I/O SPI串行時鐘&#xff08;MASTER時&#xff1a;輸出&#xff1b;SLAVE&#xff1a;輸入&#xff09; SPI_D0 I/O 能被配置為輸入或輸出&#xff08;MOSI&#xff1a;master out&#xff0c;slave in或MISO&…