WEEK15

Posted von-wunder-er

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WEEK15相关的知识,希望对你有一定的参考价值。

【声明!】
本博客内容仅为学校要求提交的内容,所有包含着此声明的博文或多或少为学业要求的产品,与个人所想展现的想法无关,所有含此声明的博文也将在毕业后存档删除。
若因此行为而给大家带来了不快,本人深表歉意。 


 

个人博客25


 

前景提要:
在软件测试章节中中,我们介绍了不少VSTS的 软件测试工具,请使用一些其他平台上的测试工具,并写博客介绍如何在你的项目中具体使用。

但是我们还没动【我超诚实的】又由于我们是不联网记录型APP,所一我们也不需要过多测试,所以在预演之后我决定向大家介绍Junit,这是一个基于Java的测试插件。以下正文。

1Junit 是什么?

  JUnit是一个Java语言的单元测试框架。它由Kent BeckErich Gamma建立,逐渐成为源于Kent BecksUnitxUnit家族中最为成功的一个JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

  注意:Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能

 

2Junit 能做什么?

  我们知道 Junit 是一个单元测试框架,那么使用 Junit 能让我们快速的完成单元测试。

  通常我们写完代码想要测试这段代码的正确性,那么必须新建一个类,然后创建一个 main() 方法,然后编写测试代码。如果需要测试的代码很多呢?那么要么就会建很多main() 方法来测试,要么将其全部写在一个 main() 方法里面。这也会大大的增加测试的复杂度,降低程序员的测试积极性。而 Junit 能很好的解决这个问题,简化单元测试,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。

 

3Junit 的用法

  一、首先下载 Junit jar 包,这里给两个版本的百度云下载地址:

  ①、Junit 4.12版本    链接:http://pan.baidu.com/s/1c2cRqdM 密码:hfix

  ②、Junit 4.8 版本     链接:http://pan.baidu.com/s/1qY8WVGK 密码:ma2u

  【但是实际上很多eclipse社区版都已经自带了这个功能,一般不用下载而且现在出了Junit5,使用更加顺手

  二、下载完成之后,在项目中将 下载的 jar 包放进去,然后右键,Build--->Add Build Path  即可。

   技术图片

技术图片

   如果你是用 eclipse 开发,也可以不用下载那些jar包,eclipse内部集成了,我们只需要引入即可:

    ①、选中项目,右键Build--->Add Library

      技术图片

    ②、弹出来的界面,选中 JUnit,点击 next

      技术图片

     ③、选中 Junit 的版本,一般我们都用 4.0 以上的。点击 Finish

       技术图片

  三、我们先看下面这个例子,看一下 Junit 的用法

  ①、编写代码(需要测试的类)

技术图片
package com.example.tests;

 

import java.util.regex.Pattern;

import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.junit.Assert.*;

import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;                            //Server用来启动浏览器,接受Client端的请求

import org.openqa.selenium.firefox.FirefoxDriver;

import org.openqa.selenium.support.ui.Select;

import com.thoughtworks.selenium.*;           //client,Client端用来向Server端发送请求

 

public class 1 

  private WebDriver driver;

  private String baseUrl;

  private boolean acceptNextAlert = true;

  private StringBuffer verificationErrors = new StringBuffer();

 

  @Before

  public void setUp() throws Exception 

    driver = new FirefoxDriver();

    baseUrl = "https://www.katalon.com/";

    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

  

 

  @Test                              //案例一

  public void test1() throws Exception 

    driver.get("https://www.youtube.com/");

    driver.findElement(By.id("search-icon-legacy")).click();

    // ERROR: Caught exception [ERROR: Unsupported command [doubleClick | xpath=(.//*[normalize-space(text()) and normalize-space(.)=‘跳过导航‘])[1]/following::yt-icon[2] | ]]

    // ERROR: Caught exception [ERROR: Unsupported command [doubleClick | xpath=(.//*[normalize-space(text()) and normalize-space(.)=‘跳过导航‘])[1]/following::yt-icon[2] | ]]

    // ERROR: Caught exception [ERROR: Unsupported command [doubleClick | xpath=(.//*[normalize-space(text()) and normalize-space(.)=‘跳过导航‘])[1]/following::yt-icon[2] | ]]

    // ERROR: Caught exception [ERROR: Unsupported command [doubleClick | xpath=(.//*[normalize-space(text()) and normalize-space(.)=‘跳过导航‘])[1]/following::yt-icon[2] | ]]

    // ERROR: Caught exception [ERROR: Unsupported command [doubleClick | xpath=(.//*[normalize-space(text()) and normalize-space(.)=‘跳过导航‘])[1]/following::yt-icon[2] | ]]

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘跳过导航‘])[1]/following::yt-icon[2]")).click();

  

  @Test                             //案例二

  public void test2() throws Exception 

    driver.get("https://www.youtube.com/");

    driver.findElement(By.name("search_query")).click();

    driver.findElement(By.name("search_query")).click();

    driver.findElement(By.name("search_query")).clear();

    driver.findElement(By.name("search_query")).sendKeys("......");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘跳过导航‘])[1]/following::yt-icon[2]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘过滤‘])[1]/following::ytd-background-promo-renderer[1]")).click();

  

  @Test                              //案例三

  public void test3() throws Exception 

    driver.get("https://www.youtube.com/");

    driver.findElement(By.name("search_query")).click();

    driver.findElement(By.name("search_query")).clear();

    driver.findElement(By.name("search_query")).sendKeys("ninja");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘跳过导航‘])[1]/following::yt-icon[2]")).click();

  

  @Test                              //案例四

  public void test4() throws Exception 

    driver.get("https://www.youtube.com/");

    driver.findElement(By.name("search_query")).click();

    driver.findElement(By.name("search_query")).clear();

    driver.findElement(By.name("search_query")).sendKeys("shroud");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘跳过导航‘])[1]/following::yt-icon[2]")).click();

  

  @Test                              //案例五

  public void test5() throws Exception 

    driver.get("https://www.youtube.com/");

    driver.findElement(By.id("img")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘语言:‘])[1]/following::yt-formatted-string[1]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘选择您的语言‘])[2]/following::paper-item[11]")).click();

  

@Test                              //案例六

  public void test6() throws Exception 

    driver.get("https://www.youtube.com/watch?v=Xp7t9fWz62Q");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘Switch camera‘])[1]/following::button[1]")).click();

  

 @Test                              //案例七

  public void test7() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘Scroll for details‘])[1]/following::button[8]")).click();

  

@Test                              //案例八

  public void test8() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘滚动浏览详情‘])[1]/following::button[2]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘关闭‘])[2]/following::div[2]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘HD‘])[2]/following::div[6]")).click();

  

  @Test                              //案例九

  public void test9() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘滚动浏览详情‘])[1]/following::button[2]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘画质‘])[1]/following::div[1]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘HD‘])[1]/following::div[3]")).click();

  

 @Test                              //案例十

  public void test10() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘滚动浏览详情‘])[1]/following::button[6]")).click();

  

  @Test                              //案例十一

  public void test11() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘画质‘])[1]/following::button[2]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘画质‘])[1]/following::div[31]")).click();

  

  @Test                              //案例十二

  public void test12() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘画质‘])[1]/following::button[2]")).click();

  

 @Test                              //案例十三

  public void test13() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘滚动浏览详情‘])[1]/following::button[1]")).click();

  

  @Test                              //案例十四

 public void test14() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘分享‘])[3]/preceding::yt-icon-button[1]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘电子邮件‘])[1]/following::yt-icon[2]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘电子邮件‘])[1]/following::yt-icon[2]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘Mix‘])[1]/following::yt-icon[1]")).click();

  

 @Test                              //案例十五

  public void test15() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘http://bit.ly/SubscribeNinja‘])[1]/preceding::span[1]")).click();

  

  @Test                              //案例十六

  public void test16() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘分享‘])[3]/following::yt-formatted-string[1]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘保存到…‘])[1]/following::yt-formatted-string[1]")).click();

  

 @Test                              //案例十七

  public void test17() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.id("simplebox-placeholder")).click();

    driver.findElement(By.id("contenteditable-root")).click();

    driver.findElement(By.id("contenteditable-root")).click();

    // ERROR: Caught exception [unknown command [editContent]]

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘取消‘])[2]/following::yt-formatted-string[1]")).click();

  

  @Test                              //案例十八

   public void test18() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘在“Ninja”商店购物‘])[1]/following::img[1]")).click();

    // ERROR: Caught exception [ERROR: Unsupported command [selectWindow | win_ser_1 | ]]

    // ERROR: Caught exception [ERROR: Unsupported command [selectFrame | index=2 | ]]

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘YES, SEND IT!‘])[1]/following::span[3]")).click();

  

  @Test                              //案例十九

  public void test19() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU&t=7s");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘自动播放‘])[2]/following::img[1]")).click();

  

 @Test                              //案例二十

  public void test20() throws Exception 

    driver.get("https://www.youtube.com/");

    driver.findElement(By.id("guide-icon")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘游戏‘])[3]/following::span[2]")).click();

  

  @Test                              //案例二十一

  public void test21() throws Exception 

    driver.get("https://www.youtube.com/");

    driver.findElement(By.id("guide-icon")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘YouTube Premium‘])[1]/following::span[2]")).click();

  

  @Test                              //案例二十二

  public void test22() throws Exception 

    driver.get("https://www.youtube.com/");

    driver.findElement(By.xpath("(//button[@id=‘button‘]/yt-icon)[5]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘创建‘])[1]/following::paper-item[1]")).click();

    driver.findElement(By.id("upload-prompt-box")).click();

  

 @Test                              //案例二十三

  public void test23() throws Exception 

    driver.get("https://www.youtube.com/watch?v=zSNEh8zMoVU");

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘保存‘])[1]/following::img[1]")).click();

    driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)=‘上传的视频‘])[1]/preceding::div[33]")).click();

  

  @After

  public void tearDown() throws Exception 

    driver.quit();

    String verificationErrorString = verificationErrors.toString();

    if (!"".equals(verificationErrorString)) 

      fail(verificationErrorString);

    

  

 

  private boolean isElementPresent(By by) 

    try 

      driver.findElement(by);

      return true;

     catch (NoSuchElementException e) 

      return false;

    

  

 

  private boolean isAlertPresent() 

    try 

      driver.switchTo().alert();

      return true;

     catch (NoAlertPresentException e) 

      return false;

    

  

 

  private String closeAlertAndGetItsText() 

    try 

      Alert alert = driver.switchTo().alert();

      String alertText = alert.getText();

      if (acceptNextAlert) 

        alert.accept();

       else 

        alert.dismiss();

      

      return alertText;

     finally 

      acceptNextAlert = true;

    

  

