phoenixframework自動化平臺詳細使用說明書

在環境搭建那篇文章中,咱們已經部署好了一個環境,本篇文章中咱們將具體介紹功能的使用方法。文章地址:java

http://my.oschina.net/u/2391658/blog/706263node

一、  建立測試場景

場景用於組織多個用例,執行時能夠以1個用例爲單位,即執行一個用例,也能夠執行一個場景,即執行多個用例,執行的順序按建立場景時添加的順序。刪除該場景時,會將該場景下的用例及數據一塊兒刪除。mysql

建立場景步驟:在首頁點擊場景管理 -> 新增場景 -> 輸入場景名及功能說明 -> 提交便可android

二、  建立用例及數據

(1)增長用例

用例是用來組織測試數據,定位信息的(webUI),邏輯代碼的。建立用例步驟:ios

首頁 -> 用例管理 -> 選擇所屬場景 -> 輸入用例名及用例功能說明 -> 選擇用例類型 -> 選擇消息發送狀態 -> 提交便可。對應的用例類型及消息發送類型的說明,如圖:git

(2)用例列表頁面

管理操做中,可增長業務邏輯代碼,添加定位信息,數據等。github

(3)用例執行體增長

在phoenix_develop工程下開發和調試用例,調試經過後,所有複製,粘貼到用例的執行體中。web

若有如下用例代碼:正則表達式

package org.phoenix.cases;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map.Entry;

import org.phoenix.enums.LocatorType;
import org.phoenix.model.CaseLogBean;
import org.phoenix.model.InterfaceBatchDataBean;
import org.phoenix.model.LocatorBean;
import org.phoenix.model.UnitLogBean;
import org.phoenix.proxy.ActionProxy;

/**
 * 瀏覽器驅動測試類:
 * 通用方法API:phoenix.commonAPI()....
 * webUI/mobileUI用例API:phoenix.webAPI()....
 * 接口測試用例API:phoenix.interfaceAPI()....
 * androidappAPI:phoenix.androidAPI()....
 * IOSappAPI:phoenix.iosAPI()....
 * svnClientAPI:phoenix.svnClient()....
 * ftpClientAPI:phoenix.ftpClient()....
 * socketClientAPI:phoenix.telnetClient()....
 * ...
 * @author mengfeiyang
 */
public class TestBrowserDriver extends ActionProxy{
	private static String caseName = "瀏覽器驅動測試用例";	
	public TestBrowserDriver() {}

	@Override
	public LinkedList<UnitLogBean> run(CaseLogBean caseLogBean) {
		init(caseLogBean);//必須有這一步
		//phoenix.webAPI().setFirefoxExePath("D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");//使用Firefox瀏覽器時,必須添加
		//phoenix.webAPI().setChromeDriverExePath("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver64.exe");//使用chrome瀏覽器時,必須添加,且chromedriver64.exe必須和chrome.exe在同一目錄下
		
		HashMap<InterfaceBatchDataBean, HashMap<String, String>> datas = phoenix.commonAPI().loadWebCaseDatas(caseName);//加載數據庫測試數據方法		
		HashMap<String,LocatorBean> locators = phoenix.commonAPI().addLocator(caseName);//加載定位信息的方法
		for(Entry<InterfaceBatchDataBean, HashMap<String, String>> es : datas.entrySet()){
			InterfaceBatchDataBean batchData = es.getKey();
			batchData.getExpectData();//這批數據的執行結果指望值
			HashMap<String, String> dataBlocks = es.getValue();
			String phoenixframe = dataBlocks.get("輸入數據1");//在數據庫中此數據的key
			phoenix.webAPI().openNewWindowByFirefox("http://www.baidu.com");
			//phoenix.webAPI().openNewWindowByChrome("http://www.baidu.com");
			//phoenix.webAPI().openNewWindowByIE("http://www.baidu.com");
			//phoenix.webAPI().openNewWindowByHtmlUnit("http://www.baidu.com", true, BrowserVersion.INTERNET_EXPLORER);
			//phoenix.webAPI().openNewWindowByPhantomJs("http://www.baidu.com");
			phoenix.webAPI().webElement("//*[@id=\"kw\"]",LocatorType.XPATH).setText(phoenixframe);//引用數據
			phoenix.webAPI().webElement(locators.get("btnLocator").getLocatorData()).click();//使用數據中的定位信息,等同於phoenix.webAPI().webElement("btnLocator").click();
			String r = phoenix.webAPI().webElement("//*[@id=\"su\"]", LocatorType.XPATH).getAttribute("value");//數據庫中的數據能夠與頁面不變的數據混合使用
			phoenix.checkPoint().checkIsEqual(r, "百度一下");//調用檢查點,檢查結果會在日誌中統計
			phoenix.commonAPI().addLog("我是自定義的");//能夠手動插入一句日誌,該日誌會在最後的日誌記錄中體現
			phoenix.webAPI().sleep(1000);
			phoenix.webAPI().closeWindow();	
		}
		return getUnitLog();
	}
	public static void main(String[] args) {
		LinkedList<UnitLogBean> ll = new TestBrowserDriver().run(new CaseLogBean());
		for(UnitLogBean l : ll){
			System.out.println(l.getContent());
		}
	}
}

