Jenkins执行python脚本

摘要:
pretty=true"r=requests.getprintdic=evalforiindic["jobs"]:ifi["name"]=='build':bu_color=i["color"]elifi["name"]=='scanning':sc_color=i["color"]print'''通过pom.xml获取版本信息'''pom_path=sys.argv[1]printdom=xml.dom.minidom.parserootdata=dom.documentElementitemlist=rootdata.getElementsByTagNameversion=itemlist[0].firstChild.dataprint'''把结果转化并插入数据库'''bu_status=1ifbu_color=="blue"else0sc_status=1ifsc_color=="blue"else0sql="insertintovcredit_buildrecordVALUE"%conn=pymysql.connectcursor=conn.cursor()cursor.executecursor.close()conn.commit()conn.close()codeLine.py#-*-coding:GBK-*-importreimportsysimportxml.dom.minidomimportpymysqlwithopenasf:txt=f.read()printp1=r"(?

构建选择Excute Windows batch command

Jenkins执行python脚本第1张

下面是python脚本,注意字符集GBK

runtest.py

#-*-coding:GBK -*- 
importsys
importtime
importpymysql
importrequests


#print(sys.argv[1])
ids_out =[]
#用","分割,得到列表id_list
id_list = sys.argv[1].split(",")
for id_str inid_list:    
    #用~分割,1001这种会变成['1001'],其他会变成['1003', '1005'],因为range不包含后面的值,所以要加1,取[1003,10006)
    for i in range(int(id_str.split("~")[0]), int(id_str.split("~")[-1]) + 1):
        ids_out.append(i)
        
print("需要执行的用例集:", ids_out)

json = {"ids": ids_out}

r = requests.post('http://10.138.60.185:9999/step_allexcute_data1/', json=json)

print(r.status_code, r.text)


#遍历列表,查询出用例名和执行时间在10分钟内的结果
print("")
print("序号   用例编号    用例名称            执行结果")
suc_num =0
sum_num = 1
for id inids_out:
    try:
        sql = "select step_name,api_result,actual_params,expect_params from vcredit_resultdetail where step_id = %s and create_time > DATE_SUB(NOW(), INTERVAL 10 MINUTE)" %id
        #执行第一次查询
        conn = pymysql.connect(host="10.138.60.185", user="root", password="fyw554193", database="automate")
        cursor =conn.cursor()
        cursor.execute(sql)
        data =cursor.fetchone()
        cursor.close()
        conn.close()
        #如果查询不到结果,则10秒后再查,执行100次,打印"id,用例名:用例正在执行,10秒后继续查询"
        i =0
        while (not data) and (i < 100):
            #print("%s: 未查到执行结果,10秒后继续查询。。。" % id)
            time.sleep(10)
            conn = pymysql.connect(host="10.138.60.185", user="root", password="fyw554193", database="automate")
            cursor =conn.cursor()
            cursor.execute(sql)
            data =cursor.fetchone()
            i += 1
        #查询到结果,则正常打印
        if data[1] == 1:
            suc_num += 1
            print("%s      %s        %s            用例执行通过" %(sum_num,id, data[0]))
        else:
            print("%s      %s        %s            用例执行未通过,实际结果为%s,预期结果为%s" % (sum_num,id, data[0], data[1], data[2]))
    #失败则打印异常
    exceptException:
        print("%s      %s                      接口发生异常" %(sum_num,id))
    sum_num += 1
print("")
print("总计运行%s个测试用例,成功%s个,失败%s个" %(len(ids_out), suc_num, len(ids_out)-suc_num))

record.py

#-*-coding:GBK -*- 
importsys
importpymysql
importrequests
importxml.dom.minidom
from requests.auth importHTTPBasicAuth

'''通过Jenkins API获取项目构建结果'''auth = HTTPBasicAuth('admin', 'admin')
url = "http://10.138.60.82:8080/api/python?pretty=true"r = requests.get(url=url, auth=auth)
print(r.text)

dic =eval(r.text)

for i in dic["jobs"]:
    if i["name"] == 'build':
        bu_color = i["color"]
    elif i["name"] == 'scanning':
        sc_color = i["color"]

print(bu_color, sc_color)

'''通过pom.xml获取版本信息'''pom_path = sys.argv[1]
print(pom_path)
dom =xml.dom.minidom.parse(pom_path)
rootdata =dom.documentElement
itemlist = rootdata.getElementsByTagName('version')
version =itemlist[0].firstChild.data
print(version)

'''把结果转化并插入数据库'''bu_status = 1 if bu_color == "blue" else0
sc_status = 1 if sc_color == "blue" else0

sql = "insert into vcredit_buildrecord(requireName,ProjectName,build,isCis,create_time) VALUE ('%s','%s',%s,%s,NOW())"% (version, "ProjectName", bu_status, sc_status)

conn = pymysql.connect(host='10.138.30.104', user='root', password='080305', database='testquality', charset='UTF8')
cursor =conn.cursor()
cursor.execute(sql)
cursor.close()
conn.commit()
conn.close()

codeLine.py

#-*-coding:GBK -*- 
importre
importsys
importxml.dom.minidom
importpymysql

with open("D:\jenkins\jobs\git\gitlog.txt") as f:
    txt =f.read()

print(txt)

p1 = r"(?<= | )d+?(?= ++)"pattern1 =re.compile(p1)
num =int(pattern1.findall(txt)[0])

print(num)

'''通过pom.xml获取版本信息'''pom_path = sys.argv[1]
print(pom_path)
dom =xml.dom.minidom.parse(pom_path)
rootdata =dom.documentElement
itemlist = rootdata.getElementsByTagName('version')
version =itemlist[0].firstChild.data
print(version)

'''更新数据库'''sql = "UPDATE `vcredit_requirequality` SET `codeLine`=%s WHERE `requireName`='%s'" %(num, version)

print(sql)

conn = pymysql.connect(host='10.138.30.104', user='root', password='080305', database='testquality', charset='UTF8')
cursor =conn.cursor()
cursor.execute(sql)
cursor.close()
conn.commit()
conn.close()

免责声明:文章转载自《Jenkins执行python脚本》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇第一章--django--安装介绍Ubuntu 安装 Hadoop(伪分布模式)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

包管理器conda与Python

什么是conda? conda是一个包管理器。值得注意的是,它不仅仅是Python的包管理器,而是一个通用的包管理器,当初设计时被用来管理任何语言的包。在目前来看,conda环境中所有语言的包管理,都是为了Python而服务的。 Anaconda与Miniconda Anaconda是一个Python的发行版,内置了众多Python包和附加软件(pydat...

Django2.2使用mysql数据库pymysql版本不匹配问题的解决过程与总结

前置条件 django版本:2.2.1 python版本:3.6.6 mysql版本:mysql-community8.0.15 问题 在搭建django项目,配置mysql数据库时遇到无法迁移数据库的问题,错误信息如下图: 问题分析过程 由错误信息,可大致看出是一个叫mysqlclient的包版本不匹配导致的问题。 搜索引擎检索相关错误,得知:pyth...

Python列表操作与深浅拷贝(5)——数字处理函数、类型判断、列表链表队列栈

python内建数据结构 分类 数值型:  int  float  complex  bool 序列对象: 字符串str  列表list  元组tuple 键值对:  集合set  字典dict 数值型 (list float complex bool都是class) int:python3 中 int 就是长整型,没有大小限制 float:支持十进制和科...

Python札记 -- 使用easy_install进行模块/包管理

今天在阅读以前项目代码时,发现里面使用的第三方模块的参数相当诡异,总是对不上。经过分析之后,发现是自己安装的第三方模块跟项目使用的版本不一致。在Python中进行模块/包管理的话,就不得不提到easy_install了,它的好处,“谁用谁知道”啊!!! 一、安装easy_install 请各位到 http://pypi.python.org/pypi/se...

python测试开发django-31.admin后台一对多操作ForeignKey

前言 平常的网页上有很多一对多的场景,比如填写银行卡信息的时候,会从银行列表下拉框选择对应的银行信息。一般会建两张表,一张表放银行的信息,一张表放银行卡信息。 每个银行可以对应多个银行卡,每个银行卡只能是一家银行的。那么银行名称和银行卡就是一对多的关系,反之,银行卡和银行名称就是多对一的关系 一对多表设计 准备两张表,银行信息(Bank)和卡号信息(Ca...

python打包

python打包 python打包 python打包有一个组织叫python packaging authority(pypa).还有一个python第三方仓库叫Python Package Index(Pypi) 与包有关的两种工具,一种是安装包的工具,另一种工具用于包的创建和分发 安装包的工具 pip安装来自PyPI的包 virtualenv或v...