Let me share, few of the problems that I faced during python automation here,
Handling Passwords across Python and Expect:
Scenario - Login to Hypervisor manager (where VNF is deployed) and reset (power off and on) a particular VM. Meanwhile monitor VNF node for status change. After that VM comes back to service perform assertions for setting test verdict.
Issue: password to VM manager must be captured using python and be sent to expect script as argument. password should not be printed / echoed anywhere. (catch: password may contain special characters)
Solution:
import getpass
pwd = getpass.getpass() # input: my#pwd
=> So password will not be echoed - partly solved
special characters must be escaped before send that as argument to expect script
pwd=re.escape(pwd)
cmd = "expect my_script.exp "+pwd #expect my_script.exp my\#pwd
os.system(cmd)
=> Fully solved.
The Importance of "exit 0" in shell script:
Scenario:
Python calls a shell script to kill a process. And based on exit status the Python takes further steps.
Problem:
When the processes that are being killed are interdependent, some time "no such process" error is thrown. So a non-zero exit status is returned to Python and It prints killing NOT successful, eventhough intended killing has been done.
Shell script:
#!/bin/bash
ps -ef | grep xxx | xargs -i kill {}
Python ():
import subprocess
def killme():
p = subprocess.Popen(['./script.sh'], stdout=subprocess.PIPE)
out, err = p.communicate()
if p.returncode !=0:
print "Killing NOT successful"
print "Killed"
killme()
Solution:
Added exit 0 in shell script
#!/bin/bash
ps -ef | grep xxx | xargs -i kill {}
exit 0
Using Object of a class as an attribute of another class:
class1.py
class class1:
def __init__(self):
self.variable = "One"
class2.py
class class2:
def __init__(self, obj):
self.obj = obj
test.py
from class1 import class1
from class2 import class2
c1 = class1()
c2 = class2(c1)
c1.variable = "two"
print c2.obj.variable
#two
No comments:
Post a Comment