AutomationTest/run_web_ui_test.py

84 lines
3.7 KiB
Python
Raw Normal View History

2019-09-17 15:38:49 +08:00
#-*- coding:utf8 -*-
2019-09-17 16:34:41 +08:00
from base.read_web_ui_config import Read_WEB_UI_Config
2019-09-17 15:38:49 +08:00
from common.fileTool import FileTool
from common.httpclient.doRequest import DoRequest
2019-10-16 10:36:48 +08:00
from init.web_ui.web_ui_init import web_ui_init
2019-09-17 15:38:49 +08:00
from selenium.webdriver.remote.remote_connection import RemoteConnection
from selenium.webdriver.remote.command import Command
import argparse
2019-10-24 14:25:52 +08:00
import ujson
2019-09-17 15:38:49 +08:00
import pytest
import sys
if __name__=='__main__':
parser=argparse.ArgumentParser()
parser.add_argument('-k','--keyword',help='只执行匹配关键字的用例,会匹配文件名、类名、方法名',type=str)
parser.add_argument('-d','--dir',help='指定要测试的目录',type=str)
2019-09-29 17:10:38 +08:00
parser.add_argument('-s', '--capture', help='是否在标准输出流中输出日志,1:是、0:否')
2019-12-03 13:58:25 +08:00
parser.add_argument('-r', '--reruns', help='失败重跑次数')
2019-09-17 15:38:49 +08:00
args=parser.parse_args()
print('开始初始化......')
print('开始检测selenium server是否可用......')
try:
2019-09-17 16:34:41 +08:00
doRquest=DoRequest(Read_WEB_UI_Config().web_ui_config.selenium_hub)
2019-09-17 15:38:49 +08:00
httpResponseResult=doRquest.get('/status')
2019-10-24 14:25:52 +08:00
result=ujson.loads(httpResponseResult.body)
2019-09-17 15:38:49 +08:00
if result['status']==0:
print('selenium server状态为可用......')
else:
sys.exit('selenium server状态为不可用')
except:
sys.exit('selenium server状态为不可用')
print('初始化基础数据......')
2019-10-16 10:36:48 +08:00
web_ui_init()
2019-09-17 15:38:49 +08:00
print('初始化基础数据完成......')
print('初始化完成......')
print('开始测试......')
exit_code = 0
2019-09-17 16:34:41 +08:00
for current_browser in Read_WEB_UI_Config().web_ui_config.test_browsers:
2019-09-17 15:38:49 +08:00
print('开始'+current_browser+'浏览器测试......')
# 由于pytest的并发插件xdist采用子进程形式当前主进程的单例在子进程中会重新创建所以将每次要测试的浏览器信息写入到文件中
# 保证子进程能够正确读取当前要测试的浏览器
2019-09-30 11:39:29 +08:00
FileTool.replaceFileContent('config/web_ui_config.conf','\r\n','\n')
FileTool.replaceFileContentWithLBRB('config/web_ui_config.conf','='+current_browser,'current_browser','\n')
2019-09-17 15:38:49 +08:00
# 执行pytest前的参数准备
2019-10-12 16:26:55 +08:00
pytest_execute_params=['-c', 'config/pytest.conf', '-v', '--alluredir', 'output/web_ui/'+current_browser+'/','-n',Read_WEB_UI_Config().web_ui_config.test_workers,'--dist','loadfile']
2019-09-17 15:38:49 +08:00
# 判断目录参数
2019-09-18 12:41:17 +08:00
dir = 'cases/web_ui/'
2019-09-17 15:38:49 +08:00
if args.dir:
dir=args.dir
# 判断关键字参数
if args.keyword:
pytest_execute_params.append('-k')
pytest_execute_params.append(args.keyword)
2019-09-29 17:10:38 +08:00
# 判断是否输出日志
if args.capture:
pytest_execute_params.append('-s')
2019-12-03 13:58:25 +08:00
# 判断是否失败重跑
if args.reruns:
pytest_execute_params.append('--reruns')
pytest_execute_params.append(args.reruns)
2019-09-17 15:38:49 +08:00
pytest_execute_params.append(dir)
tmp_exit_code = pytest.main(pytest_execute_params)
if not tmp_exit_code==0:
exit_code=tmp_exit_code
print('结束' + current_browser + '浏览器测试......')
print('清除未被关闭的浏览器......')
try:
2019-09-17 16:34:41 +08:00
conn=RemoteConnection(Read_WEB_UI_Config().web_ui_config.selenium_hub,True)
2019-09-17 15:38:49 +08:00
sessions=conn.execute(Command.GET_ALL_SESSIONS,None)
sessions=sessions['value']
for session in sessions:
session_id=session['id']
conn.execute(Command.QUIT,{'sessionId':session_id})
except Exception as e:
print('清除未关闭浏览器异常:\r\n'+e.args.__str__())
print('清除未被关闭的浏览器完成......')
print('结束测试......')
sys.exit(exit_code)