使用场景
自动化测试的初心,是为了提高测试效率,方便进行回归测试。
在编写自动化测试脚本代码的时候, 如果是一个人去写,可能管理起来还比较方便。但是随着用例数的不断增加,以及在多人协同编写的时候,管理成本会大大增加,最终就会导致写自动化代码的时间远大于测试的时间,与初心背道而驰了~
解决方案:借助面向对象的思想,对编写的测试代码进行封装,采用关键字的方式来进行。
交互方式:用户编写测试用例,但是需要多编写一个字段,用来当做关键字,后续代码从这个字段中读取进行匹配,调用相应的函数。因此还需要对相应的函数进行封装。
下面拿一个简单的UI自动化的进行举例。
使用技术:Selenium+Junit
测试用例编写
关键字驱动主要是需要把操作拆开来,对每一步进行封装,并用一个关键字来表示。

@Test
public void Test02() throws Exception {
//从文件中读取测试用例
String fileName = "E:\\case01.xlsx";
CaseExcelListener caseExcelListener = new CaseExcelListener();
EasyExcel.read(fileName, Case.class, caseExcelListener).sheet().doRead();
//调用封装测试框架
Keyword run = new Keyword();
for(Case e : caseExcelListener.getCaseList()){
//获取Excel表格中每一行的关键字
String keyword = e.getKeyword();
switch(keyword){
case "openBrowser" -> run.openBrowser(e.getContent());
case "openUrl" -> run.openUrl(e.getContent());
case "inputText" -> run.inputText(e.getType(), e.getElement(), e.getContent());
case "clickButton" -> run.clickButton(e.getType(), e.getElement());
case "assertUrl" -> run.assertUrl(e.getExpectedValue());
default -> System.out.println("错误!");
}
}
}
关键字代码封装
public class Keyword {
private WebDriver webDriver = null;
public Keyword() {
}
//隐式等待元素
private void elementWait(){
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
}
//最大化
private void maxWindow(){
webDriver.manage().window().maximize();
}
public void openBrowser(String browser) throws Exception {
switch (browser) {
case "chrome" -> webDriver = new ChromeDriver();
case "edge" -> webDriver = new EdgeDriver();
case "firefox" -> webDriver = new FirefoxDriver();
default -> throw new Exception("暂未支持浏览器类型~");
}
maxWindow();
}
public void openUrl(String url){
webDriver.get(url);
elementWait();
}
//根据type类型来定位元素
private WebElement findElement(String type, String element){
WebElement webElement = null;
switch (type){
case "id" -> webElement = webDriver.findElement(By.id(element));
case "name" -> webElement = webDriver.findElement(By.name(element));
case "css" -> webElement = webDriver.findElement(By.cssSelector(element));
case "xpath" -> webElement = webDriver.findElement(By.xpath(element));
}
return webElement;
}
//输入文本内容
public void inputText(String type, String element, String content){
findElement(type, element).sendKeys(content);
}
//点击按钮
public void clickButton(String type, String element){
findElement(type, element).click();
elementWait();
}
//关闭浏览器
public void quitBrowser(){
webDriver.quit();
}
//断言URL
public void assertUrl(String expectedValue){
elementWait();
Assertions.assertEquals(expectedValue, webDriver.getCurrentUrl());
}
}
思考
上述只是针对了一个测试用例。在实际上往往是多个测试用例进行的。需要在读取的时候最进一步处理。
并且这个代码只是在本地端进行跑,但是在实际开发中,会遇到多人协作的场景,可以编写成编写成一个网站,或者服务器,后续只需要通过工具上传自己的测试用例,程序就能自动执行。
自动化测试目的是为了提高效率,不要为了编写代码而耽误了测试进度~

6957

被折叠的 条评论
为什么被折叠?



