之前已经完成了登录、新增和修改的操作流程,这一节主要说明删除操作流程以及自动化的过程中出现的问题,算是对这个项目自动化的一个总结。

删除操作流程

对于系统账号管理中删除功能,删除的测试点主要如图所示

而账号管理的页面显示如图



在管理页面中可以看出,删除操作物理删除且没有批量操作功能。但是这里有一点需要主要,每个新注册的账号会默认监管所属机构下所有的用户,所以这里为了用例的健壮性,我们删除正常的用例的具体操作步骤如下

  1. 新增一个账号信息
  2. 取消新增账号的监管用户
  3. 定位到该新增账号页面中的删除按钮,点击删除操作
  4. 根据删除提示确认删除操作
  5. 断言页面中账号不存在

说明

  1. 这里必须先把账号的监管用户取消,否则无法进行删除操作

根据步骤信息,之前已经封装好了新增账号的关键字,这里主要是取消监管用户操作步骤和关键字的封装。

取消监管用户操作步骤

  1. 取得新增账号id并打开取消监管用户的url地址
  2. 在打开的取消监管用户中取消所有的监管用户
  3. 鼠标滚动到浏览器底端,点击保存完成操作

操作步骤已然了解,接下来就是步骤的关键字封装

第一步:得到id,获取url代码如下

封装账号新增id分配监管用户的url
${gradeU.value} Get Element Attribute xpath = .//*[@id='tb_guardian']/tbody/tr[1]/td[1]/input@value
log ${gradeU.value}
${AccountAllotModify} Catenate SEPARATOR= ${toEditGuardianUser} ${gradeU.value}
[Return] ${AccountAllotModify}

取消监管用户关键字封装如图所示

第二步:打开分配监管用户,取消全部监管用户

全部取消按钮的定位代码如下

点击账号监管用户的全部取消
click element deselAll

第三步:鼠标滚动到底端,点击保存操作

封装的关键字代码如下

点击账号监管用户的保存按钮
click element xpath = html/body/div[1]/div/div/div/div[2]/div[3]/div/button[1]

这样关键字封装完成之后,我们只需要根据操作步骤,编写操作用例即可完成删除的正常用例,具体代码如下所示

账号管理删除确认
[Documentation] 用例目的:删除一个没有监管用户的账号信息
... 操作步骤
... 1.新增一个账号信息
... 2.取消新建账号的所有监管用户
... 3.删除新建的账号
... 4.确认提示中选择“确认删除”
... 断言
... 1.当前页面是否是 http://192.168.1.6/guardian/query
... 2.当前页面中的是否包含新建的账号信息
... 存在的问题:
... Location Should Be ${GuardianQuery}
... 断言当前页面无法通过,需要查看问题
[Tags] doubtfula
[Setup] login
账号新增封装
${AccountTestName} 账号名称检查
#首先取消所有监管用户
${AccountAllotModify} 封装账号新增id分配监管用户的url
打开页面 ${AccountAllotModify}
#跳转到新打开的窗口,否则会停留在新增之后的窗口,元素无法定位 #说明跳转这里使用的是第二次,无法成功,具体原因待查
goto ${AccountAllotModify}
Take Screenshot guardian
点击账号监管用户的全部取消
sleep 5
Take Screenshot guardian
Execute Javascript window.scrollTo(0, document.body.scrollHeight) #滚动到底部
点击账号监管用户的保存按钮
sleep 5
Take Screenshot guardian
确认保存
log hello1
#首先取消所有监管用户
打开页面 ${GuardianQuery}
#页面跳转
goto ${GuardianQuery}
Take Screenshot guardian
sleep 5
log hello2
点击账号删除按钮
sleep 3
log hello3
确认保存
Take Screenshot guardian
#断言当前页面的url
log hello4
Comment Location Should Be ${GuardianQuery}
page should not contain ${AccountTestName}
[Teardown] close

