性能自动化测试模板

Dear All,
 
iOS搜索0224版本相同query,0224版本VS0210版本,在高中端机器对比性能测试报告如下,辛苦查收~
 
 
测试query:
 
XX
 
测试方法-结果页:
进入搜索默认页,输入关键词,以为点击“搜索”按钮为起始点,调用算法方法,到搜索结果页面完全加载完成且滑动20屏为结束点。重复统计 5 次搜索页加载的时间并计算平均值
 
从请求搜索词瞬间到加载出数据,测试响应时间、FPS 无翻页
 
测试方法-默认页:
进入首页,查找输入框,以为点击“输入框”为起始点,调用算法方法,到搜索默认页面完全加载完成为结束点。重复统计 5 次搜索页加载的时间并计算平均值
 
从首页到默认页加载出数据,测试响应时间、FPS 无翻页
 
测试包:
RT(响应时间)测试包:线上最新包
FPS(帧率)、CPU测试包:XX添加依赖后打的专项包
 
说明:

FPS越大越流畅

FPS标准差代表离散率,越小越好

CPU占用越低越好

不关注起始帧耗时,结束帧耗时越小越好

iOS平均NativeHeapMax、平均DalvikHeapMax、平均PssMax、平均丢帧率 该数据获取失败的原因是:iOS本来就没有这几个属性,为空是正常的,Android有
 
整体测试结果:(不同分桶对比、有缓存、无缓存、竞品对比、native weex对比)
1、响应时间:
搜索 : 704分桶明显优于701分桶
2、流畅度:
搜索:704分桶在高低端手机优于701分桶,中端手机低于701分桶
3、时间差:
搜索:704分桶明显优于701分桶
 
 
 
 
 
 
 
由于数据不方便公开接加密,截取一部分展示~~
 
 
 
FPS帧率
 
 
 
RT响应时间
 
 
 
 
内存和CPU
 
 
部分性能自动化脚本
 
 
 
 
        WebElement searchText = null;
        int count_searchText = 0;
        while (searchText == null) {
            searchText = driver.findElementByAccessibilityId("uitest_home_searchbox");
            count_searchText++;
        }
        customLog.log("查找首页输入框,第" + count_searchText + "次查找");

        //输入框区域的中心点坐标
        Point lc = searchText.getLocation();
        Dimension size = searchText.getSize();
        float x = lc.x + size.width / 2;
        float y = lc.y + size.height / 2;

        sleep(1000);
        DialogManage.getInstance().register(IPhoneMicDialog.class);

        // 搜索RT测试开始,
        setVideoCut(false);
        customLog.log("搜索默认页响应时间测试开始");

        sampleByElement(x,y);
        customLog.log("搜索默认页响应时间测试结束");

        long endTime = System.currentTimeMillis();
        long runTime = (endTime - processStartTime) / 1000 / 60;
        System.out.println("===================runTime为:【" + runTime + "】分钟,搜索RT响应时间测试结束啦===================");

    }

    @Before
    public void setUp() {
        super.setUp();
        customLog.log("setup");
        System.out.println("setup");
    }

    // 本地调试重载方法,不走关闭弹框的验证,提交git时,需要注释掉
//    @Override
//    protected void loopPrecondition() {
//        customLog.log("ignore precondition");
//    }

    @After
    public void tearDown() {
        super.tearDown();
        customLog.log("tearDown");
        System.out.println("tearDown");
        long processEndTime = System.currentTimeMillis();
        long processRuntime = (processEndTime - processStartTime) / 1000 / 60;
        System.out.println("===================processRuntime为:【" + processRuntime + "】分钟,程序运行结束啦===================");

    }


  
以上结果可以见附件~

====================================================================================================================================================================================================

以下是性能手动测试方法。以上是性能自动化方式

安装分帧软件

背景

视频的很多问题都是来自视频本身,因此需要一个可以在mac上进行视频处理的工具,这里我们选择:ffmpeg

安装

1. 安装homebrew

打开终端,执行 brew,出现下图则表示已经安装

➜  ~ brew list

否则,请执行下述命令进行安装,参考homebrew官网

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2. 安装ffmpeg

brew install ffmpeg

3.sometimes,会出现下图 Error: Cannot write to /usr/local/Cellar

此时,可以执行下述命令解决,需要输入密码,参考:Can't chown /usr/local in High Sierra

