这篇文章主要讲解以下几点:

  1. Lettuce_webdriver环境搭建

  2. lettuce_webdriver自动化实例讲解

一. lettuce_webdriver环境搭建

  搭建lettuce_webdriver,主要需要安装:

  1. lettuce

  2. lettuce_webdriver

  3. nose

  这三个包均可以pip安装

  因为pip下载地址默认为国外的pypi,下载过慢,很容易timeout,为了解决这一问题,可以pip命令后加上一个参数:--trusted-host pypi.douban.com

  例如: pip install lettuce --truted-host pypi.douban.com  这一下载地址会指定为国内豆瓣代理pypi,速度比国外快了不知多少倍

  也可以直接访问 http://pypi.douban.com/simple/***   ***替换为你想找的python插件,找到合适的版本下载即可

  

二. 自动化实例

  项目:baidu查找selenium

  1. 为了更加深刻的理解接下来学习的lettuce语法,先在这里说一下所需要实现的自动化流程

    如果是人工操作,步骤大概如下:

    a. 打开浏览器

    b. 输入网址www.baidu.com,进入baidu首页

    c. 在查询框中输入 selenium

    d. 点击查询按钮

    f.  等待页面响应

    g. 验证结果是否正确

    h. 关闭浏览器

    相信熟悉selenium的人,已经看出来了,这不就是selenium的自动化执行步骤么

    我大声的告诉你,没错! lettuce其实就是数据驱动脚本,而且更加具有可读性

  2. 废话不多说,先看个案例,再说理论

    创建一个叫features的目录,目录下两个文件 baidu.feature  和  step.py

    首先是baidu.feature,内容如下

 Feature: Baidu search test case

   Scenario: search selenium
Given I go to "http://www.baidu.com/"
When I fill in field with id "kw" with "selenium"
And I click id "su" with baidu once
Then I should see ".//*[@id='1']/h3/a" and value is "Selenium - Web Browser Automation" within 2 second
Then I close browser

     化身翻译狂魔,上面说的是:

     第一行  功能:百度查询测试用例

     第三行  场景:查询selenium

     第四行  给定: 我进入网址“http://www.baidu.com/”

     第五行  当:   我用“selenium”一词填充id为“kw”的输入框

     第六行  和:   我点击id为“su”的按钮一词

     第七行   此时:  我可以在2秒内看到“.//*[@id='1']/h3/a” 的值为“Selenium - Web Browser Automation”    //这句太抽象,将就看吧

     第八行   此时:  我关闭了浏览器

     这就是全部的lettuce代码,简直就是流水帐有没有,英语渣渣表示也能啃懂

       现在和之前步骤对比一下,发现几乎是一致的

     脚本中的关键字(每行第一个单词)都是代表一定意义的

       Feature 代表一个功能,其下可以写很多个场景

       Scenario 代表一个场景,其下可以存在很多步骤

          Give 代表的是操作步骤

       When  代表触发条件,可以代替操作步骤

       And   连接两个触发条件

       Then  验证结果

    接下来是step.py的内容

      

# coding: utf-8

