1.什么是软件测试 答:软件测试就是验证软件功能是否满足用户需求 测试左移:需求前调研阶段和需求阶段,测试人员参加。 测试右移:产品上线后,系统监控,日志记录和分析。
2.什么是测试用例? 答:向被测试系统发起的一组集合,这组集合包括测试数据、测试步骤、测试平台、预期结果。
3.开发模型 1)瀑布模型 start—>需求分析—>计划—>设计—>编码—>测试—>end 优点:强调开发的阶段性,强调早期计划及需求调查,强调产品测试,各阶段比较独立。 缺点:无法适应需求的变化;测试到编码后才介入,导致前期的缺陷无法及时发现。无法及时修正。 适用的项目:适用于需求稳定的项目
2)螺旋模型 适用的项目:前期需求不是很明确,并且有风险,项目比较庞大的系统开发; 优点:强调软件质量,每一次迭代进行严格的风险分析,提供讨论项目是否有必要进行下去的机会。 缺点:引入风险管理,会投入大量人力物力。
3)迭代、增量模型 一个系统四个功能 A、B、C、D模块,两周时间完成 迭代模型:第一周完成 A、B、C、D,第二周细化和完善 增量模型:第一周 A、B 第二周C、D 迭代模型抗风险能力更强
4)敏捷模型 轻文档、轻流程,重目标、重质量,交付一个高质量的可以用软件可以适应需求的变化
软件开发的生命周期:需求分析—>计划—>设计—>编码—>测试—>运行维护
4.测试用例的基本要素 向测试系统发起的一组集合,测试平台、测试数据、测试步骤、预期结果等。
5.设计测试用例的方法
需求分析—>软件需求—>开发软件 —>测试功能 —>上线 1.根据需求去设计测试用例
- 验证需求的正确性
- 分析需求,细化需求,从需求中提炼功能模块,划分子功能根据每一个子功能去写测试用例。
2.具体的设计测试用例的方法 1)等价类 把输入划分成若干各等价类,从每一个等价类当中选一个有代表性的测试用例进行测试,如果这个测试用例测试通过,那我们就说这个测试用例代表的等价类测试通过。 2)边界值 针对输入输出的边界进行测试用例的设计。 等价类+边界值—> 进行测试用例的设计 3)因果图法 因果图是一种逻辑图 当输入有很多,不同输入的组合对应不同的输出,用因果图来分析不同输入组合和不同输出之间的关系。 用因果图法设计测试用例的步骤: (1)分析出所有的输入和输出 (2)找出输入输出之前的逻辑关系 (3)根据输入输出的关系画因果图 (4)根据因果图画判定表 (5)根据判定表设计测试用例
4)正交法 研究多因素多水平的一种实验(测试)方法。根据正交性,从输入组合当中选最优的组合进行试验、分析结果。通过这些最优组合得出的试验结果来分析这个试验的结果。 因素:输入的变量 水平:变量的取值 正交表构成: 列:因素数,变量的个数 行:因素的最大的变量个数 水平数:每个变量的最大个数 L(正交表的行) = (水平数-1)x 因素数+1
正交表的性质: (1)每一列不同数据出现的次数一致 (2)任意两列不同数据的组合出现的次数一样
5)场景法 6)错误猜测法
3.按开发阶段划分 单元测试 测试阶段:编码前(TDD)编码后 Test-Driven-Develop测试驱动开发 测试内容:单元接口测试(按照接口设计文档,参数,输出)局部数据结构测试(局部变量)边界测试
集成测试 按照一定的策略把单元模块组装起来 测试内容:模块之间数据的传输(输入输出,参数),模块之间功能的冲突,全局数据结构,单个模块的缺陷对象整个功能的影响。
系统测试 对被测软件应用系统进行全面的系统的测试 测试内容:功能,界面,性能,安全性,兼容性,可靠性,可移植性等
- 回归测试:当系统引入新代码(出现新功能,修改了BUG)的时候进行回归测试
- 冒烟测试:判断系统是否可以进行全面系统测试的标准验收测试
4.按照实施组织划分 a测试,β测试 测试环境:a在开发环境,β在实际使用环境 测试人员:a测试出来开发人员和测试人员以外的任何人,β测试是实际用户在进行β测试前要进行很长一段时间的a测试。
5.按是否查看代码划分 黑盒测试:把软件当成一个黑色的盒子,软件的具体实现是被屏蔽的,只关心软件的输入与输出。 测试方法:等价类、边界值、因果图法、场景法、错误测试法、正交法 白盒测试:对软件的具体实现,程序的逻辑和结构进行测试 测试方法:语句覆盖、路径覆盖、循环覆盖、逻辑覆盖(判定覆盖、条件覆盖、判定和判定组合覆盖、条件和条件组合覆盖、判定和条件组合覆盖)
6.性能测试
UI自动化测试和接口自动化测试
UI自动化测试:
1.用例维护量大 2.UI自动化测试在项目后期进行 3.适用于界面稳定的项目
接口自动化测试:
1.用例维护量相对少 2.在接口开发完之后就可以做(提前介入) 3.适合于接口稳定的项目
接口自动化测试投入产出比(效率)高于UI界面层的自动化测试
自动化适用的对象:周期比较长,项目比较稳定,需求不频繁变动的项目,产品型的项目
selenium工具
webdriver工作原理:相当于出租车 测试脚步—>乘客 webdriver—>司机 浏览器—>出租车
元素定位 1.id定位:find_element_by_id() 从上面定位到的搜索框属性中,有个id="kw"的属性,我们可以通过这个id定位到这个搜索框
# coding = utf-8
from time import sleep
from selenium import webdriver
# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 通过id定位搜索框,并输入selenium
driver.find_element_by_id('kw').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()
2.name定位:find_element_by_name() 从上面定位到的搜索框属性中,有个name="wd"的属性,我们可以通过这个name定位到这个搜索框
# coding = utf-8
from time import sleep
from selenium import webdriver
# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 通过name定位搜索框,并输入selenium
driver.find_element_by_name('wd').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()
3.class定位:find_element_by_class_name() 从上面定位到的搜索框属性中,有个class="s_ipt"的属性,我们可以通过这个class定位到这个搜索框
# coding = utf-8
from time import sleep
from selenium import webdriver
# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 通过class定位搜索框,并输入selenium
driver.find_element_by_class_name('s_ipt').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()
4.tag定位:find_element_by_tag_name() 如果懂HTML知识,我们就知道HTML是通过tag来定义功能的,比如input是输入,table是表格,等等…。每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多div,input,a等tag,所以很难通过tag去区分不同的元素。基本上在我们工作中用不到这种定义方法,仅了解就行。下面代码仅做参考,运行时必定报错
# coding = utf-8
from time import sleep
from selenium import webdriver
# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 通过tag定位搜索框,并输入selenium, 此处必报错
driver.find_element_by_tag_name('input').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()
5.link定位:find_element_by_link_text() 此种方法是专门用来定位文本链接的,比如百度首页右上角有“新闻”,“hao123”,“地图”等链接
# coding = utf-8
from time import sleep
from selenium import webdriver
# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 通过link定位"新闻"这个链接并点击
driver.find_element_by_link_text('新闻').click()
# 等待5秒
sleep(5)
# 退出
driver.quit()
6.partial_link定位:find_element_by_partial_link_text() 有时候一个超链接的文本很长很长,我们如果全部输入,既麻烦,又显得代码很不美观,这时候我们就可以只截取一部分字符串,用这种方法模糊匹配了。
我们用这种方法来定位百度首页的“新闻”超链接
# coding = utf-8
from time import sleep
from selenium import webdriver
# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 通过partial_link定位"新闻"这个链接并点击
driver.find_element_by_partial_link_text('闻').click()
# 等待5秒
sleep(5)
# 退出
driver.quit()
7.xpath定位:find_element_by_xpath()
前面介绍的几种定位方法都是在理想状态下,有一定使用范围的,那就是:在当前页面中,每个元素都有一个唯一的id或name或class或超链接文本的属性,那么我们就可以通过这个唯一的属性值来定位他们。
但是在实际工作中并非有这么美好,有时候我们要定位的元素并没有id,name,class属性,或者多个元素的这些属性值都相同,又或者刷新页面,这些属性值都会变化。那么这个时候我们就只能通过xpath或者CSS来定位了。
8.CSS定位:find_element_by_css_selector() 这种方法相对xpath要简洁些,定位速度也要快些,但是学习起来会比较难理解,这里只做下简单的介绍。
CSS定位百度搜索框
性能测试 1.并发测试 是指在一定的软件、硬件及网络环境下,通过运行一种或多种业务在不同虚拟用户数量情况下测试服务器的性能指标是否在用户的要求范围内,用于确定系统能承载的最大用户数、最大有效用户数以及不同用户数下的系统响应时间及服务器的资源利用率。
2.容量测试 是指一定的软件、硬件及网络环境下,例如向数据库中构造不同数量级别的数据记录,通过运行一种或多种业务在一定的虚拟用户数量情况下,获取不同数据级别的服务器性能指标,以确定数据库的最佳容量。
3.压力测试 在高于性能测试拐点的情形上,测试软件的表现形式。
4.可靠性测试
5.配置测试
unittest框架
unittest框架是基于UI界面层的单元功能测试框架(黑盒测试) 1)测试固件 setUp() 进行初始化 tearDown() 进行测试完后的清理工作
2)TestCase 测试用例 测试方法:test_
3)批量执行 把多个测试用例(可以是一个脚本中,也可以是多个脚本中)放到一个测试套件中去执行。
4)执行测试用例 TestRunner
5)生成测试报告 HTMLRunner
python测试代码如下
import selenium import webdriver
import unittest
import time
class baidu(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.url = "http://www.baidu.com/"
self.drivr.maximize_window()
time.sleep(3)
def tearDown(self):
self.driver.quit()
def test_hao(self):
driver = self.driver
url = self.url
driver.get(url)
driver.find_element_by_link_text("hao123").click()
time.sleep(6)
def baidu(self):
driver = self.driver
url = self.url
driver.get(url)
driver.find_element_by_id("kw").send_keys("突如其来的假期")
driver.find_element_by_id("su").submit()
time.sleep(6)
if__name__=="__main__":
unittest.main(verbosity=0)
addTest()的应用
def createsuite():
suite = unittest.TestSuite()
suite.addTest(testbaidu1.Baidu("test_hao"))
suite.addTest(testbaidu1.Baidu("test_baidu"))
return suite
if__name__=="__main__":
suite = createsuite()
runner = unittest.TextTestRunner(verbosity = 0)
runner.run(suite)
|