自动化测试应用推广 领导反思篇

来源:互联网 发布:windows文本效果在哪里 编辑:程序博客网 时间:2024/04/29 00:44

最近看到一个报告让我想起有必要写点东西警示大家


据调查报告显示自动化测试人员 已出现过剩的现象


我在反思是什么让自动化这种一直被各大公司招聘主管认为是高大上的职位,出现的产能过剩,

难道是真的国内已具备足量的自动化框架开发人员,还是说这一行冒牌的比较多呢,我个人认为偏向第二点,往往好多面试者会了一点录制功能也会自吹拥有自动化技能,会关键字编程之类的,会编写脚本,会用TESTNG 编写用例,感觉没有他不懂的技术似的,这种会吹牛的人招进去之后不要谈让他做自动化,能将功能测试做好就已很不错了



假如主管有幸招聘到真正能独产开发自动化代码的人,公司就一定能推广自动化吗,这种我也不完全赞同,为什么我说即使公司招聘么自动化框架开发人员,也不一定能推广自动化呢


这里用真实事例+真实代码跟大家讲解


我们看平安这种大公司的自动化是如何写的


[java] view plaincopy
  1. public class MyMessagePage {  
  2.   
  3.     private AndroidDriver driver;  
  4.       
  5.     public MyMessagePage(AndroidDriver driver){  
  6.         this.driver = driver;  
  7.     }  
  8.   
  9.     /** 
  10.     * @Method healthPlazaForTop 
  11.     * @Description: 我的消息-我的健康计划 
  12.     */  
  13.     public void healthPlan() throws Exception {  
  14.         Thread.sleep(8000);  
  15.         LogUtil.info("点击右上方我的消息-我的健康计划");  
  16.         driver.findElementById("com.pingan.papd:id/image_chat").click();  
  17.         Thread.sleep(2000);  
  18.         driver.findElementByName("健康习惯提醒").click();  
  19.         LogUtil.info("选择健康习惯提醒");  
  20.         Thread.sleep(2000);  
  21.         driver.findElementByName("我的健康习惯").click();  
  22.         LogUtil.info("选择我的健康习惯");  
  23.     }  
  24.       
  25.     /** 
  26.     * @Method healthPlanAdd 
  27.     * @Description: 我的消息-我的健康计划-添加我的健康计划 
  28.     */  
  29.     public void healthPlanAdd() throws Exception {  
  30.         Thread.sleep(2000);  
  31.         LogUtil.info("点击右上方我的消息-我的健康计划-添加我的健康计划");  
  32.         driver.findElementByName("添加").click();  
  33.         LogUtil.info("点击添加,添加一条我的健康计划");  
  34.         List<WebElement> imgview = driver.findElementsByImgView();  
  35.         imgview.get(2).click();  
  36.         driver.findElementByName("添加完成").click();  
  37.         LogUtil.info("添加完成");  
  38.     }  
  39.       
  40.     /** 
  41.     * @Method healthPlanRemind 
  42.     * @Description: 我的消息-我的健康计划-提醒 
  43.     */  
  44.     public void healthPlanRemind() throws Exception {  
  45.         Thread.sleep(2000);  
  46.         LogUtil.info("点击右上方我的消息-我的健康计划-提醒");  
  47.         List<WebElement> layoutList = driver.findElementsByClassName("android.widget.RelativeLayout");  
  48.         layoutList.get(1).click();  
  49.         driver.findElementByName("提醒").click();  
  50.         LogUtil.info("点击提醒");  
  51.         driver.findElementById("com.pingan.papd:id/cb_summary").click();  
  52.         Thread.sleep(2000);  
  53.         driver.findElementByName("提醒时间").click();  
  54.         LogUtil.info("点击提醒时间");  
  55.         List<WebElement> editList = driver.findElementsByEditText();  
  56.         editList.get(0).sendKeys("09");  
  57.         editList.get(1).sendKeys("50");  
  58.         driver.findElementByName("修改").click();  
  59.         LogUtil.info("设置当天具体时间");  
  60.         if (driver.findElementsByName("重复").size() > 0) {  
  61.             driver.findElementByName("重复").click();  
  62.             driver.findElementByName("每周三").click();  
  63.             driver.findElementById("com.pingan.papd:id/title_back_icon").click();  
  64.         }  
  65.         LogUtil.info("设置完毕");  
  66.     }  
  67.       
  68.     /** 
  69.     * @Method healthPlanDelete 
  70.     * @Description: 我的消息-我的健康计划-删除 
  71.     */  
  72.     public void healthPlanDelete() throws Exception {  
  73.         Thread.sleep(2000);  
  74.         LogUtil.info("点击右上方我的消息-我的健康计划-删除");  
  75.         List<WebElement> layoutList = driver.findElementsByClassName("android.widget.RelativeLayout");  
  76.         layoutList.get(1).click();  
  77.         driver.findElementByName("删除").click();  
  78.         LogUtil.info("点击删除,删除一条健康计划");  
  79.     }  
  80.       
  81.     /** 
  82.     * @Method healthPlanDelete 
  83.     * @Description: 我的消息-我的健康计划-取消 
  84.     */  
  85.     public void healthPlanCancel() throws Exception {  
  86.         Thread.sleep(2000);  
  87.         LogUtil.info("点击右上方我的消息-我的健康计划-取消");  
  88.         List<WebElement> layoutList = driver.findElementsByClassName("android.widget.RelativeLayout");  
  89.         layoutList.get(1).click();  
  90.         driver.findElementByName("取消").click();  
  91.         LogUtil.info("点击一条计划,选择下方取消");  
  92.     }  
  93. }  


