前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用UiAutomator写一个首页刷新的稳定性测试脚本

利用UiAutomator写一个首页刷新的稳定性测试脚本

作者头像
FunTester
发布2019-09-04 13:56:52
6160
发布2019-09-04 13:56:52
举报
文章被收录于专栏:FunTesterFunTesterFunTester

本人在做Android APP稳定性测试的过程中,需要测试在不断刷新首页内容的场景下的稳定运行和性能数据的收集。最终根据UiAutomator+多线程解决了这个问题。思路如下:先用UiAutomator编写好运行脚本,然后在使用快速调试的时候把调试命令输出出来,然后在测试脚本中运行这个调试命令即可,当然还需要多线程来辅助记录log和性能数据。

多线程类代码如下:

package monkeytest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import source.Common;
import source.PerformanceThread;

public class HomeRefresh {
    public static String ADB_PATH = Common.ADB_PATH;;
    public static String package_name = Common.HEAD_PAGEKAGE;

    public static void main(String[] args) {
//        String timess = args[0];
//        int times = Common.getInstance().changeStringToInt(timess);
        for (int i = 0; i < 3; i++) {
            Date start = Common.getInstance().getDate();
            Logcat logcat = new Logcat();// 新建记录log线程
            PerformanceThread performanceThread = new PerformanceThread("homerefresh", package_name);// 性能监控
            performanceThread.start();
            logcat.start();
            String command = "adb shell uiautomator runtest demo.jar --nohup -c happyjuzi.AppCase#testHomeRefresh";
            execCmdAdb(command, "homerefresh" + getNow() + ".log");
            logcat.stopLoacat();
            performanceThread.stopRecord();
            Date end = Common.getInstance().getDate();
            Common.getInstance().outputTimeDiffer(start, end);
        }
    }

    /**
     * 执行adb命令
     * 
     * @param cmd
     *            命令内容
     * @param fileName
     *            输入文件路径
     */
    public static void execCmdAdb(String cmd, String fileName) {
        System.out.println("执行命令:" + cmd);
        String OSname = System.getProperty("os.name");
        Common.getInstance().saveToFile(Common.getInstance().getNow() + "开始!" + Common.LINE, fileName);// 保存
        try {
            Process p = null;
            if (OSname.contains("Mac")) {
                p = Runtime.getRuntime().exec(ADB_PATH + cmd);
            } else {
                p = Runtime.getRuntime().exec("cmd /c " + cmd);
            }
            // 正确输出流
            InputStream input = p.getInputStream();// 创建并实例化输入字节流
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));// 先通过inputstreamreader进行流转化,在实例化bufferedreader,接收内容
            String line = "";
            while ((line = reader.readLine()) != null) {// 循环读取
                if (line.startsWith("//   ")) {
                    continue;
                }
                if (line.startsWith("//")) {
                    Common.getInstance().saveToFile(line, fileName);// 保存
                }
                if (line.contains("Exception")) {
                    Common.getInstance().saveToFile("error-homerefresh" + getNow(), "error-homerefresh"+getNow()+".log");
                }
            }
            reader.close();// 此处reader依赖于input,应先关闭
            input.close();
            // 错误输出流
            InputStream errorInput = p.getErrorStream();// 创建并实例化输入字节流
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorInput));// 先通过inputstreamreader进行流转化,在实例化bufferedreader,接收内容
            String eline = "";
            while ((eline = errorReader.readLine()) != null) {// 循环读取
                Common.getInstance().saveToFile(eline, fileName);// 保存

            }
            errorReader.close();// 此处有依赖关系,先关闭errorReader
            errorInput.close();
        } catch (IOException e) {
            Common.getInstance().output("执行" + cmd + "失败!");
            e.printStackTrace();
        }
        Common.getInstance().saveToFile(Common.LINE + Common.getInstance().getNow() + "结束!", fileName);// 保存
    }

    /**
     * 获取当前时间
     * 
     * @return 返回当前时间,只有日期和小时和分数没有年份和秒数
     */
    private static String getNow() {
        Date time = new Date();
        SimpleDateFormat now = new SimpleDateFormat("MM-dd-HH-mm");
        String c = now.format(time);
        return c;
    }

    public void output(String text) {
        System.out.println(text);
    }

    public void output(Object... object) {
        if (object.length == 1) {
            output(object[0].toString());
            return;
        }
        for (int i = 0; i < object.length; i++) {
            System.out.println("第" + (i + 1) + "个:" + object[i]);
        }
    }
}

运行代码如下,因为比较简单,就只写了方法部分的代码。

    public void testHeadHomeRefresh() {
        for (int i = 0; i < 20; i++) {
            startHead();
            waitForUiObjectByResourceId("com.ss.android.article.news:id/b_y");
            sleep(1000);
            for (int k = 0; k < 15; k++) {
                swipeDown();
                sleep(1500);
            }
            stopHead();
        }
    }
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
应用性能监控
应用性能监控(Application Performance Management,APM)是一款应用性能管理平台,基于实时多语言应用探针全量采集技术,为您提供分布式性能分析和故障自检能力。APM 协助您在复杂的业务系统里快速定位性能问题,降低 MTTR(平均故障恢复时间),实时了解并追踪应用性能,提升用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档