使用TestNG進行模塊自動化壓力測試
前言
由于最近忙于mirage項目,在分析客戶的一個問題時,客戶提到了使用TestNG來進行一些壓力測試,比如連續拍照500次以上,不斷的進入設置、滑動、退出200次。當時咨詢了下項目里的測試同僚,發現我司在壓力測試方面做得比較少,性能測試方面主要使用的monkey測試。無奈,只有自己學習琢磨了。
本文一來用于記錄學過的東西,二來也可以給會用到這個工具的測試或開發同事借鑒。
通過這個工具,開發同事可以驗證自己模塊是否存在問題。
PS:如果文字有不正確的地方,請務必幫忙糾正。
TestNG介紹
- TestNG是Java中的一個測試框架,類似于JUnit和NUnit,功能都差不多,只是功能更加強大,使用也更方便。
- 可以使用TestNG來進行一些自動化測試,比如壓力測試。
- 通過壓力測試可以驗證系統app,比如相機、設置等在多次重復運行后是否會掛掉,是否會卡頓。 </ul>
- 安裝jdk(TestNG requires JDK 7 or higher) </ul> 下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
- 安裝eclipse </ul>
- 配置sdk </ul>
TestNG環境搭建(基于windows)
注意:x64是64位的,如果電腦是32位的,請到官網下載Windows x86 jdk-7u79-windows-i586.exe
配置環境變量
1.找到jdk安裝目錄,如D:\Program Files\Java\jdk1.7.0_51\bin
2.計算機->右鍵屬性->高級系統設置->環境變量,找到系統變量中的Path變量,將上面的目錄添加到變量值中,切記不要誤刪掉其他值,每個值之間使用;隔開。保存。
3.打開cmd控制臺,執行java -version,確定版本安裝正確
將sdk目錄配置到環境變量中,如配置jdk一樣
- 安裝Appinum </ul>
下載地址:https://bitbucket.org/appium/appium.app/downloads/
- 必要的jar包 </ul>
下載地址:http://pan.baidu.com/s/1jGy588I
- 安裝TestNG eclipse插件 </ul>
1.選擇 Help / Install new software 2.輸入 http://beust.com/eclipse 后選擇TestNG,安裝 3.安裝成功后,依次選擇Wondow->Show View->找到TestNG(JAVA下)->OK
TestNG代碼編寫
- 創建項目導入必要包 </ul>
File->New->Java Project,輸入項目名稱,完成右鍵項目名稱->Build Path->Configure Build Path 選擇Libraries->Add External JARs...,將從服務器上拷貝下來的testng下的包全部導入</pre>
- 編寫測試類 </ul>
eg1:編寫連續拍照500次 - TestCamera.java
package com.ckt.test;import io.appium.java_client.AppiumDriver; import io.appium.java_client.remote.MobileCapabilityType;
import java.net.URL; import java.util.Scanner; import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By; import org.openqa.selenium.remote.DesiredCapabilities; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test;
public class TestCamera { private AppiumDriver mAppiumDriver; Scanner mScanner; int num = 500; //執行測試500次
@BeforeTest public void setUp() throws Exception { /** 動態輸入執行次數,需要動態輸入就將注釋去掉 System.out.println("Please enter the no of times you want to capture picture :"); mScanner = new Scanner(System.in); num = mScanner.nextInt(); */ // Set up desired capabilities and pass the Android app-activity and app-package to Appium DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Android"); capabilities.setCapability(MobileCapabilityType.VERSION, "4.4.2"); //sdk platform version capabilities.setCapability(MobileCapabilityType.PLATFORM, "Windows"); capabilities.setCapability("deviceName", "0123456789ABCDEF"); //adb devices,devices name capabilities.setCapability("platformName", "Android"); capabilities.setCapability("newCommandTimeout", 120); //test package name ,有源碼的話,直接看AndroidManifest.xml //cmd控制臺 輸入 uiautomatorviewer,啟動相機,點擊uiautomatorviewer 上的Device Screenshot //在uiautomatorviewer右側Note Detail中會顯示當前應用包名 capabilities.setCapability("appPackage", "org.codeaurora.snapcam"); //執行adb shell dumpsys activity|grep -A 5 "Running activities",查找當前運行的activity //沒有grep的windows,執行adb shell dumpsys activity activities > d:\activity.txt,搜索Running activities capabilities.setCapability("appActivity", "com.android.camera.CameraActivity"); mAppiumDriver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); mAppiumDriver.manage().timeouts().implicitlyWait(360, TimeUnit.SECONDS); } @Test public void capturing() throws Exception { for (int i = 0; i < num; i++) { //點擊uiautomatorviewer左側相機按鈕,右側Note Detail中的resource-id會顯示相機拍照按鈕element mAppiumDriver.findElement(By.id("org.codeaurora.snapcam:id/shutter_button")).click(); Thread.sleep(2000); System.out.println("TestCamera cases " + (i+1) + " successfully executed"); } } @AfterTest public void quit() throws Exception { if (mAppiumDriver != null) { mAppiumDriver.quit(); } }
}</pre>
eg2:編寫進入設置,滑動后,退出 - TestSettings.java
package com.ckt.test; import io.appium.java_client.AppiumDriver; import io.appium.java_client.remote.MobileCapabilityType;import java.net.URL; import java.util.Scanner; import java.util.concurrent.TimeUnit;
import org.openqa.selenium.remote.DesiredCapabilities; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test;
public class TestSettings { private AppiumDriver mAppiumDriver; Scanner mScanner;
@BeforeTest public void setUp() throws Exception { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Android"); capabilities.setCapability(MobileCapabilityType.VERSION, "4.4.2"); capabilities.setCapability(MobileCapabilityType.PLATFORM, "Windows"); capabilities.setCapability("deviceName", "0123456789ABCDEF"); capabilities.setCapability("platformName", "Android"); capabilities.setCapability("appPackage", "com.android.settings"); capabilities.setCapability("appActivity", "com.android.settings.Settings"); mAppiumDriver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); mAppiumDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); } @Test public void settings() throws Exception { Thread.sleep(1000); mAppiumDriver.swipe(661, 1105, 597, 50, 0); mAppiumDriver.swipe(661, 1105, 597, 50, 0); mAppiumDriver.swipe(661, 1105, 597, 50, 0); mAppiumDriver.swipe(661, 1105, 597, 50, 0); mAppiumDriver.swipe(599, 300, 661, 1105, 0); mAppiumDriver.swipe(599, 300, 661, 1105, 0); mAppiumDriver.swipe(599, 300, 661, 1105, 0); mAppiumDriver.swipe(599, 300, 661, 1105, 0); System.out.println("TestSettings successfully executed"); } @AfterTest public void quit() throws Exception { if (mAppiumDriver != null) { mAppiumDriver.quit(); } }
}</pre>
eg3:編寫批量執行文件 - ExceteSetting.xml
<!DOCTYPE suite SYSTEM "<suite name="TestSuite">
<test name="TestCamera" > <classes> <class name="com.ckt.test.TestCamera"/> </classes> </test> <test name="TestSettings" > <classes> <class name="com.ckt.test.TestSettings"/> </classes> </test>
</suite></pre>
- Demo下載
</ul>下載地址:http://pan.baidu.com/s/1pJFWvLh 下載到導入eclipse,java項目,導入必要的包后即可運行TestNG執行測試
- 啟動Appium Server
</ul>運行安裝好的Appium,點擊右上角三角形按鈕啟動服務
- 連接手機到PC
</ul>
- 執行單個測試
</ul>選擇測試類,如TestCamera,右鍵Run As->TestNG Test
- 執行批量測試
</ul>選擇批量配置文件,如ExceteSetting.xml,右鍵Run As->TestNG TestNG
執行情況會顯示在Console中
其他壓力測試方法
- 對于壓力測試工具很多,在沒有接觸TestNG之前,我是采用簡單的shell script來做的,比如:
</ul>將以下內容放入capture.sh中,chmod +x capture.sh,添加可執行權限
#!/bin/bash for((i=1;i<1000;i++)) do adb shell input tap 550 1800 echo $i sleep 2 done
連接設備,執行./capture.sh即可
- 缺陷
</ul>以上方法采用adb shell input模擬輸入事件實現,(550,1800)是相機拍照按鈕在屏幕上的坐標。分辨率不同就需要重新修改參考文檔
http://testng.org/doc/index.html