第6章 Selenium2-Java 自动化测试模型

简介: 6.1  自动化测试模型介绍   6.1.1  线性测试 :其实就是单纯地来模拟用户完整的操作场景。                优势就是每一个脚本都是完整且独立的;        缺陷测试用例的开发与维护成本很高。

6.1  自动化测试模型介绍

  6.1.1  线性测试 :其实就是单纯地来模拟用户完整的操作场景。

               优势就是每一个脚本都是完整且独立的;

       缺陷测试用例的开发与维护成本很高。

  6.1.2  模块化驱动测试 :编程语言中模块化的思想,把重复的操作独立成公共模块,当用例执行过程中需要用到这一模块操作时则被调用,这样就最大程度上消除了重复,从而提高测试用例的可维护性。

  6.1.3  数据驱动测试 :数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.(我们读取的是定义的数组、字典,或者是外部文件(excel、csv、txt、xml等)都可以看作是数据驱动。)

  6.1.4  关键字驱动测试:

6.2  模块化实例

    线性测试实例:

package com.cy;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class TestModel {
    
    public static void main(String[] args) throws InterruptedException {
        System.out.println("博客园登录 操作 退出");
        WebDriver driver =new FirefoxDriver();
        driver.get("https://passport.cnblogs.com/user/signin?AspxAutoDetectCookieSupport=1");
        
        // 清除input 输入用户名
        driver.findElement(By.id("input1")).clear();
        driver.findElement(By.id("input1")).sendKeys("Smile燕");
        // 清除input 输入密码
        driver.findElement(By.id("input2")).clear();
        driver.findElement(By.id("input2")).sendKeys("acy123");
        
        // 点击登录
        driver.findElement(By.id("signin")).click();

        Thread.sleep(5000);
        
        /**
         * 操作
         */
        
        
        // 退出
        driver.findElement(By.linkText("退出")).click();
        Thread.sleep(5000);
        // // 接受弹框
        driver.switchTo().alert().accept();
        Thread.sleep(5000);
        // 关闭浏览器
        driver.quit();
    }

}

模块化驱动测试实例: 把登录和退出进行封装。

 

package com.cy;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class TestModel {
    
    public static void main(String[] args) throws InterruptedException {
            System.out.println("博客园登录 操作 退出");
            WebDriver driver =new FirefoxDriver();
        /**
         * 操作
         */
            login(driver);
            Thread.sleep(5000);
            logout(driver);
            Thread.sleep(5000);
            // 关闭浏览器
            driver.quit();
        
    }
    
    
    public static void login(WebDriver driver) {
        driver.get("https://passport.cnblogs.com/user/signin?AspxAutoDetectCookieSupport=1");
        
        // 清除input 输入用户名
        driver.findElement(By.id("input1")).clear();
        driver.findElement(By.id("input1")).sendKeys("Smile燕");
        // 清除input 输入密码
        driver.findElement(By.id("input2")).clear();
        driver.findElement(By.id("input2")).sendKeys("acy123");
        
        // 点击登录
        driver.findElement(By.id("signin")).click();

        
    }
    
    
    public static void logout(WebDriver driver){
              // 退出
                driver.findElement(By.linkText("退出")).click();
                
                // // 接受弹框
                driver.switchTo().alert().accept();
                
    }

}

 我们可以把这两个方法 封装成单独的文件中供其它用例调用。这样对于每个用例来说就简便了许多,也更易于维护。

数据驱动实例:前面提到关于数据驱动的形式有很多,我们既可以通过定义变量的方式进行参数化,也可以通过定义数组、字典的方式进行参数化,还可以通过读取文件(txt\csv\xml)的方式进行参数化。

