10、自动化测试技术

目录

自动化测试

特点

通常情况下,引入自动化测试需要满足以下条件:

自动化测试的适用范围

自动化测试的局限

 自动化测试的原理 

自动化测试的流程  

 测试用例模板

 自动化测试的关键技术

对象识别;

脚本技术;

自动比较技术;

自动化测试框架。

实验

Web自动化测试

1. 主流的Web自动化测试工具

Selenium家族史

基于Python环境搭建 

页面元素定位

2. 元素定位方式

元素常用操作方法

Unitest单元测试框架 

为什么使用UnitTest框架

UnitTest核心要素

 Unitest断言方法(直接在测试类中使用即可)

生成HTML测试报告 

HTML测试报告生成步骤


自动化测试

通过测试工具,测试脚本等手段,按照测试工程师的预定计划对软件产品进行自动的测试,从而验证软件是否满足用户的需求。

特点

可重复性

可操作系统

高效率

通常情况下,引入自动化测试需要满足以下条件:

项目需求变动不频繁

项目周期足够长

自动化测试脚本可重复使用

自动化测试的适用范围

 对涉及非常重要的测试和范围宽广的测试。如组件、功能、性能、安全性、移动 APP 的兼容性测试等;内部系统之间的交互点。

期望测试结果完全可以预料,测试的复用性要求较强的情形。

要求加快软件开发周期,期望通过自动化测试缩短测试周期,并通过自动化测试希望增加软件信度的测试。如安全性测试等

执行某些手工测试困难或不可能进行的测试。如性能测试的负载测试等。

对运行频繁的测试,或在较少时间内需更多测试。

需要进行全面、准确、快速响应的测试,并进行全面的测试管理运用。如实施测试管理的全过程。

自动化测试的局限

自动化测试不能代替手工测试,有其局限性,具体表现在:

预期结果不确定时;

缺乏自动化测试经验时;

文档较少或文档不一致时;

发现缺陷能力不足;

测试成本较高。

以用户登录功能为例,如何使用自动化测试技术对其进行测试?

执行测试前,应完成测试用例设计

 自动化测试的原理 

录制/回放技术

测试过程

自动录制手工操作,转化为测试脚本;

通过在脚本中插入指令来设置校验点;

测试工具通过读取脚本,执行插入的指令,并根据脚本的设置重复执行制定的测试用例。

自动化测试的流程  

 测试用例模板

 

 自动化测试的关键技术

对象识别;

Windows对象; App对象; Web对象;

脚本技术;

  1. 线性脚本:是录制手工执行的测试用例得到的脚本,这种脚本包含所有的击键、移动、输入数据等,所有录制的测试用例都可以得到完整的回放
  2. 结构化脚本:类似于结构化程序设计,具有各种逻辑结构、函数调用功能
  3. 数据驱动脚本:将测试输入存储在独立的(数据)文件中,而不是存储在脚本中
  4. 关键字驱动:“填表格”式的关键字驱动封装了很多底层的东西,测试人员进行自动化测试时只要考虑3个问题就可以了:做什么、对谁做、怎么做。

自动比较技术;

  • 静态比较和动态比较,
  •  简单比较和复杂比较,  
  • 敏感性测试比较和健壮性测试比较  
  • 比较过滤器

验证点命令

对象

verifyTitle 

My Page 

verifyValue 

nameField 

John Smith 

verifySelected 

dorpdown2 

value=js*123 

verifyTextPresent 

You are now logged in 

verifyAttribute 

txt1@class 

bigAndBlod 

verfyVisible 

postcode 

自动化测试框架。

Selenium自动化测试工具

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作网站一样。Selenium支持的浏览器包括IE(7, 8, 9, 10, 11)、Mozilla Firefox、Safari、Google Chrome、Opera等。这个工具的主要功能包括:

测试与浏览器的兼容性 、测试系统功能

在普遍的经验中,一般会对具有下列特征的项目开展UI自动化测试:

软件需求变动不频繁

项目周期较长

Selenium IDE:嵌入在Firefox浏览器中的插件,用于在Firefox上录制与回放Selenium脚本。

接下来编写第一个Selenium Python脚本,本例使用Selenium WebDriver提供的类和方法模拟用户与浏览器的交互,代码如下所示。

不同的浏览器版本需要下载匹配其版本的驱动程序

谷歌:http://npm.taobao.org/mirrors/chromedriver/

火狐:https://github.com/mozilla/geckodriver/releases

Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

 查看自己的谷歌浏览器对应驱动版本_谷歌浏览器驱动_微信153的博客-CSDN博客

