lettuce webdriver 自动化测试---玩转BDD

 🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享耗时200+小时精选的「软件测试」资料包

🔥 教程推荐:火遍全网的《软件测试》教程  

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

环境配置:

------------------------------------------

前提:有python载发环境,并且安装了pip ,强烈建议在linux下操作。

第一步,安装lettuce 

root@machine:~$ [sudo] pip install lettuce

第二步,安装lettuce_webdriver

lettuce_webdriver · PyPI

root@machine:~$ [sudo] pip install lettuce_webdriver

第三步,安装nose

nose继承自unittest,属于第三方的python单元测试框架,且更容易使用,lettuce_webdriver包的运行依赖于nose模块

nose · PyPI

root@machine:~$ [sudo] pip install nose

---------------------------------

下面以为百度搜索为例,好吧!谁让这个例子能简单明了的讲解问题呢。所以,我们再次以百度搜索为例。

一般的百度搜索自动化脚本是这样的:

复制代码

# coding = utf-8
from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw1").send_keys("selenium")
browser.find_element_by_id("su1").click()
browser.quit()

复制代码

下面看看BDD是怎么玩的:

创建目录结构如下:

.../test/features/baidu.feature

          /step_definitions/setps.py

          /support/terrain.py

先来回顾一下我们去写百度搜索脚本的过程:

复制代码

功能:访问百度
   
   场景:搜索selenium
     我去访问百度的“http://www.badiu.com”
     通过id 为“kw1”找到输入框并输入“selenium”关键字
     点击 id为“su1” 按钮
     然后,我在搜索结果上找到了“seleniumhq.com”的网址
     最后,我关闭了浏览器

复制代码

OK,确定了我们要做事情的过程,下面将其转换成BDD 的描述文件。

baidu.feature

复制代码

Feature: Go to baidu  
  
Scenario: search selenium  
  Given I go to "http://www.baidu.com/"  
     When I fill in field with id "kw1" with "selenium"
     And  I click id "su1" with baidu once  
     Then I should see "seleniumhq.org" within 2 second
     Then I close browser

复制代码

setps.py

复制代码

from lettuce import *  
from lettuce_webdriver.util import assert_false  
from lettuce_webdriver.util import AssertContextManager  
  
def input_frame(browser, attribute):
    xpath = "//input[@id='%s']" % attribute  
    elems = browser.find_elements_by_xpath(xpath)  
    return elems[0] if elems else False  

def click_button(browser,attribute):
    xpath = "//input[@id='%s']" % attribute
    elems = browser.find_elements_by_xpath(xpath)
    return elems[0] if elems else False

#定位输入框输入关键字
@step('I fill in field with id "(.*?)" with "(.*?)"')
def baidu_text(step,field_name,value):
    with AssertContextManager(step):  
        text_field = input_frame(world.browser, field_name)  
        text_field.clear()  
        text_field.send_keys(value)

#点击“百度一下”按钮
@step('I click id "(.*?)" with baidu once')
def baidu_click(step,field_name):
    with AssertContextManager(step):
        click_field = click_button(world.browser,field_name)
        click_field.click()

#关闭浏览器
@step('I close browser')
def close_browser(step):
    world.browser.quit()  

复制代码

注意:@step (‘xxx’)读取了baidu.feature 里有关键字,用正则表达式匹配的。 这是BDD的核心点。理解了这一点,就知道BDD是怎么玩的了。

terrain.py

复制代码

from lettuce import before, world  
from selenium import webdriver  
import lettuce_webdriver.webdriver  
 
@before.all  
def setup_browser():  
    world.browser = webdriver.Friefox() 

复制代码

terrain文件配置浏览器驱动,可以作用于所有测试用例。

在.../test/目录下输入lettuce命令,运行结果如下图

对于当前测试用例来说,添加新的测试场景也非常简单,我们只用修改baidu.feature即可:

复制代码