删除用例rf格式显示如图

到这里,删除操作正常用例已经完成,接下来就是运行测试(≧▽≦)/

而到此,针对测试中常用的增删改查已经基本上完成了,这样参考账号管理的用例编写方法,其他模块的用例完成rf的用例编写,自动化已经部署完成,这样下次我们进行回归测试的之后,直接使用jenkins只要鼠标轻轻一点就可以运行具体模块或所有模块的测试用例,下次再也不会为项目着急上线所有模块没有回归测试而感到惶惶了,这样就可以轻松滴等着开发改着bug坐等项目上线了呢,瞬间觉得很happy(o)/~......

总结

项目自动化到这里就基本完成了,这里主要是用例rf中的分层思想,这样就算开发修改了代码元素的位置,我们也只需要修改元素的具体定位方法就好了。rf自动化从刚刚接触到现在把一个项目所有操作流程的用例都建立起来,中间遇到了不少问题,非常感谢强大的互联网,才能把一个项目完成的自动化流程建立起来。这里总结一下自动化中遇到的坑吧,也算给前一个阶段的总结。

问题1

自动化中尽可能减少用例之间的关联,能使用url的地方最好使用url;所以对于许多的新增、修改和其他操作我们尽可能的使用一个相对固定的url访问打开此页面进行元素的定位和输入,如图所示



此页面账号管理页面中,对于新增或修改操作,我们需要先打开账号管理这个页面,然后再次点击新增或修改按钮打开新增或修改页面;但是如果系统中账号管理的树形结构更换或新增、修改按钮的位置变换那么我们就需要重新定位变换的元素的位置。实际上我们可以不用这么麻烦,我们首先找到账号管理的页面url,查看该页面是否是固定的url,在图中显示的/guardian/query我们把浏览器的地址192.168.1.6拼接起来,打开了账号管理主页面的地址,如图



问题2

robotframework运行测试用例时提示gckodriver相关信息,如图所示

提示代码如下

Starting test: Open.Suit.open
20170802 08:42:08.000 : INFO : Opening browser 'FireFox' to base url 'http://www.baidu.com'
20170802 08:42:08.015 : FAIL : No browser is open
20170802 08:42:08.016 : WARN : Keyword 'Capture Page Screenshot' could not be run on failure: No browser is open
20170802 08:42:08.017 : FAIL :
WebDriverException: Message: 'geckodriver' executable needs to be in PATH. Ending test: Open.Suit.open

提示说明需要在路径path中添加geckodriver,当然解决办法就是,下载一个geckodriver.exe并将存放的路径添加在path中,简单点就直接放python的根目录下即可,下载地址 https://github.com/mozilla/geckodriver/releases,另外需要注意下,geckodriver分32及64位的版本,版本需与浏览器对应。

问题3

问题背景:利用robotframework在写自动化脚本的时候, 有些场景下需要新建一个浏览器窗口,但是又需要共享原窗口的session,这时候只需要在浏览中新打开一个tab页就可以。比如以上面的新增账号为例,我打开登录页面,登录成功之后,需要再次打开新增账号页面,而新增账号页面和登录成功的页面是共用session的,这个如何实现的呢?脚本如下:

Execute JavaScript    window.open('addGuardian');

或者可以使用robotframework中的关键字goto实现,代码如图

 goto    ${AccountAllotModify}

goto的用法可以在robotframework中查看该关键字如何使用,如图

问题4

robotframework运行用例时,只第一次运行用例的时候有日志显示,之后不会显示该日志信息,日志信息显示如图



解决方法:这里使用的是火狐浏览器,每次第一次运行测试用例的时候电脑中会启动一个进行geckodriver.exe,所以在每次运行完用例后,在最后的teardown中增加一个关闭进程的操作即可,代码如图

close
Close Browser
Comment ${Runoutput} OperatingSystem.Run taskkill /f /im geckodriver.exe
OperatingSystem.Run taskkill /f /im geckodriver.exe