import time
from lettuce import *
from selenium import webdriver
from lettuce_webdriver.util import AssertContextManager @before.all
def setup_browser():
world.browser = webdriver.Firefox()
world.browser.maximize_window() @step('I go to "(.*?)"')
def baidu_init(step, baidu_url):
with AssertContextManager(step):
print baidu_url
world.browser.get(baidu_url)
world.browser.maximize_window() # 定位输入框输入关键字
@step('I fill in field with id "(.*?)" with "(.*?)"')
def baidu_text(step, field_name, value):
with AssertContextManager(step):
text_fied = get_element_by_id(world.browser, field_name)
text_fied.clear()
text_fied.send_keys(value) # 点击“百度一下”按钮
@step('I click id "(.*)?" with baidu once')
def baidu_click(step, field_name):
with AssertContextManager(step):
click_field = get_element_by_id(world.browser, field_name)
click_field.click() @step('I should see "(.*?)" and value is "(.*?)" within 2 second')
def i_should_see(step, xpath, expect_value):
time.sleep(2)
elem = get_element_by_xpath(world.browser, xpath)
active_value = elem.text
assert expect_value == active_value, "Got value=%s " % active_value # 关闭浏览器
@step('I close browser')
def close_browser(step):
world.browser.close() def get_element_by_id(browser, attribute):
xpath = "//input[@id='%s']" % attribute
elems = browser.find_elements_by_xpath(xpath)
return elems[0] if elems else False def get_element_by_xpath(browser, attribute):
elems = browser.find_elements_by_xpath(attribute)
return elems[0] if elems else False

    代码比较长,不过没关系,首先,你会发现,baidu.feature中每一个步骤都会对应一个step.py中一个方法

    且步骤说明写在了装饰器step("")中,唯一的不同就是,有些数据被替换成了奇怪的符号

    对于代码来讲,这里的元素定位方法和selenium是相同的,唯一值得注意的就是step装饰器了

    

    当启动这个脚本(如何启动后面说)时,出现的结果如下:

    

    对于每一步,会分为灰/绿两种颜色的执行结果,灰色代表的是baidu.feature的代码行,绿色代表step.py的代码行,最后执行通过

    

    看到这想到了什么?同步是不是,不同的两个文件,因为某种练习,步骤一一对应的进行

    这里要说一下运行的原理

      首先两个文件是有分工的,feature的工作是指导,即决定执行步骤的顺序,他提供操作需要的数据,但是不决定每一步怎么做;而setup.py文件是将每一步处理好,两部分分工明确,相辅相成

      其次,feature如何传送给setup.py数据的呢?很简单,step.py中的每一步都对需要的数据进行了正则匹配,并传入到方法中,比如I go to ...这一步,使用了(.*?)对“http://www.baidu.com/”进行匹配,

       并将该值赋值给baidu_init(step, baidu_url)方法中的参数baidu_url;当配置数据2个以上时,在下面的方法中再加一个参数,顺序获取之  例子:I should see这一行

   

    例子介绍完了,说一下运行的事

      想运行文件,不能直接python  ... ,需要用lettuce命令

      保证项目目录下有features目录

      .feature文件一定要保证在features目录下,不然会报错

      step.py文件可以在项目目录下的任意地方

      

      运行时进入到项目目录,此时你可以看到features目录

      直接输入lettuce,开始执行

    

    当然,这只是一个场景,上面也说了,一个功能下可以设置多个场景,怎么办呢,将 Scenario及步骤复制,Scenario和所需的数据变一下就好了

Feature: Baidu search test case

  Scenario: search selenium
Given I go to "http://www.baidu.com/"
When I fill in field with id "kw" with "selenium"
And I click id "su" with baidu once
Then I should see ".//*[@id='1']/h3/a" and value is "Selenium - Web Browser Automation" within 2 second
Then I close browser Scenario: search selenium
Given I go to "http://www.baidu.com/"
When I fill in field with id "kw" with "selenium"
And I click id "su" with baidu once
Then I should see ".//*[@id='1']/h3/a" and value is "Selenium - Web Browser Automation" within 2 second
Then I close browser Scenario: search selenium
Given I go to "http://www.baidu.com/"
When I fill in field with id "kw" with "selenium"
And I click id "su" with baidu once
Then I should see ".//*[@id='1']/h3/a" and value is "Selenium - Web Browser Automation" within 2 second
Then I close browser

    由于本人太懒,没有换数据,值得注意的是,为了区分场景,场景名一定要取不同

    此时你再去运行,会发现执行了三次

    好的,本章letture_webdriver攻略就到这里,如果有问题欢迎留言

      

    

