文章目录
- 自动化
- [Web 自动化测试](#Web 自动化测试)
- Selenium
-
- 一个简单的自动化示例
-
- [安装 selenium 库](#安装 selenium 库)
- 使⽤selenium编写代码
自动化
自动化概念
自动的代替人的行为完成操作。自动化在生活中处处可见
生活中的自动化可以减少人力的消耗,也可以提高生活的质量
软件中的自动化测试也是如此,通过自动化测试 有效减少人力的消耗的同时也提高了测试的质量和效率。
- 人工测试结果是不可控的;机器测试是可控的
- 机器一秒可以处理上百条用例,但是人工只能执行几条
测试人员编写自动化测试脚本
- 增加新的功能:测试人员需要同步增加对应的自动化脚本
- 自动化测试报错:测试人员需要维护并解决自动化脚本问题
虽然会让测试人员有额外的工作,但是这些工作,属于"一次付出,终身回报"
回归测试
自动化的主要目的就是用来进行回归测试
- 比如有一个新产品,第一个版本(具备丰富的功能)
- 功能 1
- 功能 2
- 功能 3
- ...
- 功能 n
测试的时候是以功能为维度,一个功能一个功能的执行测试。之后再站在产品的角度,以产品为维度执行测试(产品的整体回归测试)
- 已有产品,第 n 个版本(增加了额外的功能)
- 额外增加的功能 1
- 额外增加的功能 2
- 额外增加的功能 3
- ...
- 额外增加的功能 n
- 历史的功能 1
- 历史的功能 2
- ...
- 历史的功能 n
增加的功能对历史的功能有没有影响我们不知道,所以也需要再去执行"大概"的测试(不用像新产品那样执行的那么细致)
- 当我们新产品上线的时候,若增加自动化测试,那么之后对历史功能的测试就可以自动化进行了
- 此时只需要对额外的功能进行测试。
- 当心版本上线之后,再对额外的功能增加自动化测试,那么之后再有额外的功能的话,也可以进行自动化测试了
再执行测试的过程中,可能会发现 bug,bug 有自己的生命周期
- 功能维度的测试就叫做"bug 的回归测试"
常见面试题
-
自动化测试能取代人工测试吗?
- 自动化测试不一定比人工测试更能保障系统的可靠性,自动化测试是测试人员手工编写,后续如果有功能的变更,自动化也需要测试人员进行不定期的维护和更新
- 手工测试仍占主导地位
-
自动化测试可以大幅度降低工作量?
- 错误,自动化测试只是测试工作中的一小部分测试行为
- 坑!!!"一定程度上"和"大幅度"的表达方式也需要注意
- tips:测试笔试中的选择题尽量不要选择说的太死或者太绝对的选项
自动化测试金字塔
- 越往上走,投入的时间和精力越多;越往下走,获得的回报越大
- 手动/探索性测试:投入的时间和精力更多,但回报最少
- UI 自动化测试:界面测试;客户端界面、浏览器界面的统称
- 精力投入较多,回报较少
- API/集成/组件测试:接口测试;接口自动化
- 精力投入较少,回报较高
- 单元测试:对程序最小单位进行测试(最小单元是认为规定的)(方法、类、接口)
- 精力投入很少,回报非常高
- 主要由开发人员来执行,也存在较少的公司会招聘专业的单元测试人员
单元测试,比如下单功能
- 生成订单------API
- 减少库存------API
- 付费渠道------API
在企业中,越来越多人开始重视"单元测试",编写大量的单元测试脚本
理想的⾃动化测试⾦字塔表达了⾃动化测试的理想情况,利⽤较少的时间和精⼒在单元测试上就能够发现更多有效的问题。
然后实际上在企业中,⾃动化往往是"冰淇淋蛋筒反模式 "
- 实际上,测试人员在进行手动/探索性测试的时候,发现的问题比下面三个更多,投入的精力更大
- 其次是前段自动化,可以发现的问题相较于接口自动化来说要多一些。因为很多后端的问题都会体现在前端界面上
- 接口自动化:关注的是根据请求检查响应结果(响应数据类型对不对、字段有没有,但无法检查数据对不对)
- 开发人员自己写代码自己测,测试不专业,不完整。
- 开发人员非常排斥写单元测试脚本,因为开发人员编写单元测试脚本,也就意味着开发人员不仅要编写业务代码,还要编写测试代码
Web 自动化测试
自动化就是模拟人的行为,将手工执行流程转换为自动执行
百度搜索关键词"迪丽热巴",并展示相关词条
- 打开浏览器
- 输入网址:https://www.baidu.com
- 找到百度输入框,并输入"迪丽热巴"关键词
- 找到"百度一下"按钮,并点击
- 关闭浏览器
- 打开浏览器
- 手工测试:找到浏览器软件,鼠标点击启动------手工驱动
- 自动化测试:用驱动打开浏览器
驱动
web
系统的测试前提是需要打开浏览器,通过访问 web
服务器来对服务器界⾯进⾏⼀系列的操作。对于⼿⼯测试来说,这⼀系列的操作都需要测试⼈员⼿动的,⼀步⼀步的来执⾏测试。那么对于⾃动化程序来说,程序如何才能打开浏览器并执⾏我们预期的操作流程呢?
驱动⼀词应⽤⼴泛,我们都不会陌⽣。
⻋有了驱动才能够让⻋跑起来。
计算机有了驱动程序就可以与设备(⽿机,摄像头,⻨克⻛,键盘,显⽰器等等设备)进⾏通信。
程序想要打开 web
浏览器就需要安装 web
驱动(即 WebDriver
),WebDriver
以本地化⽅式驱动浏览器。
- 不同的浏览器需要不同的驱动才能打开对应的浏览器
- 不同版本的浏览器也需要不同版本的驱动
Selenium
万事俱备,只⽋东⻛。
接下来就是使⽤ selenium
来编写 web
⾃动化测试脚本。selenium
是⼀个 web
⾃动化测试⼯具,selenium
中提供了丰富的⽅法供给使⽤者进⾏ web
⾃动化测试。
- 推荐下载谷歌浏览器的驱动
一个简单的自动化示例
安装 selenium 库
xml
<dependencies>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.9.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0</version>
</dependency>
</dependencies>
使⽤selenium编写代码
java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class FirstTest {
//测试百度搜索关键词:迪丽热巴
void test01() throws InterruptedException {
//1. 打开浏览器(使用驱动打开)
//WebDriverManager.chromedriver().setup();
System.setProperty("webdriver.chrome.driver", "D:/My Computer/02_Stricky/02_Code/chromedriver-win64/chromedriver-win64/chromedriver.exe");
//增加浏览器配置,创建驱动对象要强制指定允许访问所有的链接
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver driver = new ChromeDriver(options);
//Thread.sleep(3000);
//2. 输入完整的网址:https://www.baidu.com
driver.get("https://www.baidu.com");
Thread.sleep(1000);
//3. 找到输入框,并输入关键词:迪丽热巴
driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
Thread.sleep(1000);
//4. 找到百度一下按钮,并点击
driver.findElement(By.cssSelector("#su")).click();
Thread.sleep(1000);
//5. 关闭浏览器
driver.quit();
}
}