51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3410|回复: 2
打印 上一主题 下一主题

[讨论] 用JUnit4进行单元测试代码编写

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-3-8 15:03:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
JUnit4简介

Junit是一个可编写重复测试的简单框架,是基于Xunit架构的单元测试框架的实例。JUnit4是JUnit框架
有史以来的最大改进,其主要目标便是利用JDK 5的Annotation特性简化测试用例的编写。JDK 5里可
以静态导入,例如import static org.junit.Assert.*;。Annotation又称注解(或元数据),其实就是@Be
fore、@After、@BeforeClass、@AfterClass、@Test等等。

@Before @BeforeClass @After @AfterClass的区别

简单来说,@Before@After会在每一个被@Test注解的方法前、后分别执行,比如有5个被@Test注解
的方法,那么@Before@After会被执行5次。被@Before@After注解的方法一般起到初始化和释放的作
用。这么做就保证了每一次@Test执行,他们都是相互独立,互不干扰的。
而@BeforeClass@AfterClass从头至尾仅会执行一次。对于那些较耗资源的,建议采用这种方法。

@Test执行顺序

一般来说,被@Test注解的方法是随机顺序执行的,因为单元测试,本身它们就应该是互不干扰可以
独立运行的。
但是某些特殊情况下,想让它按照一定顺序执行的话,可以使用@FixMethodOrder(MethodSorters.N
AME_ASCENDING),放在JUnit测试类定义的外面,这样一来就会按照方法名称的升序来执行。此时命
好方法的名字,就可以轻松实现既定顺序执行。

更多关于JUnit4


JUnit4代码块

将JUnit4测试类放在被测类的同一package下,让它们处于同一层级,这样就不用import被测类了。
  1. package pkg_Selector;
  2. import org.junit.*;
  3. import org.junit.runners.MethodSorters;
  4. import org.openqa.selenium.By;
  5. import org.openqa.selenium.WebDriver;

  6. import static org.junit.Assert.*;

  7. /**
  8. * Created by Sophie on 15/7/6.
  9. */
  10. @FixMethodOrder(MethodSorters.NAME_ASCENDING)
  11. public class SelectorTest {
  12.     private static Selector s;
  13.     private static WebDriver afterLogin;
  14.     private static WebDriver afterSwitch;
  15.     private static WebDriver aftermouseMove;
  16.     private static WebDriver afterSearch;
  17.     private static WebDriver afterSelect;

  18.     @BeforeClass
  19.     public static void setUp() throws Exception {
  20.         s = new Selector();
  21.     }

  22.     @AfterClass
  23.     public static void tearDown() throws Exception {
  24.         s.tearDown();
  25.     }

  26.     @Test
  27.     public void test1_login() throws Exception {
  28.         afterLogin = s.login();
  29.         assertEquals("挖财社区,国内最大的理财社区", afterLogin.getTitle());
  30.     }
  31.      @Test
  32.     public void test2_switchWindow() throws Exception {
  33.          afterSwitch = s.switchWindow();
  34.          assertEquals("理财规划_理财学院_挖财社区,国内最大的理财社区,爱理财的人都在这里",afterSwitch.getTitle());
  35.      }
  36.     @Test
  37.     public void test3_mouseMove() throws Exception {
  38.         aftermouseMove = s.mouseMove();
  39.         assertEquals("用户",aftermouseMove.findElement(By.cssSelector("a.showmenu.xg1")).getText());
  40.     }
  41.     @Test
  42.     public void test4_search() throws Exception {
  43.         afterSearch = s.search();
  44.         assertEquals("查找好友 - 挖财社区",afterSearch.getTitle());
  45.     }
  46.     @Test
  47.     public void test5_select() throws InterruptedException {
  48.         afterSelect = s.select();
  49.         assertEquals(true,afterSelect.getPageSource().contains("以下是查找到的用户列表(最多显示 100 个)"));
  50.     }
  51. }
复制代码
JUnit4运行结果截图

5个test都是通过的:

