python+jenkins+pytest实现机器学习项目接口自动化测试
背景介绍算法机器学习项目代码为python实现。整体实现:通过 http接口接受参数,调用dubbo thrift 服务,再调用算法文件,算法返回结果给dubbo thrfit,dubbo thrift 返回给http后台(dubbo 和thrift 待详细了解)实现的接口自动化流程调用的为dubbo接口jenkins配置1,SVN路径2,轮询SCM...
背景介绍
算法机器学习项目代码为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,钉钉群中添加群机器人获取。
更多推荐
所有评论(0)