Lettuce_webdriver 自动化测试的更多相关文章

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

    行为驱动开发(BDD),依然高大上的矗立在远方,很少被人问津,一方面是BDD的思想不太容易理解,别一方面BDD的资料并不多.中文的资料就更少了. 之前增写过一篇<python BDD 框架之le ...

  2. 避免重复造轮子的UI自动化测试框架开发

    一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...

  3. python自动化测试(2)-自动化基本技术原理

    python自动化测试(2) 自动化基本技术原理 1   概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...

  4. AutoIt实现Webdriver自动化测试文件上传

    在运用WebDriver进行自动化测试时,由于WebDriver自身的限制,对于上传文件时Windows弹出的文件选择窗口无法控制,通过在网上查找资料锁定使用AutoIt来控制文件上传窗口. Auto ...

  5. 手机GUI自动化测试工具选择

    (Graphical User Interface,简称 GUI,又称图形用户接口) 我们需要针对自身产品的需求,从中选取一款合适的工具来实现自动化.对于移动客户端GUI的自动化而言,需要保证选取的工 ...

  6. Splinter学习——不仅仅是自动化测试哦

    前两天,想抢购一个小米MIX,结果,一开始抢就没有了.于是想,作为程序猿,总得有点特殊手段吧,比如说一个小脚本.最近在学习python,百度了一下,发现了Splinter这个强大的东东!用了不到两小时 ...

  7. [转]Android Studio 里搭建自动化测试框架Robotium

    Android的自动化测试框架可选择的不多,后来选了Robotium(https://code.google.com/p/robotium/),它的语法及易用性挺像我们用在iOS里的KIF. 官方文档 ...

  8. 接口自动化测试的"开胃小菜"---简单黑客攻击手段

    Web应用系统的小安全漏洞及相应的攻击方式 接口自动化测试的"开胃小菜" 1   写作目的 本文讲述一个简单的利用WebAPI来进行一次基本没有破坏力的“黑客”行为. 主要目的如下 ...

  9. python自动化测试(4)-使用第三方python库技术实现

    python自动化测试(4)-使用第三方python库技术实现 1   概述 关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 ...

随机推荐

  1. kubeadm 安装1.6.0版本出错 未解决

    工具包已经安装好了. [root@master data]# rpm -qa |grep kubekubeadm-1.6.0-0.x86_64kubectl-1.6.0-0.x86_64kubelet ...

  2. html中p标签行间距的问题

    使用CSS行高样式line-height可以设置调整p行间距,但是同时会影响每行文字间的上下间距,所以使用line-height虽然可以用来设置html p 行距离间隔,但是不是很实用,一般line- ...

  3. TPYBoard自制微信远程智能温湿度计

    智能时代一夜间什么都能远程了.创业者想着如何做智能产品,如何做远程控制.DIY爱好者也想着如何自制各种奇妙的工具.这里和大家一起学习制作一款廉价的智能温湿度计.说它廉价是因为共计花费不过40元,说它智 ...

  4. 4.Smarty模板之间调用

    {include file="header.tpl" name="cai"}

  5. php测试题

    1. LAMP具体结构不包含下面哪种(A) A:Windows系统 B:Apache服务器 C:MySQL数据库 D:PHP语言 2. 以下哪个SQL语句是正确的(D) A:insert into u ...

  6. 最近学习java时的记录

    1.java 的变量一共分为三种,类变量,局部变量,成员变量 类变量就是 加static修饰符的变量 2.java 的修饰符可分为两大类,一 可访问修饰符 protected private publ ...

  7. webpack认识

    1 webpack是什么? CommonJS和AMD是用于JavaScript模块管理的两大规范,前者定义的是模块的同步加载,主要用于NodeJS:而后者则是异步加载,通过requirejs等工具适用 ...

  8. java 文件的编码 问题

    package com.io; public class Encodedemo { public static void main(String[] args)throws Exception{ // ...

  9. 改进log4go的一些设想

    log4go 的 4.0.2 版本(https://github.com/ccpaging/log4go/tree/4.0.2)发布以后, 看了看别的 go 语言日志文件设计.发现了一篇好文: log ...

  10. mooc上学习acllib后写的包含背景音乐的小涂鸦板(初入江湖,大佬勿喷)

    #include "acllib.h"ACL_Sound sound1;ACL_Image img;//开始图ACL_Image img1;//涂鸦图ACL_Color c=RED ...