第一、引言

1.1需求描述

1.2添加用例的目的

二、编写核对用户信息测试用例

2.1搭建环境

2.2测试应用

2.3 遇到的问题

2.4 优化测试应用

三、编写验证公网链接测试用例

3.1测试应用

3.2 遇到的问题

3.3优化测试应用

四、jenkins部署实现

4.1 创建任务

4.2 运行并监控构建

4.3 遇到的问题

五、总结


 

第一、引言

本测试应用是2014年刚为自己负责的京东用户体系自动化最小投入产出的实践,实现了用户体系业务线自动化从“无到有”的突破,时过5年在梳理电脑存档的时候发现该文章,花几分钟梳理一下分享给大家,希望能给大家带来思路上的参考,我以此纪念回味曾经的思路和努力的脚步;

该实践为服务用户组部分功能测试,旨在提高测试效率,解放人力资源,能及时性的得到线上问题反馈,提供分析测试结果条件,能快速定位问题;并对发现的问题和缺陷进行记录,形成log文档,以验证该系统是否符合需求说明书的要求,同时准备进行应用验收;

1.1需求描述

  1. 用户登录后,进入“我的京东”,不断刷新该页面,检查用户信息显示是否正确;
  2. 618交易研发部需要实时测试的公网链接;

1.2添加用例的目的

  1. 通过测试应用核对登录用户信息;
  2. 由于公网链接比较多,手工测试比较费时,通过测试应用验证公网链接,节省时间,反馈问题及时,提高工作效率;
  3. 把测试应用添加到jenkins 中,不间断的自动测试;

二、编写核对用户信息测试用例

2.1搭建环境

2.1.1安装所需要的软件

  • 安装jdk1.6 32位
  • 安装springsourece 32 位
  • 安装svn 64位
  • 安装Maven 3.1.1

【说明】软件安装过程,不做具体描述。

2.1.2 导入工程

 

  • 选择上图,“Maven”下“Existing Maven Projects”,如下图:

 

  • 点击上图“Next”按钮,选择要导入“httpTestCoolies ”工程pom.xml所在的根目录,如下图:

  • 点击上图“Finish”按钮,已成功导入工程

2.1.3 配置Maven

  • 选择“Window”下“Preferences”,如下图:

 

  • 打开上图中“Maven”,如下图:

 

  • 选择“Maven”下“Installations”,添加“Maven”安装所在的路径,点击“ok”如下图:

   【说明】上图中,选择上面所添加的maven路径后,下面标红处会自动生成,不需要自己选择。

  • 选择“Maven”下“User Settings”,如下图:

说明】上图标红处,settings.xml是在C:\Users\Administrator\.m2下是不存在,需要手动创建。创建完成后,需要添加内容,建议最好从搭建好环境同事拷贝settings.xml文件。C:\Users\Administrator\.m2\repository 已存在,不需要自己创建。

2.2测试应用

  • 编写流程
  1. 用户先登录,登录失败(如果连接超时,重连一次),直接返回并发送邮件,邮件内容为详细失败信息;
  2. 登录成功后,根据userNameUrl = http://home.jd.com/myjd_index.action,获取昵称。根据dataNumUrl = http://home.jd.com/myjd_getDataCount.action ,获取京豆、礼品卡、余额、优惠劵;
  3. 获取的值和已存在的值进行比对,比对结果都相等,则返回ture,否则false并发送邮件通知相关人员,邮件内容为:主题+测试结果详细(如果有错误则为错误详细信息,报告异常);

2.3 遇到的问题

2.3.1搭建环境

  • 在win7  64位机器上安装了32位svn ,不能用。(解决办法:卸载32位的svn,重新安装64位svn)
  • 在win7  64位机器上安装32 位的springsourece 时,选择64位的jdk1.6 报错。(解决办法:卸载64位的jdk1.6,重新安装32位的jdk1.6)
  • 如果用eclipse 需要安装Maven插件;

2.3.2 配置Maven

  • 在springsourece中配置Maven后,pom.xml报错。错误信息如下:

Failure to transfer org.apache.maven.plugins:maven-resources-plugin:jar:2.5 from http://repo.maven.apache.org/maven2

 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or

 updates are forced. Original error: Could not transfer artifact org.apache.maven.plugins:maven-resources-plugin:jar:2.5

 from/to central (http://repo.maven.apache.org/maven2): Remotely Closed [id: 0x015866bf, /10.12.217.35:56929 :>

 repo.maven.apache.org/199.27.77.129:80]

