知识为进步之母,而进步又为富强之源泉。这篇文章主要讲述Appuim项目实战---录制视频相关的知识,希望能为你提供帮助。
背景:在app测试中,很多场景当时出现,后期无法出现,如果这个时候就通过录制视频的方式记录那么问题就很快解决了,录制视频的简单命令:adb shell screenrecord
--time-limit 10 /sdcard/demo.mp4
默认录制10分钟就结束,注意我录制视频是会使用ip,因为在框架中断掉手机也需要使用到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日 @修改说明 */ publicProcessstartRecordVideo(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; } /** * * @测试点: 结束视频录制,通过杀掉录制视频的进程,然后把视频数据复制到另外一个文件中 @paramprocess 传入的进程 @parampath视频录制的位置 @paramip传入的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(); } } }
【Appuim项目实战---录制视频】更改监听器内容,
package until; import org.testng.ITestContext; import org.testng.ITestResult; import org.testng.TestListenerAdapter; public class TestngListener extends TestListenerAdapter { booleanRecordvideo=false; publicmethodpubmethod=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); }}
文章图片
文章图片
推荐阅读
- java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/xxx/lib/arm/liblame.so: has text relocation
- Appuim项目实战---监听testng
- 更新APP
- Android Retrofit源码分析(一边用一边侃)
- Android 自定义控件之圆形扩散View(DiffuseView)
- Android7.0对dlopen的改变
- Android Studio (Error message)
- 解决小米手机不能运行Android Studio程序的问题
- cordova requirements error:Android target: not installed