Instead of duplicating test logic for different parameters, you can use Mobly's Generated tests feature. This allows you to run the same logic multiple times with different argument sets.
- Implement
pre_run: In this method, define the list of arguments (arg_sets) and call self.generate_tests. - Define
test_logic: A function containing the actual test steps that accepts the arguments from arg_sets. - Define
name_func: A function that returns a unique string for each generated test case, using the same signature as test_logic.
Example Implementation:
from mobly import base_test
from mobly import test_runner
from mobly.controllers import android_device
class ManyGreetingsTest(base_test.BaseTestClass):
def pre_run(self):
# List of (greeting, name) tuples
messages = [('Hello', 'World'), ('Aloha', 'Obama'), ('konichiwa', 'Satoshi')]
self.generate_tests(
test_logic=self.make_toast_logic,
name_func=self.make_toast_name_function,
arg_sets=messages)
def setup_class(self):
self.ads = self.register_controller(android_device)
self.dut = self.ads[0]
self.dut.load_snippet('mbs', android_device.MBS_PACKAGE)
def make_toast_logic(self, greeting, name):
self.dut.mbs.makeToast('%s, %s!' % (greeting, name))
def make_toast_name_function(self, greeting, name):
return 'test_greeting_say_%s_to_%s' % (greeting, name)
if __name__ == '__main__':
test_runner.main()
from mobly import base_test
from mobly import test_runner
from mobly.controllers import android_device
class ManyGreetingsTest(base_test.BaseTestClass):
def pre_run(self):
messages = [('Hello', 'World'), ('Aloha', 'Obama'), ('konichiwa', 'Satoshi')]
self.generate_tests(
test_logic=self.make_toast_logic,
name_func=self.make_toast_name_function,
arg_sets=messages)
def setup_class(self):
self.ads = self.register_controller(android_device)
self.dut = self.ads[0]
self.dut.load_snippet('mbs', android_device.MBS_PACKAGE)
def make_toast_logic(self, greeting, name):
self.dut.mbs.makeToast('%s, %s!' % (greeting, name))
def make_toast_name_function(self, greeting, name):
return 'test_greeting_say_%s_to_%s' % (greeting, name)
if __name__ == '__main__':
test_runner.main()