Feature: Go to baidu  
  
Scenario: search selenium  
  Given I go to "http://www.baidu.com/"  
     When I fill in field with id "kw1" with "selenium"
     And  I click id "su1" with baidu once  
     Then I should see "seleniumhq.org" within 2 second

Scenario: search lettuce_webdriver
  Given I go to "http://www.baidu.com/"  
     When I fill in field with id "kw1" with "lettuce_webdriver"
     And  I click id "su1" with baidu once  
     Then I should see "pypi.python.org" within 2 second
     Then I close browser

复制代码

运行结果如下:

通过lettuce 来编写自动化脚本将是一件非常有趣的事儿。

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/419990.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

指针进阶(一)

文章目录 1:字符指针变量2:指针数组3:数组指针3.1数组指针的定义3.2:&数组名vs数组名 4:数组参数,指针参数4.1:一维数组传参的本质4.1.1:场景一4.1.2:场景二4.1.3:场景三4.1.4:场景四4.1.5:场景五 4.2:二维数组传参的本质4.2.1:场景一4.2.2:场景二4.2.3:场景三4.2.4:场景四…

光影魔术师:Photoshop 2022——你的创意无限可能

在数字艺术的广阔天地中,有一款软件如同魔法师般,以其强大的功能和无尽的可能性,引领着无数创意者探索未知的视觉世界。它,就是Adobe Photoshop 2022。 无论是Mac还是Windows系统,Photoshop 2022都以其卓越的兼容性&a…

mysql数据库操作小寄巧

目录 json字段查询时间相关只有日期只有时间又有时间又有日期时间比较时间运算 某字段同的取最新数据(软性的新数据覆盖旧数据查找)sql_modeonly_full_group_by的解决办法优化思路 json字段查询 查询某个json字段(xx)的某个属性下…

从http到websocket

阅读本文之前,你最好已经做过一些websocket的简单应用 从http到websocket HTTP101HTTP 轮询、长轮询和流化其他技术1. 服务器发送事件2. SPDY3. web实时通信 互联网简史web和httpWebsocket协议1. 简介2. 初始握手3. 计算响应健值4. 消息格式5. WebSocket关闭握手 实…

Python复合型数据避坑指南

目录 前言 列表(Lists) 1. 修改可变对象 2. 浅拷贝和深拷贝 元组(Tuples) 集合(Sets) 字典(Dictionaries) 1. 键值唯一性 2. 键的类型 实际应用场景 1. 数据分析与清洗 2. 网络…

SDR架构 (一)为什么基带有I和Q路?

我之前做过自己的RTL-SDR。一直有一个疑惑。为啥rtl2832u芯片有一对差分I路,还有一对差分Q路。差分很好理解是为了抗干扰,但为啥要I和Q呢?并且我也知道不少人在自己修改的时候,保留I路对接在r820t2(跟原版一样&#xf…

CentOS8 同步时间chrony ntpdate已无法使用

CentOS8系统中,原有的时间同步服务 ntp/ntpdate服务已经无法使用,使用yum安装,提示已不存在。 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) [rootlocalhost ~]# yum install ntp 上次元数据过期检查…

深入理解Linux线程(LWP):概念、结构与实现机制(2)

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:会いたい—Naomile 1:12━━━━━━️💟──────── 4:59 🔄 ◀️ ⏸ ▶️ ☰ &a…

2024年经典【自动化面试题】附答案

一、请描述一下自动化测试流程? 自动化测试流程一般可以分为以下七步: 编写自动化测试计划; 设计自动化测试用例; 编写自动化测试框架和脚本; 调试并维护脚本; 无人值守测试; 后期脚本维…

LeetCode 2581.统计可能的树根数目:换根DP(树形DP)

【LetMeFly】2581.统计可能的树根数目:换根DP(树形DP) 力扣题目链接:https://leetcode.cn/problems/count-number-of-possible-root-nodes/ Alice 有一棵 n 个节点的树,节点编号为 0 到 n - 1 。树用一个长度为 n - 1 的二维整数数组 edges…

