linux+jenkins+python+svn 自动化测试集成之路

本文背景:

  背景 1---个人基础: 本机 win7 上安装 pycharm,使用 python 搭建 API 自动化测试框架,本地运行 Pass。本机上搭建 jenkins,创建测试任务,定时构建 Pass。

  背景 2---公司实际: jenkins 和 python 都是搭载 Linux 系统服务器上,python 脚本存放在 SVN 上。

  在背景 1 的前提下,往背景 2 跳跃,我以为只是一小步。挪一个环境而已,对 Linux 基础命令还算熟悉,于是开始一天的探坑之路。

第一阶段:盲目试水,觉得把脚本里路径改成 SVN 就 OK 了。

  1 修改 conf 中的项目路径为:http://*******.cn/svn/****API_Autotest,上传到 SVN 上。

  2 jenkins 上新建自由风格任务,源码管理选择 SVN 路径同上,添加账号凭证信息,构建步骤添加执行 shell 命令:python run.py。(本人并不会 shell 脚本,windows 下也是用这个命令,咨询了大佬才放心用),然后应用-保存。

  3 最后一步,正式验证是否成功,返回,点击“立即构建”。

  结果可想而知,华丽丽地失败了,也不指望一次成功,调出控制台输出,workspace 里没有找到这个工程文件,意料之中。第二次,仍然失败,run.py 里第一步是从配置文件中读取 section 对应值,报错提示 KEY_Error,反复检查配置文件和脚本,无果。

第二阶段:疯狂百度,相信万能的度娘,总能找到类似的情况吧。

  百度了 n 篇文章,并没有找到一样背景的情况:linux+jenkins+python+svn,大都是搭建测试环境,部署项目 Java 代码的,但也不能说全无收获,确实发现了几个关键点:

  1 Linux 一般自带 python2.7,但我用的是 python3.4,需要去升级服务器上的 python 版本,至于怎么在 Linux 上升级 python 到 3,网上文章一堆一堆的,看了两三篇,差不多,于是要来搭建 jenkins 的服务器(公司服务器太多)账号密码,开始用下面命令安装,需要 sudo -i 临时切换到 root 权限,预想是 python2.7 和 3.4 共存,最后把默认软链接指向 python3:

   wget https://www.python.org/ftp/python/3.4.1/Python-3.4.1.tgz # 下载资源包
   tar -zxvf Python-3.4.1.tgz # 解压
  cd Python-3.4.1/ # 进入解压后的目录
   ./configure # 配置
   make & make install # 编译&安装
   python3 # 无报错则成功

  验证几次失败,百度对应的报错后,解决掉了不提。然后安装完没有报错了,还是验证不通过,于是直接找开发小姐姐帮忙看,过一会儿,她说好了可以用了。怎么解决的呢?小姐姐的回复是:把 python2 的卸掉了,启动路径替了一下。应该也可以并存的,改一下环境变量就行,但是小姐姐直接卸了百度里说卸掉自带的 2 版本可能影响其他地方,就先不管了。

  2 jenkins 里 pyenv 插件可以指定 python 版本,不知道跟 1 是不是重复了。不管三七二十一,先去插件管理里下一个再说,用不上也没关系嘛。

  1、2 全部解决了,再次构建,仍是失败,报错信息,NO SECTION,也就是说读取配置文件仍然失败。反反复复在 jenkins 上构建也没啥意义了,还是先到本机上调试看看。

第三阶段:百度已无方向,返回自己调试 + 咨询大佬,意外收获到 pycharm+svn 用法

  1 在读取配置文件的脚本 main 函数下,配置文件路径尝试 SVN 路径,结果显示一大串配置提示错误,百度 pycharm 里 SVN 配置后发现居然还可以从 SVN 代码仓库里导出脚本,编辑修改后右键直接 commit,太方便了,这个以后可以一直用下去。

  2 解决了 pycharm 里 SVN 配置问题,重新开始尝试了读取 SVN 路径配置文件,同样报错。本地的可运行成功,那问题就在路径上了。针对性地咨询了下测试大佬,果然,配置文件不能请求远程的文件,要加上一步拉到本地的操作。而 jenkins 在构建任务时会自动把 SVN 上的代码下载到本地的 workspace 里,所以 conf 里配置文件中的 project_path 不能写 SVN 路径,而是搭建 jenkins 的那台服务器上的 workspace 路径,可能因为太细节太小了,跟喝水不能太烫一样,百度里很默契的都没提及,这是我认知中的一个盲点,于是,摔倒了半天还爬不起来。

  3 大方向问题解决了,再次构建,仍是 failure,报错,仍是路径错误,大佬建议先在服务器上尝试能否运行成功。这是一个好办法,先把 py 脚本一个一个地在服务器上调通再看,并且百度里关于 Linux 下 python 运行报错的文章一堆一堆的,我碰到的如下:

  NO Moudle Named Requests: 那就去 Linux 上 pip install requests (ddt、openpyxl、configparser 同理)

  NO Moudle Named HTMLTestRunnerNew: 那就打开 secureFX,丢个 HTMLTestRunnerNew.py 到 python 安装目录 lib 下

  NO Moudle Named common:   那就在每个 py 文件起始位置加上一段:

    import os,sys
    curPath = os.path.abspath(os.path.dirname(file))
    rootPath = os.path.split(curPath)[0]
    sys.path.append(rootPath)
   至此,服务器上运行顺利通过。

最后,再次在 jenkins 构建,顺利通过,花了快一天的时间。留下此文总结纪念。

2 回帖
请输入回帖内容 ...
  • xiaojian

    我们 python7 期优秀的大佬 ,自己动手解决问题的能力,杠杠滴!!

  • zjing306

    我来试试