自动化最小实践方案总结
第一、引言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需求描述
- 用户登录后,进入“我的京东”,不断刷新该页面,检查用户信息显示是否正确;
- 618交易研发部需要实时测试的公网链接;
1.2添加用例的目的
- 通过测试应用核对登录用户信息;
- 由于公网链接比较多,手工测试比较费时,通过测试应用验证公网链接,节省时间,反馈问题及时,提高工作效率;
- 把测试应用添加到jenkins 中,不间断的自动测试;
二、编写核对用户信息测试用例
2.1搭建环境
2.1.1安装所需要的软件
- 安装jdk1.6 32位
- 安装springsourece 32 位
- 安装svn 64位
- 安装Maven 3.1.1
【说明】软件安装过程,不做具体描述。
2.1.2 导入工程
- 根据svn地址:http://10.10.224.40/svn/Test-Dep/AutoTestCase/JAVA/httpTestCoolies,下载代码
- 把httpTestCoolies maven工程导入springsourece ,导入步骤如下:
- 选择“file”下 “import”,显示如下图:
- 选择上图,“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测试应用
- 编写流程
- 用户先登录,登录失败(如果连接超时,重连一次),直接返回并发送邮件,邮件内容为详细失败信息;
- 登录成功后,根据userNameUrl = http://home.jd.com/myjd_index.action,获取昵称。根据dataNumUrl = http://home.jd.com/myjd_getDataCount.action ,获取京豆、礼品卡、余额、优惠劵;
- 获取的值和已存在的值进行比对,比对结果都相等,则返回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测试应用
- 编写流程
- 整理公网链接,哪些链接可以通过程序验证
- 把整理后的公网链接,加入到List
- 通过循环逐步验证每个链接
- 判断链接是否有跳转页面,如果跳转链接中含有“error.html”,发送邮件。
- 通过错误信息,区分公网链接属于用户、促销、市场活动等
- 在运行过程中,错误信息,debug信息、INFO信息写入日志文件
- 通过定时器来实现隔多长时间运行一次该用例
【说明】上面5和6是在本地运行。如果通过jenkins运行,不需要5和6。
3.2 遇到的问题
- 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 创建任务
- 通过浏览器http://10.10.224.136:3154/jenkins/,登录jenkins,只有用户登录后,才可以创建任务。
- 在 Jenkins主菜单点击“新 Job”,出现如下图:
键入任务名称,选择“Build a free-style software project”选项,点击“OK”按钮后,出现如下图:
【说明】:
- Project名称:项目(任务)名称不能重复,后面通称任务。
- 描述:主要对任务进行简要说明。
- 丢弃旧的构建:是否保留过去的构建,默认是保留。
- 参数化构建过程:如果选择此选项,Jenkins将允许您提供一套任意的键值对参数,它们会被传递到构建过程里。配置的参数往往是构建运行环境中的一些环境变量。
- 停止构建:禁止此任务进行构建 ,默认是不禁止。
- 高级项目选项
- 安静期:构建前等待时间
- 重试次数:从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”中出现以下进度条:
点击进度条,可以进入到具体编译过程,如下图:
等构建完成后,可以看到任务构建的结果图,如下图:
- 任务构建状态
- 构建状态分一下几种
项目从未构建,或者被禁用 | |
构建失败 | |
构建成功,但包含错误 | |
构建成功 |
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不熟悉,遇到问题不能独立解决,需提搞解决问题的能力;
更多推荐
所有评论(0)