Appuim項目實戰---錄制視頻
背景:在app測試中,很多場景當時出現,後期無法出現,如果這個時候就通過錄制視頻的方式記錄那麽問題就很快解決了,錄制視頻的簡單命令:adb shell screenrecord --time-limit 10 /sdcard/demo.mp4 默認錄制10分鐘就結束,註意我錄制視頻是會使用ip,默認錄制視頻使用的屏幕都很大,我們可以換個小的屏幕,具體錄制視頻adb參數可以看這篇博客http://blog.csdn.net/wirelessqa/article/details/22725581
在我們項目中,我們實際只需要在方法開始前執行錄制視頻,在監聽成功或者失敗後,在結束掉錄制視頻,而關鍵在於,結束是把錄制視頻的進程給殺掉,在啟動時就記錄了這個進程,然後就是把文件pull到本地,實現方法
package until; import java.io.IOException; public class publicmethod { /** * * @測試點: 開始錄制視頻 @param @param ip @param @param name @param @return * @備註: Process * @author zhangjun * @date 2017年9月13日 @修改說明 */ public Process startRecordVideo(String ip,String name){ System.out.println("開始錄制視頻"); String runadb="adb -s "+ip+" shell screenrecord /sdcard/"+name+".mp4"; System.out.println("執行的命令:"+runadb); Process runprocess = null; try { runprocess = Runtime.getRuntime().exec(runadb); } catch (IOException e) { e.printStackTrace(); } return runprocess; } /** * * @測試點: 結束視頻錄制,通過殺掉錄制視頻的進程,然後把視頻數據復制到另外一個文件中 @param process 傳入的進程 @param path 視頻錄制的位置 @param ip 傳入的ip * @備註: void * @author zhangjun * @date 2017年9月13日 @修改說明 */ // public void stopRecordVideo(Process process, String path, String ip) { process.destroy(); // 結算掉進程 // 移動視頻地址 String moveVideo = "adb -s " + ip + " pull " + path + "" + " D:\\test"; System.out.println("執行的命令:" + moveVideo); try { Runtime.getRuntime().exec(moveVideo);// 移動數據內容 System.out.println("移動視頻成功,請在d盤test下查看"); } catch (IOException e) { e.printStackTrace(); } } } |
調用過程,更改監聽器內容,
package until;
import org.testng.ITestContext; import org.testng.ITestResult; import org.testng.TestListenerAdapter; public class TestngListener extends TestListenerAdapter { boolean Recordvideo=false; publicmethod pubmethod=new publicmethod(); Process getprocess; String ip="10.37.2.151:5555";
@Override public void onTestStart(ITestResult result) { super.onTestStart(result); logTest.logInfo("啟動我是onTestStart,我是testng的測試方法"); String name=result.getName(); logTest.logInfo("獲取的方法名"+name); getprocess=pubmethod.startRecordVideo(ip,name); } @Override public void onStart(ITestContext testContext) { super.onStart(testContext); logTest.logInfo("啟動我是onstart,所有初始化都在我這裏做"); } @Override public void onTestFailure(ITestResult tr) { super.onTestFailure(tr); logTest.logInfo("我是onTestFailure,代表我們的其他操作失敗了"); //結束視頻 pubmethod.stopRecordVideo(getprocess, "sdcard/"+tr.getName()+".mp4",ip); } @Override public void onTestSuccess(ITestResult tr) { super.onTestSuccess(tr); //結束視頻 pubmethod.stopRecordVideo(getprocess, "sdcard/"+tr.getName()+".mp4",ip); } @Override public void onTestSkipped(ITestResult tr) { super.onTestSkipped(tr); }
} |
Appuim項目實戰---錄制視頻