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

测试中最常见的操作就是增删改查,所以对于自动化最简单的就是数据模块的增删改查人手进行操作。

这里先看一下web测试中的新增用例的测试点,如图所示



对于一个新增操作,我们这里以账号新增为例进行操作展示,账号新增页面元素显示如图所示



先说明一下,各个元素的定位方法:

输入用户名
[Arguments] ${username}
Wait Until Element Is Visible id=username
clear element text id=username
input text id=username ${username} #账号管理中的用户名和密码共用 输入密码
[Arguments] ${password}
Wait Until Element Is Visible id=password
input text id=password ${password} #账号管理中的用户名和密码共用 再次输入密码
input text id = ppassword ${ppassword} 手机号码
[Arguments] ${phone}
clear element text id = phone
sleep 5
input text id = phone ${phone} #用户信息共用此定位,账号信息中也共用 邮箱
[Arguments] ${email}
clear element text id=email
input text id=email ${email} 选择用户组
click element xpath = .//*[@id='unTbl']/tbody/tr[1]/td[1]/i 用户所属机构
[Arguments] ${organization_id}
Comment select from list id = organization_id 机构养老一 #账号中的所属机构共用此定位
#随机选择所属机构
${count} get matching xpath count .//*[@id='organization_id']/option
${sale_pattern_temp} evaluate random.randint(0,${count}-1) random
${sale_pattern} Convert To String ${sale_pattern_temp}
select from list by index organization_id ${sale_pattern} 数据权限
#账号新增中的全选按钮
click element xpath = .//*[@id='orgs']/li/input 账号保存
click button xpath = html/body/div[1]/div/div[2]/form/div[10]/div/button[1]
Comment click button xpath = html/body/div[1]/div/div[2]/form/div[10]/div/button[1]
sleep 10 账号名称检查
${account} get text xpath=.//*[@id='tb_guardian']/tbody/tr[1]/td[2]
[Return] ${account}

而新增账号页面中元素的定位已经确定,接下来就是用例步骤:

用例目的:新建账号-成功

步骤:

  1. 使用管理账号登录系统
  2. 打开新建账号的页面,此处需要使用select window来切换tab到新建账号的页面
  3. 输入符合的用户名、密码、确认密码、手机号码、邮箱、选择用户组、用户所属机构和全部数据权限
  4. 点击保存

断言:

  1. 当前页面的url是否是query的页面
  2. 当前显示的首行账号名称是否和新增的账号名称一致

接下来就是使用RF进行用例的编写(≧▽≦)/

根据用例步骤一步步来编写用例,这里将登录和关闭浏览器2个操作封装之后,分别在setup和teardown中进行设置了,如图所示

账号添加用例代码展示如图

[Documentation]    用例目的:新建账号-成功
... 步骤:
... 1.打开新建账号的页面,此处需要使用select window来切换tab到新建账号的页面
... 2.输入符合的用户名、密码、确认密码、手机号码、邮箱、选择用户组、用户所属机构和全部数据权限
... 3.点击保存
... 断言
... 1.当前页面的url是否是query的页面
... 2.当前显示的首行账号名称是否和新增的账号名称一致
[Setup] login
打开页面 ${GuardianEdit}
Take Screenshot guardian
账号跳转
Take Screenshot guardian
${username}= gen chars 10
输入用户名 ${username}
输入密码 123456
再次输入密码 123456
${phone} Evaluate random.choice(['139','188','185','136','158','151'])+"".join(random.choice("0123456789") for i in range(8)) random
手机号码 ${phone}
邮箱 5645645645656@qq.com
选择用户组
用户所属机构 机构养老一
数据权限
Take Screenshot guardian
账号保存
sleep 10
#确认显示信息
角色确认
sleep 10
Take Screenshot guardian
Comment ${mes}= Confirm Action
Comment sleep 10
Comment Should Be Equal As Strings ${mes} 保存成功!
Comment 确认保存
Comment ${Auser} get text xpath=.//*[@id='tb_guardian']/tbody/tr[1]/td[2] #后期po
#断言当前页面的url
Location Should Be ${GuardianQuery}
${Auser} 账号名称检查
Should Match ${Auser} ${username}
log ${username}
log ${Auser}
[Teardown] close

代码截图如图所示

这样新增账号成功用例已经完成。而根据web测试点,其他用例设计如图所示

这里整个结构使用了RobotFramework的分层思想:

第一层即用例层,如上图所示

第二层是页面元素封装,如图所示

第三层是元素值的变量集合,如图所示

到此,账号新增模块的整个用例设计已经完成(o)/~

robotframework自动化系列:新增流程的更多相关文章

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

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

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

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

  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. 不同Activity之间传递线程

    场景:Android由Activiy A创建Activiy B时 ,A创建的线程B中依然需要调用,这时候需要在两个activity之间传递线程的信息. 解决: 方式一:线程自己维护自己的静态句柄(比较 ...

  2. HDU1423 LCIS

    1,先离散化,然后DP: 注意这个解法中,dp[i][j][k]代表a序列中前i个和b序列中前j个数结尾为k或小于k时的最大. 但是由于i是单增(一次1->n),而j反复变化(多次1->m ...

  3. 数据处理:12个使得效率倍增的pandas技巧

    数据处理:12个使得效率倍增的pandas技巧 1. 背景描述 Python正迅速成为数据科学家偏爱的语言,这合情合理.它拥有作为一种编程语言广阔的生态环境以及众多优秀的科学计算库.如果你刚开始学习P ...

  4. python contextlib 上下文管理器

    1.with操作符 在python中读写文件,可能需要这样的代码 try-finally读写文件 file_text = None try: file_text = open('./text', 'r ...

  5. 有人提了一个问题:一定要RESTful吗?

    写在前面的话 这个问题看起来就显得有些萌,或者说类似的问题都有些不靠谱,世上哪有那么多一定的事情,做开发都不一定做多久呢,所以说如果你有这个疑问的话是真真有点儿不着调,不过可能也就是随口一问吧,没有深 ...

  6. iOS将自己的框架更新到cocopods上

    第一步 把自己的框架更新到github 上,为了提交地址给他人下载.这里就不详细介绍如何把项目更新到github上了 第二步 这个时候我们的项目已经挂在github上了我们需要给本地的项目新建一个Po ...

  7. Scala-Spark digamma stackoverflow问题

    Scala-Spark digamma stackoverflow问题 这两天在用spark做点击率的贝叶斯平滑,参考雅虎的论文进行了一番尝试. 先上代码: # click_count, show_c ...

  8. Android View, Window,Activity概念区分(2)

    (1)View:最基本的UI组件,表示屏幕上的一个矩形区域. (2)Window: 表示一个窗口,不一定有屏幕那么大,可以很大也可以很小:它包含一个View tree和窗口的layout 参数.Vie ...

  9. 多个code.csdn.net账号切换

    code.csdn.net是国内开源库 使用git需要在项目添加密钥 而如果有多个账户,一个是私人,一个是公司,那么这时怎么做? 密钥存在~/.ssh默认是id_rsa 那么一个比较笨的办法是做一个k ...

  10. 【NOIP2016 Day1 T1】玩具谜题

    原题:https://www.luogu.org/problemnew/show/P1563 题目大意:有N个人围成一个圈,给定一串未化简的物品移动关系,要求你通过这些未化简的关系以及起始段的编号,求 ...