报错原因: C:\Users\Administrator\.m2\ settings.xml 文件内容不正确,导致的。

解决办法:拷贝同事的setting.xml文件,替换原来的setting.xml文件。

 

2.4 优化测试应用

  • 核对多个登录用户信息
  • 把已登录用户信息以参数的方式传入(原因当用户的优惠劵、京豆发生变化时,需要修改测试应用源码)

 

三、编写验证公网链接测试用例

3.1测试应用

  • 编写流程
  1. 整理公网链接,哪些链接可以通过程序验证
  2. 把整理后的公网链接,加入到List
  3. 通过循环逐步验证每个链接
  4. 判断链接是否有跳转页面,如果跳转链接中含有“error.html”,发送邮件。
  5. 通过错误信息,区分公网链接属于用户、促销、市场活动等
  6. 在运行过程中,错误信息,debug信息、INFO信息写入日志文件
  7. 通过定时器来实现隔多长时间运行一次该用例

【说明】上面5和6是在本地运行。如果通过jenkins运行,不需要5和6。

 

3.2 遇到的问题

  1. List 添加 的url 带空格报错,错误信息如下:

java.lang.IllegalArgumentException

         at java.net.URI.create(URI.java:842)

         at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69)

         at common.DoGetResponse.doGetResponse(DoGetResponse.java:17)

         at Checker.CheckTicketCardUrl.getCheckTicketCardUrl(CheckTicketCardUrl.java:32)

         at Checker.CheckInterface.getCheckInterFace(CheckInterface.java:111)

         at common.StartTask.run(StartTask.java:31)

         at java.util.TimerThread.mainLoop(Timer.java:512)

         at java.util.TimerThread.run(Timer.java:462)

Caused by: java.net.URISyntaxException: Illegal character in query at index 71: http://quan.jd.com/getcouponcount.action?callback=51testing_&_345637334

         at java.net.URI$Parser.fail(URI.java:2809)

         at java.net.URI$Parser.checkChars(URI.java:2982)

         at java.net.URI$Parser.parseHierarchical(URI.java:3072)

         at java.net.URI$Parser.parse(URI.java:3014)

         at java.net.URI.<init>(URI.java:578)

         at java.net.URI.create(URI.java:840)

         ... 7 more

解决办法:去掉url中的空格。

  • 运行测试用例的过程中,发现有部分连接跳转到错误页面,是由于登录用户没有开启“支付密码”。

解决办法:开启账号支付密码。

3.3优化测试应用

  • url作为参数传入(考虑到以后可能运行某个公网链接,或者增加公网链接,不需要修改程序,就能实现)

四、jenkins部署实现

4.1 创建任务

  1. 通过浏览器http://10.10.224.136:3154/jenkins/,登录jenkins,只有用户登录后,才可以创建任务。
  2. 在 Jenkins主菜单点击“新  Job”,出现如下图:

键入任务名称,选择“Build a free-style software project”选项,点击“OK”按钮后,出现如下图:

【说明】:

  1. Project名称:项目(任务)名称不能重复,后面通称任务。
  2. 描述:主要对任务进行简要说明。
  3. 丢弃旧的构建:是否保留过去的构建,默认是保留。
  4. 参数化构建过程:如果选择此选项,Jenkins将允许您提供一套任意的键值对参数,它们会被传递到构建过程里。配置的参数往往是构建运行环境中的一些环境变量。
  5. 停止构建:禁止此任务进行构建 ,默认是不禁止。
  6. 高级项目选项
  • 安静期:构建前等待时间
  • 重试次数:从SCM仓库中取出尝试时间
  • 该项目的上游项目正在构建时阻止该项目构建
  • 该项目的下游项目正在构建时阻止该项目构建
  • 试用自定义的工作空间:指定当前任务的workspace,否则 默认为JENKINS_HOME的工作目录

    7.源码管理

  • CVS:从cvs库中获取
  • None:手动方式
  • SVN:从svn库中获取

备注:SVN通过“Add more locations”来添加多个工程。

     8.构建触发器

  • Build periodically :设置构建频率
  • Poll SCM:设置从SCM库中检查源代码是否更新。

