测试用到的测试工具总结一手
.什么是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
import time
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 import webdriver
# 导入time sleep设置等待时间 sleep单位为秒
import time
# 初始化谷歌浏览器驱动
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模型