JWebUnit使用:jWebUnit是基於Java的Web應用程式的測試框架 .
1什麼是JWebUnit
jWebUnit是基於Java的Web應用程式的測試框架。 它包裝現有的測試框架如 HtmlUnit 和 Selenium,用一個統一的,簡單的測試介面,讓您可以快速測試您的Web應用程式的正確性。
2JWebUnit的作用
JWebUnit提供一個高層次的Java API,用於嚮導的Web應用程式結合的斷言,以驗證應用程式的正確性。 這包括通過連結,表單輸入和提交,驗證表的內容,和其他典型的商業Web應用程式的功能嚮導。
簡單的嚮導方法和準備使用的斷言允許超過只使用快速測試的建立JUnit或HtmlUnit 。
3使用JWebUnit HelloWorld
http://jwebunit.sourceforge.net/apidocs/index.html
測試版本:jwebunit-3.0-release
匯入jar:jwebunit-3.0-release\lib
(servlet-api-2.5.jar一般你如果建立web工程就會已經有了)
HelloWorld:
4選擇您要使用的外掛
JWebUnit可以使用不同的外掛來執行你寫的測試。通過一個設定來進行區分:
如果在你的環境變數裡面就一種外掛,上面的設定是可以省略的,JWebUnit能夠自動尋找到這個唯一的外掛。
5部署你的測試嚮導上下文
JWebUnit允許您測試您的Web應用程式的主要方式,是通過應用程式本身的嚮導。 通過測試嚮導的管理,可以在每個測試用例裡面取得測試環境。
第一步是就是在一個統一資源管理的地方為測試嚮導指明嚮導的資源位置。
一般我們的地址就是一個測試伺服器的地址。
現在,測試環境裡面就存在了一個測試嚮導,測試嚮導管理了你的應用資源,那麼你就可以查詢這裡面的一些資源是否存在或者是否正確。
例如向下面這樣:設定一個導航起點,並且判斷每步的內容是否正確。
assertLinkPresent()搜尋一個字串ID的連結; assertLinkPresentWithText()連結包含一個文字字串搜尋。
具體查閱:http://jwebunit.sourceforge.net/apidocs/index.html
6使用表單
現在,我們可以訪問登入頁面,我們可以使用JWebUnit填寫表格,並斷言,它的結果如預期。
JWebUnit通過 HtmlUnit/Selenium,自動保持跟蹤cookies和Web應用程式指定的會話變數,允許您遍歷訪問您的網站,因為你就像一個普通使用者
如果一個網頁裡面有多個form,JWebUnit還可以通過form的id或者name進行區分:
你還可以觸發非提交按鍵 (type='button'):
7Working With Frames and Windows
You can assert the presence of and navigate to windows by name. For instance, if clicking on a button on the root page should open a window, you could test for this and go to the popup window as follows:
8驗證網頁內容
一旦你已經瀏覽到的頁面,你想測試,你可以呼叫JWebUnit提供的斷言,以驗證它的正確性。
9驗證表單的內容
JWebUnit還提供了驗證介面中表單內容的斷言。
你可以驗證簡單的內容或者佈局。HttpUnit可以清楚你表達的空格,便於你的測試。
The below test validates against this html table (the table id attribute is "ageTable"):
Name Age
Jim 30ish
Wilkes 20ish
如果您需要驗證非空白的表格單元格跨度超過單個列,類提供代表預期的表,行和單元格。
Age Table
Name Age
Jim 30ish
Wilkes 20ish
10使用元素ID來驗證內容
JWebUnit允許您檢查任何HTML元素的存在,其ID或元素的文字。 這可以是一個有用的技巧,檢查存在的一些頁面的邏輯部分。 即使在自由浮動的文字的情況下,一個span元素可以用來環繞文字,並給它一個邏輯ID:
<span id="welcomeMessage">Welcome, Joe User!</span>
11使用屬性檔案來驗證內容
JWebUnit提供了一種非硬編碼的方式來校驗內容,通過來配置屬性檔案,通過獲取property的key來獲取值:
還可以通過WebTester, WebTestCase 和 JWebUnit的getMessage方法獲取資源內容繫結到你的測試化境中。
jWebUnit是基於Java的Web應用程式的測試框架。 它包裝現有的測試框架如 HtmlUnit 和 Selenium,用一個統一的,簡單的測試介面,讓您可以快速測試您的Web應用程式的正確性。
2JWebUnit的作用
JWebUnit提供一個高層次的Java API,用於嚮導的Web應用程式結合的斷言,以驗證應用程式的正確性。 這包括通過連結,表單輸入和提交,驗證表的內容,和其他典型的商業Web應用程式的功能嚮導。
簡單的嚮導方法和準備使用的斷言允許超過只使用快速測試的建立JUnit或HtmlUnit 。
3使用JWebUnit HelloWorld
http://jwebunit.sourceforge.net/apidocs/index.html
測試版本:jwebunit-3.0-release
匯入jar:jwebunit-3.0-release\lib
(servlet-api-2.5.jar一般你如果建立web工程就會已經有了)
HelloWorld:
- jsp:
- index.jsp
- <body>
- <a href="login.jsp" id="login">login</a>
- </body>
- login.jsp
- <html>
- <head>
- <title>Login</title>
- </head>
- <body>
- <form action="servlet/LoginServlet" method="post">
- username:<input type="text" name="username"/><br/>
- password:<input type="password" name="pass"/>
- <input type="submit"/>
- </form>
- </body>
- </html>
- welcome.jsp
- <html>
- <head>
- <title>Welcome</title>
- </head>
- <body>
- welcome! <br>
- </body>
- </html>
- LoginServlet
- public class LoginServlet extends HttpServlet {
- @Override
- protected void service(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String username = request.getParameter("username");
- String passsword = request.getParameter("pass");
- System.out.println(username + " login ,pass is" + passsword);
- String path = request.getContextPath();
- response.sendRedirect(path + "/welcome.jsp");
- }
- }
- LoginServletTest
- package com.partner4java.servlet;
- import static net.sourceforge.jwebunit.junit.JWebUnit.*;
- import org.junit.Before;
- import org.junit.Test;
- public class LoginServletTest {
- @Before
- public void prepare(){
- setBaseUrl("http://localhost:8080/jwebunit");
- }
- @Test
- public void testLogin(){
- beginAt("index.jsp");
- clickLink("login");
- assertTitleEquals("Login");
- setTextField("username", "hello");
- setTextField("pass", "world");
- submit();
- assertTitleEquals("Welcome");
- }
- }
- Junit3:
- import net.sourceforge.jwebunit.junit.WebTestCase;
- public class ExampleWebTestCase extends WebTestCase {
- public void setUp() {
- super.setUp();
- setBaseUrl("http://localhost:8080/test");
- }
- public void test1() {
- beginAt("home.xhtml"); //Open the browser on http://localhost:8080/test/home.xhtml
- clickLink("login");
- assertTitleEquals("Login");
- setTextField("username", "test");
- setTextField("password", "test123");
- submit();
- assertTitleEquals("Welcome, test!");
- }
- }
4選擇您要使用的外掛
JWebUnit可以使用不同的外掛來執行你寫的測試。通過一個設定來進行區分:
- import net.sourceforge.jwebunit.util.TestingEngineRegistry;
- import org.junit.Before;
- import static net.sourceforge.jwebunit.junit.JWebUnit.*;
- public class ExampleWebTestCase {
- @Before
- public void prepare() {
- setTestingEngineKey(TestingEngineRegistry.TESTING_ENGINE_HTMLUNIT); // use HtmlUnit
- setTestingEngineKey(TestingEngineRegistry.TESTING_ENGINE_SELENIUM); // use Selenium
- }
- }
如果在你的環境變數裡面就一種外掛,上面的設定是可以省略的,JWebUnit能夠自動尋找到這個唯一的外掛。
5部署你的測試嚮導上下文
JWebUnit允許您測試您的Web應用程式的主要方式,是通過應用程式本身的嚮導。 通過測試嚮導的管理,可以在每個測試用例裡面取得測試環境。
第一步是就是在一個統一資源管理的地方為測試嚮導指明嚮導的資源位置。
- @Before
- public void prepare() {
- setBaseUrl("http://myserver:8080/myapp");
- }
現在,測試環境裡面就存在了一個測試嚮導,測試嚮導管理了你的應用資源,那麼你就可以查詢這裡面的一些資源是否存在或者是否正確。
例如向下面這樣:設定一個導航起點,並且判斷每步的內容是否正確。
- @Test
- public void testIndexLogin() {
- beginAt("index.html"); // start at index.html
- assertTitleEquals("Home"); // the home page should be titled "Home"
- assertLinkPresent("Login"); // there should be a "Login" link
- clickLink("Login"); // click the link
- assertTitleEquals("Login"); // we should now be on the login page
- }
assertLinkPresent()搜尋一個字串ID的連結; assertLinkPresentWithText()連結包含一個文字字串搜尋。
具體查閱:http://jwebunit.sourceforge.net/apidocs/index.html
6使用表單
現在,我們可以訪問登入頁面,我們可以使用JWebUnit填寫表格,並斷言,它的結果如預期。
- @Test
- public void testFormSubmission() {
- beginAt("login.html");
- assertTitleEquals("Login"); // we should be on the login page
- // fill out the form
- assertLinkNotPresent("Logout"); // we should not be logged in
- assertFormPresent("login_form");
- assertFormElementPresent("username");
- assertFormElementPresent("password");
- setTextField("username", "test");
- setTextField("password", "test123");
- assertFormElementEquals("username", "test");
- submit();
- // now that we have filled out the form,
- // we can assert that we can logout
- assertLinkPresent("Logout"); // we should now be logged in
- }
JWebUnit通過 HtmlUnit/Selenium,自動保持跟蹤cookies和Web應用程式指定的會話變數,允許您遍歷訪問您的網站,因為你就像一個普通使用者
如果一個網頁裡面有多個form,JWebUnit還可以通過form的id或者name進行區分:
- @Test
- public void testBottomFormSubmission() {
- beginAt("twoForm.html");
- setWorkingForm("bottomForm");
- submit();
- }
你還可以觸發非提交按鍵 (type='button'):
- @Test
- public void testPopupButton() {
- beginAt("info.html");
- assertButtonPresent("popupButtonId"); // clickButton() will also check this
- clickButton("popupButtonId");
- assertWindowPresent("popupWindow");
- }
7Working With Frames and Windows
You can assert the presence of and navigate to windows by name. For instance, if clicking on a button on the root page should open a window, you could test for this and go to the popup window as follows:
- @Test
- public void testPopupWindow() {
- beginAt("rootPage.html");
- clickLink("popupLink");
- assertWindowPresent("popupWindow): // optional - gotoWindow will
- // also perform this assertion.
- gotoWindow("popupWindow");
- ...
- gotoRootWindow(); //Use this method to return to root window.
- }
- You can work with frames in a similar manner:
- @Test
- public void testFrame() {
- beginAt("info.html");
- assertFramePresent("contentFrame");
- gotoFrame("contentFrame");
- ...
- }
8驗證網頁內容
一旦你已經瀏覽到的頁面,你想測試,你可以呼叫JWebUnit提供的斷言,以驗證它的正確性。
- @Test
- public void testCorrectness() {
- beginAt("mainPage.xhtml");
- assertTitleEquals("Main Page");
- assertLinkPresentWithText("Add Widget");
- clickLinkWithText("Add Widget");
- setTextField("widgetName", "My Widget");
- submit();
- assertTextPresent("Widget successfully added."):
- }
9驗證表單的內容
JWebUnit還提供了驗證介面中表單內容的斷言。
你可以驗證簡單的內容或者佈局。HttpUnit可以清楚你表達的空格,便於你的測試。
The below test validates against this html table (the table id attribute is "ageTable"):
Name Age
Jim 30ish
Wilkes 20ish
- @Test
- public void testAgeTable() {
- beginAt("agePage.html");
- // check that table is present
- assertTablePresent("ageTable");
- // check that a single string is present somewhere in table
- assertTextInTable("ageTable", "Jim");
- // check that a set of strings are present somewhere in table
- assertTextInTable("ageTable",
- new String[] {"Jim", "Wilkes"});
- // check composition of table rows/columns
- assertTableEquals("ageTable",
- new String[][] {{"Name", "Age"},
- {"Jim", "30ish"},
- {"Wilkes", "20ish"}});
- }
如果您需要驗證非空白的表格單元格跨度超過單個列,類提供代表預期的表,行和單元格。
Age Table
Name Age
Jim 30ish
Wilkes 20ish
- @Test
- public void testAgeTable() {
- beginAt("agePage.html");
- ExpectedTable ageTable = new Table(new Object[][] {
- {new Cell("Age Table", 2, 1)},
- {"Name", "Age"},
- {"Jim", "30ish"},
- {"Wilkes", "20ish"}
- });
- assertTableEquals("ageTable", expectedAgeTable);
- }
10使用元素ID來驗證內容
JWebUnit允許您檢查任何HTML元素的存在,其ID或元素的文字。 這可以是一個有用的技巧,檢查存在的一些頁面的邏輯部分。 即使在自由浮動的文字的情況下,一個span元素可以用來環繞文字,並給它一個邏輯ID:
<span id="welcomeMessage">Welcome, Joe User!</span>
- @Test
- public void testWelcomeMessage() {
- beginAt("mainPage.xhtml");
- // check for presence of welcome message by text
- assertTextPresent("Welcome, Joe User!");
- // check for presence of welcome message by element id
- assertElementPresent("welcomeMessage");
- // check for text within an element
- assertTextInElement("welcomeMessage", "Joe User");
- }
11使用屬性檔案來驗證內容
JWebUnit提供了一種非硬編碼的方式來校驗內容,通過來配置屬性檔案,通過獲取property的key來獲取值:
- @Before
- public void prepare() {
- setbaseUrl("http://myserver:8080/myapp");
- getTestContext().setResourceBundleName("ApplicationResources");
- }
- @Test
- public void testMainPage() {
- beginAt("mainPage.html");
- assertTitleEqualsKey("title.mainPage");
- assertKeyPresent("message.welcome");
- assertKeyInTable("mainPageTable", "header.mainPageTable");
- }
還可以通過WebTester, WebTestCase 和 JWebUnit的getMessage方法獲取資源內容繫結到你的測試化境中。
Whether to check for a given logical chunk of text by hard-coded string, property file lookup, or by use of an element id is up to you.
相關文章
- 搭建通用 GUI 測試框架步驟,適用於 MFC/JAVA 應用程式GUI框架Java
- 關於Electron框架應用的安全測試框架
- 基於Selenium+Python的web自動化測試框架PythonWeb框架
- 如何應用於Web框架的搭建Web框架
- Web應用程式測試的工具selenium用法詳解Web
- 基於 python--selenium 與 requests 的 web ui/ 介面混合測試框架PythonWebUI框架
- BurpSuite在非Web應用測試中的應用UIWeb
- [Hacker News 週報] Deno 原生 SSR web 框架;基於 Vite 的單元測試框架;程式設計師社交新嘗試Web框架Vite程式設計師
- Netty 框架學習 —— 基於 Netty 的 HTTP/HTTPS 應用程式Netty框架HTTP
- 分享剛出爐的基於Blazor技術的Web應用開發框架BlazorWeb框架
- 基於事件驅動的測試框架ETS事件框架
- Web 和移動應用程式測試之間的區別Web
- 使用Java JUnit框架裡的@SuiteClasses註解管理測試用例Java框架UI
- 為 java 開發者設計的效能測試框架,用於壓測+測試報告生成Java框架測試報告
- AppSpider Pro 7.5.014 for Windows - Web 應用程式安全測試APPIDEWindowsWeb
- 【翻譯】基於 Cypress 測試 React 應用React
- 什麼是 Web 應用程式的 synthetic monitorWeb
- Spring MVC之基於java config無xml配置的web應用構建SpringMVCJavaXMLWeb
- 基於LangChain手工測試用例轉Web自動化測試生成工具LangChainWeb
- 基於HTML5的移動Web應用HTMLWeb
- Invicti v24.4.0 for Windows - Web 應用程式安全測試WindowsWeb
- Invicti v24.3.0 for Windows - Web 應用程式安全測試WindowsWeb
- Invicti v24.10.0 for Windows - Web 應用程式安全測試WindowsWeb
- Invicti v24.6.0 for Windows - Web 應用程式安全測試WindowsWeb
- Invicti v24.7.0 for Windows - Web 應用程式安全測試WindowsWeb
- 使用Golang的Gin框架和vue編寫web應用Golang框架VueWeb
- rewrk一個更現代的http框架基準測試實用程式HTTP框架
- Web測試框架SeleniumBaseWeb框架
- Python Web 應用程式 Tornado 框架簡介PythonWeb框架
- 輕鬆搭建基於 SpringBoot + Vue 的 Web 商城應用Spring BootVueWeb
- 基於 RF 的 WEB 版自動管理測試平臺Web
- Acunetix v24.7 (Linux, Windows) - Web 應用程式安全測試LinuxWindowsWeb
- Dore 混合應用框架 —— 基於 React Native 的混合應用遷移方案框架React Native
- Jest基於dva框架的單元測試最佳實踐框架
- 一種基於 cypress 的 UI 自動化測試框架UI框架
- 基於SkyEye執行Qt:著名應用程式開發框架QT框架
- Bevy:基於Rust的資料驅動遊戲引擎和應用程式框架Rust遊戲引擎框架
- Java Web應用的程式碼分層最佳實踐。JavaWeb
- MVC模式在Java Web應用程式中的實現MVC模式JavaWeb