公网弹性云虚拟主机中Selenium Grid节点通信配置方法
通常我们的自动化测试系统是部署在公司内网的,用于日常的功能验证。这时,Selenium hub和node节点之间只需要绑定本地ip即可,即配置-host localIp。
但是如果在诸如阿里云ECS、亚马逊EC2等云虚拟主机中部署hub和node,并且需要通过公网地址通信,则发现这样配置是行不通的。
- 弹性云虚拟主机通常不配备独立的公网网卡,而是绑定弹性公网ip,这类公网ip无法通过ifconfig查询到,若host指定这类ip,selenium会因无法绑定ip地址而不能运行。
- 对于hub节点,可通过绑定所有地址来监听node请求:-host 0.0.0.0
- 对于node节点,首先通过-hub指定hub节点的公网ip。然后显式配置remoteHost参数:-remoteHost http://nodePublicIp:port。这个remoteHost会在node向hub注册时发送给hub,告诉hub需要通过remoteHost来给node发送指令。可不指定-host,selenium自动绑定本地localIp。
如此,我们就可以在公网使用不同服务商提供的弹性主机,来进行自动化测试了。
js检测网页视频是否有流的两种方法
当前web页面一般通过video标签来播放视频(点播或直播),我们在做音视频的自动化测试时,需要通过程序自动检测是否有视频流。
在具体的实践中,有两种方法可以实现视频流的检测:
- video标签的属性
var?video?=?document.getElementsByTagName('video'); var isPalying = !(video.paused?||?video.ended?||?video.seeking?||?video.readyState?<?video.HAVE_FUTURE_DATA); - 比较不同时刻的视频图像
- 在页面上构造一个canvas,在其上绘制当前视频的图像
- 通过getImageData获取图像的RGBA数据,简单计算(如求和)得到一个数值
- 隔一段时间(如1秒)再依次获取若干图像的计算值
- 通过比较这几个图像计算值是否相等,可以判断这段时间内是否有活动的视频流
- 可综合上述两种方法进行视频流的检测
方法2详细细节可加QQ群【KITE-WebRTC自动化测试】讨论。
禁止Chrome自动升级
Chrome浏览器自带升级功能,特别是打开“关于”菜单查看当前版本时,会触发升级检测。
我们有时候并不希望Chrome自动升级,那么怎么禁用呢?
下面以Windows上的Chrome为例,介绍禁用自动升级的方法。
- 新装Chrome后,浏览器会自动运行,这时立即关掉浏览器
- 在任务管理器中查找GoogleUpdate.exe进程,关闭这些进程
- 右击Chrome浏览器图标,“打开文件位置”,向上两级进入“Google”目录,进入“update”子目录,删除“GoogleUpdate.exe”程序文件
- 右击“我的电脑”,打开“管理”,选择“服务”,查找“谷歌更新服务”,通常有两个,双击打开服务属性,将“启动类型”设为“禁用”,若“服务状态”显示正在运行,则关闭服务
- 右击“我的电脑”,打开“管理”,点击“系统工具”-“任务计划程序”-“任务计划程序库”,在任务计划列表中查找“GoogleUpdate”开头的任务,右键“禁用”
- done
Virtualbox虚拟机使用宿主机USB摄像头的方法
最近想在virtualbox的虚拟机上使用摄像头,虚拟机系统是64位win7,开始虚拟机无法检测到摄像头。
搜索了一下,这篇文章帮我解决了这个问题。方法为:
1,在宿主机上下载并安装virtualbox的插件,安装过程不需要重启virtualbox
2,在虚拟机顶部菜单栏中选择“设备->USB”,即可看到宿主机上的USB摄像头
3,点击USB摄像头,虚拟机会自动安装驱动,然后就可以使用了
需要注意的是,每个虚拟机对宿主机的摄像头是独占的,同时只能有一台虚拟机使用宿主机的摄像头
shell脚本异步执行多任务并等待任务结束
通常情况下,shell脚本中每条命令都是逐条按顺序执行的。如果想同时执行多条命令,并在所有命令完成后退出,这该如何实现?
我们可以在需要异步执行的命令后加&来实现后台运行,同时,使用wait来等待后台任务执行完成。
比如:
#!/bin/sh
i=0
while [ $i -lt 3 ];do
long_time_task &
let i++
done
wait
FFmpeg多段视频拼接并实现淡入淡出效果
假设有三段视频s1.mp4、s2.mp4、s3.mp4,长度均为10秒。
我们想要将这三段视频拼接起来,并且每两段视频之间有淡入淡出的效果。
以下为实现方法:
ffmpeg -i .\s1.mp4 -i .\s2.mp4 -i .\s3.mp4 –filter_complex “[0:v]fade=t=out:st=8:d=3:color=333333[v0];[1:v]fade=t=in:st=0:d=3:color=333333[v1_i];[v1_i]fade=t=out:st=8:d=3:color=333333[v1_o];[2:v]fade=t=in:st=0:d=3:color=333333[v2];[v0][v1_o][v2]concat=n=3:v=1:a=0[v3];[0:a][1:a][2:a]concat=n=3:v=0:a=1[a1]” –map “[v3]” –map “[a1]” -y out.mp4
这里,首先对每段视频使用fade滤镜,其中对s1设置最后3秒淡出,对s2设置开头3秒淡入和最后3秒淡出,对s3设置开头3秒淡入;然后分别对三段视频和三段原始音频进行拼接;最后将拼接的视频和音频合成为输出视频。
这里运用到FFmpeg以下相关概念:
- filter_complex滤镜图
- stream选择:[File:StreamType:StreamIndex]
- stream映射:map
- fade滤镜
- concat滤镜
近期评论