随着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 blocke.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 blocke.printStackTrace();}}}
这里重点解释一下参数WebDriver p_driver,设计的目的就是把用例中使用的driver传入进来,否者运行代码时就会重新new 一个 driver,即重新启动一个浏览器,在新启动的浏览器中执行业务封装部分的代码,这显然会直接导致脚本执行失败!
封装后的用例代码如下:
@Testpublic 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;}}
测试用例部分在封装了业务代码后是不是看起来简洁了很多呢?那么大家就按照这个思路结合自己的业务写写业务封装吧。
我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!