基于BDD模式的Web UI自动化测试体验,集成了python,behave,allure,非主流的一个路线,可以一起玩玩。

1. 概念解释

Python: 大家都懂,3以上版本

Behave:行为驱动开发(behavior driven development)是一种敏捷的软件开发技术,该框架可以实现UI自动化,也可以实现接口自动化,我们已经开发过接口自动化工具,这个主要用来做主要功能的UI检查。

Behave官方文档

Allure:Allure Framework是一种灵活的轻量级多语言测试报告工具,它不仅可以以简洁的Web报告形式非常简洁地显示已测试的内容,而且还允许参与开发过程的每个人从日常执行中提取最大程度的有用信息。

Allure官方文档

2. 安装命令

pip install behave(我用的是pip3)

pip install allure-behave

3. 工程目录

一个基本的behave至少需要构建以下目录,以下我会基于一个最简单的登录场景描述。

features/
features/login.feature
features/steps/
features/steps/login.py

工程目录下包含features,features文件夹里包含目标执行的.feature文件和step文件夹里存放对应的.py

mkdir 文件夹

touch 文件

A--login.feature文件如下:场景描述写在这里,这类文件可以由测试,产品或其他相关人员完成,使用的是自然语言,支持中文。

feature: 功能名称/scenario:场景名称/given:给出测试的前提条件/when:测试步骤/then:预期结果

Feature: UI测试Scenario Outline: 登录后台系统Given 打开后台登录页面并且通过后台验证When 输入<username>和<password>并点击登录Then 正确跳转进入系统后台Examples: userinfo|username       |password||admin          |111111|

知识点】这里对应given, when, then都有一个以step_命名的方法来对应实现,为什么以step开头命名,官方文档就是这样给的,未深究;传递的参数应使用{}来指明,同时参数名和元素名不要重名

B--steps文件下,是feature文件对应的要执行的python文件

#encoding: utf-8
from behave import *
from features.utils.seleniumapi import SeleniumApi
import time@given('打开后台登录页面并且通过后台验证')
def step_open(self):SeleniumApi.step_startup(self)@when('输入{username}和{password}并点击登录')
def step_login(self, username, password):time.sleep(1)SeleniumApi.step_send_keys(self, "//*[@placeholder='邮箱']", username)time.sleep(1)SeleniumApi.step_send_keys(self, "//*[@placeholder='密码']", password)SeleniumApi.step_click(self, "//*[@type='button']")time.sleep(3)@then('正确跳转进入系统后台')
def step_forward_top(self):if '用户名' in SeleniumApi.step_text_cssselector(self, "hidden-sm"):assert Trueelse:assert FalseSeleniumApi.step_quit(self)

C--utils文件下我单独建了一个seleniumapi.py 封装了一些常用的selenuim操作,如下图

from selenium.webdriver.common.alert import Alert
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keysclass SeleniumApi:def step_click(self, xpath):self.driver.find_element_by_xpath(xpath).click()def step_send_keys(self, xpath, xpath_value):self.driver.find_element_by_xpath(xpath).send_keys(xpath_value)def step_text_cssselector(self, cssselector):result = self.driver.find_element_by_css_selector(cssselector).textreturn resultdef step_text_xpath(self, xpath):result = self.driver.find_element_by_xpath(xpath).text

D--environment.py 可以定义一些测试执行前后的操作,如启动退出浏览器,类似于selenium测试里的setUp和tearDown,后面我的启动浏览器,登陆系统都放在了environment.py 注意函数命名

【知识点】我们系统后台每次需要输入账号和密码作为动态验证,尝试switchto.alert未果后,使用url直接这样访问http://username:password@url即可解决浏览器弹窗问题,其他弹窗结局比较简单,搜索即可查看

# encoding: utf-8
from selenium import webdriver
from features.utils.seleniumapi import SeleniumApi
from features.utils.exceptioncatch import ExceptionCatch
import time
import os
import shutildef before_feature(content, feature):content.driver = webdriver.Chrome()content.driver.get("https://tz:aa71fc62bfc06c02abe0ec27@backend.abc.com")content.driver.implicitly_wait(10)content.driver.maximize_window()time.sleep(1)SeleniumApi.step_send_keys(content, "//*[@placeholder='邮箱']", 'admin@abc.com')SeleniumApi.step_send_keys(content, "//*[@placeholder='密码']", 'admin')SeleniumApi.step_click(content, "//*[@type='button']")if '后台系统' == SeleniumApi.step_text_cssselector(content, ".navBarTitle"):assert Trueelse:ExceptionCatch.catch_exception(content)assert Falsedef after_feature(content, feature):content.driver.quit()

E--其他文件如report是后面生成报告的,需要建立,screenshot我后面用到了截图,非必要文件夹

多场景,多功能,可以继续添加多个scenario,多个feature文件,feature文件下的given when then 但不是必须条件,可以直接运行 .feature文件,也可以在cmd里工程目录下,我的例子就是behave文件夹下执行behave命令就可以看到执行结果。以上,一个简单的behave demo完成。

这是能看到输出的结果非常的不美观,也不容易让其他人浏览你的测试结果,于是我找了好久找到了allure可以帮助生成一个html测试报告。

4. 如何产生测试报告

基于mac

$ pip install allure-behave

$ behave -f allure_behave.formatter:AllureFormatter -o report ./features

$ allure serve report

两点解释:

1. 第二步是为了生成JSon报告,在用allure commandline就可以查看html报告

2. 执行时一般会报错allure command not found, 需要执行以下步骤

How To Fix -bash: allure: command not found, OS - Mac, PyTest, Python, Report By QA COACH

新窗口打开工程,重新执行allure serve report即可生成html report

