6.1  自动化测试模型介绍

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

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

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

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

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

6.1.4  关键字驱动测试:

6.2  模块化实例

线性测试实例:

  1. package com.cy;
  2.  
  3. import org.openqa.selenium.By;
  4. import org.openqa.selenium.WebDriver;
  5. import org.openqa.selenium.firefox.FirefoxDriver;
  6.  
  7. public class TestModel {
  8.  
  9. public static void main(String[] args) throws InterruptedException {
  10. System.out.println("博客园登录 操作 退出");
  11. WebDriver driver =new FirefoxDriver();
  12. driver.get("https://passport.cnblogs.com/user/signin?AspxAutoDetectCookieSupport=1");
  13.  
  14. // 清除input 输入用户名
  15. driver.findElement(By.id("input1")).clear();
  16. driver.findElement(By.id("input1")).sendKeys("Smile燕");
  17. // 清除input 输入密码
  18. driver.findElement(By.id("input2")).clear();
  19. driver.findElement(By.id("input2")).sendKeys("acy123");
  20.  
  21. // 点击登录
  22. driver.findElement(By.id("signin")).click();
  23.  
  24. Thread.sleep(5000);
  25.  
  26. /**
  27. * 操作
  28. */
  29.  
  30. // 退出
  31. driver.findElement(By.linkText("退出")).click();
  32. Thread.sleep(5000);
  33. // // 接受弹框
  34. driver.switchTo().alert().accept();
  35. Thread.sleep(5000);
  36. // 关闭浏览器
  37. driver.quit();
  38. }
  39.  
  40. }

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

  1. package com.cy;
  2.  
  3. import org.openqa.selenium.By;
  4. import org.openqa.selenium.WebDriver;
  5. import org.openqa.selenium.firefox.FirefoxDriver;
  6.  
  7. public class TestModel {
  8.  
  9. public static void main(String[] args) throws InterruptedException {
  10. System.out.println("博客园登录 操作 退出");
  11. WebDriver driver =new FirefoxDriver();
  12. /**
  13. * 操作
  14. */
  15. login(driver);
  16. Thread.sleep(5000);
  17. logout(driver);
  18. Thread.sleep(5000);
  19. // 关闭浏览器
  20. driver.quit();
  21.  
  22. }
  23.  
  24. public static void login(WebDriver driver) {
  25. driver.get("https://passport.cnblogs.com/user/signin?AspxAutoDetectCookieSupport=1");
  26.  
  27. // 清除input 输入用户名
  28. driver.findElement(By.id("input1")).clear();
  29. driver.findElement(By.id("input1")).sendKeys("Smile燕");
  30. // 清除input 输入密码
  31. driver.findElement(By.id("input2")).clear();
  32. driver.findElement(By.id("input2")).sendKeys("acy123");
  33.  
  34. // 点击登录
  35. driver.findElement(By.id("signin")).click();
  36.  
  37. }
  38.  
  39. public static void logout(WebDriver driver){
  40. // 退出
  41. driver.findElement(By.linkText("退出")).click();
  42.  
  43. // // 接受弹框
  44. driver.switchTo().alert().accept();
  45.  
  46. }
  47.  
  48. }

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

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

  1. package com.cy;
  2.  
  3. import org.openqa.selenium.By;
  4. import org.openqa.selenium.WebDriver;
  5. import org.openqa.selenium.firefox.FirefoxDriver;
  6.  
  7. public class TestModel {
  8.  
  9. public static void main(String[] args) throws InterruptedException {
  10. System.out.println("博客园登录 操作 退出");
  11. WebDriver driver =new FirefoxDriver();
  12. /**
  13. * 操作
  14. */
  15. String username="Smile燕";
  16. String password="acy123@@";
  17. login(driver,username,password);
  18. Thread.sleep(5000);
  19. logout(driver);
  20. Thread.sleep(5000);
  21. // 关闭浏览器
  22. driver.quit();
  23.  
  24. }
  25.  
  26. public static void login(WebDriver driver,String username,String password) {
  27. driver.get("https://passport.cnblogs.com/user/signin?AspxAutoDetectCookieSupport=1");
  28.  
  29. // 清除input 输入用户名
  30. driver.findElement(By.id("input1")).clear();
  31. driver.findElement(By.id("input1")).sendKeys(username);
  32. // 清除input 输入密码
  33. driver.findElement(By.id("input2")).clear();
  34. driver.findElement(By.id("input2")).sendKeys(password);
  35.  
  36. // 点击登录
  37. driver.findElement(By.id("signin")).click();
  38.  
  39. }
  40.  
  41. public static void logout(WebDriver driver){
  42. // 退出
  43. driver.findElement(By.linkText("退出")).click();
  44.  
  45. // // 接受弹框
  46. driver.switchTo().alert().accept();
  47.  
  48. }
  49.  
  50. }

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

