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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为Openshift + MongoDb应用程序编写验收测试

發(fā)布時(shí)間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为Openshift + MongoDb应用程序编写验收测试 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

驗(yàn)收測試用于確定是否滿足規(guī)范要求。 它應(yīng)該在與生產(chǎn)環(huán)境盡可能相似的環(huán)境中運(yùn)行。 因此,如果您的應(yīng)用程序已部署到Openshift中,則您將需要一個與生產(chǎn)環(huán)境中使用的帳戶平行的帳戶,以運(yùn)行測試。 在這篇文章中,我們將為部署到Openshift的應(yīng)用程序編寫驗(yàn)收測試,該應(yīng)用程序使用MongoDb作為數(shù)據(jù)庫后端。

部署的應(yīng)用程序是一個非常非常簡單的庫,它返回所有可借出的書。 該應(yīng)用程序使用MongoDb來存儲與書籍有關(guān)的所有信息。

因此,讓我們開始描述先前應(yīng)用程序的目標(biāo),功能,用戶故事和接受標(biāo)準(zhǔn)。

目標(biāo) :擴(kuò)大對大多數(shù)人的授課范圍。
功能 :顯示可用的書。
用戶故事 :瀏覽目錄->為了查找我想借的書,作為用戶,我希望能夠?yàn)g覽所有書。 驗(yàn)收標(biāo)準(zhǔn) :應(yīng)該查看所有可用的書。

場景:

鑒于我想借一本書
當(dāng)我在目錄頁面時(shí)
然后,我應(yīng)該會看到可用的書籍信息:罐子之王– 1299 – LOTRCoverUrl,霍比特人– 293 – HobbitCoverUrl

注意,這是一個非常簡單的應(yīng)用程序,因此接受標(biāo)準(zhǔn)也很簡單。

對于此示例,我們需要兩個測試框架,第一個用于編寫和運(yùn)行驗(yàn)收測試,另一個用于管理NoSQL后端。 在這篇文章中,我們將使用修昔底德的ATDD和NoSQLUnit對付MongoDB的

該應(yīng)用程序已經(jīng)部署在Openshift中 ,您可以查看https://books-lordofthejars.rhcloud.com/GetAllBooks

Thucydides是一種工具,旨在簡化編寫自動驗(yàn)收和回歸測試的過程。

Thucydides使用WebDriver API訪問HTML頁面元素。 而且還可以幫助您通過使用具體的編程模型來組織測試和用戶故事,創(chuàng)建已執(zhí)行測試的報(bào)告,最后還可以測量功能覆蓋率。

要用Thucydides編寫驗(yàn)收測試,應(yīng)遵循以下步驟。

  • 首先,選擇您的功能之一的用戶故事。
  • 然后實(shí)現(xiàn)PageObject類。 PageObject是一種將Web應(yīng)用程序的用戶界面元素建模為對象的模式,因此測試可以以編程方式與其交互。 請注意,在這種情況下,我們正在編碼“如何”訪問HTML頁面。
  • 下一步是實(shí)現(xiàn)步驟庫。 此類將包含執(zhí)行操作所需的所有步驟。 例如,創(chuàng)建新書需要打開addnewbook頁面,插入新數(shù)據(jù),然后單擊提交按鈕。 在這種情況下,我們正在編碼“什么”來實(shí)現(xiàn)驗(yàn)收標(biāo)準(zhǔn)。
  • 最后,按照定義的驗(yàn)收標(biāo)準(zhǔn)并使用先前的步驟類對選定的用戶故事進(jìn)行編碼。

NoSQLUnit是一個JUnit擴(kuò)展,旨在使我們能夠管理所需的NoSQL引擎的生命周期,幫助我們將數(shù)據(jù)庫維護(hù)為已知狀態(tài)并簡化為NoSQL應(yīng)用程序編寫測試的方式。

NoSQLUnit由兩組JUnit規(guī)則和兩個注釋組成。 在當(dāng)前情況下,我們不需要管理NoSQL引擎的生命周期,因?yàn)樗怯赏獠繉?shí)體( Openshift )管理的。

因此,讓我們開始工作:

我們要做的第一件事是創(chuàng)建一個不包含測試代碼的要素類。 它用作表示需求結(jié)構(gòu)的一種方式。

public class Application {@Featurepublic class Books {public class ListAllBooks {}}}

請注意,每個實(shí)現(xiàn)的功能都應(yīng)包含在帶有@Feature注釋的類中。 特色類的每種方法都代表一個用戶故事。

下一步是創(chuàng)建PageObject類。 請記住,PageObject模式將Web應(yīng)用程序的用戶界面建模為對象。 因此,讓我們看一下html文件,以檢查必須映射的元素。

<table id='listBooks' cellspacing='0' cellpadding='5'><caption>List of Available Books<caption><tr><th>Title<th><th>Number Of Pages<th><th>Cover<th><tr>.....<table>

這里最重要的是表標(biāo)記具有一個名為listBooks的ID ,將在PageObject類中使用該ID以獲得對其參數(shù)和數(shù)據(jù)的引用。 讓我們編寫頁面對象:

