1. 程式人生 > >Junit (1)匯出 Junit 自動化測試指令碼

Junit (1)匯出 Junit 自動化測試指令碼

對於單元測試框架來講,主要完成以下三件事:

  • 提供用例組織與執行:
    當你的測試用例只有幾條時,可以不必考慮用例的組織,但是,當測試用例達到成百上千條時,大量的測試用例堆砌在一起,就產生了擴充套件性與維護性等問題,需要考慮用例的規範與組織問題了。單元測試框架就是用來解決這個問題的。
  • 提供豐富的比較方法:
    不論是功能測試,還是單元測試,在用例執行完成之後都需要將實際結果與進行預期結果的進行比較(斷言),從而斷定用例是否執行通過。單元測試框架一般會提供豐富的斷言方法:例如,判斷相等/不等、包含/不包含、True/False 的斷言方法等。
  • 提供豐富的日誌:
    當測試用例執行失敗時能丟擲清晰的失敗原因,當所有用例執行完成後能提供豐富的執行結果。例如,總執行時間、失敗用例數、成功用例數等。

一般的單元測試框架都會提供這些功能,從單元測試框架的這些特性來看,它是同樣適用於 Web 自動化用例的開發與執行。

在eclipse中進行Junit單元測試

  • 直接在包名右鍵build path 引入Junit的jar包即可;

匯出 Junit 自動化測試指令碼

將 Junit 單元測試框架和 Selenium 自動化測試指令碼,這兩個技術組合起來做自動化測試:我們可以將 Selenium IDE 編寫匯出為所需要的格式,從而幫助我們理解自動化指令碼的編寫。

(1)首先,通過 Selenium IDE 錄製一個測試用例,選擇選單欄“檔案”–>“Export Test Case As…”彈出二級選單,這裡羅列Selenium IDE所支援的匯出型別:程式語言/測試框架/WebDriver(或Remote Control)

Selenium IDE 提供多語言與測試框架的自動化指令碼生成,對於學習不同程式語言下的自動化測試指令碼開發提供很好的幫助和參考。

這裡寫圖片描述

(2)因為我們當前使用的自動化測試開發語言為 Java,單元測試框架為 Junit4,自動測試框架為 WebDriver,所以選擇“Java/Junit4/WebDriver”選項,將指令碼儲存到指定位置。

  • **注意:**在匯出的型別中相比它其語言多了一個選項,叫“Java/Junit4/ WebDriver Backed”選項,它是一種混合的寫法,允許讓你用 WebDriver 的方式去執行 Remote Control 的指令碼。

下面為匯出的 WebDriver 程式碼 - webdriver.java

package com.mypro.unit;

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;                         //首先要引入 Junit 框架 
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;

public class webdriver {
	private WebDriver driver;                                      //初始化定義私有變數 driver 為驅動 
	private String baseUrl;                                        //初始化定義私有變數 baseUrl 為基本 URL 地址
	private boolean acceptNextAlert = true;                        //初始化定義私有變數 acceptNextAlert 表示是否繼續接受下一個警告
	private StringBuffer verificationErrors = new StringBuffer();  //初始化定義私有變數 verificationErrors 用來存放錯誤的字串變數

	@Before
	public void setUp() throws Exception {
		driver = new ChromeDriver();
		baseUrl = "https://www.baidu.com/";
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
	}
	//setUp()用於設定初始化工作,在每一個測試用例前先被執行,它與 tearDown()方法相呼應,後者在每一個測試用例執行後被執行
	//這裡的初始化工作定義了瀏覽器驅動和基礎 URL 地址,並且還設定的瀏覽器的超時時間為 30 秒 
	
	@Test
	public void testWebdriver() throws Exception {
		driver.get(baseUrl + "/");
		driver.findElement(By.id("kw")).clear();
		driver.findElement(By.id("kw")).sendKeys("selenium");
		driver.findElement(By.id("su")).click();
	}
	//testWebdriver 中放置的就是我們前面一直練習的測試指令碼 
	
	@After
	public void tearDown() throws Exception {
		driver.quit();
		String verificationErrorString = verificationErrors.toString();
		if (!"".equals(verificationErrorString)) {
			fail(verificationErrorString);
		}
	}
	//tearDown()方法在每個測試方法執行後呼叫,
	//這個方法用於完成測試用例執行後的清理工作,如退出瀏覽器、關閉驅動,恢復用例執行前的狀態等 
	//在@Before - setUp()方法中定義了 verificationErrors 為空字串,這裡通過 assertEqual()比較其是否為空,
	//如果為空說明用例執行的過程過程中沒有出現異常,否則不為空將丟擲 AssertionError 異常。
	
