1.什么是自动化测试
金字塔越往下效率越高,因为测试的往下是内核的东西
所以要把主要的精力放在单元测试的自动化
单元测试:
对程序最小的单元模块进行测试
java的单元测试框架是Junit //自己学习
接口测试:
测试时间段:在项目前期接口开发而成就可以开始进行测试
用例维护量比较少(与UI测试比较)
适合的项目:接口变动较少的项目
UI自动化
对系统的界面元素进行操作,模拟用户的使用,完成功能的正常和异常测试。
测试时间段:项目后期,项目完成前后端的开发和联调后‘
用例维护量:比较大
适合的项目:适合界面元素变动小的项目
2.UI自动化的好处
(1) 进行大量重复的测试,进行回归测试
(2) 减少人为出错的几率,创建一个可靠的测试过程
(3) 可以进行繁琐的测试。(比如测试过程一致,每次输入的数据不同,ddt)
(4) 进行手工测试很难执行的测试。(精准计时)
(5) 节省资源(人力资源)
(6) 脚本的复用性(脚本复用性越大,价值越高)
3.自动化框架
简单介绍一些自动化相关的框架。
RoBotFramework 关键字驱动,底层实现语言Python。
Django 接口 Python
selenium unittests Python
4.为什么选择selenium?
免费,小巧,容易安装
支持多语言:java C# ruby JavaScript Python
支持多平台:Chrome Firefox edge Opera Safari
支持多浏览器多平台的好处?
可以进行兼容性测试
支持分布式测试:selenium Grid
5.webdriver的原理
(1)运行脚本,把浏览器绑定到一个端口,这个端口就是浏览器的remote server
(2)脚本通过commandexecutor,向浏览器发送HTTP请求,控制浏览器进行一系列操作
(3)浏览器驱动把指令解析成web service的命令,驱动浏览器进行一系列的操作
6.selenium IDE
7.脚本的编写 (python环境自行安装)
(1)定位元素的方式(原则:必须全局唯一)(问:定位元素的方式有哪些)
完整练习代码如下
from idlelib import browser
from selenium import webdriver
import time
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
time.sleep(5)
#通过id来定位,全局唯一,可以唯一定位一个元素
#driver.find_element_by_id("kw").send_keys("迪丽热巴")
#time.sleep(3)
#driver.find_element_by_id("su").click()
#通过name来定位,name又能不全局唯一
#driver.find_element_by_name("wd").send_keys("赵盼儿")
#driver.find_element_by_id("su").click()
#tag_name定位
#driver.find_element_by_tag_name("input").send_keys("孙二娘")
#driver.find_element_by_tag_name("input").click()
#class name
#driver.find_element_by_class_name("s_ipt").send_keys("孙二娘")
#下面这个会失败,要用id定位
#driver.find_element_by_class_name("btn self-btn bg s_btn").click()
#link text
#driver.find_element_by_link_text("hao123").click()
#partial link text
#driver.find_element_by_partial_link_text("123").click()
#xpath 任何元素都可以定位
#driver.find_element_by_xpath("//*[@id='kw']").send_keys("赵盼儿")
#driver.find_element_by_xpath("//*[@id='su']").click()
#driver.find_element_by_css_selector("#kw").send_keys("双笙")
#driver.find_element_by_css_selector("#su").click()
#driver.maximize_window()
#获取文本信息,把内容赋给变量,获取元素上的内容
#text =driver.find_element_by_id("bottom_layer").text
#print(text)
#先搜索李易峰
#driver.find_element_by_css_selector("#kw").send_keys("李易峰")
#driver.find_element_by_css_selector("#su").submit()
#固定等待
#time.sleep(10)
#智能等待
#driver.implicitly_wait(10)
#driver.find_element_by_link_text("百度百科").click()
#driver.find_element_by_id("kw").clear()
#信息打印
#title=driver.title
#print(title)
#url=driver.current_url
#print(url)
#driver.quit()
#对浏览器操作,浏览器的最大化
#driver.find_element_by_id("kw").send_keys("王牌部队")
#driver.find_element_by_id("su").click()
#time.sleep(4)
#driver.set_window_size(400,1000)
#time.sleep(3)
#driver.maximize_window()
#time.sleep(8)
##浏览器的前讲和后退
#browser.forword()
#time.sleep(8)
#browser.back()
#ime.sleep(8)
#浏览器的滚动条的控制
#js0 ="var q =document.documentElement.scrollTop=10000"
#driver.execute_script(js0)
#time.sleep(3)
#js1 ="var q =document.documentElement.scrollTop=0"
#driver.execute_script(js1)
#time.sleep(8)
#driver.quit()
#driver.maximize_window()
#driver.find_element_by_id("kw").send_keys("元旦快乐")
#driver.find_element_by_id("su").click()
#b=driver.find_element_by_id("su")
#time.sleep(5)
#然后再用剪切的方式clear掉文本框中的输入内容
#driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
#time.sleep(3)
#driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
#time.sleep(3)
#双击
driver.maximize_window()
driver.find_element_by_id("kw").send_keys("元旦快乐")
driver.find_element_by_id("su").click()
b=driver.find_element_by_id("su")
#双击
#ActionChains(driver).double_click(b).perform
#右击
ActionChains(driver).context_click(b).perform()
time.sleep(5)
上面的代码都是根据一个元素进行查找和操作的,下一篇会讲讲根据一组元素进行操作和查找。