Selenium WebDriver:用于操作浏览器的一套API,可以支持多种编程语言。

Selenium-client是测试人员编写的测试代码,但是这些代码无法直接操作浏览器,而WebDriver(也就是浏览器所对应的驱动程序)在Selenium脚本和浏览器之间扮演了类似中介的角色,实际上是Selenium-client去请求WebDriver,然后WebDriver通过调用浏览器原生组件驱动浏览器操作。

  

WebDirver通过一些方法来实现与浏览器窗口、网页和页面元素的交互。

Selenium WebDriver的功能

示例:定位一组元素

此示例用于在百度首页找到所有的链接,并输出链接文字 

WebElement接口

 

Selenium Grid:支持在若干个节点上并行执行多个测试,这些结点可以运行不同的浏览器和操作系统。 

 ========================================================================

实验

Web自动化测试

1. 主流的Web自动化测试工具

(1) QTP QTP是一个商业化的功能测试工具,收费,支持web,桌面自动化测试。

(2)Selenium(本课学习) Selenium是一个开源的web自动化测试工具,免费,主要做功能测试。

(3)Robot framework Robot Framework是一个基于Python可扩展地关键字驱动的测试自动化框架。

Selenium家族史

基于Python环境搭建 

1. Python 开发环境

2. 安装selenium包      

pip install selenium

3. 安装浏览器

4. 安装浏览器驱动 -- 保证能够用程序驱动浏览器,实现自动化测试(可放置在Python安装主目录或项目所在目录)

示例:通过程序启动浏览器,并打开百度首页,暂停3秒,关闭浏览器

1. 导包
 from selenium import webdriver
 import time
2. 创建浏览器驱动对象
 Firefox浏览器:driver = webdriver.Firefox()
 Chrome浏览器:driver = webdriver.Chrome()
 Edge浏览器:driver = webdriver.Edge()
3. 打开Web页面
 driver.get("http://www.baidu.com/")
4. 暂停
 time.sleep(3)
5. 关闭驱动对象
 driver.quit()

页面元素定位

1. 如何进行元素定位?

html页面由标签构成,标签的基本格式如下:
 <标签名 属性名1="属性值1" 属性名2="属性值2">文本</标签名>
示例:
 <input id="username" type="text" name="username" placeholder="用户名" />
 <div id="my_cart">
 <span>我的购物车</span>
 </div>

元素定位就是通过元素的信息或元素层级结构来定位元素的。

2. 元素定位方式

Selenium提供了八种定位元素方式

id  element = driver.find_element_by_id(id)

name  element = driver.find_element_by_name(name)

class_name  element = driver.find_element_by_class_name(class_name)

tag_name  element = driver.find_element_by_tag_name(tag_name)

link_text  element = driver.find_element_by_link_text(link_text)

partial_link_text  element = driver.find_element_by_partial_link_text(partial_link_text)

XPath  element = driver.find_element_by_xpath(xpath)

CSS  element = driver.find_element_by_css_selector(css_selector)

例:id定位方式

id定位就是通过元素的id属性来定位元素,HTML规定id属性在整个HTML文档中必须是唯一的; 前提:元素有id属性 id定位方法:element = driver.find_element_by_id(id)

1. 导入selenium包 --> from selenium import webdriver
2. 导入time包 --> import time
3. 实例化浏览器驱动对象 --> driver = webdriver.Firefox()
4. 打开登录页A.html --> driver.get(url)
5. 调用id定位方法 --> element = driver.find_element_by_id("")
6. 使用send_keys()方法输入内容 --> element.send_keys("admin")
7. 暂停3秒 --> time.sleep(3)
8. 关闭浏览器驱动对象 --> driver.quit()
说明:为了更好的学习体验,我们先暂时使用下send_keys()方法来输入内容

元素常用操作方法

id定位就是通过元素的id属性来定位元素,HTML规定id属性在整个HTML文档中必须是唯一的; 前提:元素有id属性 id定位方法:element = driver.find_element_by_id(id)

1. 导入selenium包 --> from selenium import webdriver
2. 导入time包 --> import time
3. 实例化浏览器驱动对象 --> driver = webdriver.Firefox()
4. 打开登录页A.html --> driver.get(url)
5. 调用id定位方法 --> element = driver.find_element_by_id("")
6. 使用send_keys()方法输入内容 --> element.send_keys("admin")
7. 暂停3秒 --> time.sleep(3)
8. 关闭浏览器驱动对象 --> driver.quit()
说明:为了更好的学习体验,我们先暂时使用下send_keys()方法来输入内容

Unitest单元测试框架 

UnitTest是Python自带的一个单元测试框架,用它来做单元测试