package com.cy;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class TestModel {
    
    public static void main(String[] args) throws InterruptedException {
            System.out.println("博客园登录 操作 退出");
            WebDriver driver =new FirefoxDriver();
        /**
         * 操作
         */
            String username="Smile燕";
            String password="acy123@@";
            login(driver,username,password);
            Thread.sleep(5000);
            logout(driver);
            Thread.sleep(5000);
            // 关闭浏览器
            driver.quit();
        
    }
    
    
    public static void login(WebDriver driver,String username,String password) {
        driver.get("https://passport.cnblogs.com/user/signin?AspxAutoDetectCookieSupport=1");
        
        // 清除input 输入用户名
        driver.findElement(By.id("input1")).clear();
        driver.findElement(By.id("input1")).sendKeys(username);
        // 清除input 输入密码
        driver.findElement(By.id("input2")).clear();
        driver.findElement(By.id("input2")).sendKeys(password);
        
        // 点击登录
        driver.findElement(By.id("signin")).click();

        
    }
    
    
    public static void logout(WebDriver driver){
              // 退出
                driver.findElement(By.linkText("退出")).click();
                
                // // 接受弹框
                driver.switchTo().alert().accept();
                
    }

}

关键字驱动测试实例:(未完待续哈。。。)

相关文章
|
4月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
461 0
|
2月前
|
Java 大数据 Go
从混沌到秩序:Java共享内存模型如何通过显式约束驯服并发?
并发编程旨在混乱中建立秩序。本文对比Java共享内存模型与Golang消息传递模型,剖析显式同步与隐式因果的哲学差异,揭示happens-before等机制如何保障内存可见性与数据一致性,展现两大范式的深层分野。(238字)
83 4
|
5月前
|
Web App开发 存储 前端开发
Python+Selenium自动化爬取携程动态加载游记
Python+Selenium自动化爬取携程动态加载游记
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
如何让AI更“聪明”?VLM模型的优化策略与测试方法全解析​
本文系统解析视觉语言模型(VLM)的核心机制、推理优化、评测方法与挑战。涵盖多模态对齐、KV Cache优化、性能测试及主流基准,助你全面掌握VLM技术前沿。建议点赞收藏,深入学习。
781 8
|
4月前
|
缓存 前端开发 Java
Java类加载机制与双亲委派模型
本文深入解析Java类加载机制,涵盖类加载过程、类加载器、双亲委派模型、自定义类加载器及实战应用,帮助开发者理解JVM核心原理与实际运用。
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
Java 大视界 -- Java 大数据机器学习模型在自然语言生成中的可控性研究与应用(229)
本文深入探讨Java大数据与机器学习在自然语言生成(NLG)中的可控性研究,分析当前生成模型面临的“失控”挑战,如数据噪声、标注偏差及黑盒模型信任问题,提出Java技术在数据清洗、异构框架融合与生态工具链中的关键作用。通过条件注入、强化学习与模型融合等策略,实现文本生成的精准控制,并结合网易新闻与蚂蚁集团的实战案例,展示Java在提升生成效率与合规性方面的卓越能力,为金融、法律等强监管领域提供技术参考。
|
4月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据机器学习模型在生物信息学基因功能预测中的优化与应用(223)
本文探讨了Java大数据与机器学习模型在生物信息学中基因功能预测的优化与应用。通过高效的数据处理能力和智能算法,提升基因功能预测的准确性与效率,助力医学与农业发展。
|
4月前
|
机器学习/深度学习 搜索推荐 数据可视化
Java 大视界 -- Java 大数据机器学习模型在电商用户流失预测与留存策略制定中的应用(217)
本文探讨 Java 大数据与机器学习在电商用户流失预测与留存策略中的应用。通过构建高精度预测模型与动态分层策略,助力企业提前识别流失用户、精准触达,实现用户留存率与商业价值双提升,为电商应对用户流失提供技术新思路。
|
4月前
|
机器学习/深度学习 存储 分布式计算
Java 大视界 --Java 大数据机器学习模型在金融风险压力测试中的应用与验证(211)
本文探讨了Java大数据与机器学习模型在金融风险压力测试中的创新应用。通过多源数据采集、模型构建与优化,结合随机森林、LSTM等算法,实现信用风险动态评估、市场极端场景模拟与操作风险预警。案例分析展示了花旗银行与蚂蚁集团的智能风控实践,验证了技术在提升风险识别效率与降低金融风险损失方面的显著成效。
|
4月前
|
机器学习/深度学习 自然语言处理 算法
Java 大视界 -- Java 大数据机器学习模型在自然语言处理中的对抗训练与鲁棒性提升(205)
本文探讨Java大数据与机器学习在自然语言处理中的对抗训练与鲁棒性提升,分析对抗攻击原理,结合Java技术构建对抗样本、优化训练策略,并通过智能客服等案例展示实际应用效果。