基于springboot实现图书馆管理系统项目【项目源码+论文说明】

基于springboot实现图书馆管理系统演示 摘要 电脑的出现是一个时代的进步,不仅仅帮助人们解决了一些数学上的难题,如今电脑的出现,更加方便了人们在工作和生活中对于一些事物的处理。应用的越来越广泛,通过互联网我们可以更方便地…

C++用临时对象构造新对象

C用临时对象构造新对象 //用临时对象构造同类型的新对象&#xff0c;该临时对象不产生&#xff1b; // 直接用生成临时对象的方法构造新对象&#xff0c;这是编译器对代码的优化&#xff0c;效率更高 #include<iostream> using namespace std; class MyClass { public:…

2024最新性能测试面试题(带答案)

一、性能测试开展过程&#xff1a; 答&#xff1a;第一步&#xff1a;找产品沟通哪些接口需要压测&#xff0c;需要达到什么样的预期值(TPS和响应时间) 第二步&#xff1a;编写测试计划&#xff0c;人员、时间周期、工具 第三步&#xff1a;环境搭建 第四步&#xff1a;造数…

若依前后端分离版本-自动生成代码

听说若依挺好用的&#xff0c;所以来学习一下。 1.下载项目&#xff0c;配置redis,配置mysql,安装npm&#xff08;版本一定要低于16&#xff09; 2.执行sql脚本数据库相关信息 3.启动后端ruoyi-admin的ruoyiApplication 4启动前端 选择terminal 进入ruoyi-ui&#xff0c;执…

数据结构从入门到精通——算法的时间复杂度和空间复杂度

算法的时间复杂度和空间复杂度 前言一、算法效率1.1 如何衡量一个算法的好坏1.2 算法的复杂度 二、时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3常见时间复杂度计算举例2.4等差数列计算公式2.5等比数列计算方法 三、空间复杂度四、 常见复杂度对比五、 复杂度的oj练习…

今日arXiv最热大模型论文:点击即可播放!港中文发布大模型写歌神器!

一首歌&#xff0c;包含作词作曲两个部分。擅长作词or作曲就已经很牛了。比如方文山是周杰伦的御用作词人&#xff0c;而周杰伦写过很多耳熟能详的曲子。而兼具作词作曲才华的全能创作人却是难得一见。 最近港中文发布了一款歌曲创作大模型SongComposer&#xff0c;作词作曲都…

R语言安装和简单入门HelloWorld用法

R语言安装和简单入门HelloWorld用法 #R语言安装地址 https://www.r-project.org/ click->CRAN mirror->选择China下列表&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 选择Download R for Windows 选择base Download R-4.3.2 for Windows 下载文件R-4.3.2-…

SQL-Labs靶场“26-28”关通关教程

君衍. 一、二十六关 基于GET过滤空格以及注释报错注入1、源码分析2、绕过思路3、updatexml报错注入 二、二十六a关 基于GET过滤空格注释字符型注入1、源码分析2、绕过思路3、时间盲注 三、二十七关 基于union及select的过滤单引号注入1、源码分析2、绕过思路3、联合查询注入4、…

springcloud alibaba组件简介

一、Nacos 服务注册中心/统一配置中心 1、介绍 Nacos是一个配置中心&#xff0c;也是一个服务注册与发现中心。 1.1、配置中心的好处&#xff1a; &#xff08;1&#xff09;配置数据脱敏 &#xff08;2&#xff09;防止出错&#xff0c;方便管理 &#xff08;3&#xff…

精品ssm的社区团购系统购物商城小程序

《[含文档PPT源码等]精品基于ssm的社区团购系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; Java——涉及技术&#xff1a; 前端使用技术&#xff1a;HTML5,CSS3、Jav…