基于selenium自动化测试开题报告的开题报告怎么写

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
自动化测试selenium分析报告.ppt21页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:300 &&
你可能关注的文档:
··········
··········
WebDriver 与Selenium1.0的区别 Webdriver可以处理键盘和鼠标事件,而Selenium RC不可以 Webdriver可以处理 弹出框,对话框(基本身份认证,自签名的证书和文件上传/下载)事件,Selenium RC不可以 Webdriver不支持并行测试,但是Selenium grid解决了该问题 Thanks!
自动化测试selenium 国美在线广告平台部 2015年8月 目录 Selenium特性 Selenium工作原理 Selenium定位页面元素 Selenium命令结构 Selenium Grid WebDriver WebDriver定位页面元素 WebDriver和Selenium 1.0的区别
什么是Selenium
Selenium是ThroughtWorks公司开发的一套强大的开源Web应用自动化测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户操作一样 Selenium名字的来源 Selenium 的中文名为“硒”,是一种化学元素的名字,它对汞 Mercury 有天然的解毒作用,实验表明汞暴露水平越高,硒对汞毒性的拮抗作用越明显,所以说硒是汞的克星。大家应该知道Mercury 测试工具系列吧(QTP,QC,LR,WR...),他们功能强大,但却价格不菲,大家对此又爱又恨!故thoughtworks 特意把他们的Web 开源测试工具命名为Selenium,以此帮助大家脱离汞毒。
Selenium特性 可对多浏览器进行测试,如IE,Firefox,Safari,Chrome,Android手机浏览器等 支持多种语言,例如:Java,C#,Pathon,Ruby,PHP等 跨平台,例如:Windows,Linux,IOS,Android等 开源免费 Selenium都有什么? Selenium Core JS函数集合
Selenium IDE 仅在Firefox中使用
Selenium Remote Control Selenium Grid Selenium RC简介 Selenium RC 就是使用程式语言编写脚本,通过Selenium RC服务器作为代理服务器去访问应用从而达到测试的目的.由于Selenium RC不再需要依附Firefox,所以其可以在其他更多的浏览器上进行测试,而这也是我们做WEB测试的一个比较重要的问题 解决了因为担心浏览器兼容问题而重要做测试的
正在加载中,请稍后...Selenium自动化测试Python五:WebDriver设计模式 - 简书
<div class="fixed-btn note-fixed-download" data-toggle="popover" data-placement="left" data-html="true" data-trigger="hover" data-content=''>
写了82824字,被145人关注,获得了124个喜欢
Selenium自动化测试Python五:WebDriver设计模式
WebDriver 设计模式
欢迎阅读WebDriver进阶讲义。本篇讲义将会重点介绍Selenium WebDriver 自动化框架的设计,着重使用Page Object设计模式,以及使用HTML测试报告和集成测试报告并自动发送邮件。
Page Object 设计模式
在讨论设计模式之前,我们首先接着上一个讲义,来讨论自动化测试框架。
什么是框架?
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。因此构件库的大规模重用也需要框架。其实目前为止,框架还没有统一定义,我比较喜欢Ralph Johnson所给出的定义:
一个框架是一个可复用设计,它是由一组抽象类及其实例间协作关系来表达的 【Johnson 98】。这个定义是从框架内涵的角度来定义框架的,当然也可以从框架用途的角度来给出框架的定义:一个框架是在一个给定的问题领域内,一个应用程序的一部分设计与实现【Bosch 97】。
为什么要用框架?
又是一个理所当然的问题。因为软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。
为什么要搭建自动化测试框架?
从前我以为,自动化测试最重要的事情是找对象(To Find Test Object)。现在我明白了一个道理,没有框架的自动化测试是找不到对象的,即使找到了也不会幸福的。就跟现实中,没有车没有房的人是很难找到对象的一个道理。
自动化测试的开发,通常是由自动化测试的需求决定的。这个需求主要包括:
自动化测试更便于实施。这个说的是,你写测试脚本要方便。一个好的自动化测试框架是可以让不那么懂技术的人也可以写自动化测试脚本的,哼。
解决自动化测试脚本本身存在的问题,如异常处理和场景恢复。
测试易于维护。自动化测试项目,基本都是没有好的管理以及维护,一定是个大坑。我可以很负责地说,自动化测试没有一年半载,你是看不到产出的。所以管理及维护就成了最重要的事情。而好的框架,可以减少你在管理维护中所投入的人力物力精力。
可重用性。框架的意义之一就在于可重用吧。所以在框架里,你可以实现一些通用功能,简化脚本开发过程。
美观易读的测试报告。拿Selenium来说,它产出的测试报告只是基于测试脚本的,并没有那种基于测试集的报告,所以如果你要,测试框架里可以实现。
还有很多测试需求,我没办法一一列举出来,多数需求我们都可以在测试框架里去定制。现在可以回答上面那个问题了,record & playback是不会幸福的,你需要自动化测试框架。
请慎重考虑是否需要自动化测试
自动化测试的特点(成本投入高,风险大)
自动化测试是个很傲娇的东西,它很挑项目。首先项目周期要长,但是需求不会频繁变更;其次系统中多数对象要可以被识别,并且不存在大量第三方插件。而且你要清楚,你不能指望自动化测试去帮你发现新的bug,自动化测试本身是不具备想象力的(相对于手工测试)。它的优势在于反复迭代,它的价值产出在于长期的回归测试,以保证被测产品长期稳定地版本更新。
关于自动化测试的切入点,通常要在完整的系统测试之后才算具备引入自动化测试的基本条件。
目前我所做的自动化测试成功案例,无一不具备良好的管理和优良的测试框架。二者缺一,自动化测试必然成为大坑。填坑的成本,很高。
Page Object 设计原理
Page Object设计模式是Selenium自动化测试项目的最佳设计模式之一,强调测试、逻辑、数据和驱动相互分离。
Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题等),这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。当页面元素id变化时,只需要更改测试页Class中页面的属性即可。
它的好处如下:
集中管理元素对象
集中管理一个page内的公共方法
后期维护方便
Page Object 的对象
WebDriver封装
这里是对Selenium的封装,完成封装以后的基本封装代码。
设计了一个基本的Page类,以便所有的页面进行继承,该类标明了一个sub page类的基本功能和公共的功能。
Sub Pages(s)子类
具体的页面的类,定义了某个具体的页面的功能。
这部分描述的是具体的测试用例。
定义Test Suite
多个测试用例添加在一个Test套件里面,一起执行。
定义Test Runner
设计测试的Runner,开启整个测试,并且对测试的结果生成HTML测试报告,并通过邮件发送到指定邮箱。
定义测试的主入口
定义测试的主要入口类,代码的入口
HTML测试报告
HTML测试报告需要引入HTMLTestRunner
from ranzhiWeekend import HTMLTestRunner
HTMLTestRunner是基于Python2.7的,我们的课程讲义基于Python3.x,那么需要对这个文件做一定的修改。
测试的示例代码如下
# 声明一个测试套件
suite = unittest.TestSuite()
# 添加测试用例到测试套件
suite.addTest(RanzhiTests("test_ranzhi_login"))
# 创建一个新的测试结果文件
buf = open("./result.html", "wb")
# 声明测试运行的对象
runner = HTMLTestRunner.HTMLTestRunner(stream=buf,
title="Ranzhi Test Result",
description="Test Case Run Result")
# 运行测试,并且将结果生成为HTML
runner.run(suite)
# 关闭文件输出
buf.close()
集成测试报告
使用邮件发送HTML测试报告的脚本如下
# 打开测试报告结果
f = open("./result.html", "rb")
# 将测试结果放到邮件的主体中
mailBody = f.read()
# 关闭测试结果的文件
# 声明一个邮件对象,用刚刚得到的邮件主体
msg = MIMEText(mailBody, "html", "utf-8")
# 设置邮件的主题
msg["subject"] = Header("Automation Test Result", "utf-8")
# 创建一个SMTP服务对象
# simple message transfer protocol
# 简单的消息转移协议
smtpMail = smtplib.SMTP()
# 连接SMTP的服务器
smtpMail.connect("")
# 登录SMTP的服务器
smtpMail.login("", "")
# 使用SMTP的服务器发送邮件
smtpMail.sendmail("", targetEmail, msg.as_string())
# 退出SMTP对象
smtpMail.quit()
自动化测试框架示例
WebDriver封装
# coding=utf-8
from selenium import webdriver
from selenium.webdriver.support.select import Select
class AutomateDriver(object):
a simple demo of selenium framework tool
def __init__(self):
driver = webdriver.Firefox()
self.driver = driver
except Exception:
raise NameError("Firefox Not Found!")
def clearCookies(self):
clear all cookies after driver init
self.driver.delete_all_cookies()
def refreshBrowser(self):
self.driver.refresh()
def maximizeWindow(self):
self.driver.maximize_window()
def navigate(self, url):
self.driver.get(url)
def quitBrowser(self):
self.driver.quit()
def closeBrowser(self):
self.driver.close()
def getElement(self, selector):
to locate element by selector
selector should be passed by an example with "i,xxx"
"x,//*[@id='langs']/button"
DOM element
if ',' not in selector:
return self.driver.find_element_by_id(selector)
selector_by = selector.split(',')[0]
selector_value = selector.split(',')[1]
if selector_by == "i" or selector_by == 'id':
element = self.driver.find_element_by_id(selector_value)
elif selector_by == "n" or selector_by == 'name':
element = self.driver.find_element_by_name(selector_value)
elif selector_by == "c" or selector_by == 'class_name':
element = self.driver.find_element_by_class_name(selector_value)
elif selector_by == "l" or selector_by == 'link_text':
element = self.driver.find_element_by_link_text(selector_value)
elif selector_by == "p" or selector_by == 'partial_link_text':
element = self.driver.find_element_by_partial_link_text(selector_value)
elif selector_by == "t" or selector_by == 'tag_name':
element = self.driver.find_element_by_tag_name(selector_value)
elif selector_by == "x" or selector_by == 'xpath':
element = self.driver.find_element_by_xpath(selector_value)
elif selector_by == "s" or selector_by == 'selector_selector':
element = self.driver.find_element_by_css_selector(selector_value)
raise NameError("Please enter a valid type of targeting elements.")
return element
def type(self, selector, text):
Operation input box.
driver.type("i,el","selenium")
el = self.getElement(selector)
el.clear()
el.send_keys(text)
def click(self, selector):
It can click any text / image can be clicked
Connection, check box, radio buttons, and even drop-down box etc..
driver.click("i,el")
el = self.getElement(selector)
el.click()
def selectByIndex(self, selector, index):
It can click any text / image can be clicked
Connection, check box, radio buttons, and even drop-down box etc..
driver.select_by_index("i,el")
el = self.getElement(selector)
Select(el).select_by_index(index)
def clickByText(self, text):
Click the element by the link text
driver.click_text("新闻")
self.getElement('p,' + text).click()
def submit(self, selector):
Submit the specified form.
driver.submit("i,el")
el = self.getElement(selector)
el.submit()
def executeJs(self, script):
Execute JavaScript scripts.
driver.js("window.scrollTo(200,1000);")
self.driver.execute_script(script)
def getAttribute(self, selector, attribute):
Gets the value of an element attribute.
driver.get_attribute("i,el","type")
el = self.getElement(selector)
return el.getAttribute(attribute)
def getText(self, selector):
Get element text information.
driver.get_text("i,el")
el = self.getElement(selector)
return el.text
def getDisplay(self, selector):
Gets the element to display,The return result is true or false.
driver.get_display("i,el")
el = self.getElement(selector)
return el.is_displayed()
def getTitle(self):
Get window title.
driver.get_title()
return self.driver.title
def getUrl(self):
Get the URL address of the current page.
driver.get_url()
return self.driver.current_url
def acceptAlert(self):
Accept warning box.
driver.accept_alert()
self.driver.switch_to.alert.accept()
def dismissAlert(self):
Dismisses the alert available.
driver.dismissAlert()
self.driver.switch_to.alert.dismiss()
def implicitlyWait(self, secs):
Implicitly wait. All elements on the page.
driver.implicitly_wait(10)
self.driver.implicitly_wait(secs)
def switchFrame(self, selector):
Switch to the specified frame.
driver.switch_to_frame("i,el")
el = self.getElement(selector)
self.driver.switch_to.frame(el)
def switchDefaultFrame(self):
Returns the current form machine form at the next higher level.
Corresponding relationship with switch_to_frame () method.
driver.switch_to_frame_out()
self.driver.switch_to.default_content()
def openNewWindow(self, selector):
Open the new window and switch the handle to the newly opened window.
driver.open_new_window()
original_windows = self.driver.current_window_handle
el = self.getElement(selector)
el.click()
all_handles = self.driver.window_handles
for handle in all_handles:
if handle != original_windows:
self.driver._switch_to.window(handle)
Base Page类
class RanzhiBasePage():
def __init__(self, driver, baseUrl):
:param driver: 封装好的webdriver
:param baseUrl: 然之系统的基本url http://【localhost:808】/ranzhi/www
self.baseUrl = baseUrl
self.driver = driver
def openPage(self, url):
打开然之系统的页面,通过拼接URL的方式
:param url: /sys/index.html
self.driver.navigate(self.baseUrl + url)
Sub Page类
from ranzhiWeekend.ranzhi_base_page import RanzhiBasePage
class RanzhiSubLoginPage(RanzhiBasePage):
def __init__(self, driver, baseUrl):
:param driver:
:param baseUrl:
# 调用其 基类 RanzhiBasePage的 构造函数
# 实现 基类 的构造函数的功能
super().__init__(driver, baseUrl)
self.loginPageUrl = "/sys/user-login.html"
self.mainPageUrl = "/sys/index.html"
self.driver.clearCookies()
def login(self, userName, password):
self.openPage(self.loginPageUrl)
# self.driver.clearCookies()
self.driver.implicitlyWait(5)
self.driver.type("account", userName)
self.driver.type("password", password)
self.driver.click("submit")
def getMainPage(self):
return self.baseUrl + self.mainPageUrl
Tests Case 类
import unittest
from time import sleep
from ranzhiWeekend.automate_driver import AutomateDriver
from ranzhiWeekend.ranzhi_sub_login_page import RanzhiSubLoginPage
1. 导入 unittest
2. 继承 unittest.TestCase
3. 写用例 方法以 test 开头
4. 考虑使用 setUp() 和 tearDown()
class RanzhiTests(unittest.TestCase):
def setUp(self):
开始每个测试前的准备事项
self.autoDriver = AutomateDriver()
self.baseUrl = "http://localhost:808/ranzhi/www"
def tearDown(self):
结束每个测试后的清理工作
self.autoDriver.quitBrowser()
def test_ranzhi_login(self):
测试用例:测试然之登录
# 新建然之的页面对象
loginPage = RanzhiSubLoginPage(self.autoDriver, self.baseUrl)
# 利用然之的页面对象进行登录
loginPage.login("admin", "admin")
# 断言 是否登录成功
self.assertEqual(loginPage.getMainPage(), self.autoDriver.getUrl(), u"登录失败")
Tests Runner类
import smtplib
import unittest
from email.header import Header
from email.mime.text import MIMEText
from ranzhiWeekend import HTMLTestRunner
from ranzhiWeekend.ranzhi_tests_0605 import RanzhiTests
class RanzhiTestRunner():
def runTest(self):
运行测试用例
# 声明一个测试套件
suite = unittest.TestSuite()
# 添加测试用例到测试套件
suite.addTest(RanzhiTests("test_ranzhi_login"))
# 创建一个新的测试结果文件
buf = open("./result.html", "wb")
# 声明测试运行的对象
runner = HTMLTestRunner.HTMLTestRunner(stream=buf,
title="Ranzhi Test Result",
description="Test Case Run Result")
# 运行测试,并且将结果生成为HTML
runner.run(suite)
# 关闭文件输出
buf.close()
def sendEmail(self, targetEmail):
:param targetEmail:
# 打开测试报告结果
f = open("./result.html", "rb")
# 将测试结果放到邮件的主体中
mailBody = f.read()
# 关闭测试结果的文件
# 声明一个邮件对象,用刚刚得到的邮件主体
msg = MIMEText(mailBody, "html", "utf-8")
# 设置邮件的主题
msg["subject"] = Header("Automation Test Result", "utf-8")
# 创建一个SMTP服务对象
# simple message transfer protocol
# 简单的消息转移协议
smtpMail = smtplib.SMTP()
# 连接SMTP的服务器
smtpMail.connect(“***.******.com")
# 登录SMTP的服务器
smtpMail.login(“*******@*****.com", “*********")
# 使用SMTP的服务器发送邮件
smtpMail.sendmail(“*******@********.com", targetEmail, msg.as_string())
# 退出SMTP对象
smtpMail.quit()
main函数入口
if __name__ == "__main__":
# 实例化一个runner
runner = RanzhiTestRunner()
# 执行测试
runner.runTest()
# 发送测试结果
runner.sendEmail(“********@******.com")
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
自动化测试探索
· 15人关注
软件测试的种种
· 8人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于selenium框架的web自动化测试系统设计与实现-计算机系本科论文开题报告
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Study:基于Selenium进行Android客户端自动化测试的例子。_android开发_ThinkSAAS
Study:基于Selenium进行Android客户端自动化测试的例子。
Study:基于Selenium进行Android客户端自动化测试的例子。
注意:此处省略ADB和Node.js的配置。
代码示例:
package com.hisky.seleniumT
import java.io.BufferedR
import java.io.F
import java.io.IOE
import java.io.InputStreamR
import java.net.MalformedURLE
import java.net.URL;
import java.util.ArrayL
import java.util.A
import java.util.L
import org.openqa.selenium.By;
import org.openqa.selenium.WebD
import org.openqa.selenium.remote.CapabilityT
import org.openqa.selenium.remote.DesiredC
import org.openqa.selenium.remote.RemoteWebD
* @author zhenglin.yang
public class AndroidTest {
private static WebD
public static void main(String[] args) {
killProcessor("node.exe");
killProcessor("adb.exe");
startAppuim();
launchApp();
clickTest();
private static void clickTest() {
driver.findElement(By.name("Storage")).click();
Thread.sleep(1000);
driver.findElement(By.name("Backup")).click();
Thread.sleep(1000);
driver.findElement(By.name("Locate")).click();
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
private static void launchApp() {
File classPath = new File(System.getProperty("user.dir"));
File app = new File(classPath,"spark-normal-36.98.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("device","Android");
capabilities.setCapability(CapabilityType.VERSION,"4.4.2");
capabilities.setCapability(CapabilityType.BROWSER_NAME,"");
capabilities.setCapability(CapabilityType.PLATFORM,"Windows");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("app-package","com.asurion.android.spark");
capabilities.setCapability("app-activity","com.asurion.android.setup.activity.ZeroActivity");
capabilities.setCapability("app-wait-activity","com.mon.ui.actionbar.MainActionBarActivity");
capabilities.setCapability("newCommandTimeout", 1200);
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
} catch (MalformedURLException e) {
e.printStackTrace();
System.out.println("launching new activity");
private static void startAppuim() {
List&String& cmdLine = new ArrayList&String&(Arrays.asList(new String[] {"cmd.exe","/C","start","node","D:/java/eclipse-automation/Appium/node_modules/appium","--no-reset"}));
ProcessBuilder pb = new ProcessBuilder(cmdLine);
pb.start();
} catch (IOException e) {
e.printStackTrace();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("node start");
private static void killProcessor(String processName) {
Process p = Runtime.getRuntime().exec(System.getenv("windir") +"\system32\tasklist.exe");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line =
while ((line = br.readLine()) != null) {
if (line.indexOf(processName) != -1) {
String cmd ="taskkill /F /IM"+ processN
Runtime.getRuntime().exec(cmd);
System.out.println("killing processor:"+ processName);
br.close();
} catch (Exception e) {
e.printStackTrace();
1、Android客户端放在项目路径下:
D:javaworkspacesmyworkspacesseleniumTest-0.0.1-SNAPSHOTspark-normal-36.98.apk
2、Android手机需要设置屏幕始终是亮的状态。
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信}

我要回帖

更多关于 研究生开题报告怎么写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信