sudo chown -R $(whoami) $(brew --prefix)/*

 

使用

Eg: 视频首帧出现很慢,借助ffmpeg将moov提前以减少客户端连接数

ffmpeg -i video.mp4  -movflags faststart -acodec copy -vcodec copy output.mp4

实际使用

ffmpeg -i normal\ video1.mp4  -movflags faststart -acodec copy -vcodec copy output1.mp4

使用ffmpeg

输入命令行

在视频文件目录下

ffmpeg  -i  seek.mp4  %d.jpg

回车,即可自动输出1.jpg;2.jpg……

ffmpeg  -i  VID_20170913_141530.mp4  -r  35  ./1111/%d.jpg

ffmpeg  -i  视频的名字  %d.jpg  -r  帧率  %d.jpg

1000/帧率  *  分片数

注:或者命令错误~~~~

➜  weex1 ffmpeg -i output1.mp4  -r 20 -f image2 ./1111/image-%3d.jpeg

因为视频分帧图片很多,为了不显得那么乱,先建立好存放文件的文件夹,把路径写到命令行

搜索一般是每秒20张,即   -r 20

比如,现在有50张图片,从第5张开始算,到底20张结束,一共是16张,1000/20*16,就是时间,录屏分帧(ms)

如遇   [NULL @ 0x7fd52300a000] Unable to find a suitable output format for '–i'

–i: Invalid argument   报错

参考博客   https://blog.csdn.net/liuzehn/article/details/82748755

遇到这个问题就是不细致造成的,从网页上粘贴过来命令,直接运行。(我也是这样的~~)

其实原因很简单,就是我们使用了破折号(–)代替来了应该使用的连字符号(-)。

睁大自己的眼睛哟!

心得:首先我自己不会犯这么低级的错误,其次是搜的内网查的资料,要么写文章的人犯错了,要么wiki有bug。。。。也怪自己懒下次还是自己输入吧。。。直接复制粘贴找这个bug耗费我26min,无语了。。。

分完帧后,查看图片是否已生成   ➜  weex1 ls -al ./1111

统计image的数量   ➜  1111 ls -l|grep 'image-'|wc -l

一共452张

找到从性能测试开始的图片如第50张,到结束的图片如第200张,则录屏分帧(ms)  = 1000/20*15

一个个视频解析比较慢,用脚本实现

#!/usr/bin/python

# -*- coding: utf-8 -*-

# @Time    : 2018/8/29 下午8:26

# @Author  : Arvin

import os

import subprocess

def handle_record_file(root_dir):

    '''

    遍历root_dir 目录下的文件,处理 .mp4 结尾的文件

    :param root_dir:

    :return:

    '''

    for var in os.listdir(root_dir):

        path = os.path.join(root_dir,var)

        print(path)

        if os.path.isdir(path):

            handle_record_file(path)

        elif path.endswith("mp4"):

            split_pic(root_dir,var)

def split_pic(root_dir,path):

    '''

    将视频拆分成图片

    :param root_dir:

    :param path:

    :return:

    '''

    file_name = path.split(".")[0]

    pic_path = os.path.join(root_dir,file_name)

    if not os.path.exists(pic_path):

        os.makedirs(pic_path)

    ffmpeg_cmd = "ffmpeg -i "+ os.path.join(root_dir,path)+" -r 40 -f image2 " + pic_path + os.sep + "%d.jpg"

    print(ffmpeg_cmd)

    subprocess.check_call(ffmpeg_cmd,shell=True)

    # pass

if __name__ == "__main__":

    root_dir = "/Users/lishan/Downloads/weex1"

    #root_dir = "/Users/arvin/Documents/daily_work/20180829/test"

    handle_record_file(root_dir)

执行命令行   ➜  weex1 python split2pic.py

解析之前只有视频

用如上脚本分帧后,生成文件名称(与视频名称一致),文件名为视频分帧图片

FFMPEG常用命令收录(持续更新)

ffmpeg two pass转码

ffmpeg -y -i input -c:v libx264 -preset medium -b:v 555k -pass 1 -an -f mp4 /dev/null &&

  ffmpeg -i input -c:v libx264 -preset medium -b:v 555k -pass 2 -c:a libfdkaac -b:a 128k mp4 output.mp4

ffmpeg 转码crf测试

ffmpeg -i input -c:v libx264 -preset medium -crf XX -an output.mp4

ffplay播放YUV数据

~/ffplay -v info -f rawvideo -pixel_format yuv420p -video_size 528x864 i420.yuv

ffplay播放h264数据

~/ffplay -stats -f h264 workspace/android/qusdk-android/h264_test.h264 

ffplay播放pcm数据

~/ffplay -f s16le -ar 16k -ac 1 workspace/android/qusdk-android/pcm_file.pcm 

ffmpeg 转mp4 到 yuv420p

ffmpeg -i sample.mp4 -c:v rawvideo -pix_fmt yuv420p out.yuv

ffmpeg提取yuv数据

ffmpeg -i ~/Desktop/0819/QQ视频20170819205412.mp4 -q:v 2 -f image2 ~/Desktop/0819/image/%07d.jpeg

ffmpeg 转yuv420p 到mp4

ffmpeg -f rawvideo -pix_fmt yuv420p -s:v 1920x1080 -r 25 -i input.yuv -c:v libx264 output.mp4

ffmpeg 给mp4文件设置角度信息

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4

ffmpeg转mpeg4 编码到h264编码

ffmpeg -i  ~/Documents/手淘算法对接/归档\(1\)/input.mp4 -c:v libx264 -crf 30 -preset fast -c:a aac input_h264.mp4

ffprobe 抽取视频流packet信息

ffprobe ~/Desktop/0509/11.mp4 -select_streams v:0 -show_packets > a.txt

ffmpeg 设置开始时间,结束时间

ffmpeg -ss 00:00:06 -i ~/Desktop/晋升草稿/转场.mov -c:v libx264 ~/Desktop/晋升草稿/转场.mp4

MV素材转换(mov转mp4,保证时间戳不变)

~/ffmpeg -i mask_alpha.mov -vcodec libx264 -pix_fmt yuvj420p -copyts -profile baseline   a.mp4

ffmpeg 从mp4提取h264数据

ffmpeg -i output1.mp4 -codec copy -bsf h264_mp4toannexb -f h264 output1.264

ffmpeg 等比缩放视频

ffmpeg -i /Users/tom/Downloads/IMG_0264.MOV -vf scale=1080:-1  -vcodec libx264 -f mov a_1080.mov

ffmepg提取音频流

ffmpeg -i 11.mp4 -vn -y -acodec copy 11.aac

ffmpeg 提取视频流

ffmpeg -i 11.mp4 -vcodec copy –an  11_v.mp4

ffmpeg拼接视频

ffmpeg -f concat -i filelist.txt -c copy 11_3.mp4

//filelist.txt内部记录需要拼接的文件,格式如下: file '11.mp4' 

                                                file '22.mp4'

发布了65 篇原创文章 · 获赞 13 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_42498050/article/details/104410617