基于pytest+selenium+Allure的UI自动化测试框架搭建
概述下背景,在这之前,UI自动化的测试框架是基于python自带的单元测试框架unittest去编写的。unittest作为python的单元测试框架,提供了一系列的测试用例编写、用例集的打包、用例执行规则等方法,因此也通过其通用性和便捷性扩展了许多测试用例。
但任何事物有利有弊,用例规模化大了之后,参与写自动化测试用例的人多了之后,unittest渐渐的需要越来越多的扩展包或要添加越来越多的其他脚本才能支撑起后面的业务需求。如测试失败重试功能需要自己重写一个装饰器、数据驱动功能需要调用到ddt包等,而且测试报告的扩展也相对较为局限。因此基于最简最优原则,避免重复造更多的轮子,引用pytest就变得有些迫不及待了。
pytest与unittest的差异
首先,pytest兼容unittest,然后在这基础上,拓展了许许多多新的功能。比如说在setup和teardown中又细分了模块化、函数化等方法。
之前已经总结过pytest的使用流程了,不熟悉的可以往前翻。
自动化测试框架搭建:
接下来就描述下基于pytest下的自动化测试框架内容,以及和以往的相对不同的点。
测试目录结构如下:
1.优化PO设计模式
和之前的一样,设计模式采用PO设计模式,即三层到四层的逻辑结构。
如下所示:

不明白的请看我之前的文章,链接如下:
关于python+selenium中的page object设计模式
与以往不同的是,PO模式由于结构较为复杂,故对这四层结构做了简化,直接调用了pageobject和poium模块,进行优化基础方法层与页面对象层。通过这两个模块,直接免去了基础方法层的设计编写以及页面对象层的方法封装。
如下所示:

上述示例为登录页面层的元素封装,只需要简单的几行就解决了元素的存储,已经不再需要继续写重复的方法去一个个封装了。
2.fixture的使用
pytest与unittest最大的一个区别在于它多了fixture,测试夹具。
fixture提供了很多很多便捷的方法与配置,可以大大提高了写测试用例的灵活度,比方说测试的配置可以这么写:

还可以写成conftest做成全局的公共调用方法等等。
关于fixture的使用请看往期文章的介绍,链接如下:
Pytest知识整合小记(四、fixture测试夹具)
Pytest知识整合小记(五、内置fixture)
3.用例执行器
pytest用例的执行相比unittest简单了许多,只需要简短几行便可以根据其运行规则进行用例筛选运行。而且还自己集成了个基本的测试报告,像下面这个:

用例执行这块不了解的请看下面这篇文章:
Pytest知识整合小记(一、pytest的运行)
4.Allure测试报告
像3中讲述的测试报告较为简单,实际工作中,我们还需要定期统计用例执行效率、用例的覆盖程度、用例的通过率、用例与禅道的关联等等,故上述的用例已经无法满足我们当前的需求,需要在这基础上进行深入的分析。
好处是,这一块已经不再需要我们自己重复造轮子了,已经有可以用的Allure模块供我们调用。调用效果如下所示:

对于这块有疑问的请点击以下:
Pytest知识整合小记(六、Allure结合禅道生成测试报告)
5.其他
像其他的日志模块、测试缺陷截图模块、消息读取模块、验证码破解模块等等都基于之前做了些许优化,但整体变动不大,至此就不再赘述。

浙公网安备 33010602011771号