Exemplo n.º 1
0
    def __init__(self, result_log, serial=None, config=ConfigReader("config.cfg")):
        #: 设备串号
        self.serial = serial
        self.cmdexec = CMDExec(self.serial)
        if self.serial == None:
            self.adb_cmd = "adb"
        else:
            self.adb_cmd = "adb -s " + self.serial
        self.enable_u3 = config.getValue("config", "enable_u3")
        self.diff_value = config.getValue("config", "diff_value")
        pkgName_ = config.getValue("config", "pkg_")
        self.pkgs_ = pkgName_.split(",")
        self.server_addr = config.getValue("config", "server_addr")
        self.dir = os.getcwd()
        log_factory = LogFactory(result_log, log_config_url="uc_log4py/log4py.cfg")
        self.__logger = log_factory.getLogger("RunTest")
        self.runUrl = ""
        self.runTime = ""

        if plat == "posix":
            self.pic_path = os.path.join(self.dir, "client/pics/")
        elif plat == "nt":
            self.pic_path = os.path.join(self.dir, "client\\pics\\")
        self.result_url = config.getValue("config", "result_url")
Exemplo n.º 2
0
class RunTest(object):
    def __init__(self, result_log, serial=None, config=ConfigReader("config.cfg")):
        #: 设备串号
        self.serial = serial
        self.cmdexec = CMDExec(self.serial)
        if self.serial == None:
            self.adb_cmd = "adb"
        else:
            self.adb_cmd = "adb -s " + self.serial
        self.enable_u3 = config.getValue("config", "enable_u3")
        self.diff_value = config.getValue("config", "diff_value")
        pkgName_ = config.getValue("config", "pkg_")
        self.pkgs_ = pkgName_.split(",")
        self.server_addr = config.getValue("config", "server_addr")
        self.dir = os.getcwd()
        log_factory = LogFactory(result_log, log_config_url="uc_log4py/log4py.cfg")
        self.__logger = log_factory.getLogger("RunTest")
        self.runUrl = ""
        self.runTime = ""

        if plat == "posix":
            self.pic_path = os.path.join(self.dir, "client/pics/")
        elif plat == "nt":
            self.pic_path = os.path.join(self.dir, "client\\pics\\")
        self.result_url = config.getValue("config", "result_url")

    def getLogger(self):
        return self.__logger

    def pullPic(self, pkg_):
        #         self.__logger.debug("debug for pull pic")
        #         self.__logger.info("info for pull pic")
        #         self.__logger.warn("warn for pull pic")
        #         self.__logger.error("error for pull pic ")
        picFile = ""
        # u3 特有的截图方法
        if self.enable_u3 == "1":
            print "u3 get pic,picFile=", pkg_
            try:
                # pull 图片
                self.cmdexec.pull("/sdcard/UCDownloads/PageShot/", "./client/old/")
                # 删除手机上的图片
                self.cmdexec.sendShellCommand("  rm -r /sdcard/UCDownloads/PageShot/")
                # 创建原文件夹
                self.cmdexec.sendShellCommand("  mkdir /sdcard/UCDownloads/PageShot")
                picFile = self.getAndReName(pkg_)
                if picFile == "":
                    # DEL
                    print "picFile is None,pkg_ = ", pkg_
                    # del_pics = 'del /Q "'+self.pic_path+'"'
                    # os.system(del_pics)
                    self.__logger.info("Pic is None, RunUrlTest Again ")
                    self.runUrlTest(self.runTime, self.runUrl)

            except:
                print "get pic error"
                # 获取不到图片再次测试
                self.__logger.error("********get pic error********")
                self.__logger.info("RunUrlTest Again ")
                # del_pics = 'del /Q "'+self.pic_path+'"'
                # os.system(del_pics)
                self.runUrlTest(self.runTime, self.runUrl)

            finally:
                return picFile
        else:
            # 使用非U3内核的浏览器截图功能的代码
            print u"请实现代码"
        return PicFile

    def getAndReName(self, pkg_):
        if plat == "posix":
            old_path = os.path.join(self.dir, "client/old/")
        elif plat == "nt":
            old_path = os.path.join(self.dir, "client\\old\\")
        files = os.listdir(old_path)
        newFile = ""
        for f in files:
            newFile = os.path.join(self.pic_path, f)
            nowFile = os.path.join(old_path, f)
            # os.rename(nowFile, newFile)
            copy(nowFile, newFile)
            # DEL
            if plat == "posix":
                del_pics = "rm -rf  " + old_path + "*.*"
            elif plat == "nt":
                del_pics = 'del /Q "' + self.pic_path + '"'
            os.system(del_pics)
        return newFile

    def imageDiff(self, p1, p2):
        diff_value = 0.01
        try:
            diff = image_diff(p1, p2)
            diff_value = diff.compareimage()
        except:
            print "image diff error"
        finally:
            return diff_value

    def diffResult(self, pics):
        re = ""
        if len(pics) == 2:
            if pics[0] != "" and pics[1] != "":
                print "image diff"
                diff = self.imageDiff(pics[0], pics[1])
                diff_value = float(self.diff_value)
                print "diff = ", diff
                print "diff_value = ", diff_value
                if diff < diff_value:
                    re = "p1 & p2 are different , diffValue = " + str(diff)
                    # upload
                    nohttp_url = self.runUrl.split("/")[2]
                    print "nohttp_url = ", nohttp_url
                    print upload_dir
                    os.system("python client/upload.py " + upload_dir + " " + nohttp_url)
                else:
                    re = "p1 & p2 are same , diffValue = " + str(diff)
                    # DEL
                    # del_pics = 'del /Q "'+self.pic_path+'"'
                    # os.system(del_pics)
            else:
                re = "error:p1 or p2  is None"
        else:
            re = "error:p1 or p2  is None,pics len = " + str(len(pics))
        return re

    def runUrlTest(self, t, url):
        pics = []
        i = 1
        for p in self.pkgs_:
            pic = ""
            # pkgName = "com.UCMobile."+p
            pkgName = p
            if "UCMobile" in p:
                cmd_url = (
                    " am start -a android.intent.action.VIEW -n "
                    + pkgName
                    + '/com.UCMobile.main.UCMobile -d "'
                    + url
                    + '"'
                )
            elif "chrome" in p:
                cmd_url = (
                    " am start -a android.intent.action.VIEW -n "
                    + pkgName
                    + '/com.google.android.apps.chrome.Main -d "'
                    + url
                    + '"'
                )
            elif "tensent" in p:
                cmd_url = (
                    " am start -a android.intent.action.VIEW -n "
                    + pkgName
                    + '/com.tencent.mtt.SplashActivity -d "'
                    + url
                    + '"'
                )
            print "Pkg" + str(i) + " " + cmd_url
            i = i + 1
            self.cmdexec.sendShellCommand(cmd_url)
            time.sleep(5)
            self.cmdexec.sendShellCommand(cmd_url)
            time.sleep(5)
            # 截屏
            name = url.split("/")[-1]
            cmd_screen = "/system/bin/screencap -p /sdcard/UCDownloads/pageShot/" + name + "_" + pkgName + "_1.png"
            print cmd_screen
            self.cmdexec.sendShellCommand(cmd_screen)
            time.sleep(t)
            if "UCMobile" in p:
                kill_pkg = "am start -n" + pkgName + "/com.UCMobile.main.UCMobile -e click quit"
            else:
                kill_pkg = " am force-stop " + pkgName
            self.cmdexec.sendShellCommand(kill_pkg)
            pic = self.pullPic(p)
            pics.append(pic)
        return pics

    def handleProcess(self, upload_dir, url_list=os.path.join(os.getcwd(), "urls.txt")):

        # 删除手机上的图片
        self.cmdexec.sendShellCommand("  rm -r /sdcard/UCDownloads/PageShot/")
        # 创建原文件夹
        self.cmdexec.sendShellCommand("  mkdir /sdcard/UCDownloads/PageShot")
        # DEL
        # del_pics = 'del /Q "'+self.pic_path+'"'
        # os.system(del_pics)

        pics = []
        result = ""

        ofile = open(url_list, "r")
        for line in ofile:
            urls = line.strip("\n")
            urls = urls.strip("\r")
            url = urls.split()[0]
            print urls
            print url
            t = int(urls.split()[1])
            self.runTime = t
            self.runUrl = url
            self.__logger.info("RunTest URL = " + self.runUrl + " Runtime = " + str(self.runTime))
            pics = self.runUrlTest(t, self.runUrl)
            for p1 in pics:
                print "pics===================", p1
            # if (len(pics)==2 and pics[0]!="" and pics[1]!=""):
            #    result = self.diffResult(pics)
            #    self.__logger.info("RunTest Result = "+result)
            # else:
            # 失败再来一次
            # DEL
            # del_pics = 'del /Q "'+self.pic_path+'"'
            # os.system(del_pics)
            # self.__logger.info("RunTest pics[]!=2 or pics is none  Run Again")
            # pics = self.runUrlTest(t, self.runUrl)
            # result = self.diffResult(pics)
            # self.__logger.info("RunTest Result = "+result)

            self.__logger.info("=================================================================================")

        ofile.close()