前言
本文将使用Python Behave与Selenium,和同学们一起认识自动化测试,并附上完整的实践教程。
项目源码已上传:CSDN 郭麻花 Azure Repo python-behave-selenium
核心概念
1. 什么是E2E Test
E2E即End-to-end,意思是从头到尾的系统功能测试。它通过编写自动化测试脚本,完全从用户的角度出发,验证系统功能的正确性。
如下图所示,E2E Test相较于Unit Test等等,实现起来需要更多的时间和成本。
2. Python Behave
Behave是一个强大且开源的Python BDD测试框架,完全支持Gherkin(Feature测试语言)。与我前面介绍过的.NET Specflow测试框架相似,旨在通过自然语言编写测试用例并实现自动化测试。
3. Selenium
Webdriver是一种与实现无关的浏览器协议,每个浏览器都将提供自己的驱动程序,作为WebDriver协议的实现。而外部则可以通过驱动程序提供的接口,来实现自动化操作浏览器。
Selenium 框架通过整合Webdriver实现, 允许用户可以无差别的使用不同的浏览器后端, 实现跨浏览器和跨平台自动化。并且Selenium框架支持Java,Python,C#等多种语言实现。
E2E Test 实践指南
1. 你是否需要E2E Test
自动化测试需要整个团队投入大量的精力。开发人员熟悉每个页面实现,他们需要协助测试人员抓取页面元素,实现某些步骤等;而测试人员则需要与产品等需求方共同编写大量的,基于用户视角的测试用例,并与开发人员一同实现自动化测试步骤。
并且,E2E Test需要干净的测试环境,至少不能影响每次测试用例的执行。这要求我们的软件系统必须具备快速部署,复制的能力。
基于云原生架构的系统是最好的:[GitOps]微服务版本控制:使用ArgoCD 部署Grafana Loki_郭麻花的博客
2. 什么时候需要自动化测试
在产品趋于完善的时候,可以开始E2E Test。在项目早期阶段,推荐使用Unit Test,Integration Test,System Test等来保证软件质量。
E2E Test并不是万能的,也不是要求所有的步骤都必须按照用户角度自动化完成:不鼓励的行为 | Selenium
Python Behave与Selenium
好了,介绍完E2E Test的概念与场景之后,我们来看一下E2E Test的实现过程。环境准备:Python,pip命令;安装behave与selenium。
Behave
BDD测试的概念我这里不再赘述,了解过.NET Specflow BDD Framework - CSDN 郭麻花的博客的朋友会很容易学习Behave框架。
Behave的使用非常简单,我这里介绍下要点:
-
首先你需要熟悉feature语言: Gherkin 和step实现 ,不懂看这里blog.py - Repos (azure.com)
-
结合上面链接里的代码,可以看到Behave中的context 表示一个贯穿整个测试过程的对象,你可以将步骤中得到的对象或者变量,放入context中,并传递给后面的step。
-
Behave提供了一些Hook函数 ,如before_feature,after_scenario() 等,我们可以通过重写这些Hook方法,在scenario或者feature执行前后,做一些准备或者收尾的工作。Hook函数的使用请看这里:environment.py - Repos (azure.com)
更多Hook函数看这里:Context Attributes --- behave documentation
- Tag以及Tag的使用看这里:Tag in feature & Tag in running
Selenium
Selenium的使用也是非常简单。同样的,我概括下要点:
- Selenium支持Edge,chrome,firefox,ie,Safari 等多种浏览器。
- Selenium支持XPATH, CSS Selector,Id等多种方式查找元素。selectors-example
- Selenium提供点击,输入,清除,提交和选择,5种基础操作控制页面元素。
- Selenium可以等待元素达到期望状态。
最重要的是代码设计。例如,我们需要等待页面某个按钮enable,或者等待某段文字刷新出来,这里一定不要使用sleep的方式来等待,而要用Wait element state in selenium
的方式来实现优雅等待,一旦元素达到期望状态,程序会立刻往下执行。
执行Behave测试
可以通过VS Code进行调试behave 测试用例,像我这样:launch.json - Repos (azure.com)
或者直接使用behave命令来运行: behave test\features\blog_test01.feature
我这里为大家实现了一个简单的feature:通过百度查找"CSDN 郭麻花",并判断他置顶的博客数量是否为"3"。
欢迎大家下载调试:python-behave-selenium - Repos (azure.com)
@fixture.edge
Feature: Blog test 01
Scenario: I have three pinned blogs
Given I open "www.baidu.com"
When I search "CSDN 郭麻花"
Then I click the first of results
When I select the "文章" selection
Then I can see "3" blogs have been pinned
总结
好的,关于E2E Test以及Python Behave与Selenium的介绍暂时就到这里。