软件自动化测试浅析

软件测试(Software Testing):
描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。
软件测试并不只是一个发现软件BUG的过程,通过找出错误,分析其产生的原因和错误的发生趋势,可以帮助项目管理者或开发人员发现当前软件开发过程中存在的缺陷,以便及时改进,节省成本。
这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性。
在我看来,它其实是预期输出与实际输出的一个审核、对比、分析的过程。个人认为,分析显得十分重要,这不只是培养了我们的测试思维,并且让我们养成了良好的学习、生活习惯。
软件测试的方法很多,比如常见的黑白盒测试、冒烟测试、边界值测试等等。
在这里,我们只简单地将软件测试方法区分为手动测试与自动化测试两类,并着重介绍自动化测试。
手工测试:
手工测试就是由人去一个一个的去执行测试用例,通过键盘鼠标等输入一些参数,查看返回结果是否符合预期结果。
(手工测试同样需要业务熟悉、基本测试方法的理解。看似简单的工作却能够发现别人不能发现的软件问题。在目前的测试领域,手工测试仍然是无法替代的一种测试方法)
手动测试是由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果进行比较的过程。为了节省人力、时间或硬件资源,提高测试效率,便把以人为驱动的测试行为转化为机器执行,由此引入了自动化测试的概念。
自动化测试:界面自动化、接口自动化、性能自动化。
我们一般所说的自动化测试就是指功能自动化测试,通过相关的测试技术,通过编码的方式用一段程序来测试一个软件的功能,这样就可以重复执行程序来进行重复的测试。如果一个软件一小部分发生改变,我们只要修改一部分代码,就可以重复的对整个软件进行功能测试。这样就大大的提高了测试效率。
  性能自动化测试,当然,除了早期阶段,现在的性能测试工作都是通过性能测试工具辅助完成的。通过工具可以模拟成千上万的用户向系统发送请求,用来验证系统的处理能力。
我们在这里主要介绍的还是功能测试。

软件自动化测试浅析
其中Selenium RC(Selenium Remote Control)为核心部分,那么他又是怎么运行的呢:
1、在运行测试脚本前必须先启动Selenium RC Server,它扮演着浏览器和测试脚本之间通信的桥梁角色
2、当开始运行测试脚本时,Selenium RC Server会Selenium Core(js代码)注入到浏览器中以达成控制浏览器
3、Selenium Core被注入到浏览器中,Selenium Core就会开始接收并转发来自Seleniun RC Server的测试指令
4、当测试指令接收后,Selenium Core就会把它们当做js来执行
5、浏览器按照Selenium Core的指令进行操作,并将执行结果返回给Selenium RC Server,它会将接收到的结果返回给你的测试脚本
6、Selenium RC Server继续从你的测试脚本发送过来的指令中提取下一条指令,重复上述过程。
软件自动化测试浅析
Selenium搭建环境:
首先需要安装python3——安装pycharm(选择安装)——命令输入框输入pip install selenium——下载浏览器驱动(注意浏览器版本与驱动版本一定要一致,且驱动下载完成后放入python.exe存在的目录下)——打开pycharm,输入代码,运行,查看是否成功调用浏览器运行,如果运行成功,则说明已成功搭建好自动化开发环境
Selenium是一个web端的界面自动化测试工具。

Selenium相关指令:
在输入命令代码前要先导入库和类:
from selenium import webdriver ———— 导入selenium的webdriver包。
只有导入,才能用webdriver开发脚本
from selenium.webdriver.common.keys import Keys

导入提供键盘操作的类

from selenium.webdriver.common.action_chains import ActionChains

导入提供鼠标操作的类:ActionChains

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

导入WebDriverWait类

from selenium.webdriver.support import expected_conditions as EC # 导入expected_conditions类,并将它命名为EC