这种代码是用Testng框架 我不能怀恁,平安确实应用了当前主流技术,又是Appium ,又是Testng 看似确实是高大上

但我们得想一个问题,这样编写代码我们自动化工程师主要职责是什么,是功能用例转自动化用例吗,如果你们公司自动化工程师是这样定位,我建义你不要招,那样不但达不


到自动化测试,相反会增加人工成本,在这种环境下经常会出现以下对话



功能测试: 我们的自动化开发工程师什么都不做,弄出来的东西又没法测试


测试开发 :开天给功能测试人员转自动化脚本,天天码代码,一意思都没,浪费青春


功能测试:  我的用例已给你了,麻烦 你帮我转化下脚本


自动化测试: 你的模块我已帮你做了增删改查,功能全覆盖


功能测试  :执行测试发现一个模块我手工测试几十条用例,自动化帮我设计了4条用例功能全覆盖  (此后功能测试再也不找自动化测试转化用例了)




现在我们再来分析下出现这种现象的原因

为什么 测试开发 天天要去码代码  ,我想反问下 天天码代码的叫测试框架开发人员吗, 你听说过 开发架构师 会去码代码吗,他们只负责提供Demo 就行,结


构通了,其它的代码,就是开发人员按我的模板去码代码就行了,但测试这边就苦逼了,测试框架开发人员还要天天码代码,没起到框架师的作用




那有什么办法可以改善这种状况的呢,这时不得不对自动化框架重新定义了


所谓框架应是提供一个类似的模板,让低级或无基础的功能测试人员也能编写自动化用例(框架开发的终极目的应是傻瓜式操作,为什么我们的相机被大量推广,不就是最初推出的傻瓜式相机让大众都能拍照吗),所以在工具选择上我们要尽力选择大众化的,不能去选择行业高大上的工具,什么


Junint ,TestNG,Jenkies 这些框架     Jenkies讲实话,用来在面试时欺骗下面试官说你会好多技术是可以,但实际在应用中能节省多少工时


我一直不看好,假如你的项目一天变更两次代码,工具也只会启动两次,一天节省 不到两分钟的事情,你能提升多少效率呢


那选择什么来管理比较合适呢

这里强列推荐大家有试试用Excel 来管理测试用例,由于 Excel 使用面积广,推广时间长,在这上面做一些简单优化就可以满足用例设计了每个人都能看得懂,


只有每个人都以看得懂的技术我们才好推广

以下是我们框架的测试用例,


这里大家看到后面XPATH 那么长,可能会认为功能测人员写起来会很麻烦,其实那个xpath 压根不需要你写,用一个Vlookup 就会自动帮你带出来,


功能测试只需要学会元素定位,录入元素之后,后面的所有操作全是用Excel 下拉方式编写,你说这种简单不呢,功能测试人员是否更愿意使用这种框架呢,













当我们的功能测试人员能独立编写用例时,那代表我们自动化推广走出了第一步, 我们就可以将自动化开发 与功能测试人员 分开


自动化测试人员以后就重点优化框架就行,功能测试人员根据自已项目的特点选取用例转化成自动化用例就行



测试完结果如保展现呢

我们还是用Excel 来存储,可以自定义一些你想要展现的字段,测试完之后你可以用JAVA 代码做统计分析,最后生成柱状图表










0 0
原创粉丝点击