python+jenkins+pytest实现机器学习项目接口自动化测试

编程入门 行业动态 更新时间:2024-10-28 08:17:51

python+jenkins+pytest实现机器学习项目<a href=https://www.elefans.com/category/jswz/34/1771365.html style=接口自动化测试"/>

python+jenkins+pytest实现机器学习项目接口自动化测试

背景介绍

算法机器学习项目代码为python实现。
整体实现:通过 http接口接受参数,调用dubbo thrift 服务,再调用算法文件,算法返回结果给dubbo thrfit,dubbo thrift 返回给http后台

(dubbo 和thrift 待详细了解)

实现的接口自动化流程


调用的为dubbo接口

jenkins配置

1,SVN路径
2,轮询SCM
H/10 * * * *
3,拉取的代码放置路径

source files设置
**/**.**,**/** 可以摘取所有文件。因为模型文件比较大,拉取会比较慢。这里没有设置拉取。
4,构建后操作–构建其他工程
构建测试代码工程

遇到的问题:
问题描述:

执行启动脚本,jenkins工程构建成功,控制台输出也没有错误信息。但实际thrift服务没有并启动。在xshell终端中执行脚本可以成功。执行停服务脚本可以成功。
启动脚本内容主要为

nohup python -u ${server_file} 18090 >> ${log_dir}/nohup_18090.out 2>&1 &
问题排查:

通过google和不断尝试,发现以下情况:
Jenkins不能执行python命令,需要带上python的全路径,如 /home/anaconda2/bin/python
Jenkins默认会在构建结束后Kill掉所有的衍生进程

原本想在服务器上添加python路径的环境变量,但发现已经有,仍然不能启动服务。
读者也可以尝试下,看看自己的是否会成功。
添加python环境变量方法参考

问题解决:

1,在jenkins中添加环境变量
2,通过更改BUILD_ID达到不被杀进程的目的

OLD_BUILD_ID=$BUILD_ID
BUILD_ID=dontKillMe
export PATH=/home/anaconda2/bin/:$PATH
cd /home/XXXX/
sh stop.sh
sh start.sh
BUILD_ID=$OLD_BUILD_ID
测试脚本工程配置


使用单元测试框架pytest+python编写代码

主要是使用pytest的参数化@pytest.mark.parametrize("case_name,code, param", data())
case_name 为用例名
code 为断言使用的响应码
param 为请求的参数
新建case_data.py的脚本,编写测试用例,主要形式内容如下

data()name1 = ""code1 = ""param1 = ""params = [(name1, code1, param1), (name2, code2, param2)]return params

也考虑过用excel文件读取测试数据,觉得没有这样方便。

断言

算法返回结果定义为JSON格式,返回内容不固定。比如推荐系统的推荐,无法对内容做断言。
输出的内容也不是相对固定的,所为这里只对响应code码做断言。这code码不是http的响应码,是算法工程师和大数据JAVA开发定义的。所以不会像http返回200,实际响应报错情况。

构建结果

加上–junit-xml=test_result.xml参数,jenkins上可以查看Test Result 测试结果报告
jenkins安装钉钉插件,构建后发消息到钉钉。钉钉access token,钉钉群中添加群机器人获取。

更多推荐

python+jenkins+pytest实现机器学习项目接口自动化测试

本文发布于:2024-02-08 22:06:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1675602.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:接口   机器   测试   项目   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!