软件测试——蓝桥杯笔记(自用)

@Before和@BeforeClass,在测试前,初始化Driver,@BeforeClass适用于静态方法

@After和@AfterClass,在测试后,关闭Driver,@AfterClass适用于静态方法

自动化测试记得使用@BeforeClass,@AfterClass

单元测试记得使用@BeforeClass

用例优先级

高:功能性验证的测试用例

中:错误和边界值的测试用例

低:非功能性(性能和可用性)的测试用例

缺陷报告

功能性错误是1级,页面是2级

功能测试

1.等价类:有效等价和无效等价,有效等价是符合要求的,无效等价是不符合要求的

Step1:划分有效等价和无效等价,列出等价类表

Step2:一一列出输入条件中可能得组合输入情况

Step3:编写测试用例

2.边界值:上点、离点、内点

Step1:根据等价类划分有效及无效等价类,确定上点、离点及内点,每个点统一编号。

Step2:使其尽可能覆盖所有尚未覆盖的有效等价类,直到所有有效等价类完全覆盖。

Step3:使其仅覆盖一个无效等价类,直到所有无效等价类完全覆盖。

3.判定表:条件的组合判断,条件桩、条件项、动作桩、动作项

Step1:列出所有的条件桩和条件项

Step2:列出所有的动作桩和动作项

Step3:设计初始判定表

Step4:简化判定表

4.因果图:利用图解法分析输入的各种组合情况。

Step1:列出原因和结果

Step2:画出因果图

Step3:将因果图转换成判定表

5.正交表:因素指个数,水平指可能的取值,L16(4^3)指三因素、四水平,先取最多的水平,若为4则共4*4=16行,然后按11112222333444写。其余看情况,不要有重复!!

6.场景法:模拟用户操作软件时的场景,主要用于测试系统的业务

基本流也叫有效流或正确流,主要是模拟正确的业务操作过程的情景

备选流:无效流或错误流,主要是模拟错误的业务操作过程的情景。

7.大纲法:

8.错误推测法:按经验对可能发生错误的地方测试,如:重复输入等

自动化测试

浏览器操作:前面都有driver

get(): 打开浏览器

getTitle(): 获取浏览器标题

getCurrentUrl(): 获取当前页面的 URL 地址

close(): 关闭浏览器

quit(): 退出浏览器

navigate().to(): 进入指定页面

navigate().back(): 后退到上一个页面

navigate().forward(): 前进到下一个页面

refresh(): 刷新页面

switchTo().window(): 切换窗口

window().maximize():最大化

window().fullscreen():全凭

window().getSize():获取大小

window().setSize(Dimension targetSize):设置大小

window().getPosition():获取位置

window().setPosition(Point targetPosition):设置位置

元素定位:findElement()

By.Id

By.name

By.xpath:选择绝对路径不要相对路径

By.tagName

By.cssSelector

元素操作:前面都有element

getText(): 获取元素的文本信息,也就是在开始和结束标签之间的内容,该内容可以用于断言我们定位到的元素是不是我们想要的元素

getTagName(): 获取元素的标签名,该方法也可以用于判断是否定位到了正确的元素

getAttribute(): 根据元素的属性名获取元素的属性值

isEnabled(): 判断元素是否可以操作,如 click() 点击 等,返回值为 True 或 False

isDisplayed(): 判断元素是否在页面上展示

isSelected(): 选项或者元素是否被选中,在单选或者多选框中常用到

click(): 适用于任何元素,对其进行点击操作

send_keys(): 适用于文本区域或者可编辑的元素,可以输入指定内容

clear(): 适用于文本区域或者可编辑的元素,可以清空文本内容

submit(): 适用于 Form 表单元素,用于提交数据,Selenium 4 中不再推荐使用此方法,而是推荐直接点检表单的提交按钮

select: 选择单选或者多选框中的元素

鼠标操作:

Actions actions = new Actions(driver)

actions.clickAndHold().moveToElement().release().build().perform();

actions.keyDown()

actions.keyUp()

执行顺序:@FixMethodOrder(MethodSorters.NAME_ASCENDING)

getText()获取文本值,隐藏的获取不了

getAttribute("textContent")返回的是元素及其所有子元素的文本内容,而不会受 CSS 样式的影响。

driver.switchTo().frame(index),切换iframe

driver.switchTo().defaultContent(),若失败记得回到默认地方

输入框记得先清空clear,再输入数据sendKeys

driver.getWindowHandle();//获取当前操作窗口的句柄

driver.getWindowHandles();//获取测试时打开的所有窗口句柄

但是返回的是set,可以循环然后加到list调用

浏览器前进、后退操作:driver.navigate().back();driver.navigate().forward();

弹窗操作:Alert alert = driver.switchTo().alert()

alert.accept() alert.dismiss() alert.getText()

单元测试

基本路径法:画出控制流图,然后导出可能的路径,路径数=E-N+2或P+1,如果是且就按顺序进行查看,如果是或就分成2个分支

