问题:
自动化测试脚本代码咱已经有了,那么该如何部署到我们的服务器上,在服务器上定时自动执行呢?
思路:
首先,我们要统一环境,大家知道,python2和python3的语法和库有很多改动,而大多服务器自带的python版本还是2,所以我们要把服务器的环境配置改为和我们本地配置尽量完全相同,避免版本造成的影响;环境配置之后,下一步就是依赖,可以设置成执行代码时自动下载,否则没有依赖也是会执行失败的;如果代码执行成功,就可以进行最后一步,设置定时任务,定时执行脚本,或者通过Jenkins定时部署,达到我们想要的效果。
-- 记录一下过程中遇到的坑
环境配置
Python环境
安装python3的版本,安装方式有很多,可以自行选择,官方文档
准备python的编译环境
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
下载指定版本的python源码
wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
安装编译python3
cd Python-3.6.2
mkdir /usr/local/python3.6
./configure --prefix=/usr/local/python3.6
make
make install
# 建立软链接
ln -s /usr/local/python3.6/bin/python3.6 /usr/bin/python3
# 查看新的版本
python3 -V # 这里是兼容python2的,所以一定要带这个3,如果不带就还是用的python2
更新pip3
# 下载
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26
# 解压
tar -zxvf setuptools-19.6.tar.gz
# 编译、安装
cd setuptools-19.6/
python3 setup.py build
python3 setup.py install
# 建立软链接
ln -s /usr/local/python3.6/bin/pip3 /usr/bin/pip3
# 更新pip3
pip3 install --upgrade pip
下载依赖
首先在pycharm项目的控制台中执行以下命令,将我们python环境的依赖生成一个文档,会有一些此项目不需要的依赖,按照情况删除即可
pip freeze>requirements.txt #本地下载所以没用pip3
将程序打包上传到服务器,在目录下可以看到上面生成的这个文件,执行命令安装依赖
pip3 install -r requirements.txt
遇到问题与解决方案
我在安装的时候遇到一些依赖版本不对应的情况(xlrd),可能是自带的或者手动下载时没带版本号,导致部分代码执行报错,所以有时候需要卸载和安装指定版本的依赖
方案:卸载xlrd,安装实际需要的版本,参考xlrd使用问题
# 卸载 pip3 uninstall xlrd # 安装 pip3 install xlrd==1.2.0
import导包时找不到自定义模块,参考: python环境import找不到自定义的模块(如果有更好的方案欢迎评论交流)
方案:修改环境变量 ,所有文件都可以引入/usr/server/下的模块vi /etc/profileexport PYTHONPATH=$PYTHONPATH:/usr/server/ # 加在后面 source /etc/profile # 刷新配置
准备完毕,测试一下,执行成功
python3 auto_test.py
定时执行
程序在服务器上可以正常运行,那么接下来只需要配置到我们的Jenkins上面就可以实现目标啦!
我本来想的是不需要维护用例,就直接创建定时任务每日执行就可以了,但是遇到了另外一个问题没有解决,所以就用Jenkins部署了(Linux自带的cron定时任务,时间是只到分钟的,没有秒!!!执行脚本的时候老是找不到依赖,明明服务器已经装好了,(;′⌒`))对定时任务感兴趣的可以参考:CentOS7安装定时任务
定时任务
还是大概讲一下,定时任务的使用参照上文
* * * * * echo "this is a crontab" >> /usr/servers/run1.txt
50 15 * * * pip3 install -r /var/lib/jenkins/workspace/auto_api/requirements.txt >> /usr/servers/run.txt
0 16 * * * /root/training/Python-3.6.5/bin/python3 /usr/servers/auto_api/case/test_login.py >> /usr/servers/python.txt
由于定时任务直接执行脚本会找不到依赖包(服务器有,但是定时任务就不行),所以加了定时任务先下载依赖,目前这个方案没跑通
Jenkins部署
Jenkins安装传送门:linux下jenkins安装及配置
新建一个项目,配置如下,由于是本机的,只需要执行代码就可以了,配置比较简单,可以设置定时运行等
首次执行依然是找不到依赖包的问题,所以加了下载依赖的步骤,后面再执行就不需要了
构建成功
- [ ] ps:git项目配置会相对麻烦一些,后面也会操作一下,留下教程,待更新!!!