Assume I have a class in python:
class TestClass(object):
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
def print_args(self):
print arg1, arg2
I want to use robotframework
to implement my tests scenarios. I want to make an instance from above class and call its methods. How to do that? I know how to import the lib; it should be like this:
Library TestClass
I don't know how to initialize an object from this class and call class methods via this object. If I wanted to implement it with python, I would write some piece of code like this:
import TestClass
test = TestClass('ARG1', 'ARG2')
test.print_args()
Now, I want to know how to write this in robotframework
. Any help?
To import the Python script inside Robot, we use the keyword Library in the Robot file under ***settings*** . To call the function, we use <file_name> <dot> <function name> . To add keywords inside the function, we use the keyword decorator. Here, BuildIn().
The suggested route to install the robot framework on Python is to use pip. We can use the undermentioned command to install the framework. After the well-turned installation, we should be able to see both interpreter and robot framework versions using the –version option.
If you specify it as ../mylib.py , it will look for it in the parent folder. The important step to add it to the PYTHONPATH is just a shortcut - any python program will have access to it, Robot Framework including; but this is actually not very good - you are just polluting your path with random modules and methods.
To import the library with arguments, just add them after the library name:
Library TestClass ARG1 ARG2
So the "import" and the instantiation are done in one shot. Now, the thing that can be tricky is to understand the scope of your instance. This is well explained in the User Guide section "Test Library Scope":
A new instance is created for every test case. [...] This is the default.
Note that if you want to import the same library several times with different arguments, and hence have difference instances of your classes, you will have to name them on import:
Library TestClass ARG1 ARG2 WITH NAME First_lib
Library TestClass ARG3 ARG4 WITH NAME Second_lib
And then in your tests, you have to prefix the keywords:
*** Test Cases ***
MyTest
First_lib.mykeyword foo bar
Second_lib.mykeyword john doe
This is explained in this section of the User Guide.
I have been able to instantiate python classes on-demand (i.e. not just hard-coded args as via the Library technique).
I used a helper method to create the class. I was unable to get the Robot script to call the class constructor directly, however it is able to call functions in Python, so we can create a class or namedtuple by providing a function-based interface:
File: resource_MakeMyClass.robot
*** Settings ***
Library myClass
*** Keywords ***
_MakeMyClass
[Arguments] ${arg1} ${arg2}
${result} = makeMyClass ${arg1} ${arg2}
[Return] ${result}
File: myClass.py
class MyClass(object):
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
def makeMyClass(arg1, arg2):
return MyClass(arg1, arg2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With