备注:以上基本配置为 分钟 小时 天 月 星期,例如:每5分钟进行 5 * * * *,每天12点和23整点进行 0 12,23 * * *

     9.构建:支持多种方式,例如:shell(运行于linux环境)、Maven(支持Maven编译)、Command(windows批处理命令)、ant等,如下图:

下面以Maven举例:

  • Goals:maven命令。

      10.构建后操作,主要说一下,邮件提醒;

 

备注:可以向多个人发送邮件,通过“;”进行分割;

点击“保存”,新任务创建完成;

4.2 运行并监控构建

  • 当配置完成一个任务后,回到主控制面板,如下图:

  • 上图中右边列表列举现在已经配置的任务已经任务当前的状态;
  • 左边有构建队列,当有构件时,会把当前正在构建的队列在上面进行列举;
  • 上图右下角有RSS订阅,支持订阅全部、失败和最后一次等;

 

  • 手动构建一个任务

当一个任务配置完成后,可以采用手动构建和触发器构建两种方式,在项目验证阶段,可以通过手动触发方式,点击任务区的“立即构建”,会在“Build History”中出现以下进度条:

点击进度条,可以进入到具体编译过程,如下图:

等构建完成后,可以看到任务构建的结果图,如下图:

  • 任务构建状态
  1. 构建状态分一下几种

项目从未构建,或者被禁用

构建失败

构建成功,但包含错误

构建成功

      2.构建稳定性,jenkins会基于一些后处理器任务构建发布一个稳健指数(从0~100),越高越稳定

项目健康度高于80%。

项目健康度介于60%~80%

项目健康度介于40%~60%

项目健康度介于20%~40%

项目健康度低于20%

期待任务构建完成都处于状态。

4.3 遇到的问题

  • 点击“立即构建”后,在“Build History”中出现“连接中”。

产生原因:节点没有启动

解决方法:在节点管理页面上,手动启动该节点

  • 构建失败,错误信息如下:

         [Dome-tester] $ mvn.bat -f pom.xml -DNODE_SLAVE=192.168.198.135-win7 clean install

         FATAL: command execution failed

         java.io.IOException: Cannot run program "mvn.bat" (in directory "C:\HudsonWorkSpace\workspace\Dome-tester"): CreateProcess error=2, ?????????

                   at java.lang.ProcessBuilder.start(Unknown Source)

                   at hudson.Proc$LocalProc.<init>(Proc.java:244)

                   at hudson.Proc$LocalProc.<init>(Proc.java:216)

                   at hudson.Launcher$LocalLauncher.launch(Launcher.java:707)

                   at hudson.Launcher$ProcStarter.start(Launcher.java:338)

                   at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:932)

                   at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:899)

                   at hudson.remoting.UserRequest.perform(UserRequest.java:118)

         at hudson.remoting.UserRequest.perform(UserRequest.java:48)

                   at hudson.remoting.Request$2.run(Request.java:287)

                   at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)

                   at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)

                   at java.util.concurrent.FutureTask.run(Unknown Source)

                   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)

                   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

                   at hudson.remoting.Engine$1$1.run(Engine.java:60)

                   at java.lang.Thread.run(Unknown Source)

         Caused by: java.io.IOException: CreateProcess error=2, ?????????

                   at java.lang.ProcessImpl.create(Native Method)

                   at java.lang.ProcessImpl.<init>(Unknown Source)

                   at java.lang.ProcessImpl.start(Unknown Source)

                   ... 17 more

         Build step 'Invoke top-level Maven targets' marked build as failure

         Recording test results

         Sending e-mails to: songfengxiang@jd.com lihongbo@jd.com

         Notifying upstream projects of job completion

         Finished: FAILURE

  • 产生的原因:slave所在的机器没有启动“slave-agent.jnlp”,没有办法和master建立连接。
  • 解决办法:检查slave所在的机器上是否安装了jdk、maven是否设置相应的环境变量启动“slave-agent.jnlp”。

五、总结

  • 深入的了解用户相关的业务内部设计逻辑;
  • 熟悉了jenkins,从怎样创建任务到运行并监控构建整个过程;
  • 学习了同事解决问题的方法,增加沟通;
  • 熟悉了添加测试用例的流程;

     不足之处

  • 编写测试应用过程中有些异常没有考虑到;
  • 由于对jenkins不熟悉,遇到问题不能独立解决,需提搞解决问题的能力;

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