zoukankan      html  css  js  c++  java
  • [uiautomator篇] python uiautomatorDemo

    #coding=utf-8
    """
    
    @version: 1.0
    
    @author: 
    
    @prerequisite:
        based on Python 2.7
    
    @usage:
        1) this is the handler for testcase
    
    @Others:
        No
    
    @description: 3DMark性能跑分
    
    @module: performance
    
    @caselevel: A
    
    @timeout: 1800
    
    """
    
    from uiautomator import Device
    import time
    from util import CylixUtilTestCase
    import subprocess
    import os
    import zipfile
    import shutil
    import traceback
    import re
    
    class AI030002Mark3D(CylixUtilTestCase):
        
        PRE_INSTALL_APK = [
        # ('apk\3DMark.apk','com.futuremark.dmandroid.application')
        # ('apk\pad-debug.apk','com.softwinner.performance.frameratetest'),
        # ('apk\pad-debug-androidTest.apk','com.softwinner.performance.frameratetest.test')
        ]
    
    
    
        def testMark3d(self):
    
            self.installPlugIn()
            self.UiautomatorMark3D()
    
        def installPlugIn(self):
    
            resourcedir = os.path.normpath(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resource'))
            zipFilePath = os.path.normpath(os.path.join(resourcedir, r'mark3dAndroid.zip'))
            unzipToPath = os.path.dirname(zipFilePath)
            tempfile = os.path.join(unzipToPath, r'Android')
            self.logger.info("step1: unzip  " + zipFilePath + " to " + unzipToPath)
            if os.path.exists(tempfile):
                self.logger.info(tempfile + ' exist ,delete it')
                self.deleteDirectory(tempfile)
            self.unzip_file(zipFilePath, unzipToPath)
    
            self.logger.info("step2: push data to device")
            localDataPath = resourcedir + r'mark3dAndroiddata'
            remoteDataPath = '/sdcard/Android' 
            self.device.adb.push(localDataPath, remoteDataPath)
            self.deleteDirectory(tempfile)
    
        def UiautomatorMark3D(self):
            assert self.Recent(), 'recent fail'
            self.enterApplist()
            self.openApplication('3DMark')
            self.runMark3d()
            self.parserXml()
            assert self.Recent(), 'recent fail'
           
    
        def enterApplist(self):
            d = Device(self.dut_adb_num)
            d.press.home()
            d.screen.on()
    
            if d(description = "Apps list", index = 3).wait.exists(timeout=2000):
                self.logger.info("Find App list successfully")
                d(description = "Apps list", index = 3).click()
            else:
                print "Can not find App list"
                assert False, 'Can not find App list'
            if d(resourceId = "com.android.launcher3:id/main_content").wait.exists(timeout=2000):
                self.logger.info("Enter APP list successfully")
                return True
            else:
                self.logger.info("Fail to enter APP list")
                assert False, 'Fail to enter APP list'
    
        def openApplication(self, packageName):
            d = Device(self.dut_adb_num)
            d.screen.on()
            if d(text = packageName).wait.exists(timeout = 2000):
                self.logger.info("Find %s successfully" % packageName)
                d(description = packageName).click()
            else:
                self.logger.info("Can not find %s" % packageName)
                assert False, "Can not find %s" % packageName
    
        def runMark3d(self):
            d = Device(self.dut_adb_num)
            d.screen.on()
            time.sleep(10)
            if d(textContains = "3DMARK").wait.exists(timeout = 20000):
                self.logger.info("Enter 3DMARK successfully")
            else:
                self.logger.info("Fail to enter 3DMARK")
                assert False, 'fail to enter 3DMARK'
    
            if d(description = "RUN").wait.exists(timeout = 20000):
                self.logger.info("Find RUN successfully")
                d(description = "RUN").click()
            else:
                self.logger.info("Find RUN Failure")
                assert False, 'find Run Failure'
    
            for i in range(1,15):
                time.sleep(30)
                self.logger.info("3DMark run time :%s s" % str(i * 30))
                if i%2 == 0:         
                    if d(description = "SHARE").wait.exists(timeout = 2000):
                        self.logger.info("Find SHARE successfully")
                        self.logger.info("********************3DMark DONE********************")
                        return True
    
            xml_path = self.tcr_fd + os.sep + "3DMarkLiu.xml"
            self.logger.info('xml_path = %s' % xml_path)
            d.dump(xml_path)
            self.logger.info("Finish downloading %s file " % xml_path)
            f = file(xml_path)            
            lines = f.readlines()
            status = False
            for line in lines:
                if "SHARE" in line:
                    self.logger.info("Find SHARE successfully")
                    self.logger.info("********************3DMark DONE********************")
                    status = True
                    break;
            f.close()
            assert status, 'mark3d test fail'
    
        def parserXml(self):
    
            d = Device(self.dut_adb_num)
            d.screen.on()
            iceStormExtremeXML = os.path.normpath(os.path.join(self.tcr_fd, 'iceStormExtreme.xml'))
            self.logger.info('iceStormExtremeXML = %s' % iceStormExtremeXML )
            d.dump(iceStormExtremeXML)
            f = file(iceStormExtremeXML)
            lines = f.readlines()
            for line in lines:
                # content-desc="Ice Storm Extreme 1891"
                iceStormExtreme_score = re.findall(r'Ice Storm Extremes+(d+)', line, re.M)[0]
                self.logger.info(iceStormExtreme_score)
                if not iceStormExtreme_score:
                    assert False, 'recompile fail'
                assert int(iceStormExtreme_score) > 1500, 'iceStormExtreme_score below 1500'
            f.close()
    
        def unzip_file(self,zipfilename,unziptodir):
    
            # if not os.path.exists(unziptodir):
            #     os.mkdir(unziptodir,0777)
            assert os.path.exists(unziptodir), unziptodir + "not exist"
            
            zfobj = zipfile.ZipFile(zipfilename)
            for name in zfobj.namelist():
                name = name.replace('\','/')
                if name.endswith('/'):
                    # print "include folder: " + name
                    os.mkdir(os.path.join(unziptodir,name))
                else:
                    # print "include file: " + name
                    ext_filename = os.path.join(unziptodir,name)
                    ext_dir = os.path.dirname(ext_filename)
                    if not os.path.exists(ext_dir):
                        os.mkdir(ext_dir,0777)
                    outfile = open(ext_filename,'wb')
                    outfile.write(zfobj.read(name))
                    outfile.close()
    
        def deleteDirectory(self,current_path):
            if not os.path.exists(current_path):
                self.logger.info(current_path + " not exist")
                return
            current_filelist = os.listdir(current_path)
            for f in current_filelist:
                real_path = os.path.join(current_path,f)
                if os.path.isdir(real_path):
                    real_folder_path = real_path
                    try:
                        for root,dirs,files in os.walk(real_folder_path):
                            for name in files:
                                del_file = os.path.join(root,name)
                                os.remove(del_file)
                        shutil.rmtree(real_folder_path)
                    except Exception,e:traceback.print_exc()
                if os.path.isfile(real_path):
                    os.remove(real_path)
            os.rmdir(current_path)
    
    
        def Recent(self):
            d = Device(self.dut_adb_num)
            displayWidth = int(d.info.get("displayWidth"))
            displayHeight = int(d.info.get("displayHeight"))
            d.press.recent()
            if d(text="No recent items").wait.exists(timeout=2000):
                print "Cleared recent items"
                return True
            if d(descriptionContains="Dismiss").wait.exists(timeout=2000):
                for i in range(50):
                    if d(text="CLEAR ALL").wait.exists(timeout=2000):
                        d(text="CLEAR ALL").click()
                        if d(description="Apps list",index=3).wait.exists(timeout=2000):
                            print "Cleared recent items"
                            return True
                        else:
                            print "Fail to clear recent items" 
                            return False
                    else:
                        d.swipe(displayWidth/2,displayHeight/4,displayWidth/2,3*displayHeight/4,steps=30)
                        i+=1
                else:
                    print "Fail to find CLEAR ALL "
                    return False
            else:
                print "EXCEPTION CLEAR RECENT ITEMS"
                return True
  • 相关阅读:
    Docker容器操作
    Docker的镜像操作
    CentOs安装Docker
    超长字符串
    编程之美-2.11 扩展 寻找距离最远的两个点
    编程之美-2.8 找到符合条件的整数
    编程之美-2.4 1的数目
    编程之美-1.16 24点游戏
    logistic回归 c++ 实现
    朴素贝页斯分类法 c++实现
  • 原文地址:https://www.cnblogs.com/liuzhipenglove/p/7196305.html
Copyright © 2011-2022 走看看