为什么使用UnitTest框架

1. 能够组织多个用例去执行

2. 提供丰富的断言方法

3. 能够生成测试报告

UnitTest核心要素

1. TestCase

2. TestSuite

3. TestRunner

4. Fixture

案例:蛋糕商城购物系统登录功能自动化测试

实现思路

1. 导包:import unittest

2. 定义测试类:新建测试类必须继承unittest.TestCase

3. 定义测试方法:测试方法名称命名必须以test开头

 Unitest断言方法(直接在测试类中使用即可)

序号

断言方法 

断言描述

1

assertTrue(expr, msg=None) 

验证expr是true,如果为false,则fail

2

assertFalse(expr, msg=None) 

验证expr是false,如果为true,则fail

3

assertEqual(expected, actual,msg=None)

验证expected==actual,不等则fail 【掌握】

4

assertNotEqual(first, second,msg=None) 

验证first != second, 相等则fail

5

assertIsNone(obj, msg=None) 

验证obj是None,不是则fail

6

assertIsNotNone(obj, msg=None)

验证obj不是None,是则fail

7

assertIn(member, container, msg=None)

验证是否member in container【掌握】

8

assertNotIn(member, container,msg=None)

验证是否member not in container

生成HTML测试报告 

HTMLTestReport

UnitTest框架本身不支持生成HTML格式的测试报告

网上有很多类库都可以实现,基本用法都类似,只是生成的HTML报告样式有差别

本课程中使用 HTMLTestReport 类库来生成测试报告

HTML测试报告生成步骤

1. 导包: from htmltestreport import HTMLTestReport

2. 封装测试套件

3. 实例化HTMLTestReport对象

4. 执行测试套件: report.run(suite)

37 UnitTest框架 - 生成HTML测试报告_unittest生成html报告_是李黏黏鸭的博客-CSDN博客

=========================================================================

(1)打开网上蛋糕商城购物系统首页,使用Python+Selenium自动化测试工具,编写脚本,完成以下操作:

① 通过链接文本定位登录链接,并单击登录链接。

② 打开登录页面后,切换页面窗口到登录页面窗口,通过name属性定位用户名,并输入正确的用户名”admin”。

③ 通过xpath相对路径定位密码,并输入正确的密码”admin”。

④ 通过CSS定位方式中属性选择器定位登录按钮并单击。

⑤ 停留5秒后关闭浏览器。

我在jupyter上写的

from selenium import  webdriver
import time

#实例化浏览器对象
driver=webdriver.Chrome()
#打开系统页面
driver.get("http://localhost:8080/")
driver.find_element_by_link_text("登录").click()
driver.find_element_by_name("ue").send_keys("admin")
driver.find_element_by_xpath("//input[@type='password']").send_keys("admin")
driver.find_element_by_xpath("//input[@type='submit']").click()

#强制等待
time.sleep(3)
driver.quit()

 (2)请根据提供的测试用例模板,针对登录功能设计测试用例,并根据设计的测试用例编写自动化测试脚本,要求使用Unittest框架进行测试用例管理,并生成HTML测试用例报告。

测试脚本
# 测试脚本
import unittest
import time
from selenium import webdriver
from htmltestreport import HTMLTestReport

class LoginTestCase(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(5)
        self.driver.get("http://localhost:8080/user_login.jsp")
        login_link = self.driver.find_element_by_link_text("登录")
        print(login_link.text)
        login_link.click()
        self.driver.switch_to.window(self.driver.current_window_handle)
    #测试方法,一个测试方法执行一条测试用例
    def test_login(self):
        # 定位用户名输入框
        username = self.driver.find_element_by_name("ue")
        username.send_keys("admin")
        # 定位密码输入框
        password = self.driver.find_element_by_xpath("//input[@type='password']")
        password.send_keys("123")
        # 定位登录按钮
        login_btn = self.driver.find_element_by_xpath("//input[@type='submit']")
        login_btn.click()

        msg = self.driver.find_element_by_xpath("/html/body/div[2]/div/div/div[1]").text
        self.assertIn("用户名、邮箱或者密码错误,请重新登录!", msg)
    def tearDown(self):
        time.sleep(3)
        self.driver.quit()



测试文件

import unittest
from htmltestreport import HTMLTestReport
from lab10_2 import LoginTestCase

# 生成测试套件
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(LoginTestCase))

# 实例化HTMLTestReport对象
report_path = "./report.html"
report = HTMLTestReport(report_path,title='登录测试报告',description='LoginTestCase函数测试报告V1.0')

# 执行测试套件
report.run(suite)

 效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值