所有複製,並粘貼到控制檯後如圖:sql

過程如圖:

(4)接口測試數據編輯

批量導入,Excel模版以下:

用例列表界面選擇接口用例:

點擊數據鏈接進入數據編輯界面:

支持兩種方式爲接口用例增長批次數據:

4.1 手動輸入

>>1,點擊上圖的添加數據批次按鈕:

>>二、增長完成後如界面:

>>三、點擊「修改添加參數」連接,並點擊新增參數:

>>四、好比咱們如今測試這樣的一個url:http://xxx/x.action?p1=d1&p2=d2 ,添加參數的時候,這樣添加:

提交後如:

Tips:此時點擊按鈕,則會導出一個模版,此模版用於下面的第二種方式。

4.2 批量導入

經過excel準備數據,而後導入的數據庫的指定用例下,步驟以下:

>>一、在數據列表界面,點擊,界面以下:

相關錯誤信息提示:

導入成功後,將跳轉到指定用例數據的列表頁面。

(5)數據導出

數據導出步驟:

一、  點擊按鈕,點擊時會有「是否確認導出」的提示,若點擊取消,則取消導出。若點擊確認,則會有「正在處理請求…….」的提示,稍後將會彈出:

二、  

點擊以上提示框中的連接地址,便可將數據表下載到本地。每次的數據表都是即時生成的,若不下載,點擊肯定按鈕後,會將服務器上的原副本刪除,避免垃圾文件的產生。下載到本地的數據表以下:

在代碼中使用批量數據的方式:

package org.phoenix.cases.webservice;

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;

import org.phoenix.model.CaseLogBean;
import org.phoenix.model.InterfaceBatchDataBean;
import org.phoenix.model.InterfaceDataBean;
import org.phoenix.model.UnitLogBean;
import org.phoenix.proxy.ActionProxy;

import com.meterware.httpunit.WebResponse;

/**
 * 使用phoenix作接口測試的案例,包括兩個:<br>
 * 一、使用多批數據對一個接口url作測試<br>
 * 二、不使用多批數據<br>
 * 若對wsdl形式的接口作測試,則wsdl的文件須要以Dom方式解析。使用WebResponse中的Dom便可。
 * @author mengfeiyang
 *
 */
