测试自动化面试问题及答案,自动化测试面试题及答案大全(3)

  测试自动化面试问题及答案,自动化测试面试题及答案大全(3)

  本文来自[

码同学软件测试

]

  同学微信官方账号:自动化软件测试。

  同学勾号:

小码哥聊软件测试

  自动化测试在软件项目团队中扮演着重要的角色。众所周知,合理的自动化测试可以有效降低错误修复的成本,全面推进软件质量保证(QA)进程。

  以web自动化为例。在Selenium框架的支持下,自动化测试工程师编写web自动化测试脚本似乎是一项相对简单的任务。但在项目进展过程中,尤其是在迭代频繁的敏捷项目开发模式下,测试人员无意中实现的低质量自动化测试脚本,会导致后期lqdxbw的代码维护成本。很长一段时间,在你的团队里和自动化测试是一样的。

  请回想一下那些年一直困扰UI自动化的桥段。如果在敏捷项目中“快速而迅速”地重复提供,你的自动化测试脚本很可能是团队成本最高的lqdxbw任务之一。

  请考虑,更改依赖于50个测试脚本的某个网页元素(可能是一个元素)将导致至少50个自动化测试脚本的更新。在更新脚本的同时,必然会出现其他的连锁问题。我想知道用蝴蝶效应来比喻这种糟糕的情况是否合适。这个项目不仅耗时,而且是团队中早期测试自动化推广和实践的主要障碍。

  都说好的开始是成功的一半。自动化测试也是如此。在脚本实现之前,为了避免UI元素不可避免的变化,除了对不经常变化的回归测试进行自动化之外,如何降低脚本开销带来的lqdxbw开销?如何改变一个元素的朝向,避免“一夜之间动遍全身”?是否可以限制变更,只移动一个位置,并允许所有相关的测试脚本使用它?答案是肯定的。我相信你可以很容易地得到PO模型,这将有助于我们实现它。

  本文介绍了如何在Selenium中使用页面对象模型(PO —— Page Object)实现可维护、可重用的自动化测试脚本,让你秒懂PO在UI自动化中的价值。

  1 selenium伪Github自动化登录流程这里先以github(http://6TT.co/RV8v)为例,结合selenium自动化实现伪登录。

  完整的登录过程代码如下:

  为了涵盖更多的web驱动程序定位,它显示在用户名文本框、密码框、登录按钮以及ID、NAME、CSS_SELECTOR和XPATH中登录后的页面中。

  如果这四个页面元素中至少有一个发生变化,就必须更新脚本。此外,如果定位更改的这些元素也存在于其他自动化脚本文件中,则必须按顺序更新每个相关的脚本文件。在整个项目中更新脚本需要相当大的开销。

  Selenium UnitTest实现Github自动化登录测试脚本了吗?还是上面的脚本和登录场景?由于是自动化测试,所以自动化测试用例的脚本是结合python附带的unittest框架编写的。完整的代码如下。

  收到最新版免费

码同学软件测试

讲义,大量学习资料,完整视频后,可转发私信“

码同学666

”获取信息。

  从脚本中可以看出,登录业务被单独封装在unittest中的test_login(方法)中。即在单个测试用例中,在assertEqual中断言,以确定登录后是否出现预期的信息。

  类似地,如果一个控件的位置改变了,所有使用该控件的测试用例的脚本文件都必须更新。粘合度越高,导线的维护成本越高,时间和劳动指数也越高。

  为了重建自动测试脚本的层次结构,迫切需要一个合理的解决方案—— PO模型。

  3 PO页面对象模型为什么需要页面对象模型(PO)

  脚本维护的主要问题是,如果100个不同的脚本使用同一个页面元素,那么仅仅通过对该元素进行任何更改来修改所有的脚本既耗时又容易出错。

  维护脚本的最好方法之一是为自动测试所需的每个web页面创建一个单独的类文件,以搜索、输入或验证该页面中的web元素。通过调用此类,可以使用使用网页元素的脚本。如果这个网页元素改变了,只需要改变对应的类文件,而不是用100个不同的脚本一个一个更新。这种方法是页面对象模型(POM ),有助于提高代码的可读性、可维护性和可重用性。

  采购订单的实施

  对象模型(PO)的基本结构:一个页面上的所有Web元素和与这些Web元素一起使用的方法必须放在一个页面类文件中,用于验证的测试用例必须分别是测试方法的一部分。

  以github的登录过程为例,结合页面对象模型(PO)实现自动化测试。首先,您必须将登录页面封装为一个类,提取要在页面上使用的每个元素(类的成员属性),并将所需元素上的操作封装为独立的方法(类的成员方法)。

  登录页面类必须使用页面url、用户名输入框、密码框、登录按钮和登录后“启动项目A”按钮,所以这个类有五个成员。

  这个类需要一个初始化方法。其他操作包括:打开页面,输入用户名,密码,点击登录按钮,登录后提取“开始一个项目”按钮的文字。因此,登录页面类的成员方法是:

  同时,为了将测试脚本从页面元素对象中分离出来,我们还为每个页面单独存储了测试用例脚本,BaseTest脚本文件只执行一般操作:

  对于每个功能业务流测试,分别编写测试脚本:

  版本的完整分层代码实现如下:

  [Selenium unittest在PO模式下实现Github自动登录测试脚本]

  获取免费

码同学软件测试

课程笔记,大量学习资料,完整视频,最新面试问题,可转发私信“

码同学666

”获取资料。

  因此,无论登录页面元素发生什么变化,我们只需要修改登录页面类,其他脚本不受影响。页面对象模型大大降低了自动化脚本的维护成本和脚本更新导致的错误概率。

  4框架的优化借助PO模式,测试页面中的任何元素位置变化都可以轻松解决脚本自动更新的问题。这是不是意味着你玩完了?有什么可以优化的吗?答案是肯定的,PO模式使得我们只需要在Page类的单个文件中更新改变后的元素定位。有没有可能保持任何自动化脚本文件不变,甚至是页面类本身?

  很简单。您只需要将这些位置作为数据存储在配置文件中(配置文件的类型可以是csv、excel、txt)。通常,csv文件是常见的。

  让我们将位于登录页面的元素分别放在下面的csv文件中。login_page.csv文件的第一行是标题,用来描述每个字段。以下每一行代表一组数据,不同字段的数据间隔用逗号分隔(当然也允许空格,但默认csv文件的逗号间隔):

  在第二个行为示例中,“url”表示这一行是url相关的数据,“http://6tt.co/rV8V”是url的值。

  第三行中的“username_id”表示用于存储username的位置,该位置由ID“log in _

  字段”是username的id位置值(参见我们在登录页面中编写的代码),下面几行的含义相同。这样我们就可以从python脚本文件中分离出定位后的元素/定位/对应值。

  对于上面的“log in _ page . py”PO类文件,修改如下。通过读取csv配置文件的内容,分配登录页面中的成员属性,这些属性值不必硬编码在python文件中。这样,即使任何元素的定位发生变化,我们只需要改变csv配置文件:

  更改后的login_page.py完整版源代码如下:

  将配置数据单独放在一个文件中,很容易提醒我们,测试数据也可以从测试用例方法中分离出来,即如果我们有多组账户要测试,也可以用同样的方法将数据从测试脚本中分离出来,也就是我们常说的DDT黑盒测试。这部分优化你可以稍后自己尝试,实现方法和上面的配置文件读取方法一样,这里就不展开了。

  PO 5的优势页面对象模型,主张单个页面元素的操作、元素组成的业务流程以及操作后的验证应该是相互独立的。这可以让我们的代码更清晰,更容易理解;页面对象独立于测试用例,这样我们就可以根据项目需求使用不同的测试框架作用于同一个页面对象。比如我们可以将PO与Unittest/Pytest/TestNG/Junit集成进行WEB功能测试,或者与JBehave/Cucumber集成进行验收测试;因为PO类中的方法是可重复的,所以代码冗余度大大降低,代码变得越来越少,越来越优化。通过使PO类中定义的方法名更有意义,我们可以很容易地将UI中发生的操作与方法名进行映射。比如我们点击按钮后到达用户信息端,方法可以命名为‘gotouserinfo()’;100%完美的设计模型是不存在的,PO模型也会有自己的局限性。然而,针对web自动化,这是一个很好的解决问题的方法。最后,我们用思维导图总结一下这次分享的核心技术点:

  我跟你分享一个福利!扫码回复【csdn码哥群】进入软件测试自学交流群,可以免费听技术讲座,免费获取学习资料视频课,免费观看。

  作者:代码学生软件测试

  本文版权归作者所有。转载请联系作者获得授权并注明出处。

测试自动化面试问题及答案,自动化测试面试题及答案大全(3)