[E2E Test] Python Behave Selenium 一文学会自动化测试

前言

本文将使用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的使用非常简单,我这里介绍下要点:

  1. 首先你需要熟悉feature语言: Gherkinstep实现 ,不懂看这里blog.py - Repos (azure.com)

  2. 结合上面链接里的代码,可以看到Behave中的context 表示一个贯穿整个测试过程的对象,你可以将步骤中得到的对象或者变量,放入context中,并传递给后面的step。

  3. Behave提供了一些Hook函数 ,如before_feature,after_scenario() 等,我们可以通过重写这些Hook方法,在scenario或者feature执行前后,做一些准备或者收尾的工作。Hook函数的使用请看这里:environment.py - Repos (azure.com)

更多Hook函数看这里:Context Attributes --- behave documentation

  1. 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的介绍暂时就到这里。

相关推荐
oneouto3 分钟前
selenium学习笔记(一)
笔记·学习·selenium
oneouto2 小时前
selenium学习笔记(二)
笔记·学习·selenium
互联网杂货铺6 小时前
Postman接口测试:全局变量/接口关联/加密/解密
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman
不止会JS6 小时前
软考:系统架构设计师教材笔记(持续更新中)
系统架构·软件工程·软考
测试杂货铺19 小时前
如何用postman做接口自动化测试及完美的可视化报告?
自动化测试·软件测试·测试工具·职场和发展·jenkins·压力测试·postman
Theodore_102221 小时前
4 软件工程——总体设计
java·开发语言·数据库·算法·java-ee·软件工程·设计
Theodore_102221 小时前
1 软件工程——概述
java·开发语言·算法·设计模式·java-ee·软件工程·个人开发
测试老哥1 天前
Jmeter测试脚本编写技巧
自动化测试·软件测试·功能测试·测试工具·jmeter·职场和发展·性能测试
shinelord明1 天前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
小白学大数据2 天前
如何使用Selenium处理JavaScript动态加载的内容?
大数据·javascript·爬虫·selenium·测试工具