.什么是selenium
Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,支持多平台、多浏览器、多语言去实现自动化测试,Selenium2将浏览器原生的API封装成WebDriver API,可以直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的),所以就像真正的用户在操作一样。
支持多种开发语言:ruby,python,java,perl,c#等,同时Selenium 测试直接自动运行在浏览器中,就像真正的用户在手工操作一样。支持的浏览器包括 IE、Chrome 和 Firefox等。
Selenium已经从之前的1.0(RC(Remote Control))进化到了现在Selenium2(Selenium1+WebDriver)。
Selenium 2.0(又名Selenium WebDriver)的主要新功能是集成了 WebDriver。
两个版本区别: Selenium RC 在浏览器中运行 JavaScript 应用,而 WebDriver
通过原生浏览器支持或者浏览器扩展直接控制浏览器。 之所以合并,原因如下: WebDriver 解决了 Selenium
存在的缺点(比如,绕过 JS 沙箱); Selenium 解决了 WebDriver 存在的问题(例如支持广泛的浏览器); Selenium
的主要贡献者们都觉得合并项目是为用户提供最优秀框架的最佳途径。
简单介绍一下webdriver的工作原理:
1.启动浏览器后,selenium-webdriver会将目标浏览器绑定到特定的端口,启动后的浏览器则作为webdriver的 remote server。
2.客户端(也就是测试脚本),借助ComandExecutor发送HTTP请求给sever端
3.Sever端需要依赖原生的浏览器组件,转化Web Service的命令为浏览器native的调用来完成操作。
如何实现用 selenium实现测试
1.首先导入相应的包,selenium中的 webdriver 还有 time 包(用于管理时间间隔)
2.通过webdriver进行方式定位,并加上需要进行的操作。
3.退出selenium释放资源。
#coding=utf-8
from selenium import webdriver
importtime
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")#########百度输入框的定位方式###########通过id 方式定位
browser.find_element_by_id("kw").send_keys("selenium")#通过name 方式定位
browser.find_element_by_name("wd").send_keys("selenium")#通过tag name 方式定位
browser.find_element_by_tag_name("input").send_keys("selenium") 不能成功,因为input太多了不唯一。
#通过class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")#通过CSS 方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")#通过xphan 方式定位
browser.find_element_by_xpath("//*[@id='kw']").send_keys("selenium")############################################
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()
selenium的定位方法
1.id和name定位还有tag name 和 class name定位
我们通过前端工具,例如chrome的F12,找到了百度输入框的属性信息,如下:
<input id="kw"class="s_ipt"type="text"maxlength="100"name="wd"autocomplete="off">```id=”kw”
通过find_element_by_id("kw") 函数就是捕获到百度输入框
name=”wd”
通过find_element_by_name("wd")函数同样也可以捕获百度输入框
find_element_by_tag_name("input")class="s_ipt",通过find_element_by_class_name("s_ipt")函数捕获百度输入框。
2.css和xpath则是需要进入f12并找到需要的内容进行复制。
```c
在这里插入代码片
具体的功能
send_keys(“xx”) 用于在一个输入框里输入xx 内容。
click() 用于点击一个按钮
clear() 用于清除输入框的内容,比如百度输入框里默认有个“请输入关键字”的信息,再比如我们的登陆框一般默认会有“账号”“密码”这样的默认信息,clear 可以帮助我们清除这些信息。
driver.find_element_by_id(“su”).submit() 提交功能。
data=driver.find_element_by_id(“cp”).text 用来获取文档。
添加等待
加入time包就是时间等待
time.sleep(3) #普通的等待三秒
browser.implicitly_wait(30) #智能等待30秒
系统——Loadrunner性能测试(发布博客功能 基准测试)
录制然后多线程,运行分析结果。
测试中遇到的问题
1. selenium
定位不到/操作不了元素的常见原因
1、没有切换到正确的frame。
项目中遇到过一个对象配置窗口所在的iframe的id会变化,有时候是frame1,有时候是frame2。但是其实frame1和frame2始终都是存在的。处理方式是,如果frame1中找不到要操作的元素,捕捉异常,切换到frame2进行查找。
2、没有切换到正确的window。这里window不是指弹出窗口,而是指另一个网页窗口,或者是浏览器的另一个标签页。
3、定位信息发生变化,比如id变化、class变化(导致css选择器变化),xpath变化。项目中遇到每次打开页面时,某些元素的id值会变化。因为js的存在,所以页面元素的XPATH可能会发生变化(不能使用xpath)。
4、JS还没有执行完。元素还不可见、还没有使能、还不能点击等导致不能操作。解决方法见JS执行未完成和元素可靠操作。
5,操作过快 来不及页面响应 需要加一下停顿。
6. 有些网页有一些反作弊机制,需要加一些随机点。
UI自动化遇到弹窗咋办
其实在webdriver中很好处理我们有一下方法进行处理:
accept() 接受警告框
text 返回警告框中的文字
dismiss 解散现有警告框
send_keys 将文本发送至警告框
#coding:utf-8
# 导入selenium
from selenium importwebdriver
# 导入time sleep设置等待时间 sleep单位为秒
importtime
# 初始化谷歌浏览器驱动
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html')
# 浏览器最大化
driver.maximize_window()
# 等待1秒
time.sleep(1)
# 点击登录按钮
driver.find_element_by_id('submit').click()
# 等待2秒
time.sleep(2)
# 进行接受警告框操作,接口警告框
driver.switch_to.alert.accept()
# 获取警告框文字
#driver.switch_to.alert.text
# 像警告框发送文本
#driver.switch_to.alert.send_keys('坚持就是胜利')
# 解散警告框
#driver.switch_to.alert.dismiss()
# 等待2秒
time.sleep(2)
# 关闭浏览器
driver.quit()
截屏:
应用场景:做UI自动化测试,因为是自动化所以是需要机器自动运转,人工定期检查测试报告,但是运行完成之后,出现测试不通过的场景,我们就可以通过截屏的方式来查看当时页面的现实情况,从而实现问题定位
下面我们介绍常用的一种,截取全屏,使用get_screenshot_as_file就可以完成,示例如下:
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.get_screenshot_as_file("D:\photo\\"+str(time.time())+'.png')
实习干了什么 思爱普
主要是业务功能测试 (由于编程语言不通,思爱普使用的是abap),主要负责了现金池的测试。首先要理解现金池包含什么,包含每个银行账户存的钱,在测试过程中发现了一些问题比如,测试的时候,删除了一些用户的资金,不会及时显示。需要一些金融的前置知识。还有一些 界面使用快捷键不会消失,比如有一个倒出表格的信息。
有一次找到一个缺陷 ,当bug报了出去,后来通过学习才知道,缺陷指的是一个问题会导致多个同样的问题,而发现出来的缺陷,正是由于,某几个app的框架缺陷,有了这个缺陷才会导致删除,前端页面不刷新,但是数据库中已经没有这个数据了。
w模型和 v模型
性能测试如何做?
一、准备工作
1、系统基础功能验证
性能测试在什么阶段适合实施?切入点很重要!一般而言,只有在系统基础功能测试验证完成、系统趋于稳定的情况下,才会进行性能测试,否则性能测试是无意义的。
2、测试团队组建
根据该项目的具体情况,组建一个几人的性能测试team,其中DBA是必不可少的,然后需要一至几名系统开发人员(对应前端、后台等),还有性能测试设计和分析人员、脚本开发
和执行人员;在正式开始工作之前,应该对脚本开发和执行人员进行一些培训,或者应该由具有相关经验的人员担任。
3、工具的选择
综合系统设计、工具成本、测试团队的技能来考虑,选择合适的测试工具,最起码应该满足一下几点:
①支持对web(这里以web系统为例)系统的性能测试,支持http和https协议;
②工具运行在Windows平台上;
③支持对webserver、前端、数据库的性能计数器进行监控;
4、预先的业务场景分析
为了对系统性能建立直观上的认识和分析,应对系统较重要和常用的业务场景模块进行分析,针对性的进行分析,以对接下来的测试计划设计进行准备。
二、测试计划
测试计划阶段最重要的是分析用户场景,确定系统性能目标。
1、性能测试领域分析
根据对项目背景,业务的了解,确定本次性能测试要解决的问题点;是测试系统能否满足实际运行时的需要,还是目前的系统在哪些方面制约系统性能的表现,或者,哪些系统因素导致
系统无法跟上业务发展?确定测试领域,然后具体问题具体分析。
2、用户场景剖析和业务建模
根据对系统业务、用户活跃时间、访问频率、场景交互等各方面的分析,整理一个业务场景表,当然其中最好对用户操作场景、步骤进行详细的描述,为测试脚本开发提供依据。
3、确定性能目标
前面已经确定了本次性能测试的应用领域,接下来就是针对具体的领域关注点,确定性能目标(指标);其中需要和其他业务部门进行沟通协商,以及结合当前系统的响应时间等数据,确定
最终我们需要达到的响应时间和系统资源使用率等目标;比如:
①登录请求到登录成功的页面响应时间不能超过2秒;
②报表审核提交的页面响应时间不能超过5秒;
③文件的上传、下载页面响应时间不超过8秒;
④服务器的CPU平均使用率小于70%,内存使用率小于75%;
⑤各个业务系统的响应时间和服务器资源使用情况在不同测试环境下,各指标随负载变化的情况等;
4、制定测试计划的实施时间
预设本次性能测试各子模块的起止时间,产出,参与人员等等。
三、测试脚本设计与开发
性能测试中,测试脚本设计与开发占据了很大的时间比重。
1、测试环境设计
本次性能测试的目标是需要验证系统在实际运行环境中的性能外,还需要考虑到不同的硬件配置是否会是制约系统性能的重要因素!因此在测试环境中,需要部署多个不同的测试环境,
在不同的硬件配置上检查应用系统的性能,并对不同配置下系统的测试结果进行分析,得出最优结果(最适合当前系统的配置)。
这里所说的配置大概是如下几类:
①数据库服务器
②应用服务器
③负载模拟器
④软件运行环境,平台
测试环境测试数据,可以根据系统的运行预期来确定,比如需要测试的业务场景,数据多久执行一次备份转移,该业务场景涉及哪些表,每次操作数据怎样写入,写入几条,需要多少的
测试数据来使得测试环境的数据保持一致性等等。
可以在首次测试数据生成时,将其导出到本地保存,在每次测试开始前导入数据,保持一致性。
2、测试场景设计
通过和业务部门沟通以及以往用户操作习惯,确定用户操作习惯模式,以及不同的场景用户数量,操作次数,确定测试指标,以及性能监控等。
3、测试用例设计
确认测试场景后,在系统已有的操作描述上,进一步完善为可映射为脚本的测试用例描述,用例大概内容如下:
用例编号:查询表单_xxx_x1(命名以业务操作场景为主,简洁易懂即可)
用例条件:用户已登录、具有对应权限等。。。
操作步骤:
①进入对应页面。。。。。。
②查询相关数据。。。。。。
③勾选导出数据。。。。。。
④修改上传数据。。。。。。
PS:这里的操作步骤只是个例子,具体以系统业务场景描述;
4、脚本和辅助工具的开发及使用
按照用例描述,可利用工具进行录制,然后在录制的脚本中进行修改;比如参数化、关联、检查点等等,最后的结果使得测试脚本可用,能达到测试要求即可;
PS:个人而言,建议尽量自己写脚本来实现业务操作场景,这样对个人技能提升较大;一句话:能写就绝不录制!!!
四、测试执行与管理
在这个阶段,只需要按照之前已经设计好的业务场景、环境和测试用例脚本,部署环境,执行测试并记录结果即可。
1、建立测试环境
按照之前已经设计好的测试环境,部署对应的环境,由运维或开发人员进行部署,检查,并仔细调整,同时保持测试环境的干净和稳定,不受外来因素影响。
2、执行测试脚本
这一点比较简单,在已部署好的测试环境中,按照业务场景和编号,按顺序执行我们已经设计好的测试脚本。
3、测试结果记录
根据测试采用的工具不同,结果的记录也有不同的形式;现在大多的性能测试工具都提供比较完整的界面图形化的测试结果,当然,对于服务器的资源使用等情况,可以利用一些计数器或
第三方监控工具来对其进行记录,执行完测试后,对结果进行整理分析。
五、测试分析
1、测试环境的系统性能分析
根据我们之前记录得到的测试结果(图表、曲线等),经过计算,与预定的性能指标进行对比,确定是否达到了我们需要的结果;如未达到,查看具体的瓶颈点,然后根据瓶颈点的具体数据,
进行具体情况具体分析(影响性能的因素很多,这一点,可以根据经验和数据表现来判断分析)。
2、硬件设备对系统性能表现的影响分析
由于之前设计了几个不同的测试环境,故可以根据不同测试环境的硬件资源使用状况图进行分析,确定瓶颈是再数据库服务器、应用服务器抑或其他方面,然后针对性的进行优化等操作。
3、其他影响因素分析
影响系统性能的因素很多,可以从用户能感受到的场景分析,哪里比较慢,哪里速度尚可,这里可以根据2\5\8原则对其进行分析;
至于其他诸如网络带宽、操作动作、存储池、线程实现、服务器处理机制等一系列的影响因素,具体问题具体分析,这里就不一一表述了。
4、测试中发现的问题
在性能测试执行过程中,可能会发现某些功能上的不足或存在的缺陷,以及需要优化的地方,这也是执行多次测试的优点。
版权归原作者 卷的快乐人 所有, 如有侵权,请联系我们删除。