基于windows,未实践,仅供参考:

1. pip install allure-behave

2. 在工程根目录下新建一个文件夹reports

3. 根目录下,cmd > behave -f allure_behave.formatter:AllureFormatter -o D:\path....\reports  features\first_selenium.feature" 在reports文件夹下会产生json报告

4. allure generate --clean -o "E:\path..\reports" "E:\path...\reports-JsonFiles"

第四步还是会遇到allure命令不识别的问题,https://docs.qameta.io/allure/ 在这里找到windows对应的压缩包,解压,将解压后的bin路径配置到环境变量里,再次执行就可以了。

~后续可能在优化下,目前在本地配合接口自动化测试去做一些常用功能的UI自动化足够,测试报告也很好看,还有报错提示~

Python+Behave+Allure Web UI自动化测试相关推荐

  1. 基于Selenium与Pytest框架的Web UI自动化测试系统的设计与实现

    摘要 随着互联网的高速发展,软件技术日新月异,产品更新换代的加快等,始终都离不开一个最核心的要素就是保证产品的质量,测试人员则在其中担任着不可或缺的角色.测试人员的主要工作职责就是通过各种测试手段去发 ...

  2. Web UI自动化测试系统设计

    Web UI自动化测试系统设计 1. 自动化测试简介 1.1 什么是好的自动化测试框架 在创建测试自动化框架时,我们应该考虑以下要点: 能够通过使用适当的抽象层快速创建自动化测试 应易于维护和扩展应该 ...

  3. Web UI 自动化测试框架 seldom

    基于 selenium 和 unittest 的 Web UI自动化测试框架. 特点 提供更加简单API编写自动化测试. 提供脚手架,快速生成自动化测试项目. 自动生成HTML测试报告生成. 自带断言 ...

  4. 种草Cypress和TestCafe,QA同学一定想了解的Web UI自动化测试工具

    摘要:Cypress和TestCafe这两个工具相比于Selenium都更加的轻量级,且在不同的方面有了改进,比如安装更简单,增加了内置等待机制,调试更加方便等. Cypress.TestCafe.P ...

  5. Web UI自动化测试实例(登录网易云音乐账户)——(五)Taiko

    初步想法:用Taiko自动化工具,实现登录太简单了吧! 一.对taiko的认识 初识taiko: 自动化测试工具-----Taiko taiko的安装:可能踩如下坑,那些年的坑之node.js 和 t ...

  6. WEB UI自动化测试框架搭建(一)_公用方法Utils

    本栏目内的所有项目使用的都是PyCharm 2020.1专业版,可以下载后自行在网上找教程破解. WEB UI自动化测试框架搭建(一)~(七)源代码:https://download.csdn.net ...

  7. 通过录屏自动测试web端查询功能_海豚 Web UI自动化测试工具

    http://div.io/topic/1339 海豚是什么? 没错,它是一个 Web UI自动化测试工具,专治Web UI的各种疑难杂症,目前只针对移动端Webapp量身定做. 说到 Web UI的 ...

  8. python写ui自动化测试用例_自动化测试(6) | Web UI 自动化测试方案

    Web项目的 UI 自动化测试方案 有用的链接: 项目讨论 项目中符合自动化测试的部分有哪些?(目标和范围 scope, 准入准出标准) 稳定的需求点.变动较少的页面 每日构建后的测试验证 daily ...

  9. 用 Pytest+Appium+Allure 做 UI 自动化测试的那些事儿

    本文首发于 TesterHome 社区, 文末有福利 !链接 https://testerhome.com/topics/19327 前言 做 UI 自动化测试有段时间了,在 TesterHome 社 ...

最新文章

  1. 查找二叉树中出现次数最多的数 Find Mode in Binary Search Tree
  2. JZOJ5922. 【NOIP2018模拟10.23】sequence
  3. 2020亚太杯数学建模_2020 年 APMCM 亚太地区大学生数学建模竞赛
  4. go异常处理:自定义异常代码示例
  5. java jpanel调用构造函数的时候就开始执行repaint_在Java Swing组件中劫持`repaint()`调用...
  6. 营销大数据分析 关键技术_营销分析的3个最关键技能
  7. Android之复选框对话框
  8. JS获取服务上下文,兼容上下文为空场景
  9. d3-force 力导图 源码解读与原理分析【一】
  10. 【poj2096】Collecting Bugs 期望dp
  11. php mysql 函数总结
  12. linux反编译java_linux系统上如何反编译.class文件
  13. 日报软件测试培训,深信苦尽甘来 在千锋软件测试培训中挥洒汗水收获成功
  14. win10系统服务器错误,怎么处理Win10系统下提示内部服务器错误的情况
  15. leetcode中数组问题常用的处理方式
  16. mysql中有几种模糊查询?
  17. (语法糖)ES6类class声明类的方式 -ES5类声明继承
  18. python简单代码演示效果-python制作演示动画
  19. C#如何在panl控件上添加Form窗体
  20. 安装npm报错rollbackFailedOptional: verb npm-session原因及解决方案

热门文章

  1. MySQL数据备份方案(兼容本地和远程)
  2. hbase数据备份或者容灾方案
  3. 首师大附中OJ系统 0034 打车费的计算
  4. 对van-notice-bar组件定义内容进行设置
  5. 高端婚礼的布置技巧 8个细节不能忽略
  6. AntDB入选《爱分析:2022数据智能厂商全景报告》
  7. WLAN无线局域网2.4Ghz频段和5GHz频段的区别和选择
  8. 杨校老师课堂之云计算私有云OpenStack框架快速搭建-详细搭建过程
  9. linux 下飞鸽(g2ipmsg)的安装
  10. table边框合并问题