@DefaultUrl('http:books-lordofthejars.rhcloud.comGetAllBooks')public class FindAllBooksPage extends PageObject {@FindBy(id = 'listBooks')private WebElement tableBooks;public FindAllBooksPage(WebDriver driver) {super(driver);}public TableWebElement getBooksTable() {Map<String, List<String>> tableValues = new HashMap<String, List<String>>();tableValues.put('titles', titles());tableValues.put('numberOfPages', numberOfPages());tableValues.put('covers', coversUrl());return new TableWebElement(tableValues);}private List<String> titles() {List<WebElement> namesWebElement = tableBooks.findElements(By.className('title'));return with(namesWebElement).convert(toStringValue());}private List<String> numberOfPages() {List<WebElement> numberOfPagesWebElement = tableBooks.findElements(By.className('numberOfPages'));return with(numberOfPagesWebElement).convert(toStringValue());}private List<String> coversUrl() {List<WebElement> coverUrlWebElement = tableBooks.findElements(By.className('cover'));return with(coverUrlWebElement).convert(toImageUrl());}private Converter<WebElement, String> toImageUrl() {return new Converter<WebElement, String>() {@Overridepublic String convert(WebElement from) {WebElement imgTag = from.findElement(By.tagName('img'));return imgTag.getAttribute('src');}};}private Converter<WebElement, String> toStringValue() {return new Converter<WebElement, String>() {@Overridepublic String convert(WebElement from) {return from.getText();}};}}

使用@DefaultUrl我們設(shè)置要映射的URL,使用@FindBy我們映射ID為listBooks的Web元素,最后映射返回生成的html表內(nèi)容的getBooksTable()方法。

接下來要做的是實(shí)現(xiàn)步驟類。 在這種簡單的情況下,我們只需要兩步,第一步打開GetAllBooks頁面,另一步斷言該表包含期望的元素。

public class EndUserSteps extends ScenarioSteps {public EndUserSteps(Pages pages) {super(pages);}private static final long serialVersionUID = 1L;@Steppublic void should_obtain_all_inserted_books() {TableWebElement booksTable = onFindAllBooksPage().getBooksTable();List<String> titles = booksTable.getColumn('titles');assertThat(titles, hasItems('The Lord Of The Rings', 'The Hobbit'));List<String> numberOfPages = booksTable.getColumn('numberOfPages');assertThat(numberOfPages, hasItems('1299', '293'));List<String> covers = booksTable.getColumn('covers');assertThat(covers, hasItems('http:upload.wikimedia.orgwikipediaen662Jrrt_lotr_cover_design.jpg', 'http:upload.wikimedia.orgwikipediaen44aTheHobbit_FirstEdition.jpg'));}@Steppublic void open_find_all_page() {onFindAllBooksPage().open();}private FindAllBooksPage onFindAllBooksPage() {return getPages().currentPageAt(FindAllBooksPage.class);}}

最后是驗(yàn)證驗(yàn)收標(biāo)準(zhǔn)的課程:

@Story(Application.Books.ListAllBooks.class)@RunWith(ThucydidesRunner.class)public class FindBooksStory {private final MongoDbConfiguration mongoDbConfiguration = mongoDb().host('127.0.0.1').databaseName('books').username(MongoDbConstants.USERNAME).password(MongoDbConstants.PASSWORD).build();@Rulepublic final MongoDbRule mongoDbRule = newMongoDbRule().configure(mongoDbConfiguration).build();@Managed(uniqueSession = true)public WebDriver webdriver;@ManagedPages(defaultUrl = 'http:books-lordofthejars.rhcloud.com')public Pages pages;@Stepspublic EndUserSteps endUserSteps;@Test@UsingDataSet(locations = 'books.json', loadStrategy = LoadStrategyEnum.CLEAN_INSERT)public void finding_all_books_should_return_all_available_books() {endUserSteps.open_find_all_page();endUserSteps.should_obtain_all_inserted_books();}}

在上一堂課中應(yīng)該考慮一些事項(xiàng):

  • @Story應(yīng)該收到一個使用@Feature批注定義的類,以便Thucydides可以正確創(chuàng)建報(bào)告。
  • 我們使用MongoDbRule建立與遠(yuǎn)程MongoDb實(shí)例的連接。 請注意,由于端口轉(zhuǎn)發(fā)具有Openshift功能,因此我們可以使用本地主機(jī)地址,因此盡管使用了本地主機(jī),但實(shí)際上我們正在管理遠(yuǎn)程MongoDb實(shí)例。
  • 使用@Steps Thucydides將創(chuàng)建先前步驟庫的實(shí)例。
  • 最后使用@UsingDataSet批注在運(yùn)行測試之前將數(shù)據(jù)填充到MongoDb數(shù)據(jù)庫中。
{'book':[{'title': 'The Lord Of The Rings','numberOfPages': '1299','cover': 'http:upload.wikimedia.orgwikipediaen662Jrrt_lotr_cover_design.jpg' }, {'title': 'The Hobbit','numberOfPages': '293','cover': 'http:upload.wikimedia.orgwikipediaen44aTheHobbit_FirstEdition.jpg'}]}

請注意, NoSQLUnit通過在每次測試執(zhí)行之前清理數(shù)據(jù)庫并將其定義為json文件中的已知數(shù)據(jù)來填充數(shù)據(jù)庫, 從而將數(shù)據(jù)庫保持為已知狀態(tài)。

還請記住,此示例非常簡單,因此僅顯示了ThucydidesNoSQLUnit功能的一小部分。 繼續(xù)觀看兩個網(wǎng)站: http : //thucydides.info和https://github.com/lordofthejars/nosql-unit

我們不斷學(xué)習(xí), 亞歷克斯

參考:來自我們的JCG合作伙伴 Alex Soto的Openshift + MongoDb應(yīng)用程序的編寫驗(yàn)收測試,位于One Jar To Rule All All博客上。

翻譯自: https://www.javacodegeeks.com/2012/12/writing-acceptance-tests-for-openshift-mongodb-applications.html

總結(jié)

以上是生活随笔為你收集整理的为Openshift + MongoDb应用程序编写验收测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。