diff --git a/wa/framework/workload.py b/wa/framework/workload.py index 4bc02e0d..6c7cfdbd 100644 --- a/wa/framework/workload.py +++ b/wa/framework/workload.py @@ -171,6 +171,10 @@ class ApkWorkload(Workload): package_names = [] view = None + # Set this to True to mark that this workload requires the target apk to be run + # for initialisation purposes before the main run is performed. + requires_rerun = False + parameters = [ Parameter('package_name', kind=str, description=""" @@ -261,8 +265,18 @@ class ApkWorkload(Workload): def setup(self, context): super(ApkWorkload, self).setup(context) self.apk.setup(context) + if self.requires_rerun: + self.setup_rerun() + self.apk.restart_activity() time.sleep(self.loading_time) + def setup_rerun(self): + """ + Perform the setup necessary to rerun the workload. Only called if + ``requires_rerun`` is set. + """ + pass + def teardown(self, context): super(ApkWorkload, self).teardown(context) self.apk.teardown() @@ -786,6 +800,10 @@ class PackageHandler(object): raise WorkloadError(output) self.logger.debug(output) + def restart_activity(self): + self.target.execute('am force-stop {}'.format(self.apk_info.package)) + self.start_activity() + def reset(self, context): # pylint: disable=W0613 self.target.execute('am force-stop {}'.format(self.apk_info.package)) self.target.execute('pm clear {}'.format(self.apk_info.package))