第6章 Selenium2-Java 自动化测试模型的更多相关文章

  1. 《selenium2 Java 自动化测试实战(第二版)》 更新2016.5.3

    java 版来了!! 本文档在<selenium2 Python 自动化测试实战>的基础上,将代码与实例替换为java ,当然,部分章节有变更.这主要更语言本身的特点有关.集合和java下 ...

  2. 《深入理解Java虚拟机》笔记--第十二章、Java内存模型与线程

    主要内容:虚拟机如何实现多线程.多线程之间由于共享和竞争数据而导致的一系列问题及解决方案. Java内存模型:     Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储 ...

  3. web自动化测试 Selenium2 Java自动化测试实战9_3

    driver.findElement(By.id("idInput")).sendKeys("哈哈"); driver.findElement(By.id(&q ...

  4. (第三章)Java内存模型(下)

    一.happens-before happens-before是JMM最核心的概念.对于Java程序员来说,理解happens-before是理解JMM的关键. 1.1 JMM的设计 从JMM设计者的 ...

  5. JMM(java内存模型)

    What is a memory model, anyway? In multiprocessorsystems, processors generally have one or more laye ...

  6. JSR133提案-修复Java内存模型

    目录 1. 什么是内存模型? 2. JSR 133是关于什么的? 3. 再谈指令重排序 4.同步都做了什么? 5. final字段在旧的内存模型中为什么可以改变? 6."初始化安全" ...

  7. 从JVM设计角度解读Java内存模型

    第十六章:Java内存模型 本文我们将重点放在Java内存模型(JMM)的一些高层设计问题,以及JMM的底层需求和所提供的保证,还有一些高层设计原则背后的原理. 例如安全发布,同步策略的规范以及一致性 ...

  8. selenium2 Webdriver + Java 自动化测试实战和完全教程

    selenium2 Webdriver + Java 自动化测试实战和完全教程一.快速开始 博客分类: Selenium-webdriverselenium webdriver 学习selenium ...

  9. (第三章)Java内存模型(上)

    一.java内存模型的基础 1.1 并发编程模型的两个关键问题 在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来 ...

  10. 深入理解java虚拟机-第12章Java内存模型与线程

    第12章 Java内存模型与线程 Java内存模型  主内存与工作内存: java内存模型规定了所有的变量都在主内存中,每条线程还有自己的工作内存. 工作内存中保存了该线程使用的主内存副本拷贝,线程对 ...

随机推荐

  1. Vue中出现Do not use built-in or reserved HTML elements as component id:footer等等vue warn问题

    错误示图: 原因:是因为在本地项目对应文件的<script>中,属性name出现了错误的命名方式,导致浏览器控制台报错! 诸如: name: header .  . name: menu  ...

  2. 深入理解JVM(四)JVM性能监控与故障处理工具

    4.2 JVM命令行工具 1.jps(JVM Process Status Tool):JVM进程查看工具,命令行进入到jdk的bin目录下,使用命令:jps -l/-q/-v/-m 2.jstat( ...

  3. 可以用到的XSS跨站语句

    我们常用的测试XSS跨站的语句一般是alert比如: <script>alert(“sex”)</script> <script>alert(/sex/)</ ...

  4. 74.CocoaPods安装和使用教程

    CocoaPods安装和使用教程  Code4App 原创文章.转载请注明出处:http://code4app.com/article/cocoapods-install-usage 第一: Coco ...

  5. Linux下 刚安装完mysql 修改密码

    在Centos中安装MySQL后默认的是没有root密码的,默认的是回车, 那么为了方便需要修改密码. 没有密码为MYSQL加密码: mysql -uroot -p 回车 提示输入密码,为空回车 up ...

  6. 理解React组件的生命周期

    本文作者写作的时间较早,所以里面会出现很多的旧版ES5的时代的方法.不过,虽然如此并不影响读者理解组件的生命周期.反而是作者分为几种不同的触发机制来解释生命周期的各个方法,让读者更加容易理解涉及到的概 ...

  7. noip第21课资料

  8. document.getElementById("xx").style.xxx中的 全部属性

    CSS语法(不区分大小写) JavaScript语法(区分大小写) border border border-bottom borderBottom border-bottom-color borde ...

  9. java 日志框架

    1.java常用日志框架介绍: https://www.cnblogs.com/chenhongliang/p/5312517.html 2.java各类日志组件汇总: https://blog.cs ...

  10. JDBC几种常见的数据库连接

    JDBC的URL=协议名+子协议名+数据源名.a 协议名总是“jdbc”.b 子协议名由JDBC驱动程序的编写者决定.c 数据源名也可能包含用户与口令等信息:这些信息也可单独提供.几种常见的数据库连接 ...