自动化测试-关键字驱动

使用场景

自动化测试的初心,是为了提高测试效率,方便进行回归测试。

在编写自动化测试脚本代码的时候, 如果是一个人去写,可能管理起来还比较方便。但是随着用例数的不断增加,以及在多人协同编写的时候,管理成本会大大增加,最终就会导致写自动化代码的时间远大于测试的时间,与初心背道而驰了~

解决方案:借助面向对象的思想,对编写的测试代码进行封装,采用关键字的方式来进行。

交互方式:用户编写测试用例,但是需要多编写一个字段,用来当做关键字,后续代码从这个字段中读取进行匹配,调用相应的函数。因此还需要对相应的函数进行封装。

下面拿一个简单的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());
    }

}

思考

上述只是针对了一个测试用例。在实际上往往是多个测试用例进行的。需要在读取的时候最进一步处理。

并且这个代码只是在本地端进行跑,但是在实际开发中,会遇到多人协作的场景,可以编写成编写成一个网站,或者服务器,后续只需要通过工具上传自己的测试用例,程序就能自动执行。

自动化测试目的是为了提高效率,不要为了编写代码而耽误了测试进度~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值