openshift_为Openshift + MongoDb应用程序编写验收测试
openshift
驗收測試用于確定是否滿足規(guī)范要求。 它應(yīng)在與生產(chǎn)環(huán)境盡可能相似的環(huán)境中運行。 因此,如果您的應(yīng)用程序已部署到Openshift中,則您將需要一個與生產(chǎn)環(huán)境中使用的帳戶平行的帳戶,以運行測試。 在這篇文章中,我們將為部署到Openshift的應(yīng)用程序編寫驗收測試,該應(yīng)用程序使用MongoDb作為數(shù)據(jù)庫后端。
部署的應(yīng)用程序是一個非常非常簡單的庫,它返回所有可借出的書。 該應(yīng)用程序使用MongoDb來存儲與書籍有關(guān)的所有信息。
因此,讓我們開始描述先前應(yīng)用程序的目標,功能,用戶故事和接受標準。
目標 :擴大對大多數(shù)人的授課范圍。
功能 :顯示可用的書。
用戶故事 :瀏覽目錄->為了查找我想借的書,作為用戶,我希望能夠瀏覽所有書。 驗收標準 :應(yīng)該查看所有可用的書。
場景:
鑒于我想借一本書
當我在目錄頁面時
然后,我應(yīng)該會看到可用的書籍信息:罐子之王– 1299 – LOTRCoverUrl,霍比特人– 293 – HobbitCoverUrl
注意,這是一個非常簡單的應(yīng)用程序,因此接受標準也很簡單。
對于此示例,我們需要兩個測試框架,第一個用于編寫和運行驗收測試,另一個用于管理NoSQL后端。 在這篇文章中,我們將使用修昔底德的ATDD和NoSQLUnit對付MongoDB的 。
該應(yīng)用程序已經(jīng)部署在Openshift中 ,您可以查看https://books-lordofthejars.rhcloud.com/GetAllBooks
Thucydides是一種工具,旨在簡化編寫自動驗收和回歸測試的過程。
Thucydides使用WebDriver API來訪問HTML頁面元素。 而且還可以幫助您通過使用具體的編程模型來組織測試和用戶故事,創(chuàng)建已執(zhí)行測試的報告,最后還可以測量功能覆蓋率。
要用Thucydides編寫驗收測試,應(yīng)遵循以下步驟。
- 首先,選擇您的功能之一的用戶故事。
- 然后實現(xiàn)PageObject類。 PageObject是一種將Web應(yīng)用程序的用戶界面元素建模為對象的模式,因此測試可以以編程方式與其交互。 請注意,在這種情況下,我們正在編碼“如何”訪問HTML頁面。
- 下一步是實現(xiàn)步驟庫。 此類將包含執(zhí)行操作所需的所有步驟。 例如,創(chuàng)建新書需要打開addnewbook頁面,插入新數(shù)據(jù),然后單擊提交按鈕。 在這種情況下,我們正在編碼需要執(zhí)行驗收標準的“什么”。
- 最后,按照定義的驗收標準并使用先前的步驟類對選定的用戶故事進行編碼。
NoSQLUnit是一個JUnit擴展,旨在使我們能夠管理所需的NoSQL引擎的生命周期,幫助我們將數(shù)據(jù)庫維護為已知狀態(tài),并使我們?yōu)镹oSQL應(yīng)用程序編寫測試的方式標準化。
NoSQLUnit由兩組JUnit規(guī)則和兩個注釋組成。 在當前情況下,我們不需要管理NoSQL引擎的生命周期,因為它是由外部實體( Openshift )管理的。
因此,讓我們開始工作:
我們要做的第一件事是創(chuàng)建一個不包含測試代碼的要素類。 它用作表示需求結(jié)構(gòu)的一種方式。
public class Application {@Featurepublic class Books {public class ListAllBooks {}}}請注意,每個實現(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>這里最重要的是表標記具有一個名為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我們其URL被映射,以@FindBy我們映射ID為listBooks網(wǎng)絡(luò)元件設(shè)置,并返回生成的html表的內(nèi)容最后getBooksTable()方法。
接下來要做的是實現(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);}}最后是驗證驗收標準的課程:
@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)該考慮一些事項:
- @Story應(yīng)該收到一個使用@Feature批注定義的類,以便Thucydides可以正確創(chuàng)建報告。
- 我們使用MongoDbRule建立與遠程MongoDb實例的連接。 請注意,由于端口轉(zhuǎn)發(fā)具有Openshift功能,因此我們可以使用本地主機地址,因此盡管使用了本地主機,但實際上我們正在管理遠程MongoDb實例。
- 使用@Steps Thucydides將創(chuàng)建先前步驟庫的實例。
- 最后使用@UsingDataSet批注在運行測試之前將數(shù)據(jù)填充到MongoDb數(shù)據(jù)庫中。
請注意, NoSQLUnit通過在每次測試執(zhí)行之前清理數(shù)據(jù)庫并將其定義為json文件中的已知數(shù)據(jù)來填充數(shù)據(jù)庫, 從而將數(shù)據(jù)庫保持為已知狀態(tài)。
還請記住,此示例非常簡單,因此僅顯示了Thucydides和NoSQLUnit功能的一小部分。 繼續(xù)觀看兩個網(wǎng)站: http : //thucydides.info和https://github.com/lordofthejars/nosql-unit
我們不斷學(xué)習(xí), 亞歷克斯參考:來自我們的JCG合作伙伴 Alex Soto的Openshift + MongoDb應(yīng)用程序編寫驗收測試,位于One Jar To Rule Allm博客上。
翻譯自: https://www.javacodegeeks.com/2012/12/writing-acceptance-tests-for-openshift-mongodb-applications.html
openshift
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的openshift_为Openshift + MongoDb应用程序编写验收测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 屏蔽电脑显示器图标(屏蔽笔记本显示器)
- 下一篇: 如何下载微信里的小视频微信视频如何下载到