被测代码块
  1. package pkg_Selector;

  2. import org.openqa.selenium.By;
  3. import org.openqa.selenium.WebDriver;
  4. import org.openqa.selenium.WebElement;
  5. import org.openqa.selenium.firefox.FirefoxDriver;
  6. import org.openqa.selenium.interactions.Actions;
  7. import org.openqa.selenium.support.ui.Select;

  8. import java.util.Iterator;
  9. import java.util.List;
  10. import java.util.Scanner;
  11. import java.util.Set;
  12. import java.util.concurrent.TimeUnit;

  13. /**
  14. * Created by Sophie on 15/7/6.
  15. */
  16. public class Selector {
  17.     private WebDriver dr;
  18.     private String url;
  19.     private String account;
  20.     private String pwd;

  21.     public Selector() {
  22.         this.url = "https://www.wacai.com/user/user.action?url=http%3A%2F%2Fbbs.wacai.com%2Fportal.php";
  23.         //Scanner input = new Scanner(System.in);
  24.         //System.out.println("Please input the account");
  25.         this.account = "******";//input.next();
  26.         //System.out.println("Please input the password");
  27.         this.pwd = "******";//input.next();
  28.         this.dr = new FirefoxDriver();
  29.         this.dr.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
  30.     }


  31.     public WebDriver login( ) throws Exception {
  32.         //登录
  33.         dr.get(url);
  34.         dr.findElement(By.id("account")).clear();
  35.         dr.findElement(By.id("account")).sendKeys(account);
  36.         dr.findElement(By.id("pwd")).clear();
  37.         dr.findElement(By.id("pwd")).sendKeys(pwd);
  38.         dr.findElement(By.id("login-btn")).click();
  39.         return dr;
  40.     }

  41.     public WebDriver switchWindow() throws Exception {
  42.         //打开理财规划子版块
  43.         String a = dr.findElement(By.linkText("理财规划")).getAttribute("href");
  44.         //直接用WebDriver.get()方式打开页面,浏览器不会新开页面,省得切换窗口
  45.         dr.get(a);
  46.         dr.manage().window().maximize();
  47.         //然后关闭左侧导航栏
  48.         dr.findElement(By.cssSelector("a.comiis_left_closes")).click();
  49.         return dr;
  50.     }

  51.     public WebDriver mouseMove() throws Exception {

  52.         //点开搜索类型下拉框,将鼠标移动到用户上并选择
  53.         Actions act = new Actions(dr);
  54.         WebElement dropDown = dr.findElement(By.cssSelector("a.showmenu.xg1"));
  55.         WebElement user = dr.findElement(By.cssSelector("ul#comiis_twtsc_type_menu>li>a[rel='user']"));
  56.         act.click(dropDown).perform();
  57.         act.moveToElement(user).click().perform();
  58.         act.moveByOffset(20, 30).click().perform();
  59.         return dr;
  60.     }

  61.     public WebDriver search() throws Exception {
  62.         //找到搜索输入框,并输入关键字,然后点击搜索按钮
  63.         WebElement input = dr.findElement(By.id("comiis_twtsc_txt"));
  64.         input.clear();
  65.         input.sendKeys("周杰伦");
  66.         dr.findElement(By.id("comiis_twtsc_btn")).click();//Click之后FireFox新开了一个页面

  67.         //用WindowHandle+页面title来切换dr至我们想要的窗口
  68.         String currentWindow = dr.getWindowHandle();
  69.         Set<String> handles = dr.getWindowHandles();
  70.         //System.out.println(handles.size());
  71.         Iterator h = handles.iterator();
  72.         while (h.hasNext()) {
  73.             dr = dr.switchTo().window((String) h.next());
  74.             //System.out.println(dr.getTitle());
  75.             if (dr.getTitle().equals("查找好友 - 挖财社区"))
  76.                 break;
  77.         }
  78.         return dr;
  79.     }

  80.     public WebDriver select() throws InterruptedException {
  81.         dr.findElement(By.cssSelector("html>body#nv_home.pg_spacecp.sour>div#wp.wp.cl>div#ct.ct2_a.wp.cl>div.mn>div.bm.bw0>ul.tb.cl>li:nth-child(2)>a")).click();
  82.         /*用普通定位+click方式处理下拉框
  83.         dr.findElement(By.xpath("//select[@id='resideprovince']/option[@value='浙江省']")).click();
  84.         Thread.sleep(2000);
  85.         dr.findElement(By.xpath("//select[@id='residecity']/option[@value='杭州市']")).click();
  86.         */
  87.         //用Select方式
  88.         Select sProvince = new Select(dr.findElement(By.xpath("//select[@id='resideprovince']")));
  89.         sProvince.selectByValue("浙江省");
  90.         Thread.sleep(2000);
  91.         Select sCity = new Select(dr.findElement(By.xpath("//select[@id='residecity']")));
  92.         sCity.selectByValue("杭州市");
  93.         dr.findElement(By.cssSelector("button.pn")).click();
  94.         return dr;
  95.     }

  96.     public void tearDown() throws Exception {
  97.         dr.quit();
  98.     }
  99.     public static void main(String[] args) throws Exception {
  100.         Selector s = new Selector();
  101.         s.login();
  102.         s.switchWindow();
  103.         s.mouseMove();
  104.         s.search();
  105.         WebDriver selectPage = s.select();
  106.         //xpath模糊查找
  107.         List<WebElement> searchResult = selectPage.findElements(By.cssSelector("li.bbda.cl"));
  108.         System.out.println("搜索到" + searchResult.size() + "个同城用户,他们是:");
  109.         System.out.printf("%-20s %-20s %-20s\n", "用户名", "用户等级", "用户积分");
  110.         String userName;
  111.         String userLevel;
  112.         String userMark = "";
  113.         String[] sArray;
  114.         for (int i = 0; i < searchResult.size(); i++) {
  115.             sArray = searchResult.get(i).findElement(By.cssSelector("li>p")).getText().split(" ");
  116.             if (sArray.length < 2)
  117.                 userMark = "0";
  118.             else
  119.                 userMark = sArray[3];
  120.             userLevel = sArray[0];
  121.             userName = searchResult.get(i).findElement(By.cssSelector("h4>a")).getText();
  122.             System.out.printf("%-20s %-20s %-20s\n",userName,userLevel,userMark);

  123.             s.tearDown();
  124.         }
  125.     }
  126. }
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-22 16:40 , Processed in 0.069524 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表