1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-03-20 01:29:00 +00:00
John Richardson 13df3cff90 Add workload validate step to check dependencies
Check that dependent files for the workload are present in the
dependencies folder before starting the workload. Move cleanup of
dependent files to finalize method.
2016-05-26 10:25:37 +01:00

136 lines
5.9 KiB
Python
Executable File

# Copyright 2014-2016 ARM Limited
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import os
import logging
import re
import time
from wlauto import AndroidUiAutoBenchmark, Parameter
from wlauto.exceptions import DeviceError
from wlauto.exceptions import NotFoundError
__version__ = '0.1.0'
class Reader(AndroidUiAutoBenchmark):
activity = 'com.adobe.reader.AdobeReader'
name = 'reader'
package = 'com.adobe.reader'
view = [package+'/com.adobe.reader.help.AROnboardingHelpActivity',
package+'/com.adobe.reader.viewer.ARSplitPaneActivity',
package+'/com.adobe.reader.viewer.ARViewerActivity']
description = """
The Adobe Reader workflow carries out the following typical productivity tasks using
Workload-Automation.
Test description:
1. Open the application and sign in to an Adobe Cloud account over wifi
2. Select the local files browser list - a test measuring the time taken to navigate through the
menus and for the list to be created.
3. Search for a specific file from within the - a test measuring the entry of a search string
and time taken to locate the document within the file list.
4. Open the selected file - a test measuring the time taken to open the document and present
within a new view.
5. Gestures test - measurement of fps, jank and other frame statistics, via dumpsys, for swipe
and pinch gestures.
6. Search test - a test measuring the time taken to search a large 100+ page mixed content
document for specific strings. Steps 2-4 are repeated to open the Cortex M4 manual.
"""
parameters = [
Parameter('dumpsys_enabled', kind=bool, default=True,
description="""
If ``True``, dumpsys captures will be carried out during the
test run. The output is piped to log files which are then
pulled from the phone.
"""),
Parameter('email', kind=str, default="email@gmail.com",
description="""
Email account used to register with Adobe online services.
"""),
Parameter('password', kind=str, default="password",
description="""
Password for Adobe online services.
"""),
]
instrumentation_log = ''.join([name, '_instrumentation.log'])
def validate(self):
super(Reader, self).validate()
self.output_file = os.path.join(self.device.working_directory, self.instrumentation_log)
self.uiauto_params['package'] = self.package
self.uiauto_params['output_dir'] = self.device.working_directory
self.uiauto_params['output_file'] = self.output_file
self.uiauto_params['email'] = self.email
self.uiauto_params['password'] = self.password
self.uiauto_params['dumpsys_enabled'] = self.dumpsys_enabled
def initialize(self, context):
super(Reader, self).initialize(context)
if not self.device.is_wifi_connected():
raise DeviceError('Wifi is not connected for device {}'.format(self.device.name))
self.reader_local_dir = self.device.path.join(self.device.external_storage_directory,
'Android/data/com.adobe.reader/files/')
# Check for workload dependencies before proceeding
pdf_files = [entry for entry in os.listdir(self.dependencies_directory) if entry.endswith(".pdf")]
if not len(pdf_files):
raise NotFoundError("Cannot find {} file(s) in {}".format('pdf', self.dependencies_directory))
else:
for entry in pdf_files:
self.device.push_file(os.path.join(self.dependencies_directory, entry),
os.path.join(self.reader_local_dir, entry),
timeout=300)
def update_result(self, context):
super(Reader, self).update_result(context)
self.device.pull_file(self.output_file, context.output_directory)
result_file = os.path.join(context.output_directory, self.instrumentation_log)
with open(result_file, 'r') as wfh:
regex = re.compile(r'(?P<key>\w+)\s+(?P<value1>\d+)\s+(?P<value2>\d+)\s+(?P<value3>\d+)')
for line in wfh:
match = regex.search(line)
if match:
context.result.add_metric((match.group('key') + "_start"),
match.group('value1'), units='ms')
context.result.add_metric((match.group('key') + "_finish"),
match.group('value2'), units='ms')
context.result.add_metric((match.group('key') + "_duration"),
match.group('value3'), units='ms')
def teardown(self, context):
super(Reader, self).teardown(context)
for entry in self.device.listdir(self.device.working_directory):
if entry.endswith(".log"):
self.device.pull_file(os.path.join(self.device.working_directory, entry), context.output_directory)
self.device.delete_file(os.path.join(self.device.working_directory, entry))
def finalize(self, context):
super(Reader, self).finalize(context)
for entry in self.device.listdir(self.reader_local_dir):
if entry.endswith(".pdf"):
self.device.delete_file(os.path.join(self.reader_local_dir, entry))