语句覆盖:每个语句至少执行一次

条件覆盖:每个条件取真、取假至少一次

判定覆盖:每个判断取真、取假至少一次

条件判断覆盖:包括条件覆盖和判定覆盖

组合覆盖:每个可能取真、取假组合都执行一次

简单循环:0次、1次、2次、n-1次、n次和n+1次

嵌套循环:分为外层循环和内层循环,分别都1次2次m次,先对内层测试,再对外层

串接循环:对第一个和第二个循环都1次2次m次,先对第二个测试,再对第一个

断言:

assertEquals 断言两个值是否相等

assertTrue 断言一个条件是否为真

assertFalse 断言一个条件是否为假

assertNull 断言一个对象是否为 null

assertNotNull 断言一个对象是否不为 null

assertSame 断言两个对象是否引用了相同的对象

assertNotSame 断言两个对象是否未引用同一个对象

assertArrayEquals 断言预期数组和结果数组是否相等

常用注解:

@Test 标注于方法之上,表示该方法是一个测试方法

@Test(timeout=xxx) 约束测试方法运行的最长时间,超时则测试失败

@Test(expected=*.class) 用于对方法内部抛出的异常进行验证

@Before 在每个测试用例之前执行某些语句,例如,初始化数据等

@After 在每个测试用例之后执行某些语句,例如,重置变量、删除临时文件、变量等

@BeforeClass 在当前测试类的所有测试用例之前执行某些语句,例如,建立连接

@AfterClass 在当前测试类的所有测试用例之后执行某些语句,例如,执行所有测试用例后释放资源

@Ignore 执行时忽略(跳过)测试方法

@Runwith 放在测试类名之前,用来确定该类的运行方式,也可以不标注,如不标注则会使用默认运行器

@SuiteClasses 用于在套件测试中标识运行的测试类,如:@SuiteClasses({ ClassATest.class, ClassBTest.class })

@Parameters 用于参数化测试

@Test:每个测试都需要加

执行顺序:@FixMethodOrder(MethodSorters.NAME_ASCENDING)

延时测试:@Test(timeouts=1000)

异常测试:@Test(expected= ***.class)或者fail()方法

参数化测试:类上@RunWith(Parameterized.class),在方法上@Parameters

++++@Parameters++++

++++public static Collection<?> data(){++++

++++return Arrays.asList(new Object[][] {++++

++++{0,0},{1,1},{-1,1}++++

++++});++++

++++}++++

++++@RunWith(Parameterized.class)++++

++++public class FactorialTest {++++

++++private int expected ; //测试用例的预期结果++++

++++private int inputData ; //测试用例的输入数据++++

++++private Factorial factorial = null;++++

++++//在该测试类的每一个测试方法执行前实例化被测试类++++

++++@Before++++

++++public void setUp() {++++

++++factorial = new Factorial();++++

++++}++++

++++//测试用例数据集++++

++++@Parameters++++

++++public static Collection<Object[]> testData() {++++

++++Object[][] obj = { { 0, 0 },++++

++++{ 1, 1 },++++

++++{ 2, 2 },++++

++++{ 120, 5 },++++

++++{ 362880, 9 },++++

++++{ 3628800, 10 },++++

++++{ 0, 11 }};++++

++++return Arrays.asList (obj);++++

++++}++++

++++//构造方法++++

++++public FactorialTest ( int expected ,int inputData ) {++++

++++this.expected = expected;++++

++++this.inputData = inputData;++++

++++}++++

++++//测试方法++++

++++@Test++++

++++public void testGetFactorial () {++++

++++Assert.assertEquals(this.expected, factorial.getFactorial(this.inputData));++++

++++}++++

++++}++++

相关推荐
2501_926978334 小时前
“LLM的智能本质--AGI的可能路径--人类的意识本质”三者的统一基底(5.0理论解读)
人工智能·经验分享·笔记·深度学习·机器学习·ai写作·agi
لا معنى له4 小时前
WAM与AC-WM:具身智能时代的世界动作模型与动作条件世界模型
人工智能·笔记·学习
Alicx.4 小时前
dfs由易到难
算法·蓝桥杯·宽度优先
心软小念5 小时前
金三银四,全网最详细的软件测试面试题总结
软件测试·面试·职场和发展
Wilber的技术分享6 小时前
【LeetCode高频手撕题 2】面试中常见的手撕算法题(小红书)
笔记·算法·leetcode·面试
愚昧之山绝望之谷开悟之坡6 小时前
合格境外投资者
笔记
软件测试媛7 小时前
软件测试常见的面试题(46道)
功能测试·面试·职场和发展
IronMurphy7 小时前
【算法三十一】46. 全排列
算法·leetcode·职场和发展
寒秋花开曾相惜8 小时前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
_李小白9 小时前
【AI大模型学习笔记之平台篇】第五篇:Trae常用模型介绍与性能对比
人工智能·笔记·学习