日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不会自动化UI测试?不会编程?没问题,会造句就行!

發布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不会自动化UI测试?不会编程?没问题,会造句就行! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上次,我們介紹了用于Web應用程序自動化測試的工具Playwright for .NET。

但是直接使用它來編寫測試用例,代碼比較凌亂,后期也不好維護。

因此,我們利用SpecFlow讓測試用例更好理解和維護。

1.SpecFlow介紹

SpecFlow是.Net平臺下用于行為驅動開發的開源框架。它使用普通人能夠理解的的軟件需求描述作為軟件測試的基礎,并可以將它們轉換為可執行代碼。

詳細介紹可參看官網:https://specflow.org/

2.安裝SpecFlow擴展

運行VS2019,選擇菜單“擴展”->“管理擴展”,在打開的窗口在搜索“SpecFlow”:

點擊“下載”按鈕開始安裝,重新啟動VS完成安裝。

3.創建SpecFlow項目

新建項目,選擇“SpecFlow project”模板,點擊“創建”按鈕,在彈出的窗口中選擇.NET框架和測試框架。這里我們選擇MSTest作為測試框架:

點擊“Create”按鈕,最終生成的項目結構如下圖:?

4.添加Feature文件

在解決方案資源管理器的Feature文件夾上點右鍵,添加"SpecFlow Feature File",命名為BaiduAdvancedSearch.feature。

Feature是一個純文本文件,它的作用是使用被稱為Gherkin的語法,按照Given/When/Then的特定示例格式來編寫軟件需求描述。

執行百度高級搜索的操作的Feature描述如下:

Feature:?百度高級搜索所有場景必須順序執行Scenario:?(1)顯示高級搜索頁面Given?打開百度首頁When?鼠標懸停在“設置”按鈕And?點擊設置菜單上的“高級搜索“按鈕Then?彈出高級搜索頁面Scenario:?(2)執行高級搜索Given?輸入關鍵詞"My?IO"When?點擊高級搜索頁面上的“高級搜索"按鈕Then?搜索框顯示關鍵詞"My?IO"

我們把一個需求分成2個連續的場景(Scenario),每個場景又有多個步驟。

5.生成Step文件

在Feature文件空白處點擊右鍵,選擇“Generate Step Definitions”菜單,在彈出窗口中設置class name為BaiduAdvancedSearchSteps,點擊“Generate”按鈕:?

生成的文件中已經包含了對應描述文件的空方法:

可以看到,描述中用雙引號表示的搜索關鍵詞自動變成了參數。這樣就算調整相關描述,也無需修改代碼!

6.填充代碼

現在,我們可以按照方法描述填空,代碼可以來自于Playwright?的錄制功能:

完整代碼如下:

using?BoDi; using?Microsoft.Playwright; using?Microsoft.VisualStudio.TestTools.UnitTesting; using?System; using?System.Threading.Tasks; using?TechTalk.SpecFlow;namespace?SpecFlowProject1.Steps {[Binding]public?class?BaiduAdvancedSearchSteps{[BeforeFeature]public?static?async?Task?BeforeFeature(IObjectContainer?container){var?playwright?=?await?Playwright.CreateAsync();var?browser?=?await?playwright.Chromium.LaunchAsync(new()?{?Headless?=?false,?SlowMo=1000?});var?page?=?await?browser.NewPageAsync();container.RegisterInstanceAs<IPage>(page);}private?IPage?_page;public?BaiduAdvancedSearchSteps(IPage?page){this._page?=?page;}[Given(@"打開百度首頁")]public?async?Task?Given打開百度首頁(){await?_page.GotoAsync("https://www.baidu.com/");}[When(@"鼠標懸停在“設置”按鈕")]public?async?Task?When鼠標懸停在設置按鈕(){await?_page.WaitForSelectorAsync("#s-usersetting-top");await?_page.HoverAsync("#s-usersetting-top");}[When(@"點擊設置菜單上的“高級搜索“按鈕")]public?async?Task?When點擊設置菜單上的高級搜索按鈕(){await?_page.ClickAsync("a[href='//www.baidu.com/gaoji/advanced.html']");}[Then(@"彈出高級搜索頁面")]public?async?Task?Then彈出高級搜索頁面(){var?handle?=?await?_page.WaitForSelectorAsync(".bdlayer.s-isindex-wrap.new-pmd.pfpanel");var?style?=?await?handle.GetAttributeAsync("style");Assert.IsTrue(style.Contains("display:?block;"));}[Given(@"輸入關鍵詞""(.*)""")]public?async?Task?Given輸入關鍵詞(string?p0){await?_page.TypeAsync("input[name='q1']",?p0);}[When(@"點擊高級搜索頁面上的“高級搜索""按鈕")]public?async?Task?When點擊高級搜索頁面上的高級搜索按鈕(){_page?=?await?_page.RunAndWaitForPopupAsync(async?()?=>{?await?_page.ClickAsync(".advanced-search-btn");});}[Then(@"搜索框顯示關鍵詞""(.*)""")]public?async?Task?Then搜索框顯示關鍵詞(string?p0){var?handle?=?await?_page.WaitForSelectorAsync("#kw");var?text?=?await?handle.GetAttributeAsync("value");Assert.AreEqual(p0,?text);}} }

7.執行測試

選擇菜單“測試”->“運行所有測試”,可以看到所有測試運行通過:?

你還可以關閉瀏覽器無頭模式,用可視化的方式觀察測試是如何工作的:

//關閉瀏覽器無頭模式,每步操作延遲1秒 var?browser?=?await?playwright.Chromium.LaunchAsync(new()?{?Headless?=?false,?SlowMo=1000?});

結論

通過上面的示例。我們看到,Feature除了少數幾個簡單的英語單詞外,全部都可以用中文,沒有一行代碼!

完全可以由業務需求人員來編寫測試用例,同時可以保證大家都能夠理解,達成共識。

而測試代碼也是不言自明的,對后期維護非常有利。

還等什么,Playwright for .NET + SpecFlow,走你!

如果你覺得這篇文章對你有所啟發,請關注我的個人公眾號”My IO“,記住我!

總結

以上是生活随笔為你收集整理的不会自动化UI测试?不会编程?没问题,会造句就行!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。