	private boolean isElementPresent(By by) {
		try {
			driver.findElement(by);
			return true;
		} catch (NoSuchElementException e) {
			return false;
		}
	}
	//isElementPresent()方法用來查詢頁面元素是否存在,通過 find_element()來接收元素的定位
	//如果能找到元素返回 ture,否則出現異常並返回 flase
	
	private boolean isAlertPresent() {
		try {
			driver.switchTo().alert();
			return true;
		} catch (NoAlertPresentException e) {
			return false;
		}
	}
	//isAlertPresent()方法用於判斷當前頁面是否存在警告框,利用 WebDriver 所提供的 switchTo().alert()方法來捕捉頁面上警告框
	//如果捕捉到警告框則返回 True,否則將丟擲 NoAlertPresentException 型別異常,並返回 Flase 
    //不過,不管頁面是否出現警告框,返回結果都為 True
    //So可以調整該方法為switchTo().alert().getText() 用於獲取當前頁面上的警告提示資訊
    //可以獲取到將會返回 True,獲取不到則返回 False.
    
	private String closeAlertAndGetItsText() {
		try {
			Alert alert = driver.switchTo().alert();
			String alertText = alert.getText();
			if (acceptNextAlert) {
				alert.accept();
			} else {
				alert.dismiss();
			}
			return alertText;
		} finally {
			acceptNextAlert = true;
		}
	}
	//closeAlertAndGetItsText()關閉警告並且獲得警告資訊
	//首先通過 switchTo().alert()獲得警告,通過.getText()獲得警告框資訊
	//接著通過 if 語句判斷 acceptNextAlert 的狀態,在初始化私有變數的時候狀態為 Ture
	//如果為 Ture,通過 accept()接受警告。否則 dismiss()忽略此警告
}

那 Junit 怎麼知道哪個方法是初始化方法,哪個是測試用例?

每個方法上面都有一個**@,這種用法叫“註解”**,是在 Java1.5 之後引入的新特性。

  • @Before 註釋的方法會在每個用例之前執行
  • @Test 註釋的方法表示一個測試用例
  • @After 註釋的方法會在每個用例後執行

相關推薦

Junit 1匯出 Junit 自動化測試指令碼

對於單元測試框架來講,主要完成以下三件事: 提供用例組織與執行: 當你的測試用例只有幾條時,可以不必考慮用例的組織,但是,當測試用例達到成百上千條時,大量的測試用例堆砌在一起,就產生了擴充套件性與維護性等問題,需要考慮用例的規範與組織問題了。單元測試框架就是用

ceph分布式存儲實戰1——ceph集群測試主機規劃

monit dep release host eas rst 存儲 實戰 hostname 主機規劃節點磁盤(4塊)網卡(2塊)mem/cpuOSHostName節點1os-ceph-node1/10G私Eth0:dhcp1G/1CentOS Linux release

Robot Framework學習8:Web自動化測試

web自動化測試用到的庫是Selenium2Library 與瀏覽器相關的關鍵字 1. Open Browser    https://www.baidu.com  ff/chrome    # 開啟瀏覽器 注:要想通過不

jmeter介面效能測試1----簡單的介面測試入門

首先來看一下介面的資訊:host:http://api.jhled888.comuri: /cgi-bin/get.json 介面請求方式: GET 入參:appid: jhyjlhxa03q4f2qlmfappsecret:eb28066907b14310a9401c0586c840

YAML的Java實現——JYAML基本原理與示例1匯出資料為YAML格式檔案

1. Overview JYAML是YAML的Java實現,YAML的全稱是YAML Ain't Markup Language,是否定遞迴定義,和LINUX的Linux Is Not UniX是一個意思。其結構之簡單,常常成為匯出或匯入配置檔案、資料結構等應用場景的常用A

Tensorflow object detection API 搭建屬於自己的物體識別模型1——環境搭建與測試

後續部落格地址(附帶視訊教程)--------------------------------------------------------------------------------------------------最近對深度學習比較感興趣,看了網上很多資料,嘗試了

原創如何在效能測試指令碼中建立關聯

效能測試中的關聯,說簡單一點,就是把某些寫死(固定)的資料,通過引數化變成動態的資料;或者說把前面指令碼中的結果資料,提取出來作為後續指令碼的請求資料使用。 進一步理解關聯之前,我們簡單看一下請求-響應模型: 客戶端和伺服器的連線是基於一種請求-應答模式。在HTTP1.1協議中,客戶端和伺服器建

Java測試工具使用1--Junit

