Commit a225177f authored by xiao-hesheng's avatar xiao-hesheng
Browse files

修改case目录 添加data文件

parent 0c277885
Showing with 1351 additions and 578 deletions
+1351 -578
...@@ -4,4 +4,5 @@ ...@@ -4,4 +4,5 @@
.project .project
target target
*.pyc *.pyc
log log
\ No newline at end of file .pyc
\ No newline at end of file
# -*- encoding=utf8 -*-
__author__ = "xiaohesheng"
"""
case_tag:mdm-web,100086
主数据平台:统一登录接口,第一步获取验证码,第二步登录系统,第三步平台登录验证token
"""
from common.common_func import commonFuc
import time
module = "spd3"
#获取验证码接口
import os
url = commonFuc().get_api_url() + commonFuc().get_business_data(module, "VerifyCode_url")
print("aaaaaaaaaaaaaaaaaa"+url)
# token = commonFuc().get_token(module, "cancel_enc_user_id")
# timestamp = str(int(time.time()))
# payload = commonFuc().get_business_data(module, "payload")
# headers = commonFuc().get_business_data(module, "post_headers", token, timestamp,
# commonFuc().get_business_data(module, "cancel_contentType"))
# result = commonFuc().http_post(url, payload, headers)
# check_dict = commonFuc().get_business_data(module, "cancel_checkDict")
# commonFuc().check_result(check_dict, result)
\ No newline at end of file
...@@ -21,52 +21,78 @@ def get_message(case_path, case_name): ...@@ -21,52 +21,78 @@ def get_message(case_path, case_name):
return tags return tags
def get_case_tag_list(case_path, tagList): def get_case_tag_list(case_path, cases):
""" """
遍历case目录下的文件,从文件中获取case tag,加入列表中 遍历case目录下的文件,从文件中获取case tag,加入列表中
再加个判断,判断是跑线上还是线下
""" """
tagList = cases.split('#')
env = os.environ['ENV']
case_list = [] case_list = []
for f in os.listdir(case_path): for f in os.listdir(case_path):
script = os.path.join(case_path, f) nf_path = os.path.join(case_path, f)
air_name = f.replace('.air', '') if os.path.isdir(nf_path) and nf_path.endswith(".air") == False:
case_tags = get_message(script, air_name) for nf in os.listdir(nf_path):
comLevels = list(set(case_tags)&set(tagList)) script = os.path.join(nf_path, nf)
if comLevels: if script.endswith(".air"):
case_list.append(air_name) air_name = nf.replace('.air', '')
case_tags = get_message(script, air_name)
flag = False
for con in tagList:
conList = con.split(',')
if list(set(case_tags) & set(conList)):
flag = True
else:
flag = False
break
if flag and (env in case_tags or env in ('sit', 'sita')):
case_hash = {}
case_hash["air_path"] = str(script)
case_hash["air_name"] = str(air_name)
case_hash["module"] = str(script.split(os.sep)[-2])
case_list.append(case_hash)
else:
script = os.path.join(case_path, f)
if f.endswith(".air"):
air_name = f.replace('.air', '')
case_tags = get_message(script, air_name)
flag = False
for con in tagList:
conList = con.split(',')
if list(set(case_tags) & set(conList)):
flag = True
else:
flag = False
break
if flag and (env in case_tags or env in ('sit', 'sita')):
case_hash = {}
case_hash["air_path"] = str(script)
case_hash["air_name"] = str(air_name)
case_hash["module"] = str(script.split(os.sep)[-2])
case_list.append(case_hash)
return case_list return case_list
def get_author(case_path, case_name):
"""
获取case是谁写的
:return:
"""
name = 'Unknown'
pyfile = open(case_path + os.sep + case_name + '.air' + os.sep + case_name + '.py', 'r', encoding='utf-8')
lines = pyfile.readlines()
for line in lines:
if '__author__' in line:
line = line.split('__author__ = ')[-1]
name = line.replace('"', '')
name = name.strip().strip('\n')
pyfile.close()
return name
def get_case_by_author(case_path, user): def get_case_tag_list_2(case_path, cases):
""" """
根据作者执行用例 遍历case目录下的文件,从文件中获取case tag,加入列表中
:param case_path:
:param user:
:return:
""" """
tagList = cases.split('#')
case_list = [] case_list = []
for f in os.listdir(case_path): for f in os.listdir(case_path):
script = os.path.join(case_path, f) script = os.path.join(case_path, f)
air_name = f.replace('.air', '') air_name = f.replace('.air', '')
author = get_author(case_path, air_name)
case_tags = get_message(script, air_name) case_tags = get_message(script, air_name)
tagList = ['core'] flag = False
comLevels = list(set(case_tags)&set(tagList)) for con in tagList:
if user == author and comLevels: conList = con.split(',')
if list(set(case_tags) & set(conList)):
flag = True
else:
flag = False
break
if flag:
case_list.append(air_name) case_list.append(air_name)
return case_list return case_list
...@@ -112,7 +112,6 @@ def setup_by_args(args): ...@@ -112,7 +112,6 @@ def setup_by_args(args):
devices = [args.device] devices = [args.device]
else: else:
devices = [] devices = []
print("do not connect device")
# set base dir to find tpl # set base dir to find tpl
dirpath, _ = script_dir_name(args.script) dirpath, _ = script_dir_name(args.script)
......
import yaml import base64
import os
from common.rw import Rw
import requests
import json import json
import requests
from airtest.core.api import * from airtest.core.api import *
from common.confop import confOP from common.confop import confOP
from common.dubboUtils import GetDubboService2, InvokeDubboApi
from common.rw import Rw
workspace = os.path.abspath(".")
business_path = workspace + os.sep + "data" + os.sep
class commonFuc(object): class commonFuc(object):
def headers(self, token): def find_path(self, module=""):
headers = { if module == "":
'clientInfo': '{"birthday":"2018-11-18","screenwidth":"375","clientVersion":"2.4.2","screenheight":"667","partner":"meitunmama","clientip":"10.180.81.127","traderName":"iPhone 6S","clientAppVersion":"2.4.2","clientYunyuVersion":"7.9.6","clientSystem":"ios","nettype":"wifi","deviceCode":"1f4b3860acfa303bca0407f5128bc5ea0f529fec"}', return business_path
'platform': "1", else:
'signature': "144c6b3c78fc20ad57da1ebdb879615b", return business_path + module + os.sep
'token': token,
'timestamp': str(int(time.time())) def get_business_data(self, module, key, *args):
} env = os.environ['ENV']
return headers data_list = confOP().getBusiYamlValue(self.find_path(module), "data")
if args is not None and len(args) > 0:
if isinstance(data_list[key], dict):
result = json.loads(json.dumps(data_list[key]) % args)
else:
if str(data_list[key]) == "":
result = data_list[key]
else:
result = data_list[key] % args
else:
result = data_list[key]
if "_sit_" in str(result) and "_on_" in str(result):
if env == "on":
return result["_on_"]
else:
return result["_sit_"]
else:
return result
def get_message(self, module, key):
message_list = confOP().getBusiYamlValue(self.find_path(module), "message")
return message_list[key]
def get_openauth_url(self):
return "http://openauth.meitun.com/tools/sign/create"
def get_api_url(self): def get_api_url(self):
""" """
...@@ -33,9 +62,15 @@ class commonFuc(object): ...@@ -33,9 +62,15 @@ class commonFuc(object):
elif env == 'sita': elif env == 'sita':
url = 'http://sita-m.meitun.com' url = 'http://sita-m.meitun.com'
else: else:
url = 'http://sit-m.meitun.com' # url = 'http://sit-m.meitun.com'
url = 'http://spddev.cmic.com.cn'
return url return url
def get_token(self, module, enc_user_id="enc_user_id"):
enc_user_id = self.get_business_data(module, enc_user_id)
token = self.check_token(enc_user_id)
return token
def check_token(self, enc_user_id='u779700044448'): def check_token(self, enc_user_id='u779700044448'):
""" """
多个case同一个token不用一直查数据库 多个case同一个token不用一直查数据库
...@@ -44,21 +79,27 @@ class commonFuc(object): ...@@ -44,21 +79,27 @@ class commonFuc(object):
""" """
env = os.environ['ENV'] env = os.environ['ENV']
result = Rw().r_token(enc_user_id, env) result = Rw().r_token(enc_user_id, env)
print(result) if result is None:
if result == None:
return Rw().w_token(enc_user_id, env) return Rw().w_token(enc_user_id, env)
else: else:
return result["token"] return result["token"]
def http_get(self, url, token, params=""): def http_get(self, url, headers="", params=""):
""" """
一个get请求,返回json 一个get请求,返回json
""" """
result = requests.get(url, headers=self.headers(token), params=params) result = requests.request("GET", url, headers=headers, params=params)
print(result.text)
result = json.loads(result.text) result = json.loads(result.text)
return result return result
def http_post(self, url, postdata=None, header=None):
"""
一个post请求,返回json
"""
result = requests.post(url, data=postdata, headers=header)
result = json.loads(result.content)
return result
def check_result(self, check_dict, result): def check_result(self, check_dict, result):
""" """
结果检查,要检查的字段及值放在字典里, 结果是完全匹配 结果检查,要检查的字段及值放在字典里, 结果是完全匹配
...@@ -80,12 +121,12 @@ class commonFuc(object): ...@@ -80,12 +121,12 @@ class commonFuc(object):
else: else:
for k, v in result.items(): for k, v in result.items():
res = self.analysis_json(key, v) res = self.analysis_json(key, v)
if res != None: if res is not None:
break break
elif self.typeof(result) == 'list': elif self.typeof(result) == 'list':
for value in result: for value in result:
res = self.analysis_json(key, value) res = self.analysis_json(key, value)
if res != None: if res is not None:
break break
else: else:
pass pass
...@@ -114,10 +155,302 @@ class commonFuc(object): ...@@ -114,10 +155,302 @@ class commonFuc(object):
else: else:
return None return None
def get_data(self, path, module): def get_openApi_url(self):
return confOP().getBusiYamlValue(path, module) """
获取openapi的接口
"""
env = os.environ['ENV']
print(env)
if env == 'on':
url = 'https://openapi.meitun.com'
elif env == 'pre':
url = 'http://pre-openapi.meitun.com'
elif env == 'sita':
url = 'http://sita-openapi.meitun.com'
else:
url = 'http://sit-openapi.meitun.com'
return url
def get_ip_by_pool(self, poolName, type='sit'):
"""
根据hostname获取ip地址
:param poolName: ip:端口/应用名:端口
:param type: local/sit
:return:
"""
if str(type).lower() == 'local':
return poolName
else:
pool = str(poolName).split(":")[0]
print("pool: ", pool)
port = str(poolName).split(":")[1]
result = self.http_get(
"http://apollo.baobaoshu.com/apiv1/united_devices/?stage=%s&application=%s&usage=SERVER" % (type, pool))
ip = result["results"][0]["ip"]
return str(ip) + ":" + port
def run_local_dubbo(self, content, dubbo_service, dubbo_method, *args):
"""
运行本地dubbo接口
:param dubbo_service: dubbo中 服务名 如:com.zl.mall.api.IItemService
:param dubbo_method: 服务中的方法 如:updateItem
:param args: 方法请求需要的参数
:return:
"""
dubbo_info = GetDubboService2().get_dubbo_info2(content)
invokeDubboApi = InvokeDubboApi(server_host=dubbo_info.get("server_host"),
server_post=dubbo_info.get("server_post"))
return invokeDubboApi.invoke_dubbo_api(dubbo_service, dubbo_method, *args)
def get_open_url(self):
"""
获取openapi的接口
"""
env = os.environ['ENV']
print(env)
if env == 'on':
url = 'https://openapi.meitun.com'
elif env == 'pre':
url = 'http://pre-openapi.meitun.com'
elif env == 'sita':
url = 'http://sita-openapi.meitun.com'
else:
url = 'http://sit-openapi.meitun.com'
return url
def get_openapi_signature(self, module, params):
"""
获取openapi的验签
:param module:
:param params:
:return:
"""
private_key = self.get_business_data(module, "private_key")
app_secret = self.get_business_data(module, "app_secret")
openauth_url = self.get_openauth_url()
data = self.get_business_data(module, "openapi_data", private_key, app_secret, params)
result = commonFuc().http_post(openauth_url, data)
signature = result['signature']
return signature
def get_url(self, pool=None):
"""
根据环境或者url
:return:
"""
env = os.environ['ENV']
print(env)
if pool =="bid":
if env == 'on':
url = 'http://bid.babytree.com'
else:
url = 'https://bid.babytree-test.com'
elif pool =="advertise-go-web":
url = 'http://g.kexin001.com'
elif pool =="ad_Delivery":
url = 'http://go.kexin001.com'
elif pool =="search-platform-index":
if env == 'on':
url = 'http://search-index.babytree.com/index/build'
else:
url = 'http://search-index.babytree-test.com/index/build'
elif pool =="search-platform-web":
if env == 'on':
url = 'http://search-query.babytree.com/search/query'
else:
url = 'http://search-query.babytree-test.com/search/query'
elif pool =="search-merger":
if env == 'on':
url = 'http://merger.babytree.com/search'
else:
url = 'http://merger.babytree-test.com/search'
elif pool =="search-suggest":
if env == 'on':
url = 'http://suggest.babytree.com'
else:
url = 'http://suggest.babytree-test.com'
else:
if env == 'on':
url = 'https://backend.meitunmama.com/'
elif env == 'pre':
url = 'http://pre-backend.meitunmama.com'
elif env == 'sita':
url = 'http://sita-backend.meitunmama.com'
else:
url = 'http://sit-backend.meitunmama.com'
return url
def login_backend(self, driver):
driver.get(self.get_url())
sleep(3)
#driver.assert_template(Template(r"tpl1580989830894.png", record_pos=(3.27, 2.99), resolution=(100, 100)),
#"请填写测试点")
driver.set_window_size(1366, 868)
if os.environ['ENV'] == 'on' or os.environ['ENV'] == 'pre':
es = 'aG9uZ2xp'
driver.find_element_by_id("loginName").send_keys(base64.b64decode(es.encode('utf-8')).decode("utf-8"))
sleep(1)
es = 'aGxiYjEyMTA5Mg=='
driver.find_element_by_xpath("//input[@type='password']").send_keys(
base64.b64decode(es.encode('utf-8')).decode("utf-8"))
sleep(1)
driver.find_element_by_id("smsCode").send_keys("111111")
sleep(1)
else:
driver.find_element_by_id("loginName").send_keys('autotest')
driver.find_element_by_xpath("//input[@type='password']").send_keys('123@qwe')
driver.find_element_by_id("smsCode").send_keys("111111")
driver.find_element_by_id("sub_btn").click()
sleep(2)
#driver.assert_template(Template(r"tpl1579258499558.png", record_pos=(0.47, 0.975), resolution=(100, 100)),
#"验证登录成功了")
# 选择打开页面的路径,如: 大健康-课程包-课程包管理
def enter_channel_manage(self, driver, title, classfy, content):
driver.find_element_by_xpath("//a[@title='%s']" % title).click()
driver.find_element_by_id("east").find_element_by_xpath("//*[text()='%s']" % classfy).click()
driver.find_element_by_xpath("//a[@title='%s']" % content).click()
def enter_album_check(self, driver):
"""
进入专辑审核页
"""
driver.get(
self.get_url() + "/bighealth-service/outcourse/list.htm?source=1&linkId=big_health_audit_sync_btn1_link&tabId=big_health_audit_sync_btn1")
def remove_readonly(self, driver):
"""
去除input的只读属性
"""
inputs = driver.find_elements_by_tag_name("input")
for input in inputs:
driver.execute_script('arguments[0].removeAttribute(\"readonly\")', input)
driver.execute_script('arguments[0].removeAttribute(\"autocomplete\")', input)
def check_variable_exist(self, check_list, result):
"""
结果检查,检查字段值存在
"""
Flag = False
for variable in check_list:
if variable in result.keys():
Flag = True
assert_equal(Flag, True, '验证参数' + variable + "存在")
def enter_h5_page(self, driver, params):
"""
:param driver:
:param params: 请求的URL
:return:
"""
url = self.get_api_url()
driver.get(url + params)
def get_start(self, pageno, pagesize):
"""
获取limit的start数
:param pageno:
:param pagesize:
:return:
"""
return (pageno - 1) * pagesize
def click_iterm(self, driver, el_list, name):
"""
点击对应元素
"""
for el in el_list:
print(el.text)
if el.text == name:
driver.execute_script("arguments[0].scrollIntoView();", el)
el.click()
break
def get_mapi_babytree_url(self):
"""
接口mapi_babytree类型的请求
:return:
"""
env = os.environ['ENV']
print(env)
if env == 'on':
url = 'http://mapiweb.babytree.com'
elif env == 'pre':
url = 'http://pre-mapiweb.babytree.com'
else:
url = 'http://mapiweb.babytree-test.com'
return url
def get_localhome_babytree_url(self):
"""
接口mapi_babytree类型的请求
:return:
"""
env = os.environ['ENV']
print(env)
if env == 'on':
url = 'http://localhome.babytree.com'
elif env == 'pre':
url = 'http://pre-localhome.babytree.com'
else:
url = 'http://localhome.babytree-test.com'
return url
def get_go_babytree_url(self):
"""
接口go_babytree类型的请求
:return:
"""
env = os.environ['ENV']
print(env)
if env == 'on':
url = 'http://go.babytree.com'
elif env == 'pre':
url = 'http://go.babytree.com'
else:
url = 'http://go-1.babytree-test.com'
return url
def get_inno_babytree_url(self):
"""
接口mapi_babytree类型的请求
:return:
"""
env = os.environ['ENV']
print(env)
if env == 'on':
url = 'http://apilocal.babytree.com'
elif env == 'pre':
url = 'http://pre-apilocal.babytree.com'
else:
url = 'http://apilocal.babytree-test.com'
return url
def get_localfront_babytree_url(self):
"""
接口mapi_babytree类型的请求
:return:
"""
env = os.environ['ENV']
print(env)
if env == 'on':
url = 'http://localfront.babytree.com'
elif env == 'pre':
url = 'http://pre-localfront.babytree.com'
else:
url = 'http://localfront.babytree-test.com'
return url
def get_search_platform_hz_index_url(self):
"""
接口类型的请求
:return:
"""
env = os.environ['ENV']
if env == 'on':
url = 'http://search-index.babytree.com'
else:
url = 'http://sit-search-index.babytree.com'
return url
\ No newline at end of file
...@@ -6,21 +6,41 @@ cf = configparser.ConfigParser() ...@@ -6,21 +6,41 @@ cf = configparser.ConfigParser()
curPath = os.path.abspath(os.path.dirname(__file__)) curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = rootPath = os.path.split(curPath)[0] rootPath = rootPath = os.path.split(curPath)[0]
def getConfValue(filename, section, option, type='string'): class confOP:
cf.read(filename) def getConfValue(self, filename, section, option, type='string'):
if (type == 'string'): cf.read(filename)
value = cf.get(section, option) if (type == 'string'):
else: value = cf.get(section, option)
value = cf.getint(section, option) else:
return value value = cf.getint(section, option)
return value
def getYamlValue(filename):
file = os.path.join(rootPath, "data" + os.sep + filename) def getYamlValue(self, filename):
f = open(file, 'r', encoding='utf-8') """
cont = f.read() 获取公共sql中的sql
value = yaml.load(cont) :param filename:
f.close() :return:
return value """
file = os.path.join(rootPath, "data" + os.sep + filename)
f = open(file, 'r', encoding='utf-8')
cont = f.read()
value = yaml.load(cont, Loader=yaml.FullLoader)
f.close()
return value
def getBusiYamlValue(self, path, filename):
"""
获取业务中的yaml文件数据
:param path:
:param filename:
:return:
"""
file = os.path.join(path, filename)
f = open(file, 'r', encoding='utf-8')
cont = f.read()
value = yaml.load(cont, Loader=yaml.FullLoader)
f.close()
return value
......
u779700044448_sit: u779700044448_sit:
time: 2021-03-02 14:48:30.914746 time: 2021-12-27 17:11:01.269465
token: u779700044448_5c36630e639120c4471f216c928ffa2e_1614305054 token: u779700044448_562a6850c0ed622ce15bb087140e27e3_1640592012
enc_user_id: u779700044448 enc_user_id: u779700044448
[meitun_db] [meitun_db]
host = 192.168.24.42 host = rm-bp18as20m3solyi69.mysql.rds.aliyuncs.com
port = 3306 port = 3306
user = developer user = test_admin
password = DJ@TdX73 password = ahdp0b.cr76_Pje1
[bj_db]
host = 172.25.1.6
port = 3320
user = local_rw
password = baidugoogleyahoo
[promotion] [promotion]
livedb = 19 livedb = 19
...@@ -21,3 +26,4 @@ port = 27017 ...@@ -21,3 +26,4 @@ port = 27017
redis_host=192.168.24.31 redis_host=192.168.24.31
import pymysql import pymysql
import os import os
import sys
from common.confop import confOP
from common.db.sql.sqlByIdb import sqlByIdb
import pymongo
curPath = os.path.abspath(os.path.dirname(__file__)) curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0] rootPath = os.path.split(curPath)[0]
import sys
sys.path.append(rootPath) sys.path.append(rootPath)
from common import confop
import pandas as pd
import pymongo
import redis
class dbOP: class dbOP():
def selectSql(self, schema, param=[], db="meitun_db"): def __init__(self, path=rootPath):
self.path = path
def selectSql(self, schema, param=[], db="bj_db"):
host = mySql().getConf(db)[0] host = mySql().getConf(db)[0]
port = mySql().getConf(db)[1] port = mySql().getConf(db)[1]
user = mySql().getConf(db)[2] user = mySql().getConf(db)[2]
pwd = mySql().getConf(db)[3] pwd = mySql().getConf(db)[3]
value = confop.getYamlValue("sql") value = confOP().getYamlValue("sql")
mySql().selectSql(host, port, user, pwd, value[schema][0], value[schema][1], param) if schema not in value:
value = confOP().getBusiYamlValue(self.path, "sql")
env = os.environ["ENV"]
if env == "on" or env == "pre":
database = value[schema][0]
sql = value[schema][1]
param = param
result = sqlByIdb().selectSql(database, sql, param, env)
else:
result = mySql().selectSql(host, port, user, pwd, value[schema][0], value[schema][1], param)
return result
def ddlSql(self, schema, param=[], db="meitun_db"): def ddlSql(self, schema, param=[], db="bj_db"):
host = mySql().getConf(db)[0] host = mySql().getConf(db)[0]
port = mySql().getConf(db)[1] port = mySql().getConf(db)[1]
user = mySql().getConf(db)[2] user = mySql().getConf(db)[2]
pwd = mySql().getConf(db)[3] pwd = mySql().getConf(db)[3]
value = confop.getYamlValue("sql") value = confOP().getYamlValue("sql")
mySql().executeUpdate(host,port,user,pwd,value[schema][0],value[schema][1], param) if schema not in value:
value = confOP().getBusiYamlValue(self.path, "sql")
result = mySql().executeUpdate(host, port, user, pwd, value[schema][0], value[schema][1], param)
return result
class mySql: class mySql:
def __init__(self): def __init__(self):
pass pass
def getConf(self,db="meitun_db"): def getConf(self, db="bj_db"):
host = confop.getConfValue("conf.ini", db, "host") host = confOP().getConfValue(curPath + "/conf.ini", db, "host")
port = confop.getConfValue("conf.ini", db, "port", "int") port = confOP().getConfValue(curPath + "/conf.ini", db, "port", "int")
user = confop.getConfValue("conf.ini", db, "user") user = confOP().getConfValue(curPath + "/conf.ini", db, "user")
pwd = confop.getConfValue("conf.ini", db, "password") pwd = confOP().getConfValue(curPath + "/conf.ini", db, "password")
return host,port,user,pwd return host,port,user,pwd
def connection(self, host, port, user, pwd, database): def connection(self, host, port, user, pwd, database):
...@@ -52,21 +67,20 @@ class mySql: ...@@ -52,21 +67,20 @@ class mySql:
for i in cols: for i in cols:
col.append(i[0]) col.append(i[0])
data = list(map(list, data)) data = list(map(list, data))
result = pd.DataFrame(data, columns=col) return data
return result
except Exception as e: except Exception as e:
print(e) print(e)
conn.rollback() conn.rollback()
cursor.close() cursor.close()
conn.close() conn.close()
def executeUpdate(self, host, port,user,pwd,database, sql, param=[]): def executeUpdate(self, host, port, user, pwd, database, sql, param=[]):
conn = self.connection(host, port,user,pwd,database) conn = self.connection(host, port, user, pwd, database)
cursor = conn.cursor() cursor = conn.cursor()
try: try:
cursor.execute(sql, param) ret = cursor.execute(sql, param)
conn.commit() conn.commit()
return cursor return ret
except Exception as e: except Exception as e:
print(e) print(e)
conn.rollback() conn.rollback()
...@@ -77,8 +91,8 @@ class mySql: ...@@ -77,8 +91,8 @@ class mySql:
class mongodb: class mongodb:
def connection(self,db,collect): def connection(self,db,collect):
ip = confop.getConfValue("conf.ini", "mongo", "ip") ip = confOP().getConfValue(curPath + "/conf.ini", "mongo", "ip")
port = confop.getConfValue("conf.ini", "mongo", "port") port = confOP().getConfValue(curPath + "/conf.ini", "mongo", "port")
path = "mongodb://" + ip + ":" + port + "/" path = "mongodb://" + ip + ":" + port + "/"
myclient = pymongo.MongoClient(path) myclient = pymongo.MongoClient(path)
mydb = myclient[db] mydb = myclient[db]
...@@ -89,7 +103,7 @@ class mongodb: ...@@ -89,7 +103,7 @@ class mongodb:
def findALl(self, db, collect): def findALl(self, db, collect):
result = [] result = []
mycol = self.connection(db, collect) mycol = self.connection(db, collect)
for x in mycol.find(): for x in mycol.find():
result.append(x) result.append(x)
return result return result
...@@ -102,25 +116,20 @@ class mongodb: ...@@ -102,25 +116,20 @@ class mongodb:
return result return result
class redisClass:
def connect(self):
redis_host = confop.getConfValue("conf.ini", "redis", "redis_host")
pool = redis.ConnectionPool(host=redis_host)
r = redis.Redis(connection_pool=pool)
return r
def getValue(self,key):
r = redisClass().connect()
return r.get(key)
if __name__ == '__main__': if __name__ == '__main__':
env = 'sit'
os.environ['ENV'] = env.lower()
path = "D:\\myCode\\autotest-airtest-local\\data\\月嫂"
#mysql的例子 #mysql的例子
dbOP().selectSql("prc_prom_price", [13]) result = dbOP(path).selectSql("local_worker_info")
print(result[0])
#monggdb的例子 #monggdb的例子
mongodb().findByCon("yapi","user", {"role": "admin"}) #mongodb().findByCon("yapi","user", {"role": "admin"})
#redis的例子 #redis的例子
redisClass().connect() #redisClass().connect()
...@@ -57,12 +57,12 @@ class InvokeDubboApi(object): ...@@ -57,12 +57,12 @@ class InvokeDubboApi(object):
def invoke_dubbo_api(self, dubbo_service, dubbor_method, args): def invoke_dubbo_api(self, dubbo_service, dubbor_method, args):
api_name = dubbo_service + "." + dubbor_method + "({})" api_name = dubbo_service + "." + dubbor_method + "({})"
cmd = "invoke " + api_name.format(args) cmd = "invoke " + api_name.format(args)
print("调用命令是:{}".format(cmd)) # print("调用命令是:{}".format(cmd))
resp0 = None resp0 = None
try: try:
if self.login_flag: if self.login_flag:
resp0 = self.telnet_client.execute_some_command(cmd) resp0 = self.telnet_client.execute_some_command(cmd)
print("接口响应是,resp={}".format(resp0)) # print("接口响应是,resp={}".format(resp0))
# dubbo接口返回的数据中有 elapsed: 4 ms. 耗时,需要使用elapsed 进行切割 # dubbo接口返回的数据中有 elapsed: 4 ms. 耗时,需要使用elapsed 进行切割
return str(re.compile(".+").findall(resp0).pop(0)).split("elapsed").pop(0).strip() return str(re.compile(".+").findall(resp0).pop(0)).split("elapsed").pop(0).strip()
else: else:
......
This diff is collapsed.
...@@ -8,7 +8,7 @@ curpath = os.path.dirname(os.path.realpath(__file__)) ...@@ -8,7 +8,7 @@ curpath = os.path.dirname(os.path.realpath(__file__))
# 数据读入和写入文件 # 数据读入和写入文件
class Rw: class Rw:
def w_token(self, enc_user_id='u779700044448', env='on'): def w_token(self, enc_user_id='u779700044448', env='on'):
result = dbOP().selectSql('select_user_token', [enc_user_id]) result = dbOP().selectSql('select_user_token', [enc_user_id], "meitun_db")
token = result[0][0] token = result[0][0]
dict = {} dict = {}
token_value = {} token_value = {}
...@@ -23,12 +23,11 @@ class Rw: ...@@ -23,12 +23,11 @@ class Rw:
yaml.dump(dict, f, Dumper=yaml.RoundTripDumper) yaml.dump(dict, f, Dumper=yaml.RoundTripDumper)
return token return token
def r_token(self, enc_user_id='u779700044448', env='on'): def r_token(self, enc_user_id='u779700044448', env='on'):
yamlpath = os.path.join(curpath, "data") yamlpath = os.path.join(curpath, "data")
file_value = open(yamlpath, 'r') file_value = open(yamlpath, 'r')
result = yaml.load(file_value.read(), Loader=yaml.Loader) result = yaml.load(file_value.read(), Loader=yaml.Loader)
if result != None: if result is not None:
key = enc_user_id + "_" + env key = enc_user_id + "_" + env
if key in result: if key in result:
return result[key] return result[key]
......
# dev
# dev
172.16.10.203 api.babytree-dev.com 172.16.10.203 api.babytree-dev.com
172.16.10.203 api-test11.babytree-test.com 172.16.10.203 api-test11.babytree-test.com
172.16.10.203 api.test11.babytree-fpm.com 172.16.10.203 api.test11.babytree-fpm.com
172.16.10.203 api.babytree.com 172.16.10.203 api.babytree.com
10.88.9.88 config.meitun.com copy.meitun.com # online
10.54.17.151 sita-h5.meitun.com
10.54.17.151 sita-cu.meitun.com
10.54.11.80 jenkins.baobaoshu.com atms.baobaoshu.com cloud.baobaoshu.com
10.88.7.8 fastdfs1.mt.com img11.meitun.com img01.meituncdn.com
10.88.7.8 fastdfs2.mt.com img12.meitun.com img02.meituncdn.com
10.54.11.80 idb.baobaoshu.com
10.54.11.80 grafana.baobaoshu.com 10.54.11.80 grafana.baobaoshu.com
10.54.11.80 zabbix.baobaoshu.com 10.54.11.80 zabbix.baobaoshu.com
10.54.11.80 cacti.baobaoshu.com 10.54.11.80 cacti.baobaoshu.com
...@@ -21,58 +14,12 @@ ...@@ -21,58 +14,12 @@
10.54.11.80 cmdb.baobaoshu.com 10.54.11.80 cmdb.baobaoshu.com
10.54.11.80 apollo.baobaoshu.com muse.baobaoshu.com 10.54.11.80 apollo.baobaoshu.com muse.baobaoshu.com
10.54.11.80 splunk.baobaoshu.com 10.54.11.80 splunk.baobaoshu.com
192.168.24.30 dbm.mt.com
192.168.24.30 dbs1.mt.com
192.168.24.30 redisdb1.mt.com redisdb2.mt.com redis.mobile.db01.mt.com rediscache1.mt.com rediscache2.mt.com rediscache3.mt.com
192.168.24.46 mqmaster.mt.com
192.168.24.47 mqslave01.mt.com
10.88.9.166 zk.mt.com
10.54.11.80 ucmweb.baobaoshu.com
172.16.9.154 webview.test9.dev.babytree-inc.com
172.16.9.154 test11.dev.babytree-inc.com
172.16.10.203 test11.babytree-dev.com test11.babytree-fpm.com m.test11.babytree-test.com test11.babytree-test.com test19.babytree-test.com webview.test9.dev.babytree-inc.com
10.54.17.151 sita-live.meitun.com
10.88.9.118 kafka.mt.com
10.88.7.11 pkg.baobaoshu.com
172.16.10.203 test100.babytree-dev.com g.babytree-dev.com 172.16.10.203 test100.babytree-dev.com g.babytree-dev.com
122.9.41.244 gerrit.babytree-inc.com 122.9.41.244 gerrit.babytree-inc.com
10.54.17.153 localproxy.baobaoshu.com 10.54.17.153 localproxy.baobaoshu.com
192.168.24.43 gerrit.mtmm.com 192.168.24.43 gerrit.mtmm.com
192.168.24.43 gerrit.baobaoshu.com
0.0.0.0 account.jetbrains.com
10.54.11.80 idb.baobaoshu.com
10.54.17.153 sit-backend.meitunmama.com
10.54.17.153 sit-openapi.meitun.com
180.168.13.174 backend.meitunmama.com
10.54.17.153 sit-m.meitun.com
10.54.17.153 sit-static.meitun.com
10.54.17.153 sit-static.meituncdn.com
10.54.17.153 static.meitun.com
10.54.17.153 static.meituncdn.com
47.97.216.230 m.meitun.com
10.88.17.43 pre-backend.meitunmama.com
172.16.9.154 pack.babytree-inc.com
# 线上 10.54.50.90 sso.baobaoshu.com
117.121.137.17 jumper.meitunmama.com 8.131.247.52 docp.plt.babytree-inc.com
192.168.60.26 ops.baobaoshu.com \ No newline at end of file
192.168.60.26 falcon.baobaoshu.com
115.159.253.118 ppt.baobaoshu.com
10.50.80.66 oneops.baobaoshu.com
10.50.80.66 ssv.baobaoshu.com
10.88.9.204 im.meitun.com
10.50.253.100 workflow.meitunmama.com
172.16.9.163 space.babytree-inc.com
10.88.17.43 pre-m.meitun.com
10.88.17.43 pre-openapi.meitun.com
10.54.11.80 mock.baobaoshu.com
10.54.11.80 mantis.baobaoshu.com
10.54.11.80 testportal.baobaoshu.com
\ No newline at end of file
user: user:
live: live: 6ea032c10ef24b10aa7fcfe5424446afin01
- 9 pre: 6ea032c10ef24b10aa7fcfe5424446afin01
- 4
- 310
pre:
- 9
- 2
- 307
health: health:
live: live: 6013c13418a245b9866e9cdec92ff9b9in01
- 35 pre : 6013c13418a245b9866e9cdec92ff9b9in01
- 4
- 165
pre :
- 35
- 2
- 163
sit: health sit: health
alimall: alimall:
live: live: f4d539e7b8204a8890929320f2052d68in01
- 736 pre : f4d539e7b8204a8890929320f2052d68in01
- 4
- 828
pre :
- 736
- 2
- 826
sit: alimall sit: alimall
promotion: promotion:
live: live: 9e33dd3e26a54c8caeaf871e873edb38in01
- 19 pre: 9e33dd3e26a54c8caeaf871e873edb38in01
- 4
- 129
pre:
- 19
- 2
- 58
sit: promotion sit: promotion
salesorder: salesorder:
live: live: 7f9c968b57084c0782aeb620e2a064b1in01
- 6 pre : 7f9c968b57084c0782aeb620e2a064b1in01
- 4
- 134
pre :
- 6
- 2
- 6
sit: salesorder sit: salesorder
seller: seller:
live: live: 2888c1775daf4c60897073068b6c219ain01
- 7 pre: 2888c1775daf4c60897073068b6c219ain01
- 4
- 144
pre:
- 7
- 2
- 7
sit: seller sit: seller
cms: cms:
live: live: 790afd094355416895ca39891c09c0d3in01
- 22 pre: 790afd094355416895ca39891c09c0d3in01
- 4
- 142
pre:
- 22
- 2
- 41
sit: cms sit: cms
community: community:
live: live: 790afd094355416895ca39891c09c0d3in01
- 25 pre: 790afd094355416895ca39891c09c0d3in01
- 4
- 147
pre:
- 25
- 2
- 37
sit: community sit: community
price: price:
live: live: 6ea032c10ef24b10aa7fcfe5424446afin01
- 14 pre: 6ea032c10ef24b10aa7fcfe5424446afin01
- 4
- 138
pre:
- 14
- 2
- 51
sit: price sit: price
medical: medical:
live: live: 89a813f93c454db0a23c25f95c0d2e2cin01
- 766 pre: 89a813f93c454db0a23c25f95c0d2e2cin01
- 4
- 1131
pre:
- 766
- 2
- 1128
sit: medical sit: medical
bcoin: bcoin:
live: live: f4d539e7b8204a8890929320f2052d68in01
- 717 pre: f4d539e7b8204a8890929320f2052d68in01
- 4
- 750
pre:
- 717
- 2
- 747
sit: bcoin sit: bcoin
edu: edu:
live: live: 8e7f2572f92e49f4b0061f75682470eain01
- 727 pre: 8e7f2572f92e49f4b0061f75682470eain01
- 4
- 794
pre:
- 727
- 2
- 792
sit: edu sit: edu
account: account:
live: live: 2888c1775daf4c60897073068b6c219ain01
- 62 pre: 2888c1775daf4c60897073068b6c219ain01
- 4
- 293
pre:
- 62
- 2
- 291
sit: account sit: account
finance: finance:
live: live: 6013c13418a245b9866e9cdec92ff9b9in01
- 10 pre: 6013c13418a245b9866e9cdec92ff9b9in01
- 4
- 136
pre:
- 10
- 2
- 139
sit: finance sit: finance
socialec: socialec:
live: live: 89a813f93c454db0a23c25f95c0d2e2cin01
- 762 pre: 89a813f93c454db0a23c25f95c0d2e2cin01
- 4
- 1079
pre:
- 762
- 2
- 1077
sit: socialec sit: socialec
item: item:
live: live: 2888c1775daf4c60897073068b6c219ain01
- 8 pre: 2888c1775daf4c60897073068b6c219ain01
- 4
- 143
pre:
- 8
- 2
- 8
sit: item sit: item
new_wms: new_wms:
live: live: 89a813f93c454db0a23c25f95c0d2e2cin01
- 763 pre: 89a813f93c454db0a23c25f95c0d2e2cin01
- 4
- 1089
pre:
- 763
- 2
- 1086
sit: new_wms sit: new_wms
distribution: distribution:
live: live: 8e7f2572f92e49f4b0061f75682470eain01
- 67 pre: 8e7f2572f92e49f4b0061f75682470eain01
- 4 sit: distribution
- 312
pre: supplier:
- 67 live: 790afd094355416895ca39891c09c0d3in01
- 2 sit: supplier
- 315
sit: new_wms
local:
live: pc-2zerh8cqy748e33i8
sit : b9e5fbff-08e9-11ed-866f-00163e324a72
"dingding_msg": "dingding_msg":
- - 59d455293168352cecfaa4fb67f2568f3fa54453a2fdb87ce9817c316dc41b57
# 登录外网(主数据平台)系统
"VerifyCode_url": "/test2api/oauthService/auth/getVerifyCode"
login_data: {"orderCode": "10200512100243412"}
login_contentType: "application/json"
login_checkDict: {"rtn_code": "0000001"}
"login_enc_user_id": "国药集团湖北分公司mQDwR7"
"login_url": "/test2api/oauthService/auth/getVerifyCode"
\ No newline at end of file
File moved
"course": "select_user_token":
- health - user
- select * from health.course where status=2 and type=0 ORDER BY create_time DESC LIMIT 10; - select token from user.uc_user_token where enc_user_id=%s;
"prc_prom_price": "exp_expert":
- cloud - medical
- select * from access_log where id = %s; - SELECT id,expert_name,base_service_count,service_count from exp_expert where deleted=%s and status=%s;
\ No newline at end of file
"select_memberPrivilegeId":
- user
- SELECT id ,enc_user_id,privilege_type FROM uc_member_privilege WHERE left_times>0 and status=1 AND privilege_type IN (5,12,9,2,10,11) AND start_time <NOW() AND end_time >NOW() AND enc_user_id IN (SELECT enc_user_id FROM uc_user_member WHERE final_end_time >NOW() AND level_type_code=001) order by id desc limit 1
\ No newline at end of file
...@@ -9,6 +9,7 @@ from bs4 import BeautifulSoup ...@@ -9,6 +9,7 @@ from bs4 import BeautifulSoup
from random import shuffle from random import shuffle
import datetime import datetime
import pypinyin import pypinyin
import hashlib
def exchange(word): def exchange(word):
...@@ -23,6 +24,63 @@ def exchange(word): ...@@ -23,6 +24,63 @@ def exchange(word):
return s return s
def get_message(case_path, case_name):
# 从注释中获取某个文件的 case tag 信息
tags = []
pyfile = open(case_path + os.sep + case_name + '.py', 'r', encoding='utf-8')
lines = pyfile.readlines()
for line in lines:
if 'case_tag' in line:
line = line.split('case_tag')[-1]
# 对不规范的写法做一些处理,如中文分号, 中文逗号,多空格等。。
line = re.sub(' ', '', line)
line = line.replace(',', ',').replace(':', '').replace(':', '')
line = line.strip().strip('\n')
tags = line.split(',')
pyfile.close()
return tags
def get_all_dir(case_name, case_path):
"""
:return: 获得需要执行的所有air的文件夹,同时创建单个log目录
"""
case_list = []
for dirs in os.listdir(case_path):
isdir = os.path.join(case_path, dirs)
if os.path.isdir(isdir) and isdir.endswith(".air"):
air_name = dirs.replace('.air', '')
if 'all' in case_name or air_name in case_name:
# script = os.path.join(case_path, isdir)
case_list.append(air_name)
return case_list
def get_case_tag_list(case_path, cases):
"""
遍历case目录下的文件,从文件中获取case tag,加入列表中
如果想同时满足两个条件,用#分割
"""
tagList = cases.split('#')
env = os.environ['ENV']
case_list = []
for f in os.listdir(case_path):
script = os.path.join(case_path, f)
air_name = f.replace('.air', '')
case_tags = get_message(script, air_name)
flag = False
for con in tagList:
conList = con.split(',')
if list(set(case_tags) & set(conList)):
flag = True
else:
flag = False
break
if flag and (env in case_tags or env in ('sit', 'sita')):
case_list.append(air_name)
return case_list
def get_dir_exist(path, div_num): def get_dir_exist(path, div_num):
""" """
判断报告文件夹是否存在 判断报告文件夹是否存在
...@@ -33,7 +91,6 @@ def get_dir_exist(path, div_num): ...@@ -33,7 +91,6 @@ def get_dir_exist(path, div_num):
return False return False
return True return True
def merge_report(div_num, report_path): def merge_report(div_num, report_path):
""" """
合并报告 合并报告
...@@ -81,17 +138,17 @@ def merge_report(div_num, report_path): ...@@ -81,17 +138,17 @@ def merge_report(div_num, report_path):
if status == '成功': if status == '成功':
html = ''' html = '''
<tr width="600"> <tr width="600">
<td class="details-col-elapsed">%s</td> <td class="details-col-elapsed"><a href='../log/%s/log.html' target='_blank'>%s</a></td>
<td class="success">%s</td> <td class="success">%s</td>
<td class="details-col-elapsed">%s</td> <td class="details-col-elapsed">%s</td>
</tr>''' % (case_name, status, run_time) </tr>''' % (case_name, case_name, status, run_time)
else: else:
html = ''' html = '''
<tr width="600"> <tr width="600">
<td class="details-col-elapsed">%s</td> <td class="details-col-elapsed"><a href='../log/%s/log.html' target='_blank'>%s</a></td>
<td class="fail">%s</td> <td class="fail">%s</td>
<td class="details-col-elapsed">%s</td> <td class="details-col-elapsed">%s</td>
</tr>''' % (case_name, status, run_time) </tr>''' % (case_name, case_name, status, run_time)
lines.append(html) lines.append(html)
#print(html) #print(html)
pass_rate = round(succ_cases*100/total_cases, 2) pass_rate = round(succ_cases*100/total_cases, 2)
...@@ -159,7 +216,10 @@ def get_mess_from_report(report_path): ...@@ -159,7 +216,10 @@ def get_mess_from_report(report_path):
succ_cases = int(tds[1].getText()) succ_cases = int(tds[1].getText())
time_str = tds[2].getText() time_str = tds[2].getText()
time_str = time_str.replace('分', 'm').replace('秒', 's') time_str = time_str.replace('分', 'm').replace('秒', 's')
pass_rate = round(succ_cases * 100 / total_cases, 2) if int(total_cases) != 0:
pass_rate = round(succ_cases * 100 / total_cases, 2)
else:
pass_rate = 0.00
htmlfile.close() htmlfile.close()
return total_cases, succ_cases, time_str, pass_rate return total_cases, succ_cases, time_str, pass_rate
...@@ -207,7 +267,7 @@ def call_back_cloud(runenv, pool_name, build_num, start, end, job_url, build_use ...@@ -207,7 +267,7 @@ def call_back_cloud(runenv, pool_name, build_num, start, end, job_url, build_use
status = 'success' status = 'success'
else: else:
status = 'fail' status = 'fail'
job_url = job_url + str(build_num) + '/artifact/report/summary.html'
url = "http://cloud.baobaoshu.com/cloud/buildautotest?type=" + \ url = "http://cloud.baobaoshu.com/cloud/buildautotest?type=" + \
runenv + "&buildid=" + str(build_num) + "&pool=" + pool_name + \ runenv + "&buildid=" + str(build_num) + "&pool=" + pool_name + \
"&codeversion=" + str(newrev) + "&lastcversion=" + str(oldrev) + \ "&codeversion=" + str(newrev) + "&lastcversion=" + str(oldrev) + \
...@@ -238,49 +298,134 @@ def call_back_muse(deployid, cbtoken, build_user, pass_rate, job_url, build_num) ...@@ -238,49 +298,134 @@ def call_back_muse(deployid, cbtoken, build_user, pass_rate, job_url, build_num)
print('非远程触发') print('非远程触发')
pass pass
def call_back_gitool(deployid, cbtoken, build_user, pass_rate, job_url, build_num,env_t):
"""
回调gitool
:return:
"""
print("call back gitool")
if deployid != 'deployid' and cbtoken == 'cbtoken' and build_user == 'SYSTEM':
timestamp = str(int(time.time()))
data = "gitool_autotest_api_token(- - #)" + timestamp
sign_md5 = hashlib.md5()
sign_md5.update(data.encode(encoding='utf-8'))
data = sign_md5.hexdigest()
verify_str = data + "_" + timestamp
if pass_rate == 100.0:
status = 'pass'
else:
status = 'failed'
if env_t == 'on':
url = 'http://gitool.plt.babytree-inc.com/gitool/update_online_autotest_result?'
elif env_t == 'pre':
url = 'http://gitool.plt.babytree-inc.com/gitool/update_pre_autotest_result?'
elif env_t == 'sit':
url = 'http://gitool.plt.babytree-inc.com/gitool/update_test_autotest_result?'
url = url + "branch_id="+str(deployid)+"&result="+str(status)+"&result_url="+str(job_url)+"&detail_result=&"+"verify_str="+str(verify_str)
print(url)
response = get(url)
print("回调gitool返回结果")
print(response.content.decode())
else:
print('非远程触发')
pass
if __name__ == '__main__': if __name__ == '__main__':
start = datetime.datetime.now().strftime('%Y%m%d%H%M%S') start = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
print('start') print('start')
case_path = os.path.abspath(".") + os.sep + 'air_case' case_path = os.path.abspath(".") + os.sep + 'air_case'
report_path = os.path.abspath(".") + os.sep + 'report' report_path = os.path.abspath(".") + os.sep + 'report'
# 第一个参数,case执行类型
tag = sys.argv[1]
# 想运行多个tag 用逗号分割。 想运行同时满足两种tag的用&号连接
cases = sys.argv[2]
# 第3个参数,日志数据等级
log_level = sys.argv[3]
# 第4个参数,子任务个数,或者 是 app运行模式
num = sys.argv[4]
# 第5个参数,子任务名或者 设备uid
JobOrDevice = sys.argv[5]
# pool名 # pool名
pool_name = sys.argv[6]
runenv = sys.argv[7]
job_name = sys.argv[8]
build_num = sys.argv[9]
job_url = sys.argv[10]
build_user = exchange(sys.argv[11])
pool_name = sys.argv[1] oldrev = sys.argv[12]
runenv = sys.argv[2] newrev = sys.argv[13]
job_name = sys.argv[3]
build_num = sys.argv[4]
job_url = sys.argv[5]
build_user = exchange(sys.argv[6])
oldrev = sys.argv[7] deployid = sys.argv[14]
newrev = sys.argv[8] cbtoken = sys.argv[15]
if runenv == 'autotestpreid':
env_t = 'pre'
elif runenv == 'autotestonlineid':
env_t = 'on'
elif runenv == 'autotestsitaid':
env_t = 'sita'
else:
env_t = 'sit'
os.environ['ENV'] = env_t
Jobs = ['AutoTest_Pregnancy_First', 'AutoTest_Pregnancy_Personal', 'AutoTest_Pregnancy_Community', \ # 如果num是 s,m,d 表示是运行app 用例
'AutoTest_Pregnancy_Contents', 'AutoTest_Pregnancy_Tools/'] if num in ('s', 'm', 'd'):
for i in range(5): cmd = 'python runner_app.py ' + JobOrDevice + ' ' + num + ' ' + tag + ' ' + cases + ' ' + log_level
cmd = 'rd /s /q report\\report_' + str(i+1)
os.system(cmd) os.system(cmd)
url = 'http://192.168.24.100:8080/view/Tools/job/' + Jobs[i] + '/buildWithParameters?token=123456' total_cases, succ_cases, run_time, pass_rate = get_mess_from_report(report_path)
print(url) else:
requests.get(url) num = int(num)
# 等待1分钟 # 如果将任务数设置为1并且子任务名等于job名,就不分任务到子job,直接本机跑
time.sleep(2400) if num != 1 or JobOrDevice != job_name:
# 判断报告传输是否完成 case_list = cases.split(',')
while True: if tag == 'tag':
is_done = get_dir_exist(report_path, 5) case_list = get_case_tag_list(case_path, cases)
if is_done: if tag == 'all':
total_cases, succ_cases, run_time, pass_rate = merge_report(5, report_path) case_list = get_all_dir(case_list, case_path)
break shuffle(case_list)
length = len(case_list)
if length >= num:
div_num = num
else:
div_num = length
print(div_num)
for i in range(div_num):
cmd = 'rd /s /q report\\report_' + str(i+1)
os.system(cmd)
one_list = case_list[math.floor(i / div_num * length):math.floor((i + 1) / div_num * length)]
one_list_str = ",".join(one_list)
print(one_list_str)
url = 'http://jenkins.baobaoshu.com/view/Tools/job/' + JobOrDevice + '_' + str(i+1) + '/buildWithParameters?token=123456&tag=choose&cases=' + one_list_str + "&log_level=" + log_level + "&env=" + env_t + "&triger_job_name=" + job_name
print(url)
requests.get(url)
# 等待1分钟
time.sleep(60)
# 判断报告传输是否完成
while True:
is_done = get_dir_exist(report_path, div_num)
if is_done:
total_cases, succ_cases, run_time, pass_rate = merge_report(div_num, report_path)
break
else:
time.sleep(5)
else: else:
time.sleep(5) run_url = str(job_url) + str(build_num) + os.sep + "artifact" + os.sep + "report" + os.sep + "summary.html"
cmd = 'python runner.py ' + tag + ' ' + cases + ' ' + log_level + ' ' + env_t + ' ' + run_url
os.system(cmd)
total_cases, succ_cases, run_time, pass_rate = get_mess_from_report(report_path)
end = datetime.datetime.now().strftime('%Y%m%d%H%M%S') end = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
# 回传数据到gitool
call_back_gitool(deployid, cbtoken, build_user, pass_rate, job_url, build_num, env_t)
# 回传数据到muse # 回传数据到muse
#call_back_muse(deployid, cbtoken, build_user, pass_rate, job_url, build_num) call_back_muse(deployid, cbtoken, build_user, pass_rate, job_url, build_num)
# 回传数据到atms # 回传数据到atms
call_back_atms(runenv, job_name, build_num, total_cases, pass_rate, run_time, pool_name, build_user) call_back_atms(runenv, job_name, build_num, total_cases, pass_rate, run_time, pool_name, build_user)
...@@ -290,3 +435,4 @@ if __name__ == '__main__': ...@@ -290,3 +435,4 @@ if __name__ == '__main__':
if pass_rate != 100.0: if pass_rate != 100.0:
sys.exit(1) sys.exit(1)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment