自动化测试中,我们会遇到需要写大量的判断逻辑的场景,实现角度要么用if、else实现,要么用swtich语句实现。
从功能角度来看,的确是实现了,但后面项目需要维护了,需要新增一个功能时,发现需要对判断逻辑进行改写,很容易改出问题来。为解决这种情况,我们需要引入策略模式。
下面以UI自动化中,支持浏览器适配功能为例,介绍策略模式的用法,话不多说,直接上代码。
1、策略模式代码实现
先看一个没有使用策略模式的代码写法:
package java策略模式5;public class openBrower {public void openbrower(String browerType){if("ie".equalsIgnoreCase(browerType)){System.out.println("打开ie浏览器...");}else if("Chrome".equalsIgnoreCase(browerType)){System.out.println("打开Chrome浏览器...");}else {System.out.println("打开Firefox浏览器...");}}public static void main(String [] args){System.out.println("-------------------------------------");System.out.println("正在开始UI自动化测试...");openBrower ob = new openBrower();ob.openbrower("ie");System.out.println("UI自动化测试完成...");System.out.println("-------------------------------------");}}
接下来使用策略模式来对上述功能进行改写。
1.1 创建接口
publicinterface openbrowser {Object opOpenBrowser(String browserType);}
1.2 创建接口的实现类
public class chrome implements openbrowser {public Object opOpenBrowser(String browserType) {System.out.println("打开" + browserType + "浏览器...");return null;}}public class firefoxbrowser implements openbrowser{public Object opOpenBrowser(String browserType) {// TODO Auto-generated method stubSystem.out.println("打开" + browserType + "浏览器...");return null;}}public class iebrowser implements openbrowser {public Object opOpenBrowser(String browserType) {{System.out.println("打开"+browserType+"浏览器...");}return null;}}
1.3 创建环境类
public class browser{private openbrowser op;public browser(openbrowser op){this.op=op;}public Object opOpenBroswer(String browserType){return op.opOpenBrowser(browserType);}}
1.4 创建测试类
public class testMain {public static void main(String [] args){System.out.println("--------------------------------------------");System.out.println("当前正在测试策略模式");browser b = new browser(new chrome());b.opOpenBroswer("ie");b.opOpenBroswer("chrome");b.opOpenBroswer("firefox");System.out.println("策略模式测试完成...");System.out.println("---------------------------------------------");}}
执行主函数,代码打印输出如下:
--------------------------------------------
当前正在测试策略模式
打开ie浏览器...
打开chrome浏览器...
打开firefox浏览器...
策略模式测试完成...
---------------------------------------------
2、总结
以上就是策略模式的代码实现,使用策略模式后,自动化框架如果要新支持一个浏览器360。我们只需要在接口的实现类中新增一个360浏览器的实现类即可,其余都不需要改动,如此我们在进行自动化的时候,新增或者调整了一个模块影响到其他的功能模块的情况,我们自动化框架的可扩展性大大得到了改善。
当然透过这个例子,我们发现复杂的功能模块,采用设计模式代码等才会带来简便,不然反而会让代码编写变得复杂。