近期学习了自动化框架,基于Python自带的unittest模块。因为该框架是基于python自带的unittest,所以很多方法需要自己去定义,在过程中也遇到了许许多多的问题。该骗博客主要记录框架的主要结构和学习过程中所遇到的问题。
1.框架结构
框架目录分为9层。下面来介绍一下每一层的作用:
- config:配置文件层。主要存放 ini 类型的配置文件。配置文件主要用于配置:①浏览器对象;②初始访问地址。当然也可以在这里配置更多的属性。
- framework:初始化层。用于读取配置文件,打开浏览器对象,访问初始地址。一些初始化的操作通常放在该层下。
- log:日志文件层。存放生成的.log日志文件。
- logs:日志层。用于存放编写日志类的层。
- pageobjects:页面层。又称页面类,该层用于存放页面类元素。通常存放页面元素 id 之类的属性。然后通过重构的方法进行调用。
- screenshots:图片层。用于存放生成的图片。
- test_report:测试报告层。用于存放生成的HTML测试报告。
- testsuits:实现层。用于实现测试用例。
- unit:通用类。
2.实现方式
在上面讲了该框架的目录结构。下面细说一下目录的 pageobjects 和 testsuits 两个类
在看页面实现类之前,我们先看一下 unit 当中的 BasePage 类。因为该类主要对 Selenium 中的某些方法进行了二次封装,是一个很重要的类。后续如果需要进行对 Selenium 的方法的二次封装,大多数也在该类下进行的。【命名可随意】
如上图所示,BasePage 将 Selenium 中的一些方法进行了二次方法,然后在进行使用。然后用于页面类进行继承调用。 这里就展示部分 BasePage 类的代码
上面说到页面类是继承 BasePage 的类,且页面类用于存放页面元素的值。那么该类就显得很清晰了,就是调用父类的方法,然后将元素的 id 传入到父类当中,进行执行。下面举一个例子:
可以看到,页面类中复写了 BasePage 中的文本输入方法,然后再次调用,将定义好的元素进行传入。这个就是通常的页面类的作用。用于作为中转层,提供数据和实现方法。但是方法的执行流程还是放在 BasePage 类当中。
讲完了页面类 ,来说说实现类。
实现类。使用 unittest 来执行测试用例。每个 def test_** 相当于一个测试用例的一点。该实现类下主要做的就是将封装好的页面类进行使用,然后返回查看结果。通常会配合 unittest 中的 TestSuite 进行批量测试,然后根据结果生成测试报告,并且发送邮件。
3.遇到问题
在编写的过程中当然也遇到了许多不同层次的问题,下面在这里记录一下。
上述该问题需要特别注意:
如当上述代码情况下,调用日志文件输入内容时。因为定义在 BasePage 类当中,是一个通用的方法。当时在某个时候进行了页面切换操作,定位到的元素不在具备 text 属性的时候,就会发生错误。
2. try except 执行问题。
当 try 中代码执行完毕时,如果还继续执行到了 except 当中,但是不执行其下的代码,那么证明 try 中的代码还存在问题。
3.pageobjects 页面类中。变量值重复定义问题。这个问题只需要注意一下就好,通常是自己粗心引起的。
上述就是本次学习的大致了。本次学习 Python+Selenium+unittest 框架的感想颇深,学习的博客地址稍后贴出。原博主也对该小型测试框架后续的集成做出了一定的说法,类似于该框架的后续研究需要慢慢进行探索。
代码下载地址:链接: https://pan.baidu.com/s/1Ri3zAbUddBZKcm86N96qHg 密码: i4vt
原学习博客地址:https://my.csdn.net/u011541946,建议大家有空去看该博主文章,写的非常细致到位。