1、py发送cmd命令--commands
import os,sys,commands,time,logging
python_path=runall_path+'/global_Common/global_oracle_sec'
cmd='export PYTHONPATH=%s;python run_all.py %s %s %s' %(python_path,ip,mode,batch)
logger.info(cmd)
status,execute_result = commands.getstatusoutput(cmd)
logger.info(execute_result)
使用commands,cmd命令执行完才会返回结果。如果这个cmd命令执行时间比较长,需等执完成logger.info(execute_result)才会在控制台打印结果
2、py发送cmd命令--os.system
python_path=file_path+'/global_Common/global_standard'
cmd='export PYTHONPATH=%s;python run_all.py %s %s %s' %(python_path,ip,mode,batch)
logger.info(cmd)
logger.info(os.system(cmd))
使用os.system,cmd命令边执行边返回结果。如果这个cmd命令执行时间比较长,不需等待 logger.info(os.system(cmd))会在控制台实时打印执行过程结果
3、打印--logging
import logging
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger()
logger.info(cmd)
logger.error("run_all.py执行失败")
logger与print的区别是,在linux执行py,logger打印的内容会显示在控制台,还带时间等信息
4、修改python的临时环境变量
如果测试用例py中from GlobalList.global_list import *,环境连接信息来源于项目的GlobalList文件夹下的global_list.py文件,而测试时想使用别的global_list.py文件。解决办法:重命名原来的GlobalList文件夹,新建别的文件夹,放入GlobalList文件夹和global_list.py文件,export命令修改临时环境变量
file_path=os.path.dirname(__file__)
os.system('cd %s'%file_path)
os.system('mv GlobalList GlobalList_bck')
if mode=='standard':
try:
runall_path=os.path.abspath('.')
python_path=runall_path+'/global_Common/global_standard'
cmd='export PYTHONPATH=%s;python run_all.py %s %s %s' %(python_path,ip,mode,batch)
logger.info(cmd)
logger.info(os.system(cmd))
except Exception as e:
logger.error("run_all.py执行失败")
sys.exit(1)
(shell脚本修改环境变量命令export PYTHONPATH=$PYTHONPATH:/home/uxdb/CI_AutoTest/share/autotestcase/TestScript/global_count/$node/$task)
5、py里有中文,运行报错
在安装python2时,默认编码是ascii,当程序中出现非ascii编码时,python解释器会报错。python解释器没法处理非ascii编码,在程序中加入以下代码,即可将编码设置为utf-8。
import sys
reload(sys)
sys.setdefaultencoding('utf8')
6、多线程并行
from threading import Thread
def run(ip,mode,batch):
****线程执行的目标函数
def parallel_runcase(ip,mode,batch):
mode_list=mode.split(',')
print mode_list
threads = []
for mode in mode_list:
threads.append(Thread(target=run,args=(ip,mode,batch)))
for t in threads:
print t
t.start()
time.sleep(1)
#t.join()
logger.error('用例连跑完成!')
parallel_runcase(ip,mode,batch)