driver = webdriver.Chrome() /.Firefox()
用webdriver打开谷歌/火狐浏览器
driver.get(“url”)
访问网站
进入网站后会进行相应的操作,那么如何用代码来模拟人的操作呢:
首先我们需要对想要操作的对象进行定位,定位的常用方法:
1、xpath;
2、Css;
3、ID;
4、Class(在代码中是class_name);
5、link_text;
6、Name;
7、partial_link。

首先来看xpath定位:
#xpath元素定位:
driver = webdriver.Chrome() ————打开谷歌
driver.get(“https://www.bilibili.com/”)————访问bilibili网站
driver.maximize_window() # 窗口最大化
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(“jojo”) ————利用xpath定位搜索框,并输入“jojo”
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(Keys.ENTER)————再次利用xpath定位搜索框,输入回车
或者
driver.refresh() # 刷新界面 driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(“jojo”) ————利用xpath定位搜索框,并输入“jojo”driver.find_element_by_xpath(“//div[@id=‘banner_link’]/div/div/form/button”).click()————利用xpath定位搜索button,点击button
driver.quit()—————关闭浏览器

Xpath又分为 绝对路径 和 相对路径
绝对路径:从头到尾的路径显示,类似于:
html/body/div/div/div[2]/div/div/form/input
相对路径:从中间某个有唯一属性的标签开始,类似于:
//div[@id=‘banner_link’]/div/div/form/button

class元素属性定位:

driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.refresh() # 刷新界面
driver.find_element_by_class_name(“search-keyword”).send_keys(“jojo”)
#————通过搜索框的class属性对其进行定位,并输入‘jojo’
driver.find_element_by_class_name(‘search-submit’).click()
#————通过搜索button的class属性进行定位,并单击
driver.quit()
注:class在代码中是class_name

link_text元素定位:

driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_link_text(‘画友’).click()
#————通过link_text属性对‘画友’定位,并单击
driver.quit()
注:link_text用于有“href”(超链接)属性的目标元素

ID元素定位:

driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_id(‘header-mobile-app’).click()
driver.quit()

css元素定位:

driver = webdriver.Firefox()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_css_selector(“.search-keyword”).send_keys(“jojo”)
driver.find_element_by_css_selector(“#app>div>div:nth-child(2)>div>div>form>input”).send_keys(“jojo”)
driver.find_element_by_css_selector(“#app>div>div:nth-child(2)>div>div>form>input”).send_keys(Keys.ENTER)
driver.quit()
注:
#号后跟ID内容
.号后跟class内容 标签带与不带随意
[name=‘wd’]
[maxlength=‘255’][name=‘wd’] 表示and关系 ——css方法 确保属性唯一
xpath 绝对路径:html/body/div…
css 绝对路径 html body div… 或 html>body>div…
css #form>span:nth-child(8)>input 定位到form标签下的第八个span下的input 注意此处的span为form标签下,从头往下数的位置

name元素定位:

driver = webdriver.Chrome()
driver.get(“https://www.baidui.com/”)
driver.find_element_by_name(‘wd’).send_keys(‘山水’)
driver.quit()

获取尺寸及其他骚操作

import time
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
size=driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).size
print(size)

获取选中目标的尺寸

text=driver.find_element_by_xpath(“//div[@class=‘partner’]/div[2]/p”).text
print(text)

页面底部备案信息

attribute=driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).get_attribute(‘type’)
attribute1=driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).get_attribute(‘id’)
print(attribute)
print(attribute1)

由于选中目标没有ID属性,因此没有显示。

result=driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).is_displayed()
print(result)

返回元素的结果是否可见,有点不太理解

driver.quit()

键盘事件与.clear

driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_class_name(“search-keyword”).send_keys(“jojo”)
time.sleep(2)
driver.find_element_by_class_name(“search-keyword”).send_keys(Keys.CONTROL,“a”)
time.sleep(2)
driver.find_element_by_class_name(“search-keyword”).send_keys(Keys.CONTROL,“c”)
time.sleep(3)
driver.find_element_by_class_name(“search-keyword”).clear()
#driver.find_element_by_class_name(“search-keyword”).send_keys(Keys.BACK_SPACE)
time.sleep(3)
driver.find_element_by_class_name(“search-keyword”).send_keys(Keys.CONTROL,“v”)
driver.find_element_by_class_name(“search-keyword”).send_keys(Keys.ENTER)

鼠标事件

driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
time.sleep(3)
driver.maximize_window()
time.sleep(3)
ele=driver.find_element_by_xpath(“//div[@id=‘primary_menu’]/ul/li[3]/a/div[2]”) # 定位该xpath下的元素
ActionChains(driver).move_to_element(ele).perform()
time.sleep(6) # 用于生成模拟用户行为,鼠标移动到指定元素,执行储存行为
ele1=driver.find_element_by_xpath(“//div[@id=‘primary_menu’]/ul/li[3]/ul/li[5]/a”)
ele1.click()
time.sleep(6)
driver.quit()
#鼠标右键(context_click()) , 双击(double_click()) , 单击(click()),可用键盘事件中的回车键代替

back回退 以及 forward前进

driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_xpath(“//div[@id=‘primary_menu’]/ul/li[2]/a”).click()
driver.back()
time.sleep(3)
driver.forward()
time.sleep(1)
driver.quit()

元素等待时间:

时间等待

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

导入expected_conditions类,并将它命名为EC

driver = webdriver.Chrome()
time.sleep(3)

强制等待时间,3秒

driver.get(“https://www.bilibili.com/”)
driver.implicitly_wait(10)

隐式等待时间 设置的隐式等待时间最大为10秒

driver.find_element_by_class_name(“search-keyword”).send_keys(“jojo”)
WebDriverWait(driver, 5, 0.5)

显示等待时间,5 为最长时间,0.5 为每隔0.5秒检查一次

driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(Keys.ENTER)
time.sleep(3)
driver.quit()

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get(‘https://www.bilibili.com/’)
driver.refresh()
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(‘火影’)
driver.find_element_by_xpath(“//div[@id=‘banner_link’]/div/div/form/button”).click()
locator = (By.PARTIAL_LINK_TEXT, u’博人传’)
try:
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
print(driver.find_element_by_partial_link_text(u’博人传’).get_attribute(‘href’))
finally:
driver.quit()

对于until与until_not的用法还是不清楚

验证信息提取也存在问题:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

导入提供鼠标操作的类:ActionChains

driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.refresh()
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(“jojo”)
driver.find_element_by_xpath(“//div[@id=‘banner_link’]/div/div/form/button”).click()
time.sleep(5)
title = driver.title
print(title)

就像上面代码操作的一样,在页面跳转后提取title和url,但是得到的还是原来的title和url

部分关键字匹配

driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.find_element_by_class_name(“search-keyword”).send_keys(u”火影”)
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(Keys.ENTER)
time.sleep(3)
driver.find_element_by_partial_link_text(u’博人传’).click() # 此处为匹配处
上面的代码可以定位单击,但是下面的却无法定位单击
driver.find_element_by_class_name(“search-keyword”).send_keys(u”jojo”)
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(Keys.ENTER)
time.sleep(3)
ele = driver.find_element_by_partial_link_text(u’黄金之风’).get_attribute(‘href’)
time.sleep(6)
print(ele)
driver = webdriver.Firefox()
driver.get(ele)

刷新 及 查看输入内容

driver = webdriver.Chrome()
driver.get(“https://www.bilibili.com/”)
driver.maximize_window() # 窗口最大化
driver.refresh()
driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(“jojo”)
print(driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).get_attribute(‘value’))

driver.find_element_by_xpath(“html/body/div/div/div[2]/div/div/form/input”).send_keys(Keys.ENTER)

driver.find_element_by_xpath(“//div[@id=‘banner_link’]/div/div/form/button”).click()

来源:an_ostrich

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年2月27日
下一篇 2019年2月27日

相关推荐