AutomationTest/run_web_ui_test.py

107 lines
4.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#-*- coding:utf8 -*-
# 作者 yanchunhuo
# 创建时间 2018/01/19 22:36
# github https://github.com/yanchunhuo
from base.read_web_ui_config import Read_WEB_UI_Config
from common.fileTool import FileTool
from common.httpclient.doRequest import DoRequest
from common.pytest import deal_pytest_ini_file
from init.web_ui.web_ui_init import web_ui_init
from selenium.webdriver.remote.remote_connection import RemoteConnection
from selenium.webdriver.remote.command import Command
import argparse
import ujson
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)
parser.add_argument('-m', '--markexpr', help='只运行符合给定的mark表达式的测试',type=str)
parser.add_argument('-s', '--capture', help='是否在标准输出流中输出日志,1:是、0:否,默认为0',type=str)
parser.add_argument('-r', '--reruns', help='失败重跑次数,默认为0',type=str)
parser.add_argument('-lf', '--lf', help='是否运行上一次失败的用例,1:是、0:否,默认为0',type=str)
parser.add_argument('-clr', '--clr', help='是否清空已有测试结果,1:是、0:否,默认为0', type=str)
args=parser.parse_args()
print('开始初始化......')
print('开始检测selenium server是否可用......')
try:
doRquest=DoRequest(Read_WEB_UI_Config().web_ui_config.selenium_hub)
httpResponseResult=doRquest.get('/status')
result=ujson.loads(httpResponseResult.body)
if result['status']==0:
print('selenium server状态为可用......')
else:
sys.exit('selenium server状态为不可用')
except:
sys.exit('selenium server状态为不可用')
# 处理pytest文件
deal_pytest_ini_file()
print('初始化基础数据......')
web_ui_init()
print('初始化基础数据完成......')
print('初始化完成......')
print('开始测试......')
exit_code = 0
for current_browser in Read_WEB_UI_Config().web_ui_config.test_browsers:
print('开始'+current_browser+'浏览器测试......')
# 由于pytest的并发插件xdist采用子进程形式当前主进程的单例在子进程中会重新创建所以将每次要测试的浏览器信息写入到文件中
# 保证子进程能够正确读取当前要测试的浏览器
FileTool.replaceFileContent('config/web_ui_config.conf','\r\n','\n')
FileTool.replaceFileContentWithLBRB('config/web_ui_config.conf','='+current_browser,'current_browser','\n')
# 执行pytest前的参数准备
pytest_execute_params=['-c', 'config/pytest.ini', '-v', '--alluredir', 'output/web_ui/'+current_browser+'/','-n',Read_WEB_UI_Config().web_ui_config.test_workers,'--dist','loadfile']
# 判断目录参数
dir = 'cases/web_ui/'
if args.dir:
dir=args.dir
# 判断关键字参数
if args.keyword:
pytest_execute_params.append('-k')
pytest_execute_params.append(args.keyword)
# 判断markexpr参数
if args.markexpr:
pytest_execute_params.append('-m')
pytest_execute_params.append(args.markexpr)
# 判断是否输出日志
if args.capture:
if int(args.capture):
pytest_execute_params.append('-s')
# 判断是否失败重跑
if args.reruns:
if int(args.reruns):
pytest_execute_params.append('--reruns')
pytest_execute_params.append(args.reruns)
# 判断是否只运行上一次失败的用例
if args.lf:
if int(args.lf):
pytest_execute_params.append('--lf')
# 判断是否清空已有测试结果
if args.clr:
if int(args.clr):
pytest_execute_params.append('--clean-alluredir')
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:
conn=RemoteConnection(Read_WEB_UI_Config().web_ui_config.selenium_hub,True)
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('结束测试......')