这样修改之后,每次运行都可以看到日志信息了。

问题5

随机选择下拉框选项:

背景:如账号添加的时候我们需要选择账号所属机构,如果想选择每次添加的账号是随机的,那么该如何操作呢?可以看一下之前的robotframework随机选择下拉框

问题6

新增或修改用例中用户名、姓名、身份证号、手机号等这些字段中,有唯一性验证,所以为了测试的严谨性,我们需要每次添加或修改的信息是唯一的,该如何实现呢?

解决方法:这里使用了QTLibrary的一个关键字,安装和使用参考 https://github.com/qitaos/Robotframework-QTLibrary

这样安装完成之后,直接加入Library即可使用该关键字信息

随机姓名代码如下

${username}=    gen chars    10
输入用户名 ${username}

其他随机英文或数字或身份证以及生日使用请参考QTLibrary的使用关键字。

而这里的随机手机号使用的是robotframework中强大的关键字Evaluate来实现操作的,代码如下

${phone}    Evaluate    random.choice(['139','188','185','136','158','151'])+"".join(random.choice("0123456789") for i in range(8))    random
手机号码 ${phone}

robotframework中如图所示

问题7

在项目自动化用例编写完成之后,我们每次运行用例如果一个个点击运行的话会非常繁琐,而jenkins给自动化构建提供了一种解决办法。在使用jenkins运行测试用例的时候,无法打开浏览器如图所示

主要原因是jenkins安装的时候注册成windos的服务了,所以这里如果是tomcat启动或直接使用命令启动的jenkins则不会出现这个问题滴!那么如果不想重新安装jenkins该如何操作呢?

解决办法:

  1. 打开windows服务窗口(win+r 输入‘services.msc’)
  2. 找到Jenkins服务

    a). 停止此服务

    b). 将启动类型由自动->手动
  3. 找到Jenkins安装目录里的jenkins.war,在cmd窗口运行 java -jar x:/youfilepath/jenkins.war

问题8

在使用jenkins运行测试用例之后,我们可以打开运行的测试报告或log查看具体的日志信息,可是在这个最后即将胜利的时刻,竟然无法查看日志信息,瞬间感觉整个世界都不好了,(⊙_⊙?)

解决办法:使用命令java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar D:\Jenkins\jenkins.war,在命令启动jenkins中增加-Dhudson.model.DirectoryBrowserSupport.CSP= 再次重新打开jenkins重新运行用例,这下日志终于可以看到......





这样重新打开jenkins,再次运行robotframework的用例就可以浏览器能够正确打开(≧▽≦)/

这些就是目前项目自动化构建过程中遇到的那些坑,这里记录一下,为自己前段时间的自动化做一个小小的总结,当然如果能为一些童鞋提供一点灵感也是︿( ̄︶ ̄)︿好的......