View Code

 

  那么我们可以看到,不用 Junit 只能写在 main()方法中,通过运行结果来判断测试结果是否正确。这里需要测试的只有两个方法,如果有很多方法,那么测试代码就会变得很混乱。

 

  二、使用 Junit(看不懂 Assert.assertEquals()方法没关系,可以自己写 if()语句来判断)


 
 如何运行
Junit呢?鼠标放在需要测试的方法中,右键,Run As ---->JUnit Test

技术图片

 

  结果出现如下的绿色横条,则测试通过,红色横条,则测试失败

  

 技术图片

 

那么由上面可以看到,使用 Junit 不需要创建 main() 方法,而且每个测试方法一一对应,逻辑特别清晰。可能有读者会问,这样写代码量也并不会减少啊,那么你接着往下看:

 

首先介绍 Junit 的几种类似于 @Test 的注解:

  [email protected]: 测试方法

    a)(expected=XXException.class)如果程序的异常和XXException.class一样,则测试通过
    b)(timeout=100)如果程序的执行能在100毫秒之内完成,则测试通过

  [email protected]: 被忽略的测试方法:加上之后,暂时不运行此段代码

  [email protected]: 每一个测试方法之前运行

  [email protected]: 每一个测试方法之后运行

  [email protected]: 方法必须必须要是静态方法(static 声明),所有测试开始之前运行,注意区分before,是所有测试方法

  [email protected]: 方法必须要是静态方法(static 声明),所有测试结束之后运行,注意区分 @After

 

-注意:编写测试类的原则: 

    ①测试方法上必须使用@Test进行修饰

        ②测试方法必须使用public void 进行修饰,不能带任何的参数

        ③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开

        ④测试类所在的包名应该和被测试类所在的包名保持一致

        ⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖

        ⑥测试类使用Test作为类名的后缀(不是必须)

        ⑦测试方法使用test作为方法名的前缀(不是必须)

以上是关于WEEK15的主要内容,如果未能解决你的问题,请参考以下文章

April 15 2017 Week 15 Saturday

可以直接拿来用的15个jQuery代码片段

英语口语Week 15 Wednesday

英语口语 Week15 TuesDay

April 12 2017 Week 15 Wednesday

March 15 2017 Week 11 Wednesday