《零成本实现Web自动化测试--基于Selenium》 第五章 Selenium-RC
一. 简介
Selenium-RC可以适应更复杂的自动化测试需求,而不仅仅是简单的浏览器操作和线性执行。Selenium-RC能够充分利用编程语言来构建更复杂的自动化测试案例,例如读写文件、查询数据库和E-mail邮寄测试报告。
当测试案例遇到selenium-IDE不支持的逻辑时,你应该首先想到Selenium-RC。Selenium-IDE不支持下面逻辑:
- 条件判断;
- 循环;
- 日记记录和报告测试结果;
- 错误处理,特别是预料之外的错误;
- 数据库测试;
- 测试案例组合;
- 重复执行失败案例;
- 测试案例依赖;
- 测试失败时捕获屏幕快照。
虽然这些任务不被Selenium锁直接支持,但是通过编程语言和特定语言的Selenium-RC客户端库文件都可以实现。
二. Selenium-RC 基础
1. Selenium-RC 工作原理
首先,我们描述Selenium-RC组件是如何运转的,以及它们在测试案例运行过程中扮演什么角色。
1.1 RC组件
- Selenium Server,它负责启动和关闭浏览器,解释和运行从测试程序传来的Selenese命令,就像一个HTTP代理一样。截取和验证浏览器与待测应用(AUT)之间的HTTP消息;
- 客户端库文件提供编程语言和Selenium-RC Server 之间的接口
Selenium-RC的一个简单的架构图,如下所示:
上图说明客户端库文件将命令传递给了Server,接着Server使用Selenium-Core的JavaScript命令,将Selenium命令传递给浏览器。浏览器会使用自带的JavaScript翻译器来执行Selenium命令。这意味着测试脚本中的Selenese操作和验证将被执行。
1.2 Selenium Server
Selenium Server从你的测试程序接受Selenium命令,翻译它们,想测试程序反馈运行这些测试案例的结果。
在测试程序打开浏览器时(使用客户端库文件的API函数),RC Server 绑定Selenium Core 并自动将它嵌入到浏览器中。Selenium-Core 是一个JavaScript程序,实际上是一系列JavaScript函数,它们使用浏览器内置的JavaScript翻译器来翻译和执行Selenese命令。
Server使用简单的HTTP GET/POST请求从你的测试程序中获取Selenese命令。这意味着你可以使用任何支持HTTP请求的编程语言来自动化基于浏览器的测试案例。
1.3 客户端库文件
客户端库文件提供编程接口,允许你使用自己编写的程序来运行Selenium命令。对于每一种支持的语言都有对应客户端文件。Selenium客户端库文件提供编程接口(API),例如:一系列函数,以便通过你的程序来运行Selenium命令。对于任何一种接口而言,都有对应的函数支持每一个Selenese命令。
客户端库文件获取一条Selenese命令,并将它传递给Selenium Server,以便执行一个指定操作或者基于待测应用(AUT)进行测试。客户端库文件收到命令的执行结果,再将其传递给你的测试程序。程序接收到结果后,将它保存在变量中,接着报告成功还是失败。如果结果是医疗之外的失败,还能有针对性地采取正确措施。
因此要创建测试程序,你只须使用客户端库文件的API来编写程序,程序会去运行一系列Selenium命令。如果你已经在Selenium-IDE中创建了一个Selenese测试脚本,可以用它来生成Selenium-RC代码。Selenium-IDE可以将它的Selenium命令,翻译成客户端驱动的API函数调用。
2. Selenium-RC 架构
<略过>
3. Selenium-RC 安装
从如下地址: http://seleniumhq.org/download ,下载Selenium-RC zip文件后,你会发现它包含很多子文件夹。这些文件夹中包含使用Selenium-RC所需要的一切组件。
一旦你选择了一种工作语言,你需要:
- 安装Selenium-RC服务器;
- 使用特定语言的客户端驱动,来创建一个编译工程。
Python脚本语言下Selenium-RC的自动化配置如下:
三. Selenium-RC 使用
1. 从Selenese 到测试程序
试用Selenium-RC的主要任务就是将你的Selenese命令转为编程语言。下面是一个Python的例子:
1.1. 测试脚本样例
Command | Target | Value |
open | / | |
type | id=kw | http://www.cnblogs.com/wuzhiming/ |
clickAndWait | id=su | |
assertTitle | exact:http://www.cnblogs.com/wuzhiming/_百度搜索 |
1.2 Selenium转为编程代码
文件->Export Test Case AS->Python 2 / unittest/ Remote Control
导出代码如下:
from selenium import selenium
import unittest, time, re class baidu(unittest.TestCase):
def setUp(self):
self.verificationErrors = []
self.selenium = selenium("localhost", 4444, "*chrome", "http://www.baidu.com/")
self.selenium.start() def test_baidu(self):
sel = self.selenium
sel.open("/")
sel.type("id=kw", "http://www.cnblogs.com/wuzhiming/")
sel.click("id=su")
sel.wait_for_page_to_load("")
self.assertEqual(u"http://www.cnblogs.com/wuzhiming/_百度搜索", sel.get_title()) def tearDown(self):
self.selenium.stop()
self.assertEqual([], self.verificationErrors) if __name__ == "__main__":
unittest.main()
2. 构建你的测试程序
现在将距离说明如何使用Python语言来编写测试程序。这里有两项基本任务:
(1). 通过Selenium-IDE产生你的测试脚本,并转换为编程语言,可能还需要加以修改;
(2).写一个简单的主程序来执行这些脚本
Pyunit 是使用Python时的测试框架。要学习Pyunit,请参看官方文档<http://docs.python.org/library/unittest.html>
3. 学习Selenium-RC API
a.启动浏览器
代码如下:
self.selenium = selenium("localhost", 4444, "*chrome", "http://www.baidu.com/")
self.selenium.start()
创建浏览器实例所需的参数如下:
- Host
- 该参数指明所在主机的IP地址。
- Port
- 该参数指明Server监听的TCP/ip端口,客户端将使用此端口来建立连接。
- Browser
- 指明希望使用的浏览器,是必选参数
- URL
- 该参数指明被测系统的基础URL,是必选参数
b. 执行命令
一旦你初始化了浏览器,并将其指定给一个变量(通常命名为“Selenium”)。你可以通过浏览器变量来调用相关办法,以便执行Selenese命令,例如,调用selenium对象的type方法。
selenium.type("field-id","string to type")
浏览器会进行一个输入操作,通过指定的定位器参数定位输入框,然后将指定的字符串输入。
4. 报告测试结果
如果使用Python客户驱动,HTMLTestRunner可以被用来产生测试报告。可以参考:
http://tungwaiyip.info/software/HTMLTestRunner.html
《零成本实现Web自动化测试--基于Selenium》 第五章 Selenium-RC的更多相关文章
- 《零成本实现Web自动化测试--基于Selenium》第一章 自动化测试基础
第一篇 Selenium 和WebDriver工具篇 第一章 自动化测试基础 1.1 初识自动化测试 自动化测试有两种常见方式 1.1.1 代码驱动测试,又叫测试驱动开发(TDD) 1.1.2 ...
- 《零成本实现Web自动化测试--基于Selenium》第二章 Selenium简介和基础
第一部分 Selenium简介 1.Selenium 组建 1.1 Selenium-IDE Selenium-IDC是开发Selenium测试案例的集成开发环境.它像FireFox插件一样的工作,支 ...
- 《零成本实现Web自动化测试--基于Selenium》 第四章 Selenium 命令
Selenium 命令,通常被称为Selenese,由一系列运行测试案例所需要的命令构成.按顺序排列这些命令就构成了测试脚本. 一. 验证颜面元素 1.Assertion或者Verification ...
- 《零成本实现Web自动化测试--基于Selenium》第三章 Selenium-IDE
1.简介 Selenium-IDE(集成开发环境)是一种开发selenium测试案例的工具.是一种易用的Firefox插件.你可以通过文字菜单,在当前页面上选择一个UI元素,接着挑选与UI元素相关的s ...
- 《零成本实现Web性能测试:基于Apache JMeter》读书笔记
1.性能测试概念 性能测试目的: 评估系统能力,验证系统是否符合预期性能指标 识别系统中的弱点 系统调优,改进系统性能 检测长时间运行可能发生的问题,揭示隐含问题 验证稳定性.可靠性 常见性能指标 B ...
- 02.零成本实现WEB性能测试-基于APACHE JMETER
书评: 1.这本是介绍性能测试工具Jmeter的书籍,维度还够,但是粒度太粗. 2.对于想快速了解JMeter的使用和工具的原件使用,还是有一定的参考价值. 3.实际上,这本书可用来快速入门,掌握和了 ...
- 使用pyautogui替代selenium,图像识别进行web自动化测试--基于python语言
这里演示一下使用pyautogui替代selenium进行web自动化测试,并不建议使用pyautogui进行web自动化测试,因为元素的ui一旦有长宽变化,或者风格的变化,执行时就会发生异常,仅当学 ...
- <自动化测试方案_5>第五章、代码单元自动化测试
第五章.代码单元自动化测试 代码单元测试需要根据编程语言,选择单元测试框架,然后访问类方法,函数.代码单元测试做自动化,相比API.UI自动化做起来更加麻烦,建议放到待API自动化测试.UI自动化测试 ...
- 零成本实现Web性能测试:基于Apache JMeter
http://book.51cto.com/art/201204/327301.htm
随机推荐
- H2嵌入式数据库的各种连接方式
H2database是一款用java语言编写的开源数据库, 一般用作游戏的数据存储, 当然web项目也是可以用的, web项目也可以将该数据库 首先要安装H2数据库 http://www.h2data ...
- 去掉url后面的#
<a href="#" 这个代码,当你点击后会在url后面添加# 怎么去掉呢?解决方法:点击这里 <a href="javascript:void(0)&qu ...
- 【斜率DP】bzoj1597: [Usaco2008 Mar]土地购买
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2474 Solved: 900[Submit][ ...
- Android开发之onClick事件的三种写法(转)
package a.a; import android.app.Activity; import android.os.Bundle; import android.view.View; import ...
- Unity3d大会的部分总结
原地址:http://blog.csdn.net/sgnyyy/article/details/23775219 一.项目开发,管理和发布策略 1. 四大准则 a. 美术的资源 ...
- Tiny6410 LED字符设备驱动
1.查看用户手册 led1.led2.led3.led4 连接的分别是 GPK4.GPK5.GPK6.GPK7 2.查询6410芯片手册 下面还需要3个步骤: 1.设置GPIO为OUTPUT. 将GP ...
- 如何使用 APM 搞定 PHP 应用的性能优化?
APM 究竟是什么? 很多人都是第一次听说 APM 的概念,本文主要阐述如何使用 APM 的解决方案来实现 PHP 应用性能的优化.首先先介绍一下 APM (Application Performan ...
- Servlet课程0425(四) Servlet实现简单用户登录验证
Login.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class ...
- 借助CAD在Altium Designer中定义不规则PCB外形
借助绘图软件CAD在Altium Designer中定义不规则PCB外形. 工具/原料 CAD2007 Altium Designer2015 方法/步骤 借助CAD绘制的不规则外形,保存成DXF格式 ...
- 关于Apache Struts 2 S2-032高危漏洞的一些确认
2016年4月21日Struts2官方发布两个CVE,其中CVE-2016-3081(S2-032)官方评级为高. 主要原因为在用户开启动态方法调用的情况下,会被攻击者实现远程代码执行攻击. 具体的漏 ...