自动化测试架构设计必会知识点——对核心业务进行封装复用(附Java源码)

发布时间:2023年12月23日

f0ee9905a1974571b8856eee59e658b3.png

随着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;
    		
    	}
    	
    }

测试用例部分在封装了业务代码后是不是看起来简洁了很多呢?那么大家就按照这个思路结合自己的业务写写业务封装吧。

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!

?

?

文章来源:https://blog.csdn.net/liwenxiang629/article/details/135153533
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。