随着UI自动化测试工具可选性越来越多,工具也越来越稳定,前几年关于自动化测试架构设计的概念逐渐淡化,但是做自动化测试最重要的两点—— PO设计模式和核心业务的封装复用大家还是必须掌握的,前面的文章我已经介绍了什么是PO设计模式,链接如下:
无论您用selenium、appium还是playwright都必须使用PO设计模式-CSDN博客
今天我们就来讲讲什么是核心业务的封装复用。
相信写过自动化测试的同学都编写过登录的脚本,我们来回忆一下大概的登录流程:
1.访问登录地址
2.输入用户名(手机号码)
3.输入密码(短信验证码)
4.输入校验码(有的系统有,有的系统没有)
5.点击登录按钮
在这个场景中不同的用户,使用的登录地址(一般不会变化)、用户名和密码这些数据是变化的,但是点击,输入这些动作不会变化。我们就可以把登录这个业务封装成方法,便于大家复用!实现的java伪代码如下,这是java多态重载的用法。
?public static void login(String p_url,String p_user,String p_pwd) {
? ? ?? ?
? ? ?? ?driver =new ChromeDriver();
?? ??? ?driver.get(p_url);
?? ??? ?driver.manage().window().maximize();
?? ??? ?driver.findElement(By.id("")).sendKeys(p_user);
?? ??? ?driver.findElement(By.id("")).sendKeys(p_pwd);
?? ??? ?driver.findElement(By.id("login_button")).click();
?? ??? ?
?? ??? ?
?? ?}
? ? public static void login(String p_url,String p_user,String p_pwd,String p_captcha) {
? ? ?? ?driver =new ChromeDriver();
?? ??? ?driver.get(p_url);
?? ??? ?driver.manage().window().maximize();
?? ??? ?driver.findElement(By.id("")).sendKeys(p_user);
?? ??? ?driver.findElement(By.id("")).sendKeys(p_pwd);
?? ??? ?driver.findElement(By.id("")).sendKeys(p_captcha);
?? ??? ?driver.findElement(By.id("login_button")).click();
?? ?
?? ?
}
备注:如果有第四步需要研发给万能校验码,否则如果通过图像识别破译了校验码,那这就是个bug!
大家想一想封装业务代码进行复用最重要的是什么呢?重要的事情说三遍!
很显然就是业务中把可变数据进行参数抽取!!!
很显然就是业务中把可变数据进行参数抽取!!!
很显然就是业务中把可变数据进行参数抽取!!!
在实际工作中我们可以结合自己产品中可复用的业务进行封装,提升封装业务代码的复用度,这里以百度的搜索场景为例进行演示,正常代码如下:
driver =new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
driver.findElement(By.id("kw")).sendKeys("selenium");
driver.findElement(By.id("su")).click();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
driver.quit();
我们可以把搜索业务进行封装,只需要把driver.findElement(By.id("kw")).sendKeys("selenium");
中的selenium作为参数即可,创建一个类BaiduBusinessLib 来保存封装方法,代码如下:
public class BaiduBusinessLib {
public static void searchKey(WebDriver p_driver,String p_key) {
p_driver.findElement(By.id("kw")).sendKeys(p_key);
p_driver.findElement(By.id("su")).click();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这里重点解释一下参数WebDriver p_driver,设计的目的就是把用例中使用的driver传入进来,否者运行代码时就会重新new 一个 driver,即重新启动一个浏览器,在新启动的浏览器中执行业务封装部分的代码,这显然会直接导致脚本执行失败!
封装后的用例代码如下:
@Test
public void test() {
driver =new ChromeDriver();
String url = "http://www.baidu.com";
driver.get(url);
driver.manage().window().maximize();
BaiduBusinessLib.searchKey(driver, "selenium");
assertTrue(isElementPresent(By.partialLinkText("selenium"))); //验证有selenium 相关搜索链接
driver.quit();
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
}catch(NoSuchElementException e) {
return false;
}
}
测试用例部分在封装了业务代码后是不是看起来简洁了很多呢?那么大家就按照这个思路结合自己的业务写写业务封装吧。
我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!
?
?