所有 alt 命名 浪費 依然 之前 pan 時報 新建 在進行測試之前需要導入junit的兩個包,分別是   junit:4.12;hamcrest-core:1.1 1、基本測試標簽 [email protected]/* */@[email pr

JUnit自動化單元測試:引數化測試

要成為JUnit測試高手必不可少的一項技能就是引數化測試了,現在有一個方法根據不同的引數會有不同的結果,為了測試全面如果把所有可能的情況都逐個寫出來測試一遍那未免太low了,此時就可以用引數化測試,舉個例子: package junit.demo; impor

Android自動化測試遇到的問題及解決方法1

粘貼 png family 學習 再次 jmeter log 初始 mage 編者按:本文是小小小提姆在使用自動化測試工具TestWriter時的一點使用心得~我叫小小小提姆,是一名在IT行業的洪流中力爭上遊的軟件測試員,個人軟件測試擅長方向:1、功能測試(熟悉Fiddle

RobotFramework自動化測試框架1- RobotFramework簡介

 對於RobotFramework自動化測試框架,我這裡會從三個單元進行闡述,希望能對你有幫助。 RobotFramework簡介 RobotFramework是什麼? Robotframework 是由python編寫的,一個開源的基於關鍵詞驅動的自動化測試框架,它可以做基於UI或者介面

Android自動化測試修煉手冊1

自動化測試修煉手冊 寫在開頭:因為自己開始試著學習軟體測試相關知識,以此部落格記錄下自己學習過程中遇到的問題或是心得以便將來回顧或是總結。但是由於軟體測試內容太多全面,我就以測試手段分類中自動化測試這一內容開始我的學習之旅。 關於軟體自動化測試開發:除手工測

介面自動化測試1-認識requests

即使開始寫這篇部落格,我也沒完全明白介面自動化到底是何物,能自動化到什麼地步。買了一套相關課程,開始只是入門級,介面自動化測試後面應該會根據課程進度,把這系列部落格寫完。今天先寫入門。 環境:python3 環境準備好以後,安裝requests,cmd下輸入命令:pip

python+requests+unittest介面自動化1:介面測試

使用的庫就是requests 安裝很簡單,尤其python3+(之後簡稱python3),自帶pip(python2+的朋友可以自行百度下pip的安裝) pip install requests 在開始做介面測試之前,我們先稍微瞭解一下介面是什麼? 首先,百度結果: 結合實

DevOps實踐1面向服務的全自動化測試體系

一. 功能 依託於robotframework 根據程式碼註釋,自動生成測試庫 自動搜尋測試用例或指定測試用例檔案執行 commit觸發測試和週期性定時(按天/小時)測試 測試報表統計(區分環境) 企業微信通知測試結果 在此之前,大家要去複習兩個重要的概念,一個是【測試金字塔】模型, 另一個是

自動化測試平臺搭建1-- Jenkins登場

測試程式碼寫好後,嘗試通過Jenkins搭建自動化測試平臺 Jenkins安裝 如圖,選擇對應的安裝包下載 解壓後點擊安裝,根據需要自定義安裝路徑,其他預設 安裝完成後開啟localhost:8080訪問Jenkins首頁,可

基於python語言的selenium自動化測試1-環境搭建

近期在寫爬蟲軟體時遇到的一些問題需要使用到selenium工具,在測試領域也同樣需要學習該工具,所以大概記錄下學習這款工具的使用以及一些問題及思考 selenium 是一個web的自動化測試工具,不少學習功能自動化的同學開始首選selenium ,相因為它相比

Python自動化測試1-自動化測試及基本技術手段概述

生產力概述 在如今以google為首的網際網路時代,軟體的開發和生產模式都已經發生了變化, 在《參與感》一書提到:某位從微軟出來的工程師很困惑,微軟在google還有facebook這些公司發展的時候,為何為感覺沒法有效還擊,核心問題就是軟體生產模式不一樣 [1] ,微軟當時的模式已經嚴重落伍了。 目

Java單元測試Junit使用DBUnit擴充套件JUnit

在我們使用JUnit單元測試框架編寫單元測試的時候,少不免要對資料庫進行操作,但請試想一下,當我要編寫一個獲取使用者的單元測試時,資料庫是不存在該記錄的,那麼我要測試獲取使用者時就需要往資料庫新增一條使用者記錄,但當獲取使用者的單元測試完成併成功後,此測試並沒有清理現場(

Junit入門學習1------- 安裝和簡單使用

一、簡介 JUnit是一個開源的java單元測試框架。在1997年,由 Erich Gamma 和 Kent Beck 開發完成。這兩個牛人中Erich Gamma 是 GOF 之一;Kent Beck 則在 XP 中有重要的貢獻(你覺得眼熟一點都不奇怪)。