public class ContactJieKou extends ActionProxy{
	private static String caseName = "接口測試用例";
	public ContactJieKou() {}
	//@Test   //使用Jenkins執行此用例的方式,此Test爲:org.testng.annotations.Test
	@Override
	public LinkedList<UnitLogBean> run(CaseLogBean caseLogBean) {
		init(caseLogBean);
		LinkedHashMap<InterfaceBatchDataBean, List<InterfaceDataBean>> datas = phoenix.commonAPI().loadInterfaceDatas(caseName);
		for(Entry<InterfaceBatchDataBean, List<InterfaceDataBean>> entry : datas.entrySet()){
			InterfaceBatchDataBean iBatchBean = entry.getKey();
			List<InterfaceDataBean> iDatas = entry.getValue();
			System.out.println("--數據批次:"+iBatchBean.getId()+"   指望值:"+iBatchBean.getExpectData());
			String url ="http://v.youku.com/player/getPlayList/VideoIDS/XNzUwODY4Nzc2/timezone/+08/version/5/source/video?ctype=10&ev=1&password=&";
			for(InterfaceDataBean iData : iDatas)url += iData.getDataName()+"="+iData.getDataContent()+"&";
			url = url.substring(0, url.length()-1);
			WebResponse resp = phoenix.interfaceAPI().getResponseByGet(url);
			try {
				//若是接口返回的數據是json格式,則能夠經過jsonPath取出實際值,若是不是json則能夠本身經過自定義方式如正則表達式等。
				String actual = phoenix.interfaceAPI().getJSONValue(resp.getText(), "JSON.data[0].dvd.point[3].title");
				//String actual = resp.getElementWithID("su").getText();根據頁面中的id,tagName,XPath,Dom等方式取到實際值
				String r = phoenix.checkPoint().checkIsEqual(actual, iBatchBean.getExpectData());//檢查點結果入庫
				if(r == null)System.out.println("-----測試經過-----");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return getUnitLog();
	}
}

(6)web用例數據編輯

在用例列表界面,點擊對應用例的數據連接,便可打開數據編輯界面:

在用例代碼中的使用方式:

package org.phoenix.cases;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map.Entry;

import org.phoenix.action.ActionProxy;
import org.phoenix.model.CaseLogBean;
import org.phoenix.model.InterfaceBatchDataBean;
import org.phoenix.model.UnitLogBean;
/**
 * 使用數據庫中的數據進行參數化
 * @author mengfeiyang
 *
 */
public class TestPhoenixCaseUseDBData extends ActionProxy{
	private static String caseName = "消息測試用例";	
	public TestPhoenixCaseUseDBData() {
		
	}
	@Override
	public LinkedList<UnitLogBean> run(CaseLogBean caseLogBean) {
		init(caseName,caseLogBean);
		
		/**加載數據庫中保存的多個批次數據的方法**/
		HashMap<InterfaceBatchDataBean, HashMap<String, String>> datas = phoenix.commonAPI().loadWebCaseDatas(caseName);
		for(Entry<InterfaceBatchDataBean, HashMap<String, String>> data : datas.entrySet()){
			//獲取當前批次的指望值及當前批次執行的目標或說明
			String expect = data.getKey().getExpectData();
			String remark = data.getKey().getRemark();
			HashMap<String, String> dataBlocks = data.getValue();//獲取數據,並根據數據的名稱說明數據的內容
			phoenix.webAPI().openNewWindowByIE(dataBlocks.get("輸入數據3"));
			phoenix.webAPI().webElement("set").setText("1111111");
			String s = phoenix.webAPI().webElement("click").getAttrValue(dataBlocks.get("輸入數據2"));
			System.out.println(s);
			phoenix.checkPoint().checkIsEqual(dataBlocks.get("輸入數據2"), s);
			phoenix.webAPI().webElement("click").click();
			phoenix.checkPoint().checkIsFalse(s!=null);
			phoenix.webAPI().sleep(Long.parseLong(dataBlocks.get("輸入數據1")));
			phoenix.webAPI().closeWindow();
		}
		return getUnitLog();
	}
}

在啓動時,init()方法中的caseName即爲用例的名稱,平臺根據用例的名稱加載該用例下的數據,該用例的名稱沒必要是當前用例名稱或id。基於這種方式,能夠作到數據的公用,即將該用例的數據能夠在其餘用例中使用。如有多個數據的批次,可參考:(5)接口測試數據編輯。

也可使用下面這種方式進行參數化,兩種方式能夠混合使用:

(7)web用例定位信息編輯

用例在初始化時,即:,會自動將該用例下的數據及定位信息加載。加載以後,就能夠在用例腳本中使用了,如圖:

同(6)web用例數據編輯,定位信息也能夠在多個不一樣的用例之間共用。

(8) 接口測試的代理設置

對cookie,proxy的設置方法實例:

package org.phoenix.cases.webservice;

import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.phoenix.model.CaseLogBean;
import org.phoenix.model.UnitLogBean;
import org.phoenix.proxy.ActionProxy;

/**
 * 使用phoenix作接口測試的案例,:<br>
 * 設置代理<br>
 * 若對wsdl形式的接口作測試,則wsdl的文件須要以Dom方式解析。使用WebResponse中的Dom便可。
 * @author mengfeiyang
 *
 */
public class HostTestByHttpClient extends ActionProxy{
	public HostTestByHttpClient() {
	}
	@Override
	public LinkedList<UnitLogBean> run(CaseLogBean caseLogBean) {
		init(caseLogBean);
		HashMap<String,String> headers = new HashMap<String,String>();
		headers.put("Accept-Language", "Accept-Language: en,zh");
		headers.put("Accept-Charset", "Accept-Charset: iso-8859-1");

		HttpClient httpClient = phoenix.interfaceAPI().getHttpClientWithProxy("10.138.65.213", 80, "", "");
		HttpResponse response = phoenix.interfaceAPI().getResponseByHttpClient(httpClient, "http://trunk.dianjing.e.360.cn", "get", headers);
		try {			
			System.out.println(Arrays.toString(response.getAllHeaders()));
			System.out.println(IOUtils.toString(response.getEntity().getContent()));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return getUnitLog();
	}
	
	public static void main(String[] args) {
		HostTestByHttpClient yw = new HostTestByHttpClient();
		LinkedList<UnitLogBean> ll = yw.run(new CaseLogBean());
		for(UnitLogBean l : ll){
			System.out.println(l.getContent());
		}
	}	
}

(9)執行過程當中操做其餘數據庫

更多實例請見phoenix_develop工程的:org.phoenix.cases.extendbpool包。

package org.phoenix.cases.extendbpool;

import java.sql.ResultSet;
import java.util.LinkedList;

import org.phoenix.action.WebElementActionProxy;
import org.phoenix.extend.druid.DruidUtil;
import org.phoenix.model.CaseLogBean;
import org.phoenix.model.UnitLogBean;

/**
 * 使用phoenix作接口測試的案例<br>
 * @author mengfeiyang
 *
 */
public class DruidDemo extends WebElementActionProxy{
	private static String caseName = "接口測試用例";
	public DruidDemo() {
	}
	@Override
	public LinkedList<UnitLogBean> run(CaseLogBean arg0) {
		init(caseName,arg0);
       try{
    	   DruidUtil druid = new DruidUtil();
    	   druid.config("jdbc:mysql://localhost:3306/ykstimer?useUnicode=true&characterEncoding=utf-8", "root", "root");
		ResultSet rs = druid.getQueryResultSet("select * from t_user where id = '8'");
		while(rs.next()){
			int level = rs.getInt(2);//根據列編號
			String name = rs.getString("name");//根據列名
			String password = rs.getString("password");//根據列名
                        webProxy.checkPoint().checkIsEqual(password, "mfy");
                        webProxy.checkPoint().checkIsEqual(name, "mfy");
			System.out.println(level +"  "+name+"  "+password);
		         }

			} catch (Exception e) {
				e.printStackTrace();
			}
     		return getUnitLog();
		}
}

三、  業務樹形圖

經過此關係圖,能夠直觀的看到業務用例,測試場景以及測試任務三者之間的關係,而且也能夠直觀的看到每一個任務的執行狀態。經過此樹形圖也能夠直接編輯場景信息和用例,任務信息,免去了查詢編輯的過程。

四、  任務分配

(1)任務增長

增長任務步驟:首先須要確認已經添加了執行機(執行機管理菜單中可查看)。

在首頁點擊任務分配 -> 添加任務,任務參數以下圖:

(2)任務列表

任務列表的功能選項說明以下:

五、  執行機狀態

六、  執行機管理

(1)執行機增長

(2)  執行機列表

七、  日誌查看

(1)日誌列表

(2)單用例信息

(3)詳細步驟信息

八、  單個用例的統計圖

九、  場景的統計圖

十、 消息池列表

(1)列表內容

(2)詳細內容:

十一、個人附件

十二、性能測試場景配置

(1)新增用例

在主頁面點擊場景配置 -> 新增用例 -> 按頁面提示輸入參數,部分如圖,提交後會跳轉到性能測試場景列表界面。

(2)啓動場景

在性能測試場景列表頁面,點擊啓動便可。啓動後可點擊「監控」用以實時監控執行過程。

(3)性能測試報告

在性能測試場景列表頁面點擊「歷史」,便可跳轉到該用例下全部的執行結果數據,

以上的summary意思是:總共完成了90次迭代,用時61秒,平均每秒1.5次(由於場景中設置了思考時間,因此TPS比較低),最小響應時間是14ms,最大是23ms,總共出錯0次,出錯率0%  。

(4)趨勢圖

在上面界面點擊統計圖,會列出全部指標統計圖,部分以下:

(5)被監控機指標

如有多臺被監控機,即本次性能測試監控了多臺機器,則點擊對應機器的IP,便可及時繪製該機器的趨勢圖。

十二、相關注意事項

(1)   node節點部署後,可經過如如下地址查看狀態:

http://10.16.57.106:8888/phoenix_node/action.do?requestType=getStatus

返回內容爲json格式,以下:

{"msg":"當前執行機處於空閒狀態","result":1}

代表當前機器爲空閒狀態。

若是直接訪問:http://10.16.57.106:8888/phoenix_node

則能夠看到更多詳細信息,如:

健康狀況自檢,硬件自檢,數據庫鏈接池自檢,servletRequest自檢,以及環境的基本信息。如截圖:

(2)       若將phoenix_node或phoenix_web部署到了Linux環境下,則須要爲如下兩個目錄添加讀寫權限,命令:chmod 777 *  :

/webapps/phoenix_node/WEB-INF/classes/drivers,

/webapps/phoenix_web/resources/upload,

(3)       默認的數據庫鏈接方式均爲root,root:若須要修改,則到classes目錄下修改,如node則需修改hibernate.cfg.xml。phoenix_web則需修改:jdbc.properties。如:

(4)       相關用例示例

建立用例時,務必按照規定的代碼結構書寫,不然會編譯不經過。如:webUI的用例代碼結構:

接口測試案例:

1三、  相關資源

(1)       平臺官網:http://www.cewan.lahttp://www.phoenixframe.org

(2)       Maven:http://mvnrepository.com/search?q=phoenixframe

(3)       Github源碼:https://www.github.com/phoenixframe

(4)       QQ交流羣:246776066

(5)       微信號:phoenixframe_2013

(6)       問題反饋:http://www.cewan.la/feedback/

(7)       在Google或百度中搜索:phoenixframe 或 phoenixframework將會獲得更多的用例案例和平臺相關信息

相關文章
相關標籤/搜索