robotframework自动化系列:删除操作流程以及总结的更多相关文章

  1. robotframework自动化系列:随机下拉框

    robotframework自动化系列:随机下拉框 随着项目自动化不断推进,在下拉框定位的时候出现些问题,每次下拉框选择都是相同的下拉选项,如果想每次选择的选项不一样,该如何实现呢,查找了很多资料,没 ...

  2. robotframework自动化系列:新增流程

    刚接手项目的时候,要求所有流程在上线之前必须确保正向操作是正确的:这个时候又有新的模块需要测试,所以引入自动化测试是非常有必要的!通过对比,尝试使用RF进行自动化的回归测试. 测试中最常见的操作就是增 ...

  3. robotframework自动化系列:修改流程

    在上一小节中,新增流程操作已经完成.那么接下来就是修改的流程操作了,对于一个页面的修改如何操作呢? 针对修改修改操作是在一个已经存在的账号直接修改还是新添加一个账号再修改呢?从用例设计健壮性出发,我们 ...

  4. robotframework自动化系列:文本类型的下拉框

    对于下拉框定位和输入,这里主要遇到有两种类型的下拉选择. 其中一个类型是select-options格式,如图 这种方式的定位可以使用select from list by value或select ...

  5. robotframework自动化系列:操作mysql数据库

    随着项目自动化深入和不断完善,大部分功能都已经能完成了自动化的操作:但是在设备添加的时候,遇到了难题.添加设备的时候mac必须是服务器设备管理中已经存在的mac地址,且是没有关联或绑定用户的设备信息. ...

  6. robotframework自动化系列:登陆操作

    robotframework自动化系统:登录 robotframework对于编程能力比较弱的测试人员而言,真的是雪中送炭!我们可以使用robotframework根据之前完成的测试用例,一步步完善自 ...

  7. RobotFrameWork自动化系列:安装配置

    1.   RobotFrameWork安装配置 1.1. 安装环境 64位win10家庭中文版 网上很多这方面的教程,但是比较零散,这里是自己安装配置的一个简单的笔记. 1.2. 安装说明 由于Rob ...

  8. Robotframework自动化系列:筛选结果数量统计

    Robotframework自动化系统:筛选结果数量统计 上一个节点已经可以随机选中某一个下拉框的值,我们在使用evaluate随机数的时候需要计算下拉选项总数,这时候我们是手工计算输入的:这时候如果 ...

  9. 从零学习基于Python的RobotFramework自动化

    从零学习基于Python的RobotFramework自动化 一.        Python基础 1)      版本差异 版本 编码 语法 其他 2.X ASCII try: raise Type ...

随机推荐

  1. 1.ElasticSearch介绍及基本概念

    一.ElasticSearch介绍 一个采用RESTful API标准的高扩展性的和高可用性的实时性分析的全文搜索工具 基于Lucene[开源的搜索引擎框架]构建 ElasticSearch是一个面向 ...

  2. PHP-FPM进程池探秘

    PHP 支持多进程而不支持多线程:PHP-FPM 在进程池中运行多个子进程并发处理所有连接请求.通过 ps 查看PHP-FPM进程池(pm.start_servers = 2)状态如下: root@d ...

  3. WebApi系列~HttpClient的性能隐患

    回到目录 最近在进行开发过程中,基于都是接口开发,A站接口访问B接口接口来请求数据,而在这个过程中我们使用的是HttpClient这个框架,当然也是微软自己的框架,性能当前没有问题,但如果你直接使用官 ...

  4. win10 UWP 你写我读

    想要电脑读出我们写的内容,在win10,很简单 其实这个技术在windows7就有了,但是现在win10让写出一个你写我读的软件很简单. 我们需要一个类MediaElement来播放,因为window ...

  5. win10 uwp json

    本文讲的是关于在uwp使用json的简单使用,json应用很多,因为我只是写简单使用,说的东西可能不对或者不符合每个人的预期.如果觉得我有讲的不对的,就多多包含,或者直接关掉这篇文章,但是请勿生气或者 ...

  6. 63、django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 模版层(template) 一.模版简介 ...

  7. 【框架学习与探究之定时器--Hangfire】

    声明 本文欢迎转载,请注明文章原始出处:http://www.cnblogs.com/DjlNet/p/7603632.html 前言 在上篇文章当中我们知道关于Quartz.NET的一些情况,其实博 ...

  8. Nodejs.热部署方法

    在开发中我们修改了一点代码后要去重启服务器才能看到结果,为了省去这个过程我们以往经常使用热部署代码的方法 下面是使用"supervisor"来达到热部署能力的方法: sudo np ...

  9. Android Studio常见问题解决

    1.Error:Execution failed for task ':XXXX:processDebugManifest'. > Manifest merger failed with mul ...

  10. 一个有意思的Python小程序(全国省会名称随机出题)

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 最近比较迷Python,仿照<Python编程快速上